///////
Search
🎮

김건우

프로그래머스 폰켓몬

1.
set 자료구조를 사용해서 배열로 들어오는 폰켓몬의 번호를 중복 제거 해줄 것이다
2.
set의 size와 매개변수로 들어오는 배열의 길이 나누기 2 를 해준 값을 비교해 줄 것이다.
package lionalgorithm.algorithm.day15; import org.springframework.web.method.support.HandlerMethodReturnValueHandler; import java.util.HashSet; import java.util.Set; public class Solution { //https://school.programmers.co.kr/learn/courses/30/lessons/1845 public int solution(int[] nums) { int answer = 0; int max = nums.length / 2; Set<Integer> set = new HashSet<>(); for (int num : nums) { set.add(num); // 중복제거 } int size = set.size(); if (max < size) { // 중복을 제거한 set의 크기가 nums의 배열 /2 보다 크면 선택할 수 있는 것은 배열의 /2 값이다 answer = max; }else{ //size가 max보다 작을 때 answer = size; } return answer; } }
Java
복사

프로그래머스 전화번호 목록

1.
매개변수로 들어오는 전화번호목록을 각각 Map자료구조에 해싱처리를 해줄 것
2.
해싱처리가 완료된 map을 2차원 배열 루프를 돌면서 .subString(j)를 해주어서 비교해 줄 것
import java.util.*; class Solution { public boolean solution(String[] phoneBook) { boolean answer = true; Map<String, Integer> map = new HashMap<>(); for (String phoneNum : phoneBook) { map.put(phoneNum, 1); } for (int i = 0; i < phoneBook.length; i++) { for (int j = 1; j < phoneBook[i].length(); j++) { boolean check = map.containsKey(phoneBook[i].substring(0, j)); if (check) { answer = false; } } } return answer; } }
Java
복사

LogBack

TRACE  <  DEBUG  <  INFO  <  WARN  <  ERROR

1) ERROR : 요청을 처리하는 중 오류가 발생한단덤
2) WARN  : 처리 가능한 문제, 향후 시스템 에러의 원인이 될 수 있는 경고성 메시지를 나타낸다.
3) INFO  : 상태변경과 같은 정보성 로그를 표시한다.
4) DEBUG : 프로그램을 디버깅하기 위한 정보를 표시한다.
5) TRACE : 추적 레벨은 Debug보다 훨씬 상세한 정보를 나타낸다.

디버그로 설정하기

// application.yml logging: level: root: debug
Java
복사

log 사용 코드

@PostMapping(value = "/members3") public MemberDto postdto2(@RequestBody MemberDto memberDto) { //매개변수 다음과 같이 사용가능 log.info("다음과 같은 member가 들어왔습니다 member : {}",memberDto); return memberDto; }
Java
복사

ORM

ORM은 Object Relational Mapping의 줄임말이다. 이것은 바로 객체 관계 매핑이다. 자바에서의 객체와 RDB의 테이블을 자동으로 매핑하는 방법이다.

장점

1.
ORM을 사용하면 쿼리를 객체지향적으로 조작 가능
2.
재사용 및 유지보수 편리
3.
데이터베이싀에 대한 종속성이 줄어듬 다

단점

1.
ORM만으로는 온전한 서비스를 구현하기 어려움
2.
애플리케이션의 객체와 데이터베이스의 관계 관점의 불일치 존재

게시판 만들기

User(Model)

package com.springboot.lionboot.pratice.domain.dto; public class UserDto { private String name; private String email; private String organization; public UserDto(String name, String email, String organization) { this.name = name; this.email = email; this.organization = organization; } @Override public String toString() { return "UserDto{" + "name='" + name + '\'' + ", email='" + email + '\'' + ", organization='" + organization + '\'' + '}'; } public String getName() { return name; } public String getEmail() { return email; } public String getOrganization() { return organization; } }
Java
복사

Repository(디비직접접근) == DAO

회원 정보 넣기
id로 회원조회
회원전체조회
id로 회원삭제
회원전체삭제
import com.springboot.lionboot.pratice.domain.domain.User; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Repository; import javax.sql.DataSource; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; @Repository public class UserDao { private final DataSource dataSource; private final JdbcTemplate jdbcTemplate; public UserDao(DataSource dataSource, JdbcTemplate jdbcTemplate) { this.dataSource = dataSource; this.jdbcTemplate = jdbcTemplate; } RowMapper<User> rowMapper = new RowMapper<User>() { @Override public User mapRow(ResultSet rs, int rowNum) throws SQLException { User user = new User(rs.getString("id"), rs.getString("name"), rs.getString("password")); return user; } }; public int deleteAll() { return this.jdbcTemplate.update("DELETE FROM users"); } public int getCount() { return this.jdbcTemplate.queryForObject("SELECT count(*) FROM users;", Integer.class); } public void add(User user) { Connection conn = connectionMaker.openConnection(); this.jdbcTemplate.update("INSERT INTO users(id, name, password) VALUES(?, ?, ?);", user.getId(), user.getName(), user.getPassword()); } public User findById(String id) { String sql = "SELECT id, name, password FROM users WHERE id=?;"; return this.jdbcTemplate.queryForObject(sql, rowMapper, id); } public List<User> getAll(){ String sql = "SELECT * from users order by id"; return this.jdbcTemplate.query(sql, rowMapper); } public int deleteById(String id) { return this.jdbcTemplate.update("delete from users where id = ?",id); } }
Java
복사

REST API

HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시한다 → 실습에서는 member
HTTP Method(POST, GET, PUT, DELETE, PATCH 등)를 통해 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것을 의미한다

Swagger로 테스트

1.@PostMapping("/members/{id}") 컨트롤러 →회원 저장

성공200 → 회원 Json객체로 response

회원 저장 테스트 로직

@Test public void 회원가입테스트() { User user = new User("21","김건우3","1234"); userDao.add(user); User byId = userDao.findById("21"); Assertions.assertEquals(byId.getName(),user.getName()); }
Java
복사

3.@GetMapping("/members/{id}") 컨트롤러 → 회원 id로 회원조회

성공200 → 회원 Json객체로 response

4.@GetMapping("/members") 컨트롤러 → 회원 전체조회

성공200 - > 디비에 저장되어있는 회원을 json객체 형식으로 가져왔다

5.@DeleteMapping("/members/{id}") 컨트롤러 → 회원 id로 삭제

성공200 →해당 id 회원 삭제

6.@DeleteMapping("/members") 컨트롤러 → 회원 전체 삭제

성공200 →회원 전체 삭제

UserController

package com.springboot.lionboot.pratice.domain.controller; import com.springboot.lionboot.pratice.domain.domain.User; import com.springboot.lionboot.pratice.domain.repository.UserDao; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import java.util.List; @RestController @RequiredArgsConstructor @Slf4j public class UserController { private final UserDao userDao; @GetMapping("/members/{id}") public User get(@PathVariable String id) { User byId = userDao.findById(id); return byId; } //회원 전체 조회 @GetMapping("/members") public List<User> getAll() { List<User> all = userDao.getAll(); return all; } //등록 @PostMapping("/members") public User join(@ModelAttribute User user) { userDao.add(user); log.info("회원가입할 user = {}" , user); return user; } @DeleteMapping("/members/{id}") public String removeOne(@PathVariable String id) { userDao.deleteById(id); return "유저 한명이 삭제되었습니다."; } @DeleteMapping("/members") public String removeAll() { userDao.deleteAll(); return "유저 전체가 삭제되었습니다"; } }
Java
복사