[8 주차] 조항준 / Chapter 8. Spring Security - Security 구조, 폼 로그인 - #39
[8 주차] 조항준 / Chapter 8. Spring Security - Security 구조, 폼 로그인#39cho-hj-dev wants to merge 5 commits into
Conversation
| .exceptionHandling(exception -> exception | ||
| .authenticationEntryPoint(new CustomEntryPoint()) //401 에러 핸들러 매핑 | ||
| .accessDeniedHandler(new CustomAccessDenied()) //403 에러 핸들러 매핑 | ||
| ) |
There was a problem hiding this comment.
위에서 CustomEntryPoint를 파라미터로 받고 있는 것으로 확인했는데 다시 new 로 새로운 객체를 받는 것은 불필요하다고 생각합니다.
그리고 제 개인적인 생각으로는 따로 객체를 생성하는 것이 아니라 Spring Bean으로 객체 주입을 하는 것이 좋아 보입니다
There was a problem hiding this comment.
워크북 기반으로 구조를 잡고 예외처리를 하는 과정에서 생명주기, DI흐름을 생각하지 못했던 거 같습니다.
new 키워드를 제거하고, @requiredargsconstructor를 활용해 스프링 컨테이너가 직접 객체를 관리하고 주입하도록 수정하였습니다.
리뷰 감사합니다!
| response.setContentType("application/json;charset=UTF-8"); | ||
| response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); | ||
|
|
||
| ObjectMapper objectMapper = new ObjectMapper(); |
There was a problem hiding this comment.
objectMapper객체를 메서드 내에서 생성하면 메서드가 호출될 때마다 객체가 생성하게 됩니다.
이는 자원을 상대적으로 많이 소모하므로 이러한 방식이 아닌 메서드 밖에 private 객체로 생성을 하면 EntryPoint객체가 생성될 때 1회만 생성 되므로 이러한 코드 구성이 더 좋다고 생각합니다
There was a problem hiding this comment.
리뷰해주신대로 ObjectMapper를 필드로 추출해서 빈으로 재사용하는 구조를 시도해보았는데, 시큐리티 필터 체인 초기화 시점과 ObjectMapper빈의 생성 라이프사이클 순서가 꼬이면서 애플리케이션 컨텍스트 구동 에러가 발생하였습니다. ..
이 부분은 제가 조금 더 살펴보고 수정하도록 하겠습니다..!!
| //회원가입 API | ||
| @PostMapping("/signup") | ||
| public ApiResponse<MemberResponseDTO.joinResultDTO>join( | ||
| public ApiResponse<String>join( |
There was a problem hiding this comment.
다른 API 들 처럼 회원가입도 커스텀 DTO 를 만들어서 결과로 보내주는게 알맞은 방향인 것 같습니다.
| @Email(message = "이메일 형식이 올바르지 않습니다.") | ||
| String email; | ||
|
|
||
| String password; |
There was a problem hiding this comment.
다른 필드들처럼 password 도 베리데이션 어노테이션을 붙여주어서 통일시키는 방향이 좋을 것 같습니다.
There was a problem hiding this comment.
Status enum 을 구현만하고 사용을 안하고 있습니다.
| @@ -0,0 +1,87 @@ | |||
| package com.aim.umc10th.global.config.config; | |||
There was a problem hiding this comment.
현재 global 패키지 하위에 config 패키지가 두 개로 중복되어 있습니다.

🔗 Issue Number
📝 개요
🚀 주요 변경 사항
🖼️ 실행 결과 (Screenshots)
💬 고민 및 질문
CustomEntryPoint를 구현할 때, 분명 자바 코드 상에서는 ErrorStatus.UNAUTHORIZED라는 객체를 넘겨주도록 설계했습니다. 그런데 실제 Swagger 테스트 환경에서 401 에러를 터뜨려보니 클라이언트가 받는 JSON 창에는 "code": "COMMON401_1"이라는 완전히 다른 문자열이 찍히는 것을 확인했습니다. 찾아보니 자바 코드의 UNAUTHORIZED는 개발자의 가독성을 위한 추상화된 이름(Key)일 뿐이고, 실물 응답으로 나갈 때는 그 내부에 매핑된 실제 비즈니스 코드(Value)로 치환되어 나간다는 구동 원리라는데 제가 이해한게 맞는걸까요??
✅ 실습 체크리스트
⚙️ 환경 및 컨벤션 체크 (Final Check)