(Spring) HTTP 데이터 객체 처리 및 CRUD 구현하기

2024. 10. 30. 21:07·Spring

1. 학습 목표 및 개요

이번 학습에서는 HTTP 데이터를 객체로 처리하는 방법과 CRUD 구현의 중요성을 다루었습니다. DTO를 사용해 계층 간 데이터를 이동시키는 원리를 이해하고, RESTful API에서의 요청 처리 방식을 실습했습니다. 이 과정에서 @ModelAttribute와 @RequestBody의 차이점도 명확히 정리했습니다.


2. 주요 내용

2.1 @ModelAttribute와 @RequestBody의 활용

  • @ModelAttribute
    • HTML 폼 데이터를 자바 객체로 매핑할 때 사용합니다.
    • 주로 POST 방식의 요청에서 사용하며, 필드명과 파라미터명이 자동 매핑됩니다.
    • 생략 가능하지만 명시적으로 사용하는 것이 가독성에 좋습니다.
  • @RequestBody
    • JSON 형식의 데이터를 자바 객체로 변환합니다.
    • RESTful API 구현 시 사용되며, 클라이언트에서 전달된 데이터를 역직렬화해 엔티티로 바인딩합니다.
    • API 설계 시 프론트엔드와 명확한 데이터 포맷 정의가 필요합니다.

2.2 DTO (Data Transfer Object)의 필요성

  • DTO의 역할 : 서버와 클라이언트 간 데이터 전송의 효율성과 보안성을 위해 사용합니다.
  • 엔티티를 직접 노출하지 않는 이유
    • 엔티티는 DB와 밀접하게 연결되어 있어 직접 노출하면 내부 구조가 드러납니다.
    • 이를 방지하기 위해 필요한 데이터만 포함한 DTO로 변환해 반환합니다.
  • 계층 간 이동 : 서비스와 컨트롤러 사이에서 데이터를 전달할 때도 DTO를 사용해 코드를 유지보수하기 쉽게 만듭니다.

3. CRUD 구현 실습

3.1 Create (생성)

  • POST 요청으로 데이터를 생성합니다.
@PostMapping("/api/schedules")
public ResponseEntity<ScheduleDTO> createSchedule(@RequestBody ScheduleDTO scheduleDTO) {
    Schedule newSchedule = scheduleService.create(scheduleDTO);
    return ResponseEntity.status(HttpStatus.CREATED).body(new ScheduleDTO(newSchedule));
}
  • 이처럼 JSON 데이터를 @RequestBody로 받아 서비스 계층을 통해 처리합니다.

3.2 Read (조회)

  • GET 요청으로 모든 스케줄 목록을 조회합니다.
@GetMapping("/api/schedules")
public ResponseEntity<List<ScheduleDTO>> getAllSchedules() {
    return ResponseEntity.ok(scheduleService.getAll());
}
  • ID로 특정 데이터를 조회할 때는 경로 파라미터를 사용합니다.

3.3 Update (수정)

  • PUT/PATCH 요청으로 데이터를 수정합니다. PUT은 전체 수정을, PATCH는 부분 수정을 의미합니다.
@PutMapping("/api/schedules/{id}")
public ResponseEntity<ScheduleDTO> updateSchedule(@PathVariable Long id, @RequestBody ScheduleDTO dto) {
    Schedule updated = scheduleService.update(id, dto);
    return ResponseEntity.ok(new ScheduleDTO(updated));
}

3.4 Delete (삭제)

  • DELETE 요청으로 데이터를 삭제합니다. 성공 시 204 No Content 응답을 반환합니다.
@DeleteMapping("/api/schedules/{id}")
public ResponseEntity<Void> deleteSchedule(@PathVariable Long id) {
    scheduleService.delete(id);
    return ResponseEntity.noContent().build();
}

4. 회고 및 개선점

  • DTO의 활용이 중요한 이유를 다시금 깨달았습니다. 엔티티를 직접 반환하면 보안 문제가 생길 수 있고, DTO를 사용하면 필요한 데이터만 노출할 수 있습니다.
  • 또한 Exception Handling의 중요성도 깨달았습니다. 클라이언트가 잘못된 데이터를 전송했을 때 명확한 에러 메시지를 반환하는 것이 사용자 경험에 중요합니다.
  • Swagger와 같은 도구를 사용해 API 문서화를 연습해야겠습니다. 이는 협업에 필수적인 기술로 보여집니다.

5. 마무리 & TIP

  1. Postman 활용 : API 개발 시 Postman으로 자주 테스트하면서 수정하면 개발 속도가 빨라집니다.
  2. 예외 처리 일관성 유지 : @ExceptionHandler로 공통된 예외 처리 로직을 구성하세요.
  3. Swagger 도입 : API 명세서를 작성해 두면 협업이 훨씬 쉬워집니다.
  4. DTO 매핑 자동화 : ModelMapper 또는 MapStruct 같은 라이브러리를 사용하면 DTO와 엔티티 간 매핑을 쉽게 처리할 수 있습니다.

▶ 이번 학습에서 HTTP 데이터 처리와 CRUD 구현의 기본 개념을 다시 복습했습니다. DTO를 사용한 계층 간 데이터 전송과 API 개발의 모범 사례를 이해하는 좋은 기회였습니다. 앞으로 예외 처리와 API 문서화에도 신경을 쓰며 개발해야겠습니다.

저작자표시 비영리 변경금지

'Spring' 카테고리의 다른 글

(Spring) RESTful에 대한 이해  (0) 2024.11.11
(Spring) 데이터베이스 개념 및 MySQL 개요  (0) 2024.11.04
(Spring) Path Variable & Request Param 차이점  (0) 2024.10.29
(Spring) Jackson과 Spring에서의 활용  (0) 2024.10.28
(Spring) 삭제 관련 Cascade 사용 여부에 따른 정리  (0) 2024.10.24
'Spring' 카테고리의 다른 글
  • (Spring) RESTful에 대한 이해
  • (Spring) 데이터베이스 개념 및 MySQL 개요
  • (Spring) Path Variable & Request Param 차이점
  • (Spring) Jackson과 Spring에서의 활용
lastdove
lastdove
lastdove 님의 블로그 입니다.
  • lastdove
    lastdove 님의 블로그
    lastdove
  • 전체
    오늘
    어제
    • 분류 전체보기 (80)
      • Spring (16)
      • JAVA (17)
      • JAVA 알고리즘 (20)
      • Project (5)
      • SQL 문제풀이 (17)
      • Git&Linux (2)
      • Web development(입문) (2)
      • Sparta (1)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
lastdove
(Spring) HTTP 데이터 객체 처리 및 CRUD 구현하기
상단으로

티스토리툴바