TIL
[250327 TIL]일정 관리 앱 JPA
도원좀비
2025. 3. 27. 20:48
📌 로그인 & 인증 처리
1️⃣일정 CRUD 필수
- Schedule 엔티티 구현 (연관관계: Author)
- ScheduleController, ScheduleService, ScheduleRepository 작성
- 일정 등록 시 세션에 저장된 authorId를 기반으로 작성자 자동 설정
- 일정 조회, 수정, 삭제 기능 구현
- 수정/삭제 시 작성자 본인인지 검증 (Schedule.isAuthorId(authorId) 메서드로 위임)
2️⃣ 유저 CRUD 필수
- Author 엔티티 구현: loginId, name, password, createdDate, updatedDate
- AuthorService, AuthorRepository, AuthorController 구성
- 회원 목록 조회, 단일 조회, 수정, 삭제 기능 제공
- findByIdOrElseThrow(), findByLoginIdOrElseThrow() 등의 커스텀 default 메서드 사용
3️⃣ 회원가입 필수
- CreateAuthorRequestDto, CreateAuthorResponseDto 작성
- 회원가입 시 입력값 검증:
- loginId: 15자 이하
- name: 5자 이하
- password: 6자 이상 + 특수문자 포함
- 회원가입 시 중복 ID 예외 처리
- 비밀번호 암호화 전에는 평문 저장 → 암호화 적용 후 완전 변경됨 (Lv.6 참고)
4️⃣로그인(인증)
- LoginRequestDto, LoginResponseDto 구현
- LoginService, LoginController에서 로그인 처리
- 로그인 성공 시 HttpSession에 SessionConst.LOGIN_AUTHOR 키로 authorId 저장
- 로그아웃 처리 시 session.invalidate() 호출
- 로그인 실패 시 예외 처리 (LOGIN_ID_NOT_FOUND, PASSWORD_MISMATCH)
- AuthFilter 구현:
- /login, /authors, /login/logout 요청은 인증 제외
- 나머지 요청은 세션 검사 → 없으면 401 응답
- FilterConfig에서 FilterRegistrationBean 등록
5️⃣다양한 예외처리 적용하기 도전
- 전역 예외 처리기 GlobalExceptionHandler 구현
- 커스텀 예외 CustomException + ExceptionCode enum 관리
- ValidationExceptionResponse로 입력 검증 실패 메시지 일관되게 반환
- 회원가입 시 유효성 검증:
- @Size, @NotBlank, @Pattern 등 활용
- 예: 특수문자 1개 이상 포함하는 비밀번호 정규식 적용
@Pattern(
regexp = ".*[!@#$%^&*(),.?\":{}|<>].*",
message = "비밀번호에는 특수문자가 최소 1개 이상 포함되어야 합니다."
)
6️⃣ 비밀번호 암호화 도전
- PasswordEncoder 인터페이스 직접 정의
- encode(), matches() 메서드 작성
- SimplePasswordEncoder 클래스에서 SHA-256 해시 알고리즘 적용
- PasswordEncoderConfig 설정 클래스를 만들어 @Bean 등록
- 회원가입 시 암호화된 비밀번호 저장
- 로그인 시 평문 입력 → matches()로 비교
- Author.verifyPassword() 메서드를 만들어 검증 책임을 도메인으로 위임
7️⃣ ERD

📌 GitHub 저장소: https://github.com/sukh115/schedulerJpa
GitHub - sukh115/schedulerJpa
Contribute to sukh115/schedulerJpa development by creating an account on GitHub.
github.com