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