프로그래머스 폰켓몬
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
복사