1. User의 정보 생성 API
포스트 맨에서 일단 정보를 입력한 뒤에 유저 생성 API 생성을 위해 인텔리제이로 가겠다.
인텔리 제이에서는 이앞에 했던 연결과 기타 세팅이 되어있다는 전제하에 시작하는 내용이다.
이부분을 모르면 아래 링크를 통해 보고 오는 것은 추천한다.
2024.12.19 - [Spring/실습] - SpringBoot 와 DB 터널링 과 실습
SpringBoot 와 DB 터널링 과 실습
2024.12.18 - [Spring/실습] - git 과 GitHub 를 이용한 Spring Boot 사용법 실습 git 과 github 를 이용한 Spring Boot 사용법 실습1.git 다운 내 컴퓨터는 window 각 컴퓨터에 맞는걸 다운 받고 디폴프 설정으로 마무
tbghdus.tistory.com
둘은 동일 하게 작성해주어야한다.
유저를 추가하기 위해서 컨트롤러에서 createdUser 라는 함 수 가 필요하다
그렇게 되면 DAO에서 SQL문을 통해 함수를 만들러 가면된다.
SQL문이 정상 작동된다면 복사 붙여 넣기를 통해 SQL 문을 활용한 식을 만들면된다.
jdbcTemplate.update()는 SQL 쿼리를 실행해 데이터를 변경 하는 코드인데
쉽게 말해 user 객체의 name과 email 값을 SQL 쿼리에 넣어 데이터베이스에 저장하거나 수정하는 코드라 생각하면된다.
ResponseEntity는 HTTP 응답을 생성하는 객체이며 상태 코드, 헤더, Body를 설정할 수 있습니다.
그리고 여기서 DTO를 만들어줄것이다 DTO란?
DTO는 데이터를 주고받을 때 필요한 정보만 담아서 안전하고 깔끔하게 전달하기 위해 사용하는데 필요한 데이터만 전달
데이터베이스 객체(Entity)에 불필요한 데이터까지 포함하면 보안과 성능 문제가 발생할 수 있기에 필요한 것이다
그래서 필요한 정보가 다를 경우 DAO를 여러개 만들어 사용하면된다.
DTO에 담기는 정보값은 전송에 필요한 데이터만 포함해서 작성 하면된다
만약 DTO 를 많이 쓰고 싶다면 클래스를 이렇게 쓰면 여러개의 DTO를 쓸 수 있다
ResponseEntity<? extends Object>
ResponseEntity.status(200)
HTTP 200 상태 코드를 설정하는 거다. (200은 "요청이 성공적으로 처리됨"을 의미)
.body(new UserResDTO("성공"))
은 응답의 본문(Body)에 UserResDTO 객체를 담고 있다
여기서 UserResDTO("성공")는 메시지 "성공"을 포함한 객체를 생성한다는 뜻으로
"요청이 성공했다"는 의미로 HTTP 200 응답을 보내며, 메시지 "성공"이 포함된 데이터를 함께 반환한다는 데이터이다
2. User의 정보 업데이트 API
지금은 완성 되어 있지만 방식은 1번에서 했던 순서와 동일하게 하면된다.
@PutMapping: RESTful 방식에서 리소스의 업데이트 작업에 맞는 HTTP 메서드가 PUT이기 때문에 사용했다.
@PathVariable: URL에 포함된 사용자 ID를 받아오기 위해 썼고, 특정 사용자를 식별하기 위해 필요하다
@RequestBody: 요청 본문에 포함된 새로운 사용자 정보를 객체로 매핑하기 위해 사용했다 이를 통해 클라이언트가 보낸 JSON 데이터를 User 객체로 쉽게 변환할 수 있다.
코드 흐름은 아래와 같다
userDAO.updateUser(id, user)를 호출해서 업데이트 작업을 수행해라
결과가 성공적이면: 200 상태 코드와 "성공" 메시지를 반환해라
결과가 실패하면: 400 상태 코드와 "실패" 메시지를 반환해라
서버 오류가 발생하면: 500 상태 코드를 반환해라
3.User의 정보 삭제 API
지금은 완성 되어 있지만 방식은 1번에서 했던 순서와 동일하게 하면된다.
@DeleteMapping: RESTful 방식에서 리소스의 삭제 작업에 맞는 HTTP 메서드가 DELETE이기 때문에 사용했다
@PathVariable: URL에 포함된 사용자 ID를 받아오기 위해 사용했고, 특정 사용자를 식별해서 삭제하려고 필요했다
코드 흐름은 아래와 같다.
userDAO.deleteUser(id)를 호출해서 해당 ID의 사용자 삭제 작업을 실행해
삭제가 성공적이면: 200 상태 코드와 "성공" 메시지를 반환해
삭제가 실패하면: 400 상태 코드와 "실패" 메시지를 반환해.
서버 오류가 발생하면: 500 상태 코드를 반환해.
4.User 특정 정보 가져오기 API
getUserId(long id):
id 값을 받아서 해당 ID를 가진 사용자를 조회하는 SQL 쿼리를 실행하는 메서드이다.
SQL 쿼리는 "SELECT * FROM user WHERE id = ?"이며, 여기서 ?는 전달받은 id 값으로 대체된다.
jdbcTemplate.queryForObject():
SQL 쿼리를 실행해서 결과를 하나의 객체로 반환해주는 메서드이다.
쿼리 결과가 한 줄(Row)만 나올 때 적합하기 때문에 사용된다.
이 메서드는 User 객체로 변환하기 위해 UserRowMapper를 사용한다.
mapRow(ResultSet rs, int rowNum)
ResultSet에서 데이터 읽기
ResultSet은 데이터베이스 쿼리의 결과를 담고 있는 객체다.
여기서 id, name, email, created_at 같은 컬럼 값을 가져오는 역할을 한다.
User 객체 생성 및 데이터 설정
새롭게 User 객체를 생성하고,
setId, setName, setEmail, setCreatedAt 메서드를 사용해 ResultSet에서 읽은 데이터를 User 객체의 필드에 할당하는 방식이다.
최종 반환
데이터를 모두 설정한 후 User 객체를 반환하는 역할을 한다.
왜 이렇게 작성했는가?
[RowMapper]는 SQL 쿼리 결과를 자바 객체로 변환하는 작업을 표준화하고 깔끔하게 처리하기 위한 도구다.
이 방식은 다른 쿼리에서도 반복적으로 재사용할 수 있어 유지보수와 확장성이 뛰어난 설계다.
데이터베이스에서 가져온 데이터를 User 객체에 담기 위한 표준적인 방법이다
5. User의 모든 정보 가져오기 API
allUser() 메서드
이 메서드는 모든 사용자 정보를 조회하는 API를 처리하기 위한 메서드이다.
@GetMapping("api/user")를 사용하여 HTTP GET 요청을 처리하도록 설정되어 있다.
코드 흐름은 아래와 같다
사용자 목록 조회
userDAO.allUser()를 호출하여 데이터베이스에서 모든 사용자 데이터를 조회한다.
조회 결과는 List<User> 형식의 사용자 리스트이다.
응답 반환
조회에 성공하면, HTTP 200 상태 코드와 함께 "성공" 메시지와 사용자 리스트를 담은 UserAllDTO 객체를 반환한다.
예외가 발생하면 HTTP 500 상태 코드를 반환하여 서버 오류를 알린다.
왜 이렇게 작성되었는가
RESTful API 설계에 따라 모든 사용자를 조회하는 GET 요청에 적합하도록 작성된 것이다.
ResponseEntity를 사용하여 상태 코드와 데이터를 명확히 반환하도록 설계되었다.
UserAllDTO는 응답 데이터(메시지와 사용자 리스트)를 효율적으로 전달하기 위한 DTO이다
allUser() 메서드
이 메서드는 데이터베이스에서 모든 사용자 데이터를 조회하는 역할을 하는 메서드이다.
코드 흐름은 아래와 같다
SQL 쿼리 작성
SQL 쿼리는 "SELECT * FROM user;"로, user 테이블의 모든 데이터를 가져오는 명령이다.
jdbcTemplate.query() 호출
jdbcTemplate.query()는 SQL 쿼리를 실행하고, 결과를 여러 개의 Row로 받아온다.
UserRowMappe를 사용하여 각 Row를 User 객체로 매핑한다.
결과 반환
매핑된 List<User> 객체를 반환하여 호출한 곳에서 사용할 수 있도록 한다.
DTO가 아닌 List 를 쓰는 이유?
이미 저장된 데이터를 그대로 가져오려면 List를 사용하고,
추가 가공이 필요하거나 특정 형태로 데이터를 보내야 할 때는 DTO를 사용합니다.
왜 이렇게 작성되었는가?
jdbcTemplate.query()는 여러 Row의 결과를 처리하기 위한 표준적인 방법이기 때문에 사용되었다.
UserRowMapper를 사용하여 SQL 결과를 User 객체로 변환함으로써, 코드의 재사용성과 가독성을 높였다.
'Spring Boot JDBC > 실습' 카테고리의 다른 글
JWT 보안 시스템 설정 실습 (1) | 2024.12.27 |
---|---|
여러 테이블 서버 개발 실습 (0) | 2024.12.23 |
SpringBoot 와 DB 터널링 과 실습 (0) | 2024.12.19 |
RequestParam 실습 (0) | 2024.12.19 |
git 과 github 를 이용한 Spring Boot 사용법 실습 (1) | 2024.12.18 |