Skip to content

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

Merged
ekfrehd merged 1 commit intodevelopfrom
refactor/member-birthdate-and-terms
Mar 9, 2026
Merged

"refactor: 회원 데이터 구조 변경 (age → birthDate) 및 약관 동의 추가#27
ekfrehd merged 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 토큰과 호환 불가 (재로그인 필요)"
@ekfrehd ekfrehd merged commit d068b1f into develop Mar 9, 2026
1 check passed
@ekfrehd ekfrehd deleted the refactor/member-birthdate-and-terms branch March 9, 2026 10:11
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