728x90
FavoriteStock 관련 api를 만들면서 request와 response의 필요와 역할을 정리해보고자 한다.
Request DTO vs Response DTO 차이
=> 둘 다 클라이언트와 서버 간 데이터를 주고받을 때 사용되는 객체지만, 목적과 사용 방식이 다름.
영어 뜻 그대로 ,,, request는 요청 / response는 응답이다. 클라이언트와 서버를 기준으로 생각하면 됨
1️⃣ Request DTO (FavoriteStockRequest)
- 클라이언트 → 서버 (요청 데이터)
- 클라이언트가 서버에 데이터를 보낼 때 사용됨
- @RequestBody 또는 @RequestParam과 함께 사용됨
예제) 관심 종목 등록 요청 (request)
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class FavoriteStockRequest {
@Schema(description = "사용자의 ID", example = "123")
private Long userId;
@Schema(description = "관심 종목의 코드", example = "005930")
private String stockCode;
}
+ @Schema의 주요 역할
- API 문서에서 필드 설명을 추가
- description 속성을 사용하여 해당 필드가 어떤 역할을 하는지 설명할 수 있음.
- 예시 값 제공 (example 속성 사용 가능) !!!!!!!!!!
- 클라이언트 개발자가 API를 테스트할 때 참고할 수 있도록 예제 데이터를 제공.
=>>> 필수는 아니지만 api문서화를 확실히 하기 위해 사용하면 좋당
요청 예시
POST /mypage/favorite-stocks
Content-Type: application/json
{
"userId": 1,
"stockCode": "005930"
}
Response DTO (FavoriteStockResponse)
- 서버 → 클라이언트 (응답 데이터)
- 서버가 클라이언트에게 데이터를 반환할 때 사용됨
- 클라이언트가 화면에 표시하는 데 활용됨
예제) 관심 종목 응답 (response)
@Getter
@Setter
@NoArgsConstructor
public class FavoriteStockResponse {
private String stockCode;
private String stockName;
private boolean isLiked; // 찜 여부
@Builder
public FavoriteStockResponse(String stockCode, String stockName, boolean isLiked) {
this.stockCode = stockCode;
this.stockName = stockName;
this.isLiked = isLiked;
}
}
응답 예시
GET /mypage/favorite-stocks/1
Content-Type: application/json
[
{
"stockCode": "005930",
"stockName": "삼성전자",
"isLiked": true
},
{
"stockCode": "000660",
"stockName": "SK하이닉스",
"isLiked": false
}
]
결론?
- Request DTO는 서버가 받을 데이터를 정의 (사용자가 요청할 데이터)
- Response DTO는 서버가 보낼 데이터를 정의 (사용자가 볼 데이터)
- Request DTO 없이 @RequestParam을 사용할 수도 있지만, 확장성을 고려하면 DTO를 따로 만드는 게 좋음
'프로젝트' 카테고리의 다른 글
| (ProfitKey) 시큐리티 AOP인증 방식으로 MyPageController 코드 수정 (0) | 2025.03.13 |
|---|---|
| (ProfitKey) 컨트롤러 경로 변수 userId 인코딩 문제 해결 (0) | 2025.03.03 |
| (ProfitKey) JPA 기본값 빈 문자열로 설정 (0) | 2025.02.24 |
| (ProfitKey) 마이페이지 엔드포인트 변경 (0) | 2025.02.24 |
| (ProfitKey) yml 파일 환경변수 처리 (0) | 2025.02.22 |