처음 Spring 세팅할 때 controller, service 같은 패키지들 TestApplication이랑 같은 경로에 있어야 한다.
@RequestMapping, @GetMapping, @PostMapping 차이
ex)
@RequestMapping(value="경로", method=RequestMethod.GET)
@RequestMapping(value="경로", method=RequestMethod.POST)
----------------------------------------------------------------------------
ex)
@GetMapping("경로")
@PostMapping("경로")
위와 같이 RequestMapping을 사용하는 것보다 GetMapping, PostMapping을 사용하는 것이 코드가 줄어들고 직관적으로 Get을 하는지 Post를 하는지 구분할 수 있다.
@RequiredArgsConstructor : 사용하면 생성자 사용 가능
타임리프(Thymeleaf)이란?
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=bgpoilkj&logNo=221982228705
타임리프는 흔히 View Template(뷰 템플릿)이라고 부르며 뷰 템플릿은 컨트롤러가 전달하는 데이터를(html 태그) 이용하여 동적으로 화면을 구성할 수 있게 해준다.
특징
- 타임리프는 서버 사이드 HTML을 렌더링한다
- 백엔드 서버에서 HTML을 동적으로 랜더링 처리해준다.
- 타임리프는 네츄럴 템플릿이다
- 타임리프는 th속성을 알고, HTML은 th 속성을 모른다. 따라서 HTML은 타임리프의 th 속성을 무시해서, 순수 HTML파일만 열어도 잘 열린다.
- 타임리프는 HTML을 유지하기 때문에 웹 브라우저에서 파일을 직접 열어도 내용 확인이 가능하다. 서버를 거쳐서 뷰 탬플릿을 거치면 동적으로 변경된 결과를 확인할 수 있다.
- JSP는 이와 대조적으로 소스보기 사용 시, JSP코드 + HTML코드가 섞여있다. (Spring boot에서는 JSP를 사용하지 않고 Thymeleaf를 사용한다.)
타임리프 문법 참고
Spring Boot에서 JSP사용을 권장하지 않는 이유
우선 JSP를 사용하면 JAR 패키징을 할 수 없어 WAR 패키징을 해야 한다.
물론, WAR 패키징으로도 임베디드 톰켓으로 실행할 수 있고 배포도 가능하다. 하지만 Undertow라는 최근에 만들어진 서블릿 엔진이 JSP를 지원하지 않는 제약사항도 생겼다. 그리고 JSP는 의존성에도 문제가 있다. 이런 이유들로 JSP를 쓰지 않는 것이다. -> 한 마디로 따로 설정하기 귀찮고 제약사항, 의존성과 같은 문제들도 존재하기 때문이다.
물론 사용은 가능! 근데 쓰지말자...
MyBatis이란?
Java Object와 SQL문 사이의 자동 Mapping 기능을 지원하는 ORM(Object Relational Mapping) Framework이다.
MyBatis의 특징
- MyBatis는 SQL을 별도 파일로 분리해서 관리한다. → SQL문을 xml파일로 만든다.
- Object와 SQl 사이의 Parameter Mapping 작업을 자동으로 한다.
- MyBatis는 개발자가 익숙한 SQL을 그대로 사용하면서 JDBC 코드 작성(드라이버 불러오는 등)의 불편함을 제거한다.

이와같이 코드딴에서 SQL을 작성해 이를 이용하여 DB에 있는 데이터를 불러와 사용할 수 있다.
MyBatis참고
https://developer111.tistory.com/10
MyBatis구조 참고
MVC패턴이란?
MVC (model-view-controller)는 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴이다.
MVC 소프트웨어 디자인 패턴의 세 가지 부분은 다음과 같이 설명할 수 있습니다.
- 모델(Model): 데이터와 비즈니스 로직을 관리합니다.
- 뷰(View): 레이아웃과 화면을 처리합니다.
- 컨트롤러(Controller): 명령을 모델과 뷰 부분으로 라우팅합니다.

모델(Model)
모델은 앱이 포함해야할 데이터가 무엇인지를 정의합니다. 데이터의 상태가 변경되면 모델을 일반적으로 뷰에게 알리며(따라서 필요한대로 화면을 변경할 수 있습니다) 가끔 컨트롤러에게 알리기도 합니다(업데이트된 뷰를 제거하기 위해 다른 로직이 필요한 경우).
다시 쇼핑 리스트 앱으로 돌아가서, 모델은 리스트 항목이 포함해야 하는 데이터 — 품목, 가격, 등. — 와 이미 존재하는 리스트 항목이 무엇인지를 지정합니다.
뷰(View)
뷰는 앱의 데이터를 보여주는 방식을 정의합니다.
쇼핑 리스트 앱에서, 뷰는 항목이 사용자에게 보여지는 방식을 정의하며, 표시할 데이터를 모델로부터 받습니다.
컨트롤러(Controller)
컨트롤러는 앱의 사용자로부터의 입력에 대한 응답으로 모델 및/또는 뷰를 업데이트하는 로직을 포함합니다.
예를 들어보면, 쇼핑 리스트는 항목을 추가하거나 제거할 수 있게 해주는 입력 폼과 버튼을 갖습니다. 이러한 액션들은 모델이 업데이트되는 것이므로 입력이 컨트롤러에게 전송되고, 모델을 적당하게 처리한다음, 업데이트된 데이터를 뷰로 전송합니다.
단순히 데이터를 다른 형태로 나타내기 위해 뷰를 업데이트하고 싶을 수도 있습니다(예를 들면, 항목을 알파벳순서로 정렬한다거나, 가격이 낮은 순서 또는 높은 순서로 정렬). 이런 경우에 컨트롤러는 모델을 업데이트할 필요 없이 바로 처리할 수 있습니다.
XML파일
Extensible Markup Language 파일로 데이터의 이동, 구조 및 저장을 설명하는 것을 제외하고는 아무것도 하지 않는 일반 텍스트 파일 입니다.
bootstrap 참고
JUnit 참고
https://beomseok95.tistory.com/205
Interceptor
Spring에서 Client에서 Server로 들어온 Request객체를, Controller의 Handler로 도달하기 전에 가로채 원하는 추가 작업이나 로직을 수행 한 후 Handler로 부낼 수 있도록 해주는 Module이다.

'Develop > Spring' 카테고리의 다른 글
| '코드로 배우는 스프링 웹 프로젝트' 정리(Controller) (0) | 2022.06.23 |
|---|---|
| Springboot, Spring 개념정리 3 (0) | 2022.03.22 |
| Springboot, Spring 개념정리 2 (0) | 2022.03.22 |
| Springboot, Spring 개념정리 1 (0) | 2022.03.22 |
| Spring 웹 개발 기초 (0) | 2022.03.22 |