일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- nginx
- 스프링 이미지
- 자바
- 스프링오류
- 대규모 트래픽
- nestjs
- 예외필터
- 스프링
- Mysql이미지
- JavaScript
- 스프링기초
- 3WayHandshake
- 분산시스템
- Jenkins
- 예외 핸들링
- 예외 커스텀
- 트러블슈팅
- nestjs 예외
- nodejs
- docker
- connection reset by peer
- 동시성 문제
- 토스팀
- 동시성문제
- 토스책
- 스프링jpa
- 유난한 도전
- OS
- 스프링Entity
- 동시성 제어
- Today
- Total
삽질블로그
스프링 기초 본문
스프링은 크게 세 가지로 구분된다.
1. 정적 컨텐츠
2. 스프링 MVC와 템플릿 엔진
3. API
1. 정적 컨텐츠란
쉽게말해서 정적인 페이지를 보여준다.
그냥 정보성 페이지를 전달하기 위해 만들 때 사용하는 것 같다.
프론트 코드 작성은 스프링 프로젝트 안의 resources/static/ 의 경로에서 한다.
정적컨텐츠는 관련 컨트롤러가 없기 때문에 요청이 들어온다면
스프링에서 바로 웹 브라우저로 페이지를 응답해준다.
2. 스프링 MVC와 템플릿 엔진이란(model, view, controller)
모델과 뷰 컨트롤러를 각각 분리해서 사용을 한다.
Controller에선 @Controller 어노테이션을 사용해줘야 한다.
@Controller 어노테이션은 해당 클래스를 컨테이너에 Bean으로 등록해주며 Controller로 사용된다는 것을 알려준다.
@Controller
public class HelloController {
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
}
GetMapping을 통해 localhost:8080/hello-mvc 요청이 들어오면 아래 함수를 실행해준다고 생각하면 된다.
@RequestParam 어노테이션을 통해 외부에서 파라미터를 받으며, Model을 통해 model 객체를 만든다.(스프링에서 만들어줌)
model.addAttribute을 통해 key value 형식을 만들어준다.
model.addAttribute("name", name); 에서 "name"이 key, name이 value값이다.
Controller에서 "hello-template"를 리턴 시키면 스프링에서 viewResolver가 동작을 하는데,
viewResolver는 view를 찾아주고 템플릿 엔진을 연결시켜주는 역할을 한다.
따라서 viewResolver가 template/hello-template.html 파일을 찾아서 렌더링을 한 다음 변환을 해서 웹 브라우저로 넘긴다.
정적 컨텐츠와의 차이점은 변환에서 있다.
정적 컨텐츠는 말 그대로 화면을 보여주기만 하기 때문에 변환해서 보여주지 않지만
템플릿 엔진을 통한다면 viewResolver가 파일을 찾아서 렌더링을 한 다음 변환을 해서 웹 브라우저로 넘긴다.
3. API
마지막으로 API를 살펴보자
@Controller
public class HelloController {
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
}
}
스프링에서 API를 사용하기 위해서는 @ResponseBody를 통해 데이터(Json 형식)를 전달하는 방식을 사용한다.
@GetMapping 밑에 @ResponseBody 어노테이션을 사용하기도 하지만,
@RestController
public class HelloController {
@GetMapping("hello-string")
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
}
}
찾아보니 @RestController(@Controller + @ResponseBody)로 묶어서 사용해도 된다고 한다.
위 코드는 스트링을 반환하는데, 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;
}
static class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
API는
HTTP의 BODY에 문자 내용을 직접 반환
viewResolver 대신에 HttpMessageConverter 가 동작
기본 문자처리: StringHttpMessageConverter
기본 객체처리: MappingJackson2HttpMessageConverter
byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음
이런 특징들이 있다.
내가 정리하면서 느끼기에 템플릿 엔진과의 눈에 띄는 차이점은 viewResolver가 아닌 HttpMessageConverter를 사용하는 것 같다.
Jackson은 객체를 Json데이터로 변환해주는 대표적인 라이브러리이다.
구글에서 만든 Gson도 있다.
참고자료 : 인프런 - 스프링 입문 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
※ 틀리거나 이상한 부분이 있으면 댓글 달아주시면 감사하겠습니다.
'자바스프링' 카테고리의 다른 글
스프링 컴포넌트 스캔 @Conponent, @Controller, @Service, @Repository, Autowired 어노테이션 (0) | 2022.09.26 |
---|---|
회원관리 예제 Test코드 작성 (0) | 2022.09.25 |
스프링 회원관리 예제 (0) | 2022.09.25 |
[Android] 자바 스프링으로 이미지 Mysql에 전송 및 저장하기 (2) (0) | 2022.09.18 |
[Android] 자바 스프링으로 이미지 Mysql에 전송 및 저장하기 (1) (0) | 2022.09.16 |