Spring Boot/API를 작성하는 다양한 방법

[Spring boot] POST API 만들기

재윤 2025. 8. 14. 08:33
반응형

@RequestMapping 구현

  • POST API는 DB 등이 저장소에 리소스를 저장할 때 사용되는 API
  • GET API에서는 URL의 경로나 파라미터에 변수를 넣어 요청을 보냈지만 POST API에서는 저장하고자 하는 리소스나 값을 HTTP body에 담아 서버에 전달
import com.springboot.api.dto.MemberDto;
import java.util.Map;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

// 예제 5.10
@RestController
@RequestMapping("/api/v1/post-api")
public class PostController {
    
}

 

 

    @RequestMapping(value = "/domain", method = RequestMethod.POST)
    public String postExample(){
        return "Hello Post API";
    }

 

결과

 

  • Body 영역에 작서되는 값은 일정한 형태를 취급
  • JSON(JavaScript Object Notation)형식으로 전송되며, 가장 대중적으로 사용되는 JSON 형식 값을 주고받을 예정

 

그런데 왜 JSON 형태로 사용할까?

  • 밑은 JSON의 역사이다.

JSON 역사

  • XML 전성기
    • 웹 서비스 간 데이터 교환은 거의 전부 XML이었음
    • SOAP(Web Service) 표준
    • <tag>로 감싸는 구조, 무겁고 파싱 느림
    • 자바 진영에서도 Spring 2.x 시절까지는 XML 설정과 XML 데이터 교환이 기본
  • JSON 등장
    • Douglas Crockford가 JavaScript 객체 표기법을 기반으로 JSON (JavaScript Object Notation) 정의
    • 원래 JavaScript의 object literal 문법에서 파생됨
    • 텍스트 기반이라 언어에 종속되지 않음, 가볍고 사람이 읽기 쉬움
  • AJAX & Web 2.0 혁명
    • 구글(Google Maps, Gmail) 같은 서비스가 AJAX(Asynchronous JavaScript and XML)를 활용해 웹 페이지를 부분 갱신
    • 개발자들이 AJAX에서 XML 대신 JSON을 쓰기 시작함
      • JavaScript에서 JSON.parse()로 바로 객체 변환 가능
      • XML은 DOM 파싱이 복잡하고 무거움
    • 이 시기에 XML → JSON 대세 전환이 시작됨
  • REST API와 JSON의 결합
    • REST(Representational State Transfer) 아키텍처 스타일이 유행
    • JSON은 URL 기반 API 응답 포맷으로 최적
    • Java(Spring)에서도 Jackson, Gson 같은 라이브러리로
    • Java 객체 ↔ JSON 변환이 자동화됨
  • Spring Boot + spring-boot-starter-web 사용 시
    • 이유:
      • 클라이언트(웹/앱) 대부분이 JSON API를 기대
      • HTTP 응답 Content-Type: application/json이 표준화됨
      • 언어 독립적: 자바뿐만 아니라 Python, JavaScript, Go, C# 등 어디서든 바로 사용 가능

 

결국 "그냥 자바 전용 포맷 쓰면 안 되나?"인데

  • 가능하긴 함.
    • 예: Java의 Serializable로 이진 직렬화, Avro, Protobuf 등
  • 하지만:
    • 브라우저나 모바일 앱에서 바로 읽기 힘듦
    • 범용성, 표준성 부족 → 협업/외부 연동에 불리
  • JSON은 범용 표준이라, “누구나 이해하는 공용 언어” 역할

 

@RequestBody

Map 객체

    // <http://localhost:8080/api/v1/post-api/member>
    @PostMapping(value = "/member")
    public String postMember(@RequestBody Map<String, Object> postData) {
        StringBuilder sb = new StringBuilder();

        postData.entrySet().forEach(map -> {
            sb.append(map.getKey() + " : " + map.getValue() + "\\n");
        });

        return sb.toString();
    }

 

MemberDto 멤버 변수 요청 메시지

    // <http://localhost:8080/api/v1/post-api/member2>
    @PostMapping(value = "/member2")
    public String postMemberDto(@RequestBody MemberDto memberDTO) {
        return memberDTO.toString();
    }

 

반응형