![[스프링부트 #19] SSR에서 REST API로(모든 프론트엔드를 아우르는 백엔드 설계)](https://image.inblog.dev?url=https%3A%2F%2Finblog.ai%2Fapi%2Fog-custom%3Ftitle%3D%255B%25EC%258A%25A4%25ED%2594%2584%25EB%25A7%2581%25EB%25B6%2580%25ED%258A%25B8%2B%252319%255D%2BSSR%25EC%2597%2590%25EC%2584%259C%2BREST%2BAPI%25EB%25A1%259C%2528%25EB%25AA%25A8%25EB%2593%25A0%2B%25ED%2594%2584%25EB%25A1%25A0%25ED%258A%25B8%25EC%2597%2594%25EB%2593%259C%25EB%25A5%25BC%2B%25EC%2595%2584%25EC%259A%25B0%25EB%25A5%25B4%25EB%258A%2594%2B%25EB%25B0%25B1%25EC%2597%2594%25EB%2593%259C%2B%25EC%2584%25A4%25EA%25B3%2584%2529%26tag%3DTemplate%2B1%26description%3D%26template%3D3%26backgroundImage%3Dhttps%253A%252F%252Fsource.inblog.dev%252Fog_image%252Fdefault.png%26bgStartColor%3D%252323ec86%26bgEndColor%3D%252323ec86%26textColor%3D%2523000000%26tagColor%3D%2523000000%26descriptionColor%3D%2523000000%26logoUrl%3D%26blogTitle%3DGyeongwon%2527s%2Bblog&w=2048&q=75)
1. 브라우저 중심의 SSR(Server-Side Rendering)
- 브라우저가 클라이언트일 때, 서버는 HTML을 생성해 보내는 SSR 방식을 사용한다.
- 이때 서버 구조는 Controller 패키지와 Domain 패키지를 나누어 설계했다.
- Controller는 브라우저 요청에 맞춰 HTML을 내려주기 때문에, 보통
web
패키지로 명명
→ 이유: 브라우저 전용 로직이기 때문이다.
2. 프론트엔드 환경의 변화
- 예전에는 주요 프론트 클라이언트가 브라우저였지만, 지금은 훨씬 다양해졌다.
- 키오스크
- 자동차 LCD
- 스마트폰/태블릿
- 스마트워치
- 스마트 미러 등
- 이런 환경에서는 브라우저 전용 Controller(web 패키지)만으로 한계가 있다.
- 따라서
app
,device
등 다양한 프론트엔드 유형에 맞춘 패키지 구성이 필요해진다. (원래는web
(controller))
3. React와 같은 SPA의 등장
- React 같은 프론트엔드 프레임워크가 등장하며, 브라우저에서도 HTML을 서버에서 만드는 대신 JavaScript로 화면을 그리게 된다.
- 이로 인해 서버는 HTML 대신 데이터(JSON)만 제공한다.
- 결과적으로 서버 역할이 JSON API 제공으로 단순화했고, 이를 REST API라고 부른다.
4. REST API의 목적
- 직접적인 목적: JSON 데이터 제공 (Object → 문자열 변환 → 전송)이다.
- 궁극적인 목적: 모든 프론트 디바이스(브라우저, 앱, IoT, 차량 등)에 대응 가능한 리소스 서버가 되는 것이다.
- JSON은 전 세계의 통신 공용어와 같은 역할을 하며, 언어/플랫폼 간 호환성을 제공한다. 즉, 오브젝트를 문자열로 바꿔서 통신하기 위해서이다. 통신을 위한 중간데이터라고 보면된다.
정리하자면,
과거는 브라우저 중심 → SSR, HTML 제공
현재는 디바이스 다양화 + SPA 프레임워크 → REST API, JSON 제공
Share article