본문 바로가기
기록해보기

유저 업데이트 API, 삭제 API 개발과 테스트

by titlejjk 2023. 6. 4.

유저 업데이트 API, 삭제 API 개발과 테스트

저번 시간에는 유저 생성 API와 조회 API를 만들어 보았다 이번에도 저번과 비슷하게 각 API의 스펙을 먼저 구상하고 진행해보겠다.

먼저 

업데이트 API👉

  • HTTP Method : PUT
  • HTTP Path : /user
  • HTTP Body (JSON)

{
	"id" : Long,
    "name" : String //변경되어야 하는 이름이 들어온다.
}
  • 결과 반환 X (HTTP 상태 200 OK이면 충분)

HTTP Method 는 GET POST PUT중에 PUT을 사용할 것이고

Path는 /user

PUT 같은 경우에는 쿼리와 Body중에 Body를 사용할 것이고 변경 대상의 id와 실제 변경대상인 name이 필요하다.

 

삭제 API👉

  • HTTP Method : DELETE
  • HTTP Path : /user
  • 쿼리사용
    문자열 name(삭제 되어야 하는 사용자 이름)
  • 결과 반환 X (HTTP 상태 200 OK이면 충분)

삭제 같은 경우에는 Method는 DELETE

Path는 /user

쿼리를 사용하고 이 때 문자열로 name이 온다 이 name이 삭제 되어야 하는 사용자이다.

결과는 반환하지 않는다.

 

먼저 업데이트 API부터 만들어 보겠다. 우선 PUT /user부터 잡아보도록 하겠다.

UserController에서 만들어줄 것이다. 

UserController에 들어가서 PutMapping을 먼저 어노테이션을 해준다.

@PutMapping
    public void updateUser(){
        
    }

그 다음 API 스펙에서 id와 name 을 JSON으로 받기로 하기로 했기 때문에 저번 POST를 만들 때에처럼 @RequestBody를 붙여주고 

JSON이 들어온 것을 DTO로 받기 위해서 객체를 하나만들었기에 비슷하게 PUT 할때에도 @RequestBody를 적어주고 DTO를 만들어 줄 것이다.

@PutMapping
    public void updateUser(@RequestBody ){

    }

이렇게 @RequestBody를 적어주고 dto → user → request에 새로운 java Class를 만들어 주겠다.

이름은 UserUpdateRequest

여기서는 정해진 것 처럼 id와 name을 받아야 한다. 먼저 id와 name을 받고 getter를 적어준다.

package com.group.libraryapp.dto.user.request;

public class UserUpdateRequest {

    private long id;
    private String name;

    public long getId() {
        return id;
    }

    public String getName() {
        return name;
    }
}

그러고 다시 Controller로 다시가서 @PutMapping 옆에 ("/user")를 적어준다.

이렇게 되면 어노테이션을 통해서 ("/user")가 실행이 되면 이 함수가 실행이 되고 이 함수고 실행이 될때 API를 통해 건너온 HTTP Body가 UserUpdateRequest로 변형되서 들어 올 것이다.

@PutMapping("/user")
    public void updateUser(@RequestBody UserUpdateRequest request){

    }

그 다음에 로직을 작성해 보자

UserUpdateRequest안에 특정 id를 가진 user가 특정 name 으로 변경되어야 하기 때문에 이에 맞는 쿼리를 작성해보자.

String sql = "UPDATE user SET name = ? WHERE id = ?";

이렇게 되면 user에 정보중 해당하는 id를 update할 이름으로 바꾸어라 라는 쿼리문을 작성해준다.

그리고 이 정보를 jdbcTemplate.update()를 적어준 후에 ? 에 들어갈 정보들을 작성해준다.

jdbcTemplate.update(sql, request.getName(), request.getId());

이런식으로 똑같이 Delete도 만들면 된다.

Delete는 쿼리를 사용하고 문자열로 name이라는 필드가 들어오게 만든다.

@DeleteMapping("/user")
    public void deleteUser(@RequestParam String name){
        String sql = "DELETE FROM user WHERE name =?";
        jdbcTemplate.update(sql, name);
    }

API를 다 만들었으니 서버를 재시작하고 테스트를 해보겠다!

있었는데
없습니다

정말 삭제 되었는지 DB에서도 확인해 보겠다.

데이터가 비어있다!

 

이렇게 데이터 API만들기 SQL, Spring에서 JDBC를 통해 MySQL에 접근하는 것 까지 모두 활용해 수정, 삭제 API까지 만들어보았다.

 

하지만 여기까지 만든 것에서 놓친 부분도 있다. 

존재하지 않는 유저도 삭제를 했는데 서버에서 200OK를 출력해주고있다.

삭제와 수정 두개다 모두 200 OK가 출력이 되는데 이런 예외처리를 손보러 가보겠다.

댓글