웹 애플리케이션 개발 초기에는 PHP나 JSP와 같은 서버 사이드 기술을 주로 사용했으며, 클라이언트와의 데이터 교환은 주로 GET 또는 POST 방식으로 단순한 키-값 형태의 파라미터를 전달하는 데 그쳤다. 서버는 이러한 요청을 받아 비즈니스 로직을 처리한 후 HTML 문서를 생성하여 응답했다. 즉, 대부분의 데이터 처리와 구조화된 정보의 흐름은 서버 내부에서 이뤄졌고, 클라이언트는 최종적으로 렌더링된 화면만 수신했다.
그러나 모바일 앱 시대가 본격화되면서 아키텍처에 큰 변화가 생겼다. 앱 자체가 상당 부분의 로직을 처리하게 되었고, 백엔드 서버는 더 이상 전체 화면을 제공하지 않고 오직 데이터를 제공하는 역할에 집중하게 되었다. 이런 맥락에서 복잡한 데이터 구조를 효율적으로 주고받을 수 있는 형식이 필요해졌고, 그 대표적인 솔루션이 바로 JSON(JavaScript Object Notation)이다.
JSON은 가벼운 데이터 교환 형식으로, 사람이 읽기 쉽고 기계가 파싱하기 간편하다. 또한 객체와의 직렬화/역직렬화가 용이하며, HTTP 기반의 통신과 잘 어울리기 때문에 RESTful API와 함께 널리 사용되고 있다.
예를 들어, 아래 코드는 전통적인 방식으로 `TelephoneSchedule` 리스트를 JSON 배열로 변환하여 클라이언트에 응답하는 예시이다:
JSONArray scheduleArray = new JSONArray();
PrintWriter writer = null;
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json;charset=utf-8");
response.setHeader("Cache-Control", "no-cache");
writer = response.getWriter();
for (TelephoneSchedule item : scheduleList) {
JSONObject obj = new JSONObject();
obj.put("startTime", item.getBeginPeriod());
obj.put("endTime", item.getEndPeriod());
scheduleArray.add(obj);
}
// 모델에 데이터 추가 (뷰에서도 사용 가능)
model.addAttribute("schedules", scheduleList);
writer.print(scheduleArray.toString());
writer.flush();
writer.close();
이 방식은 동작하지만 반복적이며 유지보수가 어렵다. 다행히 Spring MVC는 이를 자동화할 수 있는 강력한 기능을 제공한다. 개발자가 직접 JSON 문자열을 조합하고 출력 스트림을 다루는 대신, 다음과 같은 조건을 만족하면 자동으로 객체를 JSON 형식으로 변환해준다:
- 프로젝트 빌드 경로에 JSON 변환 라이브러리가 포함되어 있어야 한다 (예: Jackson 또는 Gson).
- Spring 설정 파일에서
<mvc:annotation-driven />이 활성화되어 있어야 한다. - 컨트롤러 메서드에
@ResponseBody어노테이션이 선언되어 있어야 한다.
이러한 설정이 완료되면, 아래와 같이 매우 간결하게 JSON 응답을 반환할 수 있다:
package com.example.api.controller;
import org.springframework.web.bind.annotation.*;
import com.example.api.model.Store;
@Controller
@RequestMapping("/api/stores")
public class StoreApiController {
@GetMapping("/{id}")
@ResponseBody
public Store getStoreAsJson(@PathVariable String id) {
Store store = new Store();
store.setId(id);
store.setName("Seoul Branch");
store.setEmployees(new String[]{"Alice", "Bob", "Charlie"});
return store;
}
}
위 코드에서 Store 객체가 반환될 때, Spring은 내부적으로 Jackson 라이브러리를 사용해 이 객체를 자동으로 JSON 문자열로 변환하여 클라이언트에 전송한다. 개발자는 더 이상 수동으로 JSON 구조를 조합할 필요 없이 비즈니스 로직에 집중할 수 있게 된다.
이처럼 Spring MVC는 RESTful 서비스 개발을 위한 핵심 인프라를 제공하며, JSON 기반의 데이터 전송을 매우 직관적이고 효율적으로 만들어준다.