API(Application Programming Interface)에서는 서로 다른 시스템 간에 데이터를 송수신할 때, JSON(JavaScript Object Notation) 형식을 사용하는 것이 일반적이다.

 

JSON은 가볍고 구조화된 데이터를 표현하는 포맷으로, 자바스크립트에서 사용되는 객체 표현 방식을 따른다.

이러한 특징으로 인해, JSON은 다양한 프로그래밍 언어에서 쉽게 사용할 수 있다.

일반적으로 "key-value" 쌍의 객체 형태로 표현되며, 이러한 객체는 중괄호 {} 안에 키와 값으로 구성된다.

 

API에서 JSON 형식으로 데이터를 송수신하는 방식은 다음과 같다.

  1. 클라이언트(웹 브라우저, 모바일 앱 등)가 서버로 요청을 보낸다. 이때, HTTP 요청 헤더에는 'Content-Type: application/json'이 포함된다.
  2. 서버는 클라이언트의 요청을 받아들이고, JSON 형식으로 응답을 생성한다. 이때, HTTP 응답 헤더에는 'Content-Type: application/json'이 포함된다.
  3. 서버는 생성된 JSON 형식의 응답을 클라이언트에게 전송한다.
  4. 클라이언트는 받은 JSON 응답을 파싱하고, 필요한 데이터를 추출하여 사용한다.

JSON 형식으로 데이터를 송수신하는 방식은 XML과 비교하여 더 가볍고 간결하다. 또한, JSON은 자바스크립트의 객체 표현 방식과 유사하여, 자바스크립트와 같은 프로그래밍 언어에서 사용하기 쉽다. 따라서, 다양한 API에서 JSON 형식을 이용하여 데이터를 송수신하고 있다.

 

HTTP Method는 POST, PUT, PATCH 가 주로 사용된다.

 

아래의 서블릿과 HelloData 클래스를 생성 후  POSTMAN 을 통해 데이터를 전송해보면 아래와 같이 보인다.

package hello.servlet.basic.request;

import com.fasterxml.jackson.databind.ObjectMapper;
import hello.servlet.basic.HelloData;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletInputStream;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.util.StreamUtils;

import java.io.IOException;
import java.nio.charset.StandardCharsets;

@WebServlet (name="requestBodyJsonServlet", urlPatterns = "/request-body-json")
public class RequestBodyJsonServlet extends HttpServlet {

    private ObjectMapper objectMapper = new ObjectMapper();

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletInputStream inputStream = req.getInputStream();
        String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);

        System.out.println("messageBody = " + messageBody);

        HelloData helloData = objectMapper.readValue(messageBody,HelloData.class);

        System.out.println("helloData.getUsername() = " + helloData.getUsername());
        System.out.println("helloData.getAge() = " + helloData.getAge());

        resp.getWriter().write("ok");
    }
}
package hello.servlet.basic;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class HelloData {

    private String username;
    private int age;

}

 

Git : https://github.com/ShinHenry/Basic-Servlet-Project.git

 

GitHub - ShinHenry/Basic-Servlet-Project: SpringBoot 기반 Servlet 프로젝트

SpringBoot 기반 Servlet 프로젝트. Contribute to ShinHenry/Basic-Servlet-Project development by creating an account on GitHub.

github.com

 

출처 : 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

+ Recent posts