Spring MVC에서 JSON 데이터 처리 방법

웹 애플리케이션 개발 초기에는 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 형식으로 변환해준다:

  1. 프로젝트 빌드 경로에 JSON 변환 라이브러리가 포함되어 있어야 한다 (예: Jackson 또는 Gson).
  2. Spring 설정 파일에서 <mvc:annotation-driven />이 활성화되어 있어야 한다.
  3. 컨트롤러 메서드에 @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 기반의 데이터 전송을 매우 직관적이고 효율적으로 만들어준다.

태그: Spring MVC JSON Jackson REST API @ResponseBody

6월 4일 16:04에 게시됨