본문 바로가기

항해99/시험 리뷰

[항해99] Spring 주특기1 시험 리뷰

문제

- 회원의 전체 목록을 조회하는 API (5점)
- 한 회원의 userId를 주었을때 회원 정보를 조회하는 API (5점)
- 회원 목록 DB
- userId : 회원 번호 (DB 인덱스)
- name (String) : 회원 이름
- email (String) : 회원 아이디
- pw (String) : 회원 비밀번호
- User 테이블을 그대로 반환하지 않고 생성자를 사용하여 DTO로 변환한 후 반환하세요.
- Exception은 NullPointerException 를 사용하세요.

 

스켈레톤 코드가 주어졌고, 해당 스켈레톤 코드의 빈 칸을 채우면 되는 문제였다.

일단 클래스를 만든 후 컨트롤러부터 완성해줬다.

package com.sparta.test.controller;

import com.sparta.test.service.UserService;
import dto.UserResponseDto;
import lombok.RequiredArgsConstructor;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequiredArgsConstructor
public class UserController {

    private final UserService userService;


    /**
     * 한 회원의 userId를 주었을 때 회원 정보를 조회하는 API
     // @param id
     * @return 회원 정보
     */
    @GetMapping("/user/{userId}")
    public UserResponseDto getUserInfo(@PathVariable Long userId) {
        return userService.findUser(userId);
    }

    /**
     * 회원의 전체 목록을 조회하는 API
     */
    @GetMapping("/user")
    public List<UserResponseDto> getUserList() {
        return userService.findAllUser();
    }
}

 

 

  • UserService 받기 위해 @RequiredArgsConstructor 어노테이션이 사용 -> Lombok의 @RequiredArgsConstructor를 통해 생성자 주입을 자동으로 생성함
  • @GetMapping("/user/{userId}")을 사용해 HTTP GET 요청을 처리함. -> userId를 받아서 해당 유저의 정보를 조회하고 반환
  • 위와 동일 하지만, 모든 유저의 정보를 조회하여 리스트로 반환하는 점만 다름

그 후 UserResponseDto에 내용을 채웠다.

package dto;

import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor
public class UserResponseDto {

    private Long userId;
    private String name;
    private String email;
    private String pw;

    public UserResponseDto(Long userId, String name, String email, String pw) {
        this.userId = userId;
        this.name = name;
        this.email = email;
        this.pw = pw;
    }
}

 

그 다음 UserService 인데, 여기 부분이 조금 어려웠다.

애초에 스트림을 사용할 줄 몰랐는데, 저번주 과제하면서 써야했기 때문에 급하게 찾아서 썼었다.ㅠㅠ

코드 리뷰도 하긴 했었는데 그래도 어려운 스트림..

오늘도 사용을 해야할 것 같아서 찾다가 스트림 map 이라는 것을 발견했다!!

package com.sparta.test.service;
import dto.UserResponseDto;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

@Service
@RequiredArgsConstructor
public class UserService {

    private final UserRepository userRepository;

    public UserResponseDto findUser(Long userId) {
        // 주어진 id로 사용자 조회
        Optional<User> userOptional = userRepository.findById(userId);
        // 사용자가 존재하는 경우
        if (userOptional.isPresent()) {
            User user = userOptional.get();
            return new UserResponseDto(user.getUserId(), user.getName(), user.getEmail(), user.getPw());
        } else {
            // 존재하지 않는 경우
            throw new NullPointerException("존재하지 않는 아이디 : " + userId);
        }
    }

    public List<UserResponseDto> findAllUser() {
        // 모든 사용자를 조회해서 리스트로 반환
        List<User> userList = userRepository.findAll();
        return userList.stream()
                .map(user -> new UserResponseDto(user.getUserId(), user.getName(), user.getEmail(), user.getPw()))
                .collect(Collectors.toList());
    }
}

 

  • userList.stream(): userList를 스트림으로 변환
  • .map(user -> new UserResponseDto(user.getUserId(), user.getName(), user.getEmail(), user.getPw()))
  • : 각각의 User 객체를 UserResponseDto 객체로 변환 -> User 객체의 필드를 사용해 새로운 UserResponseDto 객체를 생성함
  • .collect(Collectors.toList()): 변환된 UserResponseDto 객체들을 리스트로 수집하고 List<UserResponseDto>를 반환.

PostMan에서 실행해보고 싶어서 필요한 클래스들 더 만들어 줬다.

 

일단 되는 것 같긴하다!!

시험 7점 이상이 통과라는데 조금 쫄린다ㅠㅠ

제발 패스~~~~~~