스프링 공부/인프런 김영한 스프링 입문 노트정리

2-3. API

모항 2022. 7. 25. 21:58

세 번째는 API다!

프로젝트 팀에서 API 방식으로 개발을 할 것 같아 빨리 배우고 싶었는데 드디어 처음으로 살펴보는 순간이 왔다.

 

 

 

@ResponseBody

저번에 @GetMapping라는 참조(annotation)를 새로 배웠다면, 이번에는 @ResponseBody가 새로 등장했다.

(복습: @GetMapping은 URL과 컨트롤러(함수)를 이어주는 연결고리였다.)

 

@ResponseBody에서의 Body는 html 태그의 그 body가 아니다.

HTTP 통신에서 요청과 응답을 위해 주고받는 메시지에는 헤더와 바디가 있다.

이 HTTP 응답/요청 메시지의 바디 영역에 @ResponseBody 이하의 함수가 리턴하는 값 그 자체를 넣어주겠다는 선언이 바로 @ResponseBody 참조이다.

 

그래서 따로 html 파일을 아예 만들지 않는다! View를 안 쓴다는 것이다!

이전에 html 파일을 사용하던 것과 비슷한 효과를 보려면 html 내용 전체를 리턴 값으로 지정하면 된다.

 

 

 

 

@ResponseBody 문자 반환 실습

 

먼저 함수가 문자열을 반환하는 경우의 실습을 진행했다.

아까부터 쓰던 그 Controller 클래스 내에 함수를 새로 만든다.

매우 간단하다.

모델도 사용하지 않고, 그냥 브라우저에서 받아온 매개변수 값을 가져다가 리턴값에 반영하면 끝이다.

 

main을 실행하고 브라우저에서 접속해본다

매개변수 name으로 "mo"를 전달해주니, 화면에 hello mo가 출력된다.

 

페이지 소스 보기를 해보면

 

일반적인 사이트와 달리 그 어떤 html 태그도 없이 달랑 "hello mo" 만 있다.

 

 

MVC-ex와 비교해보자.

MVC와 템플릿 엔진으로 구현한 페이지에서도 name 값을 "mo"로 전달하면 똑같이 hello mo가 표시된다.

 

하지만 페이지의 소스코드는 다르다.

 

MVC-ex 페이지는 이렇게 생긴 html 파일을 만들어놓고  <p> 태그의 컨텐츠를 바꿔끼우는 방식으로 구현했기 때문이다. 그래서 이 MVC-ex 페이지의 소스코드에는 html 태그들이 존재한다.

 

 

 

 

 

@ResponseBody 객체 반환 실습

 

이 객체 반환 방식이 API를 이용한 코딩의 핵심이라고 한다!

 

 

일단 클래스부터 정의해준다.

더보기

컨트롤러 클래스 내에 클래스를 하나 더 만들면 된다. 지금까지 왜 클래스 내에 클래스를 또 만들어본 적이 없었지...? 무의식적으로 항상 Main 클래스 바깥에 만들었었는데 내부에 만들어도 된다고 한다. (외부클래스).(내부클래스)로 조회할 수 있다고 한다.

여기서 겁나 편리한 IntelliJ의 기능을 하나 알려주셨다.

함수가 필요한 자리에 마우스 오른쪽 버튼을 누르고 Generate를 선택하면 

 

Java에서 흔하게 쓰는 기본적인 함수들이 뜬다...

IntelliJ에는 여기 있는 기본적인 메소드들을 알아서 뿅 하고 만들어주는 기능이 있는 것이다 ㄴㅇㄱ 세상에

 

이렇게 뜨는 창에서 메소드에 대한 몇 가지 설정을 해주고 OK를 누르면

 

내가 지겹게 손으로 써넣었던 getName과 setName이 클릭 한 번에 생겨버린다.

Eclipse 너는 좀 반성해라. 너도 이런 기능 있니? 그럼 미안하고

 

그 다음으로 함수를 작성해준다.

Hello 객체를 생성하고, 브라우저에서 받아온 파라미터값을 객체의 name 값으로 넣어주고, 객체 자체를 리턴하면 된다.

이번에도 html 파일은 필요 없다.

 

이제 브라우저에서 실행해본다.

객체 안에 들어있는 필드의 필드명과 값이 화면에 표시된다.

 

검사해보면 이것만 달랑 소스코드로 들어가있다.

 

이렇게 객체를 전달해서 프론트엔드 및 앱 개발자와 데이터를 주고받을 수 있나 보다.

 

 

 

 

 

 JSON

API 방식 웹 개발을 위해 객체를 전달하면 위 캡처에서 보이듯이

 

Key : Value

 

의 형태로 데이터가 전달된다.

이것은 기본적으로 JSON이라는 형식으로 데이터가 전달되도록 되어있기 때문이다.

 

JSON은 Key와 Value의 쌍으로 이루어진 데이터를 전달하는 데 사용하는 포맷이다.

 

이전에는 html과 유사한 형태인 xml로 데이터를 전달하는 경우도 많았는데,

JSON이 훨씬 더 가볍고 편리하기 때문에 요즘은 JSON을 사용하는 것이 일반적이라 한다.