TIL/2023

[0629 ~ 0630] TIL

개발 공주 2023. 7. 1. 12:29
728x90

한것들

  • 항해 99 스프르이 숙련 주차 1,2주차 강의듣기
  • 1주차 복습 및 강의내용 읽기
  • 목요일마다 시험(항해99는 목요일 마다 시험을 본다)

 

시험문제

유저를 조회하는 API 개발

UserController

package com.example.sparta.controller;

import com.example.sparta.dto.UserResponseDto;
import com.example.sparta.service.UserService;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
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
     */
    @GetMapping("/user/{id}")
    public ResponseEntity<UserResponseDto> getUserInfo(@PathVariable Long id, HttpServletResponse res) {
        try {
            UserResponseDto user = userService.findUser(id, res);
            return new ResponseEntity<>(user,HttpStatus.OK);

        } catch (NullPointerException e) {
            res.setStatus(HttpServletResponse.SC_BAD_REQUEST);
            return null;
        }
    }

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

}

UserResponseDto

package com.example.sparta.dto;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@NoArgsConstructor
public class UserResponseDto {

    private Long id;
    private String name;
    private String email;
    private String pw;

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

UserService

package com.example.sparta.service;

import com.example.sparta.dto.UserResponseDto;
import com.example.sparta.repository.UserRepository;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
@RequiredArgsConstructor
public class UserService {

    private final UserRepository userRepository;

    public UserResponseDto findUser(Long id, HttpServletResponse res) throws NullPointerException {
        return userRepository.findById(id, res);
    }

    public List<UserResponseDto> findAllUser() {
        return userRepository.findAll();
    }
}

UserRepository

package com.example.sparta.repository;

import com.example.sparta.dto.UserResponseDto;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.http.HttpStatus;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

@Repository
public class UserRepository {

    private final JdbcTemplate jdbcTemplate;

    public UserRepository(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public UserResponseDto findById(Long id, HttpServletResponse res) {

        //DB 조회
        String sql = "SELECT * FROM user WHERE id = ?";

        return jdbcTemplate.query(sql, resultSet -> {
            if(resultSet.next()) {
                UserResponseDto userResponseDto = new UserResponseDto();
                userResponseDto.setId(resultSet.getLong("id"));
                userResponseDto.setPw(resultSet.getString("pw"));
                userResponseDto.setEmail(resultSet.getString("email"));
                userResponseDto.setName(resultSet.getString("name"));
                return userResponseDto;
            } else {
                throw new NullPointerException();
            }
        }, id);
    }
    public List<UserResponseDto> findAll() {
        // DB 조회
        String sql = "SELECT * FROM user";

        return jdbcTemplate.query(sql, new RowMapper<UserResponseDto>() {
            @Override
            public UserResponseDto mapRow(ResultSet rs, int rowNum) throws SQLException {
                Long id = rs.getLong("id");
                String name = rs.getString("name");
                String pw = rs.getString("pw");
                String email = rs.getString("email");
                return new UserResponseDto(id, name, pw, email);
            }
        });
    }
}

시험을 보고 난 후

JDBC템플릿을 복습하고자 JDBC템플릿을 사용해서 디비 조회를 했고

그리고 예외처리가 좀 힘들었다 NullPointerException을 상태코드를 500에러가 아닌 400에러로 반환하라는 것이였다. 그래서 NullPointerException 을 예외처리후 HttpServletResponse에서 setStatus함수를 이용해서SC_BAD_REQUEST코드를 보내줬다! 예외처리는했지만 상태코드를 바꾸는 법은 이번 시험을 통해서 빠삭하게 알은듯 따봉!

 

 

 

마무리

요즘 새로운걸 배운다는게 참 어려운거 같다. 강의듣느라 정리 못하고 또 새로운걸 배우고 어떻게 정리를 해야할지 모르고.. 내가 공부하고 이해한게 맞는지도 잘 모르겠고ㅠㅠ 그나마 다른 사람들이랑 공부한거 같이 보고 이야기해보면서 괜찮은듯 무튼 이번에는 스프링 숙련주차에 1주차 2주차 강의를 들었다. 강의를 듣고 공부한 내용은 추후에 정리하도록 하겠다. 

'TIL > 2023' 카테고리의 다른 글

[WIL] 항해 3주차  (0) 2023.07.02
[TIL] 0627 ~ 0628  (0) 2023.06.29
[0626] TIL  (0) 2023.06.27
[WIL] 항해 2주차  (0) 2023.06.25
[0624] TIL  (0) 2023.06.25