프로젝트

(ProfitKey) request와 response

민톨이 2025. 2. 27. 22:47
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의 주요 역할

  1. API 문서에서 필드 설명을 추가
    • description 속성을 사용하여 해당 필드가 어떤 역할을 하는지 설명할 수 있음.
  2. 예시 값 제공 (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를 따로 만드는 게 좋음