* 인프런 김영한님의 '스프링 입문' 강의를 듣고 작성한 내용입니다! (https://inf.run/txXC)
* IDE : IntelliJ (Eclipase 도 가능하지만 인텔리제이 추천!) (intelliJ 설치 참고 블로그 : https://goddaehee.tistory.com/195)
* Java 11 설치 (Windows Java 11 설치 참고 블로그 : https://programmer-ririhan.tistory.com/118)
* 정적컨텐츠
- 서버에서 하는일 없이 그냥 파일만 띄워주는 것이다
- src-java-resources-static 폴더 밑에 html을 생성하면 된다
- 만약 hello-static.html을 작성했다면, localhost:8080/hello-static.html 로 접속하면 html파일을 띄운다
- 동작원리 : localhost:8080/hello-static.html 접속 -> tomcat 서버가 hello-static.html 관련 controller가 있는지 확인한다 -> 없으면 static 폴더 밑의 파일을 가져와서 웹브라우저에 띄운다
* MVC와 템플릿 엔진
- html을 서버에서 동적으로 바꿔서 띄워주는 것이다 (Controller, Model, View 필요)
- controller 코드 (Welcomepage 만들기 포스트의 HelloController class안에 추가되는 코드이다)
// MVC
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam(value = "name", required = false) String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
- GetMapping annotation을 붙였으므로 localhost:8080/hello-mvc url에 접근하면 template 폴더 안의 hello-template.html을 띄우라는 뜻이다
- @RequestParam은 get방식으로 파라미터를 전송한다는 뜻이다 (localhost:8080/hello-mvc?name=youjin 이런식으로)
- required = false 이므로 파라미터를 넣어주지 않아도 동작한다는 뜻이다 (만약 true이면 localhost:8080/hello-mvc에 접속하면 오류가 발생한다)
- 파라미터로 받은 name을 model attribute에 저장해준다
- hello-template.html 코드 (src-main-resources-template-hello-template.html)
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>
- Controller에서 name을 파라미터로 받은 value로 매핑시켰기 때문에 파라미터로 들어온 값이 ${name}에 들어간다
- 파라미터를 넣어주지 않으면 hello null 이 뜬다
- 동작원리 : localhost:8080/hello-mvc 접속 -> tomcat 서버가 hello-template 관련 controller가 있는지 확인한다 -> 컨트롤러가 존재한다 -> 템플릿 엔진 처리를 해서(타임리프를 사용하므로) 변환된 html 파일을 웹 브라우저에 띄워준다
* API
- json 데이터 형식으로 넘겨주는 것이다
* API - 문자열 반환
- controller 코드 (HelloController class안에 추가)
// API - 문자열 반환하기
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name; // view 없이 이 문자가 그대로
}
- @ResponseBody annotation을 붙여준다 : 이것을 붙여주면 viewResolver를 사용하지 않는다
- 대신 http body에 문자열을 그대로 반환한다
- 만약 locallhost:8080/hello-string?name=youjin 으로 접속하면 hello youjin 문자열이 그대로 띄워진다
* API - 객체 반환
- controller 코드 (HelloController class안에 추가)
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
Hello hello = new Hello();
hello.setName(name);
return hello; // 객체를 반환하고 @ResponseBody를 해놓는다 - 기본으로 json객체 반환(default)
}
static class Hello { // Class 안에 Class 가능 (HelloController.Hello)
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
- 이번에는 hello 객체를 반환한다
- Hello class에서 name은 private 이기 때문에 getter, setter가 필요하다
이때 private String name; 을 타이핑하고, alt + insert 단축키로 getter, setter을 바로 생성할 수 있다
- 파라미터로 받은 name을 hello.setName으로 넣어준다
- return hello 해주면 json 객체를 반환한다
- 동작원리 : localhost:8080/hello-api 접속 -> hello-api 관련 controller 확인 -> @ResponseBody annotation이 있으므로 viewResolver 대신 HttpMessageConverter가 동작한다
'개발 > Spring' 카테고리의 다른 글
[스프링 입문] 스프링 회원관리 예제 - 2. 회원 도메인, 레포지토리 만들기 (0) | 2021.06.29 |
---|---|
[스프링 입문] 스프링 회원관리 예제 - 1. 비즈니스 요구사항 정리 (0) | 2021.06.29 |
[스프링 입문] 스프링 빌드하고 실행하기 (0) | 2021.06.29 |
[스프링 입문] 스프링 Welcome Page 만들기 (0) | 2021.06.29 |
[스프링 입문] 스프링 프로젝트 환경설정 (0) | 2021.06.29 |