웹 개발 방식 - ③ Spring API개발
1. 정적 컨텐츠 : 파일을 그대로 웹브라우저로 내리는 방식
2. MVC와 템플릿 엔진 : 서버에서 HTML을 변형시켜서 내려주는 방식
* MVC= Model, View, Controller
3. API : .json 데이터 포맷으로 클라이언트(IOS, Android, Vue, React...)와 데이터를 주고 받는 방식
API는 View없이 HTTP의 Message Converter를 이용하여 response body에 json 스타일로 객체를 반환하는 방식이다. 즉 데이터를 있는 그대로 내려주는 방식으로 페이지 소스 보기(Ctrl + U)하면 HTML 태그가 없는 것을 확인할 수 있다.
@Responsebody 어노테이션을 추가해주고, @GetMapping으로 "hello-api" 경로에 맵핑되는 helloApi 메서드를 작성하자.
helloApi메서드를 작성하기 전에 정적(static) 클래스 Hello를 작성하자.
private로 name 선언해주고, 해당 name에 대한 getter, setter 메서드도 작성한다(property 방식).
helloApi메서드로 돌아와서, Hello클래스의 객체 hello를 선언해주고, setName 메서드의 parameter로 @Requestparam의 name을 추가한다. 이 후 hello를 return하도록 하자.

실행하게되면 다음과 같다.

json형식으로 나타나고, Hello 클래스의 private name에 해당하는 값인 ryogaeng!이 나타나는 것을 확인할 수 있다.
MVC패턴과 같이 <>태그를 사용하여 html 페이지(View)를 넘기는 것을 xml 방식이라하고,
위와 같이 객체 Response Body로 반환하는 형태 (json형식)를 API라 한다.

<동작 원리>
1. 웹 브라우저의 localhost:8080/hello-api로 검색.
2. 내장 톰캣 서버에서 helloController가 @ResponseBody 어노테이션이 달린 helloApi 메서드를 실행하여 hello 객체를 return한다.
3. 이 때 MVC와 다르게 viewResolver 대신에 HttpMessageConverter가 동작하여 메서드 내 객체 존재를 확인하고, JsonConverter를 실행한다.
- 기본 문자열 처리의 경우 : StringMessageConverter가 동작
- 기본 객체 처리의 경우 : MappingJackson2HttpMessageConverter가 동작
4. JsonConverter를 통해 json 객체로 변환한 후 요청한 서버 혹은 웹 브라우저로 넘긴다.
<번외>
* getter / setter를 사용하는 이유?
: 객체의 무결성을 보장하기 위해서 (= 클래스의 필드에 직접 접근하는 것을 막기위해)
- 무결성 : 데이터의 정확성과 일관성을 유지하고 보증하는 것
이는 이론적인 내용이다.
보다 직관적이게 얘기하자면
객체의 데이터를 외부에서 마음대로 접근하지 못하게하고,
객체의 데이터를 메소드를 통해서만 변경하게끔 하려는 것이다.
* getter / setter 메서드 선언 방식
getter:getFieldName()
- 접근 제한자 : public
- return 타입 : 필드의 return 타입
- 메서드 이름 : get + 필드 이름 (첫문자는 대문자)
- return 값 : 필드 값
setter : setFieldName (타입 fieldName)
- 접근 제한자 : public
- return 타입 : void
- 메서드 이름 : get + 필드 이름 (첫문자는 대문자)
- parameter 타입 : 필드 타입