일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 데이터베이스
- tableplus
- 컴공과개념정리
- 개발공부
- 자바
- 스키마모델
- 자료구조
- 웹서버
- 개발 공식문서 읽기
- 개발공식문서 어려움
- 리액트
- 코딩강의
- 코멘토
- 개발실무
- Go언어실무
- golang
- 유데미
- 알고리즘
- jsx
- 파이썬
- 개발자되기
- 개발자공통지식
- 데이터스키마
- 개발 공식문서
- postgredb
- 개발 영어실력
- 코멘토실무PT
- HTTP
- Go언어
- 실무PT
- Today
- Total
웹개발일지
사용자 여부 조회하기 ; jdbcTemplate ; 컨트롤러-서비스-리파지토리 분리하기 본문
컨트롤러에는 하나의 기능만을 담는 것이 좋기 때문에 컨트롤러에 있던 로직들을 서비스와, 리파지토리로 나누어 분리하였다.
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 |
---|