[SPRING] Todo project | 어떤 자료형을 반환하는게 좋을까? ,수정 & 삭제 기능, ResponseEntity<>, 예외처리

림민지·2025년 3월 25일

Today I Learn

목록 보기
32/62

❓ 자료형 반환값에 대해

나는 Spring에서 메서드를 만들면서 가장 헷갈렸던 부분이 바로 어떤 자료형으로 반환할 것인가였다.

CRUD에 따라 깔끔하게 정리해보자!

반환 타입 결정하기

상황반환 타입
저장 (CREATE)ResponseDto (저장된 데이터 반환) or boolean (성공 여부만)
조회 (READ, 전체 목록)List
조회 (READ, 단일 데이터)ResponseDto
수정 (UPDATE)boolean (성공 여부) or ResponseDto (수정된 데이터 반환)
삭제 (DELETE)boolean (성공 여부)

1️⃣ 데이터를 다시 클라이언트에게 줘야 하는가?
Yes! → ResponseDto 또는 List<ResponseDto>
No → boolean, void, ResponseEntity<Void>

2️⃣ 조회된 데이터가 하나인가? 여러 개인가?
하나 → ResponseDto
여러 개 → List<ResponseDto>

3️⃣ 성공 여부만 필요한가?
Yes → boolean
No → ResponseDto, ResponseEntity<String>

💡 응답을 상태 코드로 전달하고 싶을떄~!
1. API 응답을 HTTP 상태 코드로 명확하게 전달하려면? → ResponseEntity<T>
2. 메시지를 포함 → ResponseEntity<String>
3. 데이터가 있으면 → ResponseDto, 여러 개면 List<ResponseDto>


수정 & 삭제 기능 구현하기

repository

마찬가지로 repository에서 인터페이스를 만들고 상속한다
사용자에게 요청받을 데이터가 있으니까! RequestDto를 입력받도록 하자

먼저 원하는 id에 맞는 비밀번호를 쿼리에서 찾아주고(findPw) DB에 저장된 비밀번호와 입력받은(dto.getPassword())가 같으면 업뎃해주고, 틀렸으면 잘못된 입력이라고 반환해주자

 @Override
  public boolean updateTodoById(RequestDto dto) {
      String findPW = "SELECT password FROM todo WHERE id = ?";
      String Pw = jdbcTemplate.queryForObject(findPW, new Object[]{dto.getId()}, String.class);
      if (!dto.getPassword().equals(Pw)) {

          System.out.println("잘못된 비번");
          return false;
      } else {
          String updateTodo = "UPDATE todo SET userName = ?, todo =? , updateDate = ? WHERE id= ?";
          jdbcTemplate.update(updateTodo, dto.getUserName(), dto.getTodo(), LocalDateTime.now(),dto.getId());
          return true;
      }
  }

삭제 기능도 거의 비슷하지만 쿼리문만 바꿔주었다

String sql = "DELETE FROM todo WHERE id = ?";

service

    @Override
  public boolean updateTodoById(RequestDto dto) {
      return todoRepository.updateTodoById(dto);
  }

역시 서비스에서도 boolean 타입을 사용하고, 입력받은 dto를 레포로 넘어갈 수 있게 설정했다.
삭제도 같은 로직이다!

controller

    @PutMapping("/update")
  public ResponseEntity<String> updateTodoById(@RequestBody RequestDto dto){
      boolean isUpdated = todoService.updateTodoById(dto);
      if (isUpdated){
          return ResponseEntity.ok("업뎃 됨!");
      }
      else {
          return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("잘못된 업뎃입니다");
      }
  }

마지막으로 컨트롤러에서는 사용자에게 입력받고 조정하는 역할을 담당하도록 해주자
url을 @PutMapping을 사용해서 입력 받는 어노테이션으로 쓰고
@RequestBody로 입력받는다고 명시해주자

삭제 기능의 경우 @DeleteMapping("/delete")를 사용해 삭제해주자!

ResponseEntity<String> 사용을 통해 HttpStaus를 지정할 수 있도록 해줬다.

profile
@lim_128

0개의 댓글