이번 방학 본격적으로 시작한 스프링 공부
인프런 김영한 스프링 완전정복 로드맵으로 본격적으로 공부를 진행할 계획이다.
매번 강의를 듣고 관련 회차의 내용, 질문을 정리하고 답을 찾아서 정리할 계획이다.
해당 정리는 인프런 김영한님의 강의자료를 참고해서올림
환경
- JAVA 17 (File -> Project Structure(ctrl + alt + shift + S)에서 JDK버전 설정
- IDE : Intellij
스프링 프로젝트 생성 : 현업에서도 대부분 스프링 프로젝트는 해당 사이트에서 만든다고 한다.
Spring Boot 버전중 snapshot등 정식 출시가 되지 않은 버전을 제외하고 최신 버전을 선택하면 되는데 3.0이상 부터는 설정을 반드시 바꾸고 들어야한다. 해당 내용들이 강의록 초안엔 나와있지만, 세부사항엔 공지되어 있지 않아 중간에 설정을 여러번 바꿔줬다.
1. java17이상
2. javax -> jakarta : 이는 인텔리제이에서 import할때 알아서 반영한다.
3.H2 DB 2.1.214이상 (현재 최신버전을 사용하면 된다.)
빠른 실행을 위한 자바 직접 실행 File -> Setting 에서 Build and run using, Run tests using을 IntelliJ IDEA로 바꿔주면 상대적으로 빠른 실행 속도를 얻을 수 있다.
*윈도우 단축키 확인 법 Ctrl + Alt + Shift + T을 활용해서 단축키를 적절히 찾아주도록 하자. 강의에선 맥으로 진행을 하기때문에 이 기능을 활용해 강사님이 말하는 기능의 단축키를 따라 수업을 따라가자.
라이브러리
build.gradle에 여러 의존관계(dependencies)가 있는데 이들을 추가해주고 꼭 Refresh(download)해서 사용해주도록 하자.
*Spring-boot-starter-web
tomcat,webMVC, thymeleaf,....
welcome page : 어디 사이트에 있다ㅡㄴㄴ데.. 나는 못찾았다. 그냥 강의 pdf활용했음.
static/index.html을 올려두면 스프링 컨테이너가 관련 url..?이 없을때 이를 리턴한다고 한다.
Thymeleaf 템플릿 엔진 : 하는일이 뭐지? 공부할것
Controller가 제공하는 데이터를 동적으로 보여주는 view template의 역할
아래 코드를 보면 xmlns:th = "http://www.thymeleaf.org"를 넣어준다. 이러면 이 문서는 타임리프를 사용하겠다는 의미이다.
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<p th:text="'안녕하세요. ' + ${data}">안녕하세요. 손님</p>
</body>
</html>
<p th:text="'안녕하세요. ' + ${data}">안녕하세요. 손님</p> 이면 해당 model에서의 데이터를 가져온다.
(안녕하세요. 손님 -> 서버에서 그냥 데이터 없이 올때 나타내는 default값으로 판단)
@Controller
public class HelloController{
@GetMapping("Hello")
public String Hello(Model model){
mode.addAttribute("data","hello!!"); // <key : value>형식으로 model객체 안에 삽입
return "hello" // hello.html로 이동
}
}
return "hello" : resources/templates에서 'hello'관련 파일을 찾으라고 viewResolver에게 요청
참고 : spring-boot-devtools 라이브러리 추가시 html파일을 컴파일만 해주면 서버를 재시작할 필요 없이 view 파일 변경이 가능하다고 한다. ( 추후 검색 공부 )
Windows에서 GItbash 터미널 활용하
스프링 웹 개발 기초
-정적 컨텐츠
-MVC와 템플릿 엔진
-API
1. 정적 컨텐츠
스프링 컨테이너에서 관련 컨트롤러를 찾아본다.
관련 컨트롤러가 없다면 resources/static/에 있는 html을 그냥 가져다 반환한다.
2.MVC와 템플릿 엔진
MVC란? Model, View, Controller
*Model
필요한 내용, 데이터를 model에 담아서 활용
*View
화면을 그리는 역할 - > html 파일이 그 예시이다.
*Controller
비즈니스 로직을 담당하는 역할
- 이 경우 스프링 컨테이너에서 컨트롤러에게 요청을 보내면 컨트롤러는 return값으로 해당 html파일을 찾기위해 viewResolver에게 요청을 보내고 이를 Thymeleaf 템플릿 엔진 처리를 통해 해결한다.
3. API
viewResolver를 사용하지 않음. 대신 @ResponseBody를 활용함.
@Controller
public class HelloController{
@GetMapping("hello")
@ResponseBody
public String helloString(@RequestParam("name") String name){
return "hello" + name;
}
}
viewResolver를 사용하지 않기 때문에 html 템플릿을 찾아주는 것이 아님. 대신 http의 body에 문자 내용을 직접 반환함.
따라서, model 대신 변수를 전해줄 @RequestParam을 설정해줘야함.
페이지 소스 보기를 하면 htmlbody가 아닌 그냥.. 다르게 나와있더라.
객체 반환 또한 해줄 수 있음. 해당 객체는 json으로 변환됨 ( key / value )
*json 관련 공부
http://www.tcpschool.com/json/json_basic_structure
@Controller
public class HelloController {
@GetMapping("hello")
public String hello(Model model){
model.addAttribute("data","Hello!!");
return "hello";
}
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model){
model.addAttribute("name",name);
return "hello-template";
}
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name){
return "hello "+name;
}
@GetMapping("hello-api") // 모델에 name을 설정해주고 모델 자체를 반환
@ResponseBody
public Hello HelloApi(@RequestParam("name") String name){
Hello hello = new Hello();
hello.setName(name);
return hello;
}
static class Hello{ // class를 직접 생성
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
viewResolver 대신 HttpMessageConverter가 동작함.
'BE > Spring - Inflearn 김영한' 카테고리의 다른 글
스프링 핵심 원리 - 기본편 1 (0) | 2023.03.16 |
---|---|
Spring 입문 인프런(무료강의) 김영한5 - DB접근 기술 (0) | 2023.03.13 |
Spring 입문 인프런(무료강의) 김영한4 (0) | 2023.03.10 |
Spring 입문 인프런(무료강의) 김영한3 (0) | 2023.03.10 |
Spring 입문 인프런(무료강의) 김영한2 (0) | 2023.03.10 |