API 란? 그리고 언제 사용되나요?
Application Programming Interface의 약자로,
사전적의미로는 OS나 프로그램 사이의 통신에 사용되는 언어나 메시지 형식을 의미한다
웹 개발자의 관점에서 쉽게 예를들어보자.
안드로드나 또는 ios 앱개발자와 협업을 해야할 때, 편리성을 위해 Json이라는 데이터포맷으로 내려주게 되는데,
Json 포맷으로 데이터를 전달하는 것이 바로 API 방식이다.
특히 서버끼리 통신할때는 html을 사용할 필요가 없이 데이터의 흐름만이 중요하기 때문에 API 방식을 많이 사용한다.
그전에, String으로만 데이터를 html로 표현해봐요
@Controller
public class HelloController {
@GetMapping("hello-string")
@ResponseBody //http에서 바디부에 이 데이터를 직접 넣어주겠다는 의미이다.
public String helloString(@RequestParam("name")String name){
return "hello" + name; //스프링이라고 네임을 넣으면 hello spring으로 바뀔것
//이친구는 html 친구가 하나도 없이 그저 string을 넣어준다.
}
}
위와 같은 controller 내부에 Sting 이 반환값인 HelloString을 만들어보자.
이때 @ResponseBody라는 어노테이션을 달아준다면 http에서 body부분에 해당 데이터를 넣어주겠다는 의미가 된다.
실행결과를 보면 위와같이 body부 내부에 어떠한 html 태그도 없이 string 그자체만 반환된것을 볼 수 있다.
이제는 API 형식으로 전달해봅시다
@Controller
public class HelloController {
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name){
Hello hello = new Hello();
hello.setName(name);
return hello; //문자가 아니라 객체를 줌, 객체가 오면 그냥 json 방식으로 데이터를 반환하겠다는게 기본정책
}
-
static class Hello{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
우리는 우선 Hello 라는 데이터 전송을 위한 객체를 정의하였다.
//참고) 이때 JavaBean 규약에 의해 get set 메소드를 반드시 생성해야함!
이후 입력받은 데이터를 hello 객체에 저장하여 반환하였다.
spring 은 객체가 오면 json 방식으로 데이터를 반환하는것을 디폴트 값으로 두기 때문에,
실행시켜보면 아래와 같이 표현되는걸 볼 수 있다!
API는 spring에서 어떻게 동작이 되나요?
웹브라우저에서 요청을 받으면, 내장 톰켓 서버는 hello-api라는 입력을 스프링에 보낸다.
먼저 스프링 컨테이너 내부에서 hello-api 라는 Controller를 찾게 되는데,
만약 @ResponseBody라는 어노테이션이 붙어있으면 응답에 그대로 데이터를 넘겨야 한다!
이때 HttpMessageConverter라는 것이 객체면 JsonConverter, 문자열이면 StringConveter를 거쳐
요청한 데이터를 웹 브라우저나 서버에게 보내준다
이 방식이 바로 ResponseBody를 이용한 API 방식이다.
해당 게시글은 인프런 - 김영한 님의
[스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술] 강의에 기반합니다
'Programming > Spring' 카테고리의 다른 글
[Spring/스프링] 롤링페이퍼(게시판) 프로젝트 0. 프로젝트 설명 (0) | 2022.03.22 |
---|---|
[Spring/스프링] AOP(Aspect Oriented Programming) 이해하기 (0) | 2022.03.06 |
[Spring/스프링] Persistence Layer를 위한 JDBC, JPA (0) | 2022.03.06 |
[Spring/스프링] MVC와 템플릿엔진 (0) | 2022.02.26 |
[Spring/스프링] 정적 컨텐츠 (Static Content) (0) | 2022.02.26 |