프로필 조회 기능을 통해 클라이언트는 모든 사용자의 목록을 조회하거나, 특정 사용자의 상세 정보를 ID를 통해 조회할 수 있게 됩니다. 이를 통해, 사용자 데이터에 대한 접근성을 높이고, 애플리케이션의 기능성을 향상시킬 수 있습니다.
UserController 수정
UserController에 사용자 전체를 조회하는 getUsers 메소드와 특정 사용자를 ID로 조회하는 getUserById 메소드를 추가합니다.
@GetMapping
public List<UserDto> getUsers() {
return userService.getUsers();
}
@GetMapping("/{userId}")
public UserDto getUserById(@PathVariable("userId") Long userId) {
return userService.getUserById(userId);
}
JwtTokenFilter 수정
JwtTokenFilter에서 GET 요청에 대한 토큰 검증을 생략하도록 설정하여, 사용자 정보 조회 API가 토큰 없이도 접근 가능하게 합니다.
if (new AntPathRequestMatcher("/api/users/**", HttpMethod.GET.toString()).matches(request)) {
return true;
}
UserService 수정
UserService에서는 전체 사용자 정보와 ID를 통한 사용자 정보 조회 로직을 구현합니다. @Transactional(readOnly = true) 어노테이션을 사용하여 데이터베이스에서 데이터를 읽는 작업이 이루어지는 동안 해당 메소드가 트랜잭션으로 관리되도록 설정합니다.
@Transactional(readOnly = true)
public List<UserDto> getUsers() {
List<User> users = userRepository.findAll();
List<UserDto> userDtos = new ArrayList<>();
for (int i = 0; i < users.size(); i++) {
User user = users.get(i);
userDtos.add(UserDto.builder()
.id(user.getId())
.name(user.getName())
.email(user.getEmail())
.profileImg(user.getProfileImg())
.introduce(user.getIntroduce())
.build());
}
return userDtos;
}
@Transactional(readOnly = true)
public UserDto getUserById(final Long userId) {
User user = userRepository.findById(userId).orElseThrow(
() -> new BadRequestException("존재하지 않는 회원입니다.")
);
UserDto userDto = UserDto.builder()
.id(user.getId())
.name(user.getName())
.email(user.getEmail())
.profileImg(user.getProfileImg())
.introduce(user.getIntroduce())
.build();
return userDto;
}
UserDto 구현
UserDto는 클라이언트에 반환될 사용자 정보를 담는 객체입니다. 사용자의 ID, 이름, 이메일, 프로필 이미지, 소개 등 필요한 정보를 필드로 포함합니다.
@Getter
public class UserDto {
private Long id;
private String name;
private String email;
private String profileImg;
private String introduce;
@Builder
public UserDto(Long id, String name, String email, String profileImg, String introduce) {
this.id = id;
this.name = name;
this.email = email;
this.profileImg = profileImg;
this.introduce = introduce;
}
public static UserDto of (User user) {
return UserDto.builder()
.id(user.getId())
.name(user.getName())
.email(user.getEmail())
.profileImg(user.getProfileImg())
.introduce(user.getIntroduce())
.build();
}
}
결론
이렇게 구현된 프로필 전체 조회 및 개별 사용자 조회 기능을 통해, 클라이언트는 필요에 따라 사용자 정보를 쉽게 조회할 수 있게 됩니다. 또한, JwtTokenFilter의 수정을 통해 사용자 조회 기능에 대한 접근성을 높이면서 보안 요구 사항을 충족시키는 방식으로 API를 설계하였습니다. 이러한 기능 추가는 사용자 경험을 향상시키고, 애플리케이션의 사용성을 높이는데 기여합니다.
'프로젝트 (Java) > 예약마켓' 카테고리의 다른 글
[프로젝트] 13. BaseTimeEntity 추가를 통한 데이터 생명 주기 관리 (0) | 2024.01.26 |
---|---|
[프로젝트] 12. 비밀번호 업데이트 기능 (0) | 2024.01.26 |
[프로젝트] 10. 프로필 업데이트 기능 구현 (0) | 2024.01.26 |
[프로젝트] 9. 비밀번호 암호화 기능 구현 (0) | 2024.01.25 |
[프로젝트] 8. 로그인 기능 구현 (0) | 2024.01.25 |