웹개발일지

사용자 여부 조회하기 ; jdbcTemplate ; 컨트롤러-서비스-리파지토리 분리하기 본문

Spring

사용자 여부 조회하기 ; jdbcTemplate ; 컨트롤러-서비스-리파지토리 분리하기

hee_log 2023. 10. 1. 16:25
728x90



 컨트롤러에는 하나의 기능만을 담는 것이 좋기 때문에 컨트롤러에 있던 로직들을 서비스와, 리파지토리로 나누어 분리하였다. 


1. http body를 객체로 변환(api로서의 진입지점 역할) -> Controller의 역할 
2. 유저가 있는지 없는지 확인하여 예외처리 -> Service의 역할로 넘김 
3. Sql 을 사용하여 db와의 통신담당 -> 저장소 Repository의 역할로 넘김
---
컨트롤러에서 UserService를 불러와서 final로 정의하고 그것을 사용해준다
// controller

@PutMapping("/user") --> api의 역할만 담음
public void updateUser(@RequestBody UserUpdateRequest request){
    userService.updateUser(jdbcTemplate, request);
}




// service

public void updateUser(JdbcTemplate jdbcTemplate, UserUpdateRequest request){ // 어노테이션 없이 UserRequest 객체를 불러온다. body객체를 따로 바꿔줄 필요가 없음. 
    String readSql = "SELECT * FROM user WHERE id = ?";  // 조회용 sql ; 존재하는 user인지
    boolean isUserNotExist = jdbcTemplate.query(readSql, (rs, rowNum) -> 0, request.getId()).isEmpty();  // 비어있다면 UserNotExist가 True인 것으로.
    if(isUserNotExist) {
        throw new IllegalArgumentException();
    }




//repository

public class UserRepository {

    public boolean isUserNotExist(JdbcTemplate jdbcTemplate, long id){
        String readSql = "SELECT * FROM user WHERE id = ?";  // 조회용 sql ; 존재하는 user인지
        return jdbcTemplate.query(readSql, (rs, rowNum) -> 0, id).isEmpty();  // 비어있다면 UserNotExist가 True인 것으로.
    }
}
-> 주어진 userid를 받아서 jdbctemplate을 이용해서 그 유저가 있는지 확인하고, 유저가 있으면 true, 없으면 false를 반환하는 함수 isNotExist


- String readSql = “SELECT * FROM user WHERE id = ?” ; SQL 쿼리를 저장하는 문자열 변수 생성. User 테이블에서 id열이 주어진 값과 일치하는 사용잡를 조회하는 역할 
- boolean isUserNotExist = jdbcTemplate.query(readSql, (rs, rowNum) -> 0, request.getId()).isEmpty(); : 데이터베이스에서 사용자를 조회하고 해당 사용자가 존재하지 않는지 확인하는 부분. 
- jdbcTemplate.query(readSql, …) : 스프링의 JdbcTemplate이 Sql 쿼리를 실행하고 결과를 가져옴 
- (rs, rowNum) -> 0 : 람다함수로 sql 결과를 처리하는 부분. 이 함수는 각 행을 처리할 때 호출된다. 여기서는 모든 행에 대해 항상 0을 반환. 실제로 사용자 정보를 가져오지 않고, 결과가 비어있는지만 확인하려는 목적. 
- request.getId() : ?자리 표시자에 전달할 파라미터인 request 객체에서 사용자 ID를 가져옴  
- isEmpty()메서드는 결과 집합이 비어있는지 여부를 확인함. 조회된 사용자가 없으면 true를 반환. 그렇지 않으면 false를 반환. 
- if(isUserNotExist) {throw new IllegalArgumentException() }: 조회된 사용자가 없는 경우 예외를 던져줌,. isUserNotExist변수가 true이면 사용자가 존재하지 않는것으로 판단하여 Exception을 던짐. 

 

 

### 전체코드 

https://github.com/heejinshin/library-app/commit/6019a307d21d9d3bb040b91e975ce017ded0a478

 

유저가 db에 존재 하는지 유무에 의한 예외처리와 유저 정보를 db에 업데이트하는 로직을 service와

…패키지로 분리

github.com


코드 출처_ 인프런 [자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! ] 강의 

'Spring' 카테고리의 다른 글

Spring 빈을 등록하는 방법  (2) 2023.11.08