Skip to content

"refactor: 회원 데이터 구조 변경 (age → birthDate) 및 약관 동의 추가#27

Open
ekfrehd wants to merge 1 commit intodevelopfrom
refactor/member-birthdate-and-terms
Open

"refactor: 회원 데이터 구조 변경 (age → birthDate) 및 약관 동의 추가#27
ekfrehd wants to merge 1 commit intodevelopfrom
refactor/member-birthdate-and-terms

Conversation

@ekfrehd
Copy link
Contributor

@ekfrehd ekfrehd commented Mar 1, 2026

🔍 PR 타입 선택

  • refactor: 코드 리팩토링

📝 변경 사항 요약

회원 데이터 구조 대대적 리팩토링: 나이(age) → 생년월일(birthDate) 전환

  • 나이 계산 오류 방지 및 본인인증 데이터 형식 통일
  • 약관 동의 필드 추가 (필수 약관, 마케팅 수신 동의)
  • 프론트엔드 개발 편의를 위한 테스트 백도어 API 생성
  • CORS 설정 개선 (Vercel 도메인 와일드카드)

🛠 관련 이슈

close: #(이슈번호)
Related to: #(프론트문의사항 이슈), #(회원가입기획 이슈)


🔄 주요 변경 내역

1. 엔티티 변경 (Member.java)

필드 변경:

// ❌ 삭제
private Integer age;

// ✅ 추가
private String birthDate;              // YYYY-MM-DD 형식
private boolean termsAgreed;           // 필수 약관 동의
private boolean marketingAgreed;       // 마케팅 수신 동의

메서드 시그니처 변경:

  • create(): age → birthDate, 약관 동의 파라미터 추가
  • update(): age → birthDate
  • updateIdentityVerification(): age 계산 로직 제거, birthDate 그대로 저장
  • calculateAge(): 메서드 완전 삭제

2. DTO 변경

Request DTOs:

// MemberCreateRequest
record MemberCreateRequest(
    String email,
    String password,
    String name,
    String gender,
    String birthDate,           // ✅ age → birthDate
    boolean termsAgreed,        // ✅ 추가
    boolean marketingAgreed     // ✅ 추가
)

// MemberUpdateRequest
record MemberUpdateRequest(
    String password,
    String newPassword,
    String name,
    String gender,
    String birthDate            // ✅ age → birthDate
)

Response DTOs:

// ProfileResponse
private String birthDate;       // ✅ age → birthDate

// VerifyIdentityResponse
private String birthDate;       // ✅ age → birthDate

3. Security & JWT

CustomUserDetails:

// ❌ 삭제
public Integer getAge()

// ✅ 추가
public String getBirthDate()

JwtProvider:

// JWT Claims
if (birthDate != null) builder.claim("birthDate", birthDate);  // ✅

// JWT 파싱
String birthDate = claims.get("birthDate", String.class);  // ✅

4. Service 레이어

MemberService:

member.update(
    request.name(),
    encodedNewPassword,
    request.gender(),
    request.birthDate()  // ✅ age → birthDate
);

IdentityVerificationService:

// ❌ 삭제: member.calculateAge(certInfo.getBirthday())
// ✅ 변경: certInfo.getBirthday() 그대로 전달

member.updateIdentityVerification(
    certInfo.getName(),
    gender,
    certInfo.getBirthday(),  // ✅ 생년월일 그대로 저장
    certInfo.getUniqueKey(),
    certInfo.getUniqueInSite()
);

5. 신규 기능

테스트 백도어 API (TestController.java):

@Profile({"local", "dev"})
@GetMapping("/debug/test-token")
public ApiResponse<String> getTestToken() {
    // 고정 사용자 JWT 발급
    // 프론트엔드 개발 편의성 향상
}

CORS 설정 개선:

config.setAllowedOriginPatterns(List.of(
    "http://localhost:*",
    "https://*.vercel.app"  // ✅ Vercel 도메인 전체
));

📊 영향 범위

수정된 파일 (10개)

  1. Member.java - 엔티티
  2. MemberCreateRequest.java - 회원가입 DTO
  3. MemberUpdateRequest.java - 정보 수정 DTO
  4. ProfileResponse.java - 프로필 응답
  5. VerifyIdentityResponse.java - 본인인증 응답
  6. CustomUserDetails.java - 사용자 인증 정보
  7. JwtProvider.java - JWT 토큰 처리
  8. MemberService.java - 회원 관리 서비스
  9. IdentityVerificationService.java - 본인인증 서비스
  10. TestController.java - 테스트 백도어 API (신규)

- Member 엔티티 age 필드 제거, birthDate(String) 필드 추가
- 약관 동의 필드 추가 (termsAgreed, marketingAgreed)
- 모든 DTO 및 Service 레이어 age → birthDate 전환
- JWT Claims에 age 대신 birthDate 저장
- 본인인증 로직에서 나이 계산 로직 제거
- 테스트 백도어 API 추가 (GET /debug/test-token)
- CORS 설정에 Vercel 도메인 추가

Breaking Changes:
- 회원가입/로그인 API Request/Response 형식 변경
- 기존 JWT 토큰과 호환 불가 (재로그인 필요)"
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.

1 participant