[데브코스] Spring Boot REST API 실습 (17강) - ForPostRsData 제거, RsData의 data 타입을 Object로 변경

zuno·2025년 12월 22일

이번 강의에서는 이전 강의(16강)에서 도입했던
ForPostRsData 클래스를 제거하고,
다시 RsData 하나로 응답을 통합하는 방향으로 구조를 변경한다.

다만, 그 과정에서
RsDatadata 필드 타입을 Object로 변경하게 되고,
이 선택이 완벽한 해답은 아니라는 점도 함께 짚고 넘어간다.


1️⃣ 16강까지의 문제 상황 정리

16강에서는 다음과 같은 상황이 있었다.

  • 댓글 응답 → RsData
  • 글 응답 → ForPostRsData
public record ForPostRsData(
        String resultCode,
        String msg,
        PostDto data
) {
}

이 구조는 당장은 동작하지만,
도메인별로 RsData가 계속 늘어나는 문제가 있었다.

  • ForPostRsData
  • ForCommentRsData?
  • ForOrderRsData?

👉 응답 클래스 폭증 가능성


2️⃣ 선택한 해결책: RsData 하나로 통합

그래서 이번 강의에서는
아예 ForPostRsData를 제거하고,
RsData 하나로 모든 응답을 처리하기로 한다.

대신 data의 타입을 Object로 변경한다.

package com.back.global.rsData;

public record RsData(
        String resultCode,
        String msg,
        Object data
) {
}

3️⃣ 글 삭제 API 수정

글 삭제 API는 다음과 같이 변경된다.

@GetMapping("/{id}/delete")
@Transactional
public RsData delete(@PathVariable int id) {
    Post post = postService.findById(id).get();

    postService.delete(post);

    return new RsData(
            "200-1",
            "%d번 글이 삭제되었습니다.".formatted(id),
            new PostDto(post)
    );
}

이제:

  • 댓글 삭제
  • 글 삭제

모두 RsData 하나로 응답 통일이 가능해진다.


4️⃣ 그런데… Object는 왜 찝찝할까?

강의에서도 분명히 언급된다.

“Object는 최대한 쓰지 않는 게 좋다.”

그 이유는 명확하다.

❌ Object의 단점

  • 타입 안정성 없음
  • 컴파일 타임에 오류를 잡을 수 없음
  • 프론트/백엔드 모두에서 응답 구조 예측이 어려움
  • 잘못 사용하면 결국 런타임 에러로 이어짐

즉,
Object임시방편에 가깝다.


5️⃣ 그럼 왜 Object를 썼을까?

그럼에도 불구하고 이번 강의에서 Object를 선택한 이유는:

  • ForPostRsData 같은 도메인별 응답 클래스 폭증을 막기 위해
  • 응답 구조를 하나로 통합하기 위해
  • 다음 단계(제네릭 RsData)를 설명하기 위한 중간 단계

👉 지금 구조는 완성형이 아니라 과정 중 하나다.


6️⃣ 강의 흐름상 중요한 포인트

이번 강의의 핵심은 이것이다.

“Object로 통합하는 건 가능하지만,
좋은 설계는 아니다.”

이 선택 덕분에:

  • RsData 통합의 필요성은 분명해졌고
  • 동시에 타입 안정성의 중요성도 체감하게 된다.

7️⃣ 결국 가야 할 방향

지금까지의 흐름을 정리하면:

  1. RsData (msg + resultCode)
  2. RsData + data
  3. ForPostRsData, ForCommentRsData → 실패
  4. RsData → 임시 해결
  5. 👉 RsData (제네릭) ← 최종 목표
  6. public record RsData<T>(
            String resultCode,
            String msg,
            T data
    ) {
    }

    8️⃣ 정리

    • ForPostRsData는 구조적으로 만족스럽지 않았다
    • RsData 하나로 통합하는 방향은 맞았다
    • 하지만 Object는 좋은 해결책이 아니다
    • 이 강의는 제네릭 RsData로 가기 위한 징검다리 단계

    💡 한 줄 요약

    17강은 “이렇게도 되긴 한다”가 아니라
    “왜 이렇게 하면 안 되는지”를 이해하게 해주는 강의였다.

0개의 댓글