들어가는 말
우아한테크코스 레벨2의 두번째 미션은 방탈출 사용자 예약이다.
1~3단계는 예외 처리와 복잡한 쿼리에 대한 내용이고,
4~6단계는 스프링을 사용한 인증에 관한 내용이었다.
미션을 진행하면서도 처음해보는 사람들이 잘 따라올 수 있을까 걱정했는데, 역시 PR 개수나 Merge 개수를 보니 많이 어려워한 것 같다.
미션에 대해서
1-3단계
1-3단계에서는 페어프로그래밍이라 어려운 내용은 없게 했던 것 같다.
주요한 내용은 @ControllerAdvice와 @ExceptionHandler를 사용하는 것이었다.
미션을 하면서 생각했던 것이 domain에서 illegalArgumentException같은 표준 에러를 넘겨주거나 Repository interface에서 default 메서드를 만들어서 NoSuchElementException을 넘겨주는게 어떤가였다.
그랬더니 문뜩 드는 생각이 GlobalExceptionHandler에서는 표준 에러를 잡나? 만약 잡는다면 스프링이나 자바에서 터지는 내가 모르는 예외 메세지도 밖으로 나간다. 이거는 어떻게 처리하지? 도메인 예외를 따로 두고, 전역 예외도 따로 두고 커스텀하는게 방법일까 고민이 많다.
1-3단계에서 다음으로 주요한 내용이라고 볼 수있는 것은 복잡한 쿼리에 대한 것이었다. 백엔드 개발을 할 때, ORM만 쓰다보니까 쿼리가 작성하는 것을 많이 까먹었었다. 그래서 방학 때 데이터베이스 스터디도 하고, 프로그래머스 SQL 문제도 많이 풀었다. 미션에서 드는 생각은 쿼리를 하나로 작성하는 것이 좋을지, 여러개로 나눠서 작성해서 재사용할 수 있는게 좋을지, 또는 일반적인 쿼리를 사용하고, 자바 코드로 변환하는게 좋을지에 대한 고민이었다. 그래도 역시 성능 생각하면 단일 쿼리로 작성하는게 성능이 좋지않을까가 내 결론이다.
4-6단계
4-6단계에서의 주요한 문제는 ArgumentResolver, Interceptor를 사용해서 인증을 구현하는 것이었다. 그 외로 암호화하는 회원가입, jwt로 토큰을 만들고 그것을 쿠키로 처리하는 것이었다.
사실 jwt나 cookie로 인증을 처리하는 것은 익숙해서 오래 걸리지 않았다.
잘 만들었다고 생각할 수는 없겠지만 돌아가게는 금방 했다.
문제는 테스트였다. 어떻게 하면 인증에 관련된 것을 쉽게 할 수 있을까??
권한이 필요한 곳마다 로그인을 해주는 것은 너무 별로인 것 같은데 고민이 많다. 처음에 내 방법은 @SpyBean으로 jwtTokenProvider의 검증 메서드를 목킹하는 것이었다. 근데 그게 진짜 테스트일까 라는 생각이 들어서 추상클래스 BaseControllerTest에 로그인 기능을 넣고, 인증이 필요한 곳에 쉽게 사용할 수 있게 했다.
다음으로 테스트에서 문제는 초기데이터를 사용하는 방법에 대해서이다. 나는 data.sql이나 @Sql로 초기데이터를 쉽게 넣어주는 방법을 사용했다. 하지만 리뷰어는 검증 등 비즈니스 로직을 거치지 않고 DB에 바로 insert되는 것이 안전한 방법인지, 그리고 테스트가 실패했을 경우 쉽게 찾을 수 있는지, 또는 변경에 취약하지 않은지에 대한 이유로 내가 사용한 방법을 현업에서는 사용하지 않는다고 한다. 그러면 많은 양의 데이터는 도대체 어떻게 처리할까? 모르겠다.
추가로 jjwt같은 외부 라이브러리를 사용하는 곳은 한 번 감싸서 추상화를 해주는 것 같다. 라이브러리가 변경될 경우에 쉽게 갈아끼울 수 있게 하기 위함인 것 같다.
리뷰 방식
이번 미션은 리뷰가 생각보다 별로였다. 내가 질문을 제대로 못해서인지는 모르겠는데 남들과 같이 일반적인 스프링 질문을 받고, 내가 제대로 답할 수 있는지도 체크해보고 싶었고, 새로운 정보들도 얻고 싶었다. 하지만 내가 코딩 컨벤션을 제대로 지키지 않은 탓인지 컨벤션에 대한 리뷰가 많았다. 앞으로 잘 챙겨야겠다.
끝내며
요즘 다른 사람들 PR를 적극적으로 보지 않는 것 같다.
남들 PR이나 코드만 봐도 얻을 수 있는 정보의 양이 다른게 잘 챙겨야겠다.
그리고 열정도 왔다 갔다 하는데 다른 사람들은 어떻게 열정을 유지하는지 물어봐야겠다.
다음 미션은 드디어 Jpa 사용이다. 이제 힘들었던 repository 코드와 테스트와 작별이다. 하지만 그만큼 배울 것이 많다. jpa 사용법과 환경 설정에 대해서 다시 한 번 배우고 다음 단계로 넘어가야 겠다.
'우아한테크코스 6기 백엔드' 카테고리의 다른 글
[우아한테크코스 6기 백엔드] 레벨1 글쓰기 - 천천히 가볼까? (3) | 2024.12.19 |
---|---|
[우아한테크코스 6기 백엔드] 방탈출 결제 / 배포 회고 (0) | 2024.12.19 |
[우아한테크코스 6기 백엔드] 방탈출 예약 관리 회고 (0) | 2024.12.19 |
[우아한테크코스 6기 백엔드] 체스 회고 (0) | 2024.12.19 |
[우아한테크코스 6기 백엔드] 블랙잭 회고 (3) | 2024.12.19 |