[프로젝트] 10. 프로필 업데이트 기능 구현
프로젝트에 프로필 업데이트 기능을 구현함으로써, 사용자는 자신의 정보를 변경할 수 있습니다. 이 기능은 사용자가 시스템에 로그인한 후 자신의 프로필 정보(이름, 프로필 이미지, 자기소개 등)를 업데이트 할 수 있게 해줍니다. 토큰을 이용해 현재 로그인한 사용자의 ID를 식별하고, 해당 사용자의 정보를 업데이트하는 방법으로 구현했습니다.
UserController에 업데이트 메소드 추가
UserController에 사용자 정보를 업데이트하는 엔드포인트를 추가합니다. 사용자는 이 엔드포인트를 통해 자신의 정보를 수정할 수 있습니다.
@PostMapping
public void updateUser(@RequestBody UpdateUserDto userDto) {
TokenContext context = TokenContextHolder.getContext();
Long userId = context.getUserId();
userService.updateUser(userId, userDto);
}
User 엔티티 수정 메소드 추가
User 엔티티 클래스에 사용자 정보를 업데이트하는 메소드를 추가합니다. 이 메소드는 UpdateUserDto에서 받은 정보를 기반으로 사용자의 이름, 프로필 이미지, 자기소개 등을 업데이트합니다.
public void update(UpdateUserDto userDto) {
if(userDto.getName() != null) this.name = userDto.getName();
if(userDto.getProfileImg() != null) this.profileImg = userDto.getProfileImg();
if(userDto.getIntroduce() != null) this.introduce = userDto.getIntroduce();
}
UserService에서 업데이트 로직 구현
UserService 클래스에서는 updateUser 메소드를 통해 실제로 사용자 정보를 업데이트하는 로직을 구현합니다. JPA의 save 메소드를 사용하여 변경된 정보를 데이터베이스에 반영합니다.
@Transactional
public void updateUser(Long userId, UpdateUserDto userDto) {
User user = userRepository.findById(userId).orElseThrow(
() -> new BadRequestException("회원가입을 해주세요.")
);
user.update(userDto);
userRepository.save(user);
}
UpdateUserDto 구현
UpdateUserDto는 클라이언트로부터 받은 사용자 업데이트 요청 데이터를 담는 클래스입니다. 사용자가 업데이트를 원하는 필드만 포함될 수 있으므로, 각 필드는 null일 수 있습니다.
@Getter
public class UpdateUserDto {
private String name;
private String profileImg;
private String introduce;
@Builder
public UpdateUserDto(String name, String profileImg, String introduce) {
this.name = name;
this.profileImg = profileImg;
this.introduce = introduce;
}
}
결론
이와 같이 구현된 프로필 업데이트 기능을 통해, 사용자는 자신의 정보를 쉽게 변경할 수 있습니다. @Transactional 어노테이션을 사용함으로써, 업데이트 과정에서 발생할 수 있는 데이터 무결성 문제를 방지하고, Spring Security의 현재 사용자 정보를 활용하여 보안성을 유지하면서 사용자 인증을 처리할 수 있습니다.