Skip to content

step2 제출합니다#80

Open
seokjun-ko wants to merge 72 commits intonext-step:seokjun-kofrom
seokjun-ko:main
Open

step2 제출합니다#80
seokjun-ko wants to merge 72 commits intonext-step:seokjun-kofrom
seokjun-ko:main

Conversation

@seokjun-ko
Copy link
Copy Markdown

No description provided.

seokjun-ko and others added 30 commits February 26, 2026 14:19
근거
Spring Framework 4.3 이상
해당 클래스에 생성자가 1개만 존재
필드 주입이 아니라 생성자 주입 방식
    근거
    Spring Framework 4.3 이상
    해당 클래스에 생성자가 1개만 존재
    필드 주입이 아니라 생성자 주입 방식
    근거
    Spring Framework 4.3 이상
    해당 클래스에 생성자가 1개만 존재
    필드 주입이 아니라 생성자 주입 방식
근거
Spring Framework 4.3 이상
해당 클래스에 생성자가 1개만 존재
필드 주입이 아니라 생성자 주입 방식
- WishRepository 필드, 생성자 파라미터, import 삭제
- wish cleanup 기능은 미구현 상태로, 향후 별도 이슈로 추적

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
seokjun-ko and others added 29 commits March 3, 2026 15:14
- Auth/Member: Javadoc 추가/변환, 에러 메시지 한국어 통일, 불필요한 주석 제거
- Category: @column 어노테이션 보강 (nullable, unique, length)
- Product/Option: OptionRequest.toEntity() 팩토리 메서드 추가, import 정렬, 블록 주석 Javadoc 전환
- Order: import 순서 정렬 (java → jakarta → org → gift)
- Wish: 기존 스타일 준수 확인
- 미사용 import 제거 (AdminProductController의 Category import)
- README 체크리스트 21개 항목 완료 표시

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…rkflow

4단계(문제 발견 → 수정 범위 설명 → 테스트 전략 → 수행 계획) 기반의
안전한 코드 변경 워크플로우 커맨드를 추가한다.
구조 변경과 작동 변경의 커밋 분리, ADR 기반 설계 결정,
관찰 가능한 검증을 강제하는 프롬프트를 포함한다.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
포인트 차감도 MemberService를 통해 수행할 수 있도록
chargePoint와 동일한 패턴의 deductPoint 메서드 준비

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
주문 생성 후 회원 포인트가 정확히 차감되었는지
상태 재조회로 검증하여 포인트 차감 경로 변경의 기준선 확보

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
OrderService가 MemberRepository를 직접 사용하던 포인트 차감 로직을
MemberService.deductPoint()로 위임하여 도메인 책임 일관성 확보

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
AngularJS 커밋 컨벤션 기반의 한글 커밋 메시지 규칙을 정의하고,
각 작업 단위(테스트/구조 변경/작동 변경/설정)별로
자동 커밋하는 5단계(실행 및 커밋)를 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
기존에는 update()에서 이메일 중복 검사가 없어 다른 회원의 이메일로
변경 시 DB 제약 조건 위반(DataIntegrityViolationException)이 발생했음.
create()와 동일하게 애플리케이션 레벨에서 IllegalArgumentException으로
검증하여 에러 처리 일관성을 확보

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
MemberService.update()의 이메일 중복 검증을 증명하는 서비스 레벨 테스트:
- 다른 회원의 이메일로 변경 시 IllegalArgumentException 발생 + 상태 불변 재조회
- 자기 이메일 유지하며 비밀번호 변경 시 성공 + 상태 반영 재조회
- 미사용 이메일로 변경 시 성공 + 상태 반영 재조회

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
DB 스키마에는 이미 unique 제약이 있으나
JPA 엔티티에 반영되지 않아 불일치가 존재했음

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…메서드 추가

