Trip-Linker 개발일지 5 - User.java — updateNickname·withdraw 메서드 추가

2026. 6. 4. 19:34프로젝트/Trip-Linker 팀 프로젝트

반응형

User.java — updateNickname·withdraw 메서드 추가

 

📋 한줄 요약

User.java에 닉네임 변경(updateNickname)과 회원 탈퇴(withdraw) 메서드를 추가했다.

같은 날 만든 UserServiceImpl이 이 메서드를 호출하기 때문에 함께 작업했다.


🎯 왜 만들었나

UserServiceImpl에서 user.updateNickname(), user.withdraw()를 호출하는데

User 엔티티에 해당 메서드가 없어서 컴파일 에러가 났다.

Entity에 메서드를 추가해서 Service에서 필드를 직접 건드리지 않도록 했다.


📁 작업 순서 (파일별)

1. User.java — 메서드 2개 추가

📦 domain/user/entity

추가한 코드

// 닉네임 변경
public void updateNickname(String newName) {
    if (newName == null || newName.trim().isEmpty()) {
        throw new IllegalArgumentException("올바른 닉네임을 입력해주세요.");
    }
    this.name = newName;
}

// 회원 탈퇴
public void withdraw() {
    this.status = "DELETED";
    this.deletedAt = LocalDateTime.now();
}

updateNickname 에 검증 로직을 넣은 이유

null이나 공백만 있는 이름은 의미가 없다.

Service에서 체크할 수도 있지만, 이 규칙은 User 도메인의 불변 조건이므로 Entity 안에 넣었다.

어디서 호출하든 항상 검증이 보장된다.

withdraw() 가 status = "DELETED" 로 바꾸는 이유

실제 DB 행을 지우는 Hard Delete 대신 상태값을 바꾸는 Soft Delete를 선택했다.

탈퇴한 회원의 데이터(예약 이력, 결제 이력 등)를 일정 기간 보관해야 할 수도 있고,

같은 아이디로 재가입을 막거나 통계 목적으로 이력을 남겨야 할 수 있기 때문이다.

deletedAt에 시각을 기록해 두면 나중에 일정 기간 후 실제 삭제하는 배치 작업도 만들 수 있다.


💡 배운 점

Entity 메서드에 도메인 규칙(검증, 상태 변경)을 넣으면 Service가 얇아지고,

같은 조건이 여러 곳에 중복되는 걸 막을 수 있다.

Soft Delete는 Hard Delete보다 복잡하지만, 데이터 복구와 이력 관리 측면에서 실무에서 더 많이 쓰인다.