Spring API는 스프링(Spring) 프레임워크를 기반으로 구축된, 시스템 간 데이터를 교환하기 위한 규칙 및 인터페이스다.
주로 RESTful 형식을 통해
클라이언트(앱, 웹)와 서버가 JSON/XML 데이터로 통신하며,
HTTP 메서드를 활용해 자원을 관리하는 경량 인터페이스이다.
인터넷에서 파일의 형식을 나타내는 표준이다.
HTTP 통신 시 데이터의 형식(문서, 이미지 등)을 식별하는 라벨이며,주로 Content-Type 헤더를 통해 정의된다.
이메일 첨부파일 형식을 위해 처음 개발되었으나, 현재는 웹에서 광범위하게 사용된다.
스프링 부트에서는 MediaType을 사용하여
다양한 타입을 간편하게 설정할 수 있다.
- application/json
- text/html
- image/jpeg
또한 파일 업로드/다운로드 시 적절한 컨텐츠 타입을 지정할 수 있다.
클라이언트와 서버 간 데이터를 주고 받을 때, 요청(Request) 또는 응답(Response)의
본문(Body)에 담긴 데이터 형식(MIME 타입)을 명시하는 HTTP 헤더이다.
서버는 이 값을 통해 JSON, XML 등의 처리 방식을 결정한다.
- text/plain : 일반 텍스트
- text/html : HTML 문서
- application/json : JSON 데이터
요청 바디에 들어가는 타입을
요청 헤더의 Content-Type에서 명시한다.
POST /api/users HTTP/1.1
Content-Type: application/json
{
"name": "kim",
"age": 20
}
기본적인 HTML 폼 전송 방식
키-값 쌍 데이터를 URL 인코딩 방식으로 변환하여 전송한다.
key=value
key1=value1&key2=value2
- 공백 →
+ - 특수문자 →
%xx
POST /login
Content-Type: application/x-www-form-urlencoded
username=kim&password=1234
파일(이미지, PDF 등)과 텍스트 데이터를
동시에 전송할 때 사용하는 방식이다.
파일 업로드가 포함된 경우 사용된다.
POST /upload
Content-Type: multipart/form-data
file: image.png
description: 프로필 이미지
데이터 형식이 JSON(JavaScript Object Notation)임을 나타내는 MIME 타입이다.
스프링부트에서는
@RequestBody + Jackson 라이브러리를 통해
- JSON → Java 객체
- Java 객체 → JSON
자동 변환하여 REST API를 구현한다.
프론트엔드에서는 axios, Fetch API 등을 통해 비동기적으로 데이터를 전송할 때 주로 사용된다.
@PostMapping("/users")
public User createUser(@RequestBody User user) {
return user;
}XML 형식의 데이터를 나타내는 MIME 타입이다.
<user>
<name>kim</name>
<age>20</age>
</user>서버의 리소스를 조회(Read)할 때 사용하는 HTTP 메소드
- URL에 데이터 포함
- 멱등성(Idempotent) 보장
멱등성
→ 동일한 요청을 여러 번 보내도 서버 상태가 변하지 않는 성질
@GetMapping(url주소)
접근제한자 리턴타입 함수이름() {
return 템플릿 파일명;
}@GetMapping("/users")
public List<User> getUsers() {
return List.of(new User("kim", 20));
}URL을 통해 데이터를 전달하는 방식
URL 주소 미리 협의된 데이터를 파라미터를 통해 넘기는것을 말한다.
URL주소?key=value or URL주소?key1=value1&key2=value2
/users?name=kim&age=20
주로 검색, 페이지, 필터 등에 사용된다.
@GetMapping(url주소)
public 리턴타입 함수이름(@RequestParam(파라미터명, [required=true or false]) 타입 변수) {
return 템플릿 파일명;
}@GetMapping("/users")
public String getUser(
@RequestParam(name = "name", required = false) String name
) {
return name;
}URL 경로 자체를 변수로 사용하는 방식
@GetMapping(url주소/{value})
접근제한자 리턴타입 메소드명(@PathVariable 타입 변수명) {
return 템플릿 파일명;
}@GetMapping("/users/{id}")
public String getUserById(@PathVariable Long id) {
return "user id = " + id;
}데이터를 서버로 전송하여 리소스를 생성(Create)하거나 상태를 변경할 때 사용
- 데이터는 HTTP Body에 포함
- URL에 노출되지 않음
@PostMapping(url주소)
접근제한자 리턴타입 메소드명() {
return 템플릿 파일명;
}@PostMapping("/users")
public String createUser() {
return "created";
}컨트롤러에서 View를 거치지 않고 데이터를 직접 HTTP 응답 Body로 반환할 때 사용
주로 JSON/XML 형태로 반환되며, 객체는 HttpMessageConverter를 통해 변환된다.
어노테이션
@ResponsBody
접근제한자 리턴타입 메소드명() {
return 템플릿 파일명;
}@ResponseBody
@GetMapping("/api/user")
public User apiUser() {
return new User("kim", 20);
}