
src/main/java > com.hosikvote 우클릭하여 new > Folder 선택

dto라는 이름으로 폴더 생성

생성한 dto 폴더 우클릭하여 new > File 선택

PollRequestDto.java 라는 이름으로 파일 만들기

다음과 같이 코드 작성
package com.hosikvote.dto;
import java.time.LocalDateTime;
public class PollRequestDto{
private String title;
private String description;
private LocalDateTime deadline;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String Description) {
this.description = description;
}
public LocalDateTime getDeadline() {
return deadline;
}
public void setDeadline(LocalDateTime deadline) {
this.deadline = deadline;
}
}

이전에 만든 controller 폴더에 PollController.java 라는 이름으로 파일 생성
다음과 같이 코드 작성
package com.hosikvote.controller;
import com.hosikvote.dto.PollRequestDto; // 만들어놓은 PollRequestDto 참조
import org.springframework.web.bind.annotation.*;
@RestController //이 클래스는 REST API용 컨트롤러임을 선언
@RequestMapping("/polls") // 이 클래스는 REST API용 컨트롤러임을 선언. 즉, 이 클래스 안의 메서드는 /polls를 기본 경로로 갖는다.
public class PollController{
@PostMapping // HTTP 메서드 POST 요청을 처리하는 어노테이션.
public String createPoll(@RequestBody PollRequestDto pollRequestDto) {
System.out.println("=== Poll 요청 들어옴 ===");
System.out.println("제목: " + pollRequestDto.getTitle());
System.out.println("설명: " + pollRequestDto.getDescription());
System.out.println("마감일: " + pollRequestDto.getDeadline());
System.out.println("===========================");
return "Poll created: " + pollRequestDto.getTitle();
}
}
DTO : Data Transfer Object (데이터 전송 객체)
API 요청/응답 시에 필요한 데이터만 깔끔하게 담아서 주고받기 위해 만든 클래스.
여기선 title, description, deadline을 PollRequest라는 하나의 객체로 묶음.
Controller : 사용자의 요청을 받아서 처리하기 위해 만든 클래스
클라이언트가 요청(request)을 보내면 적절한 로직을 호출하고 결과(response)를 반환
역할분배
HosikvoteApplication.java = 프로그램을 실행하는 메인 클래스
PollRequestDto.java = 요청 데이터만 정의하는 클래스
PollController.java = 클라이언트 요청을 받아 처리하는 역할
재사용을 높이기 위해
PollRequestDto 같은 DTO는 다른 API에서도 재사용할 수 있다.