카카오 로그인과 같이 비밀번호 없이 이메일만으로 회원을 생성하는
경로가 MemberService를 거치지 않고 MemberRepository를 직접 사용하고 있었음.
외부 패키지가 MemberService를 통해 회원 조회/생성/토큰 업데이트를
수행할 수 있도록 메서드 승격

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 존재/미존재 이메일 조회 검증
- 이메일만으로 회원 생성 시 비밀번호 null 확인
- 중복 이메일 생성 시 DB unique 제약에 의한 예외 검증
- 카카오 토큰 업데이트 후 재조회 검증

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
MemberRepository 직접 사용을 제거하고
MemberService.findByEmail, create, updateKakaoAccessToken을 사용하도록 변경

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
MemberRepository 직접 사용을 제거하고
MemberService.findByEmail을 사용하도록 변경

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
create(email) 오버로드가 중복 이메일에 대해
IllegalArgumentException을 던지는지 검증하는 테스트 추가
현재는 DB 제약 위반 예외가 발생하여 실패함

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
기존 create(email, password)와 달리 create(email)은
중복 이메일 검사 없이 바로 저장하여 DB 유니크 제약 예외가
노출될 수 있었음

두 오버로드의 검증 동작을 일관되게 통일

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
존재하는 회원 삭제 후 재조회 시 부재 확인 테스트와
존재하지 않는 회원 삭제 시 예외 발생 검증 테스트를 추가

현재 delete()에 존재 확인 로직이 없어 두 번째 테스트는 실패함

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
기존에는 deleteById로 존재하지 않는 ID를 삭제해도
예외 없이 정상 종료되어 호출부가 실패를 인지할 수 없었음

findById로 존재 확인 후 삭제하도록 변경하여
다른 메서드(update, chargePoint 등)와 일관된 패턴을 적용

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
존재하는 ID로 조회 시 엔티티 필드값 검증과
존재하지 않는 ID로 조회 시 예외 메시지 검증을 포함

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
기존 findById가 내부적으로 findEntityById를 재사용하도록 변경
외부 서비스에서 Category 엔티티가 필요할 때 사용할 수 있는
public 메서드를 제공

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
ProductService가 CategoryRepository를 직접 사용하던 4곳을
CategoryService.findEntityById()로 통합하여 도메인 책임 누수를 해소
CategoryService.update()도 findEntityById를 재사용하도록 변경

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
ProductService.findAllCategories()를 제거하고
AdminProductController가 CategoryService.findAll()을 직접 사용
ProductService에서 불필요해진 findAllEntities()도 함께 제거

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
삭제 응답(204)만 확인하던 테스트에
GET /api/categories 재조회를 추가하여
실제로 삭제되었는지 상태 검증

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
existsById + deleteById 이중 조회를 제거하고
update()와 동일한 findEntityById 재사용 패턴으로 변경

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
잘못된 토큰, 회원 미존재, 정상 인증 3가지 시나리오를
HTTP 응답 상태 코드로 검증하는 통합 테스트 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
인증 실패 시 사용할 커스텀 예외 클래스와
해당 예외를 401 응답으로 변환하는 @RestControllerAdvice 핸들러 생성

아직 사용하는 곳이 없으므로 기존 작동에 영향 없음

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
AuthenticationResolver.extractMember()가 null을 반환하던 것을
UnauthorizedException을 던지도록 변경하고,
컨트롤러 5곳의 null 체크 + 401 응답 중복 코드를 제거

인증 판단 책임이 컨트롤러에서 AuthenticationResolver로 이동

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Copy link
Copy Markdown

@vsh123 vsh123 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

안녕하세요!

step2도 구현 잘해주셨네요 :) 코멘트 남겨놓았으니 확인부탁드립니다!

return memberService.findByEmail(email).orElse(null);
} catch (Exception e) {
return null;
throw new UnauthorizedException("유효하지 않은 토큰입니다");
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

작동 변경은 반드시 증거와 함께 제출한다.

라는 요구사항에 맞게 근거를 추가해주시면 어떨까요?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants