프로젝트 (Java)/예약마켓

[프로젝트] 10. 프로필 업데이트 기능 구현

hihyuk 2024. 1. 26. 09:23

프로젝트에 프로필 업데이트 기능을 구현함으로써, 사용자는 자신의 정보를 변경할 수 있습니다. 이 기능은 사용자가 시스템에 로그인한 후 자신의 프로필 정보(이름, 프로필 이미지, 자기소개 등)를 업데이트 할 수 있게 해줍니다. 토큰을 이용해 현재 로그인한 사용자의 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의 현재 사용자 정보를 활용하여 보안성을 유지하면서 사용자 인증을 처리할 수 있습니다.