1. 이론
1-1. Framework
- 뼈대나 근간을 이루는 코드들의 묶음
- 프로그램의 기본 흐름이나 구조를 정하고, 이 구조에 자신의 코드를 추가하는 방식으로 개발하는 프로그래밍 기본 틀
- 즉, 개발에 필요한 구조가 제공되고, 그 구조에 필요한 부분을 조립하는 형태로 개발이 진행된다.
1-2. 라이브러리
라이브러리란, 자주 사용되는 로직을 재사용하기 편리하도록 잘 정리한 일련의 코드들의 집합이다.
1-3. 프레임워크 vs 라이브러리
- 프레임워크는 자동차 프레임, 즉 기본적으로 구성된 뼈대를 말한다.
- 라이브러리는 자동차의 기능을 하는 부품을 의미한다.
- 한 번 정해진 자동차의 프레임은 바꿀 수 없다.
- 즉, 소형차를 만들기 위한 뼈대로 SUV를 만들 수는 없다.(프레임워크)
- 그러나 바퀴나 선루프, 헤드라이트 등은 비교적 다른 종류로 쉽게 바꿀 수 있다.(라이브러리)
1-4. Spring이란?
스프링 프레임워크는 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로써, 간단히 Spring이라 부른다.
동적인 웹사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있다.
1-5. Spring Boot
스프링 프레임워크는 기능이 많아 환경설정이 복잡한 편이다. 이를 쉽게 만드는 것이 바로 스프링 부트이다.
- Embed Tomcat을 사용하기 때문에 따로 Tomcat을 설치하거나 매번 버전 관리해 주어야 하는 수고로움을 덜어준다.
- starter를 통한 dependency 자동화
스프링에서는 각각의 dependency들의 호환되는 버전을 일일이 맞추어 주어야 했고, 때문에 하나의 버전을 올리면 다른 dependency에 까지 영향을 미쳐 version 관리에 어려움이 많았다. 하지만 스프링 부트에서는 starter가 대부분의 dependency를 관리해주기 때문에 이러한 걱정을 덜게 되었다. - XML 설정을 하지 않아도 된다.
- jar 파일을 이용해 자바 옵션만으로 손쉽게 배포가 가능하다.
- Spring Actuator를 이용한 애플리케이션 모니터링과 관리를 제공한다.
2. 환경설정
- STS3
- 설치 시 java 11이 필요하기 때문에 다운로드 - java 8
2-1. 프로젝트 생성
- Project : 사용할 필드 툴 선택(Maven/Gradle)
- Maven, Gradle은 프로젝트 의존성을 관리하는 빌드 라이프사이클을 관리해주는 툴이다.
- 과거에는 Maven을, 최근에는 Gradle을 사용한다. - Spring Boot 버전 선택
- SNAPSHOT이 붙은 것은 현재 개발 중인 버전
- M(Minor)은 정식 릴리즈 되지 않은 버전
- 아무것도 붙어있지 않은 것은 정식 릴리즈된 버전. 따라서 정식 릴리즈 된 버전 중 가장 최신 버전을 선택한다. - Project Metadata : 정보
- Group은 기업의 도메인
- Artifact는 비리드 결과물, 프로젝트 명
- 위 두 개를 설정하면 패키지 명이 자동으로 설정된다. - Packaging
- JSP 때는 War를 사용했지만, Spring Boot에서는 Jar를 사용한다. - Dependencies
- 기본적으로 Spring Web과 Thymeleaf를 선택해준다. - Generate 버튼 혹은 Ctrl+Enter를 하면 현재 설정을 기반으로 한 프로젝트 압축 파일이 다운로드 된다.
2-2. STS에 프로젝트 불러오기
- 생성된 파일을 STS 워크스페이스로 불러온 뒤 압축을 풀어준다.
- STS 실행 후 Package Explorer에서 마우스 우클릭 후 import 클릭
- import 창에서 Gradle 폴더 안 Existing Gradle Project 클릭
- Next > 클릭 후 압축 파일을 풀어준 폴더 선택한 뒤 Finish 클릭
- 프로젝트 생성 시, 톰캣이 내장되어 있기 때문에 서버에 자동으로 추가된다.
2-3. application.properties
애플리케이션에서 사용하는 여러 가지 설정 값들을 애플리케이션의 밖이나 안에 정의할 수 있는 파일이다.
스프링 부트가 애플리케이션을 구동할 때 자동으로 로딩되는 파일로, key-value 형식으로 값을 정의하면 애플리케이션에서 참조하여 사용할 수 있다.
▶ #을 달아 주석처리가 가능하다.
▶ 포트 설정, 인코딩 설정, dbms 연결 등을 하는 곳이다.
▶ 한글이 깨지면 'Properties'에 들어가 UTF-8로 설정해준다.
2-4. build.gradle
▶ 프로젝트를 생성하면서 우리가 설정했던 사항이 들어가 있다.
▶ 다른 기능을 추가하고 싶을 때는 dependencies{} 안에 추가해주면 된다.
3. Welcome Page
스프링부트에서는 static 폴더 안의 index.html이 로컬주소를 주소창에 넣었을 때 처음으로 뜨는 웰컴페이지이다.
[출력 결과]
4. DispatcherServlet
- 스프링 MVC도 프론트 컨트롤러 패턴으로 구현되어 있다.
- 스프링 MVC의 프론트 컨트롤러가 바로 디스패처 서블릿이다.
- 그리고 이 디스패처 서블릿이 스프링 MVC의 핵심이다.
- DispatcherServlet -> FrameworkServlet -> HttpServletBean -> HttpServlet
4-1. HTTP 요청 및 응답 흐름
1) 핸들러 조회 : 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러(컨트롤러)를 조회한다.
2) 핸들러 어댑터 조회 : 핸들러를 실행할 수 있는 핸들러 어댑터를 조회한다.
3) 핸들러 어댑터 실행 : 핸들러 어댑터 실행
4) 핸들러 실행 : 핸들러 어댑터가 실제 핸들러를 실행한다.
5) ModelAndView 반환 : 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변환해서 반환한다.
6) ViewResolver 호출 : 뷰 리졸버를 찾고 실행한다.
7) View 반환 : 뷰 리졸버에서 뷰의 논리 이름을 물리 이름으로 바꾸고, 랜더링 역할을 담당하는 뷰 객체를 반환한다.
8) 뷰 렌더링 : 뷰를 통해서 뷰를 렌더링한다.
5. 예제 코드
< index.html 링크 클릭 시 해당 페이지 불러오기 >
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="/hello">hello</a>
</body>
</html>
HelloController.java
@Controller
public class HelloContrller {
@GetMapping("hello")
public String hello(Model model) {
model.addAttribute("data", "new springboot!!");
return "hello";
}
- @Controller
- Controller 클래스에는 @Controller가 필요(import 필수)
- Controller에서 해당 mapping URL을 찾아 연결해준다. - @GetMapping
- get 방식의 요청 mapping(import 필수) - Model은 일종의 데이터 담는 형식(import 필수, 나중에 더 자세히 배울 예정)
- .addAttribute("key", "value")를 통해 데이터를 담아 전달할 수 있다. - "hello"를 return 시, templates/hello.html로 자동으로 매핑된다.
즉, 컨트롤러에서 리턴 값으로 문자를 반환하면 뷰리졸버(ViewResolver)가 화면을 찾아서 처리한다.
스프링 부트는 기본 viewName을 매핑해준다.
resources : templates/ + {viewName} + .html
hello.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<p th:text="'/Hello.' + ${data}">Hello Spring Boot</p>
</body>
</html>
- 타임리프(thymeleaf)를 사용하기 위해서는 <html xmlns:th="http://www.thymeleaf.org">을 html태그에 넣어준다.
- 타임리프는 th:로 시작한다.
- ${data}에 HelloControler.java에서 넣어준 data를 가져온다. 출력 시 /Hello. new Springboot!!
- 위와 같이 코드를 작성함으로써, 프론트단 작업 화면과 개발자 화면을 분리해서(?) 볼 수 있다.
http://localhost:9999/hello
file:///D:/0900_GB_KMoon/spring/workspace/test/src/main/resources/templates/hello.html
'이론 > 자바 풀스택 국비수업' 카테고리의 다른 글
0713 Spring Boot 3 (0) | 2022.07.22 |
---|---|
0712 Spring Boot 2 (0) | 2022.07.22 |
220523 jQuery 5 (0) | 2022.07.17 |
220519 jQuery 4 (0) | 2022.07.13 |
220519 jQuery 3 (0) | 2022.07.07 |