본문 바로가기

Advance I/Spring

22.04.19 :: 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

스프링 기술 그 자체에 매몰되기 보다 어떻게 사용해야 하는지에 초점을 맞출 것

처음부터 끝까지 직접 코딩

 

<스프링 완전 정복 로드맵>

-스프링 입문

-스프링 핵심 원리

-스프링 웹 MVC

-스프링 DB 데이터 접근 기술

-실전! 스프링 부트

 

1. 스프링 프로젝트 생성

 : 스프링 부트 기반으로 프로젝트를 만들어주는 사이트. Spring initializr https://start.spring.io

최근 사용 추세: Maven Project < Gradle Project

필요한 라이브러리를 import하고 빌드의 lifecycle을 관리해주는 tool

어떤 라이브러리를 사용할 것인지 지정

Template Engines: HTML을 생성하는 tool

 

Open 'build-gradle' in project

생성된 프로젝트를 처음 IDE에서 열 때, 라이브러리를 다운받음 -> 네트워크 필요

 

* Git에는 중요한 소스코드 파일만 올라가고 빌드 결과 등은 올라가면 안됨

 

@SpringBootApplication
public class HelloSpringApplication {

   public static void main(String[] args) {
      SpringApplication.run(HelloSpringApplication.class, args);
   }

}

기본으로 내장된(embedded) 'Tomcat'이라는 웹서버를 실행하고 SpringBootApplication을 올린다.

 

 

2. 라이브러리

2-1. 스프링 부트 라이브러리

Gradle이나 Maven과 같은 빌드 tool들은 의존관계를 관리해준다.

개발자가 사용하고자 하는 라이브러리에 관련된(의존된) 라이브러리를 자동으로 import한다.

웹 서버 프로그램을 직접 설치하지 않아도 라이브러리를 빌드하는 것만으로도 웹 서버를 사용할 수 있다.

스프링 부트 라이브러리를 사용하면 스프링 코어까지 세팅된다.

  • spring-boot-starter-web: spring-boot-starter-tomcat(웹 서버), spring-webmvc(스프링 웹 MVC)
  • spring-boot-starter-thymeleaf: 타임리프 템플릿 엔진(View)
  • spring-boot-starter(공통): 스프링 부트 + 스프링 코어 + 로깅(logback(출력), slf4j(인터페이스))

* 실무에서는 System.out.println()보다 Log를 통해 테스트/에러 관리를 한다.

 

2-2. 테스트 라이브러리

  • spring-boot-starter-test: junit, mockito, assertj, spring-test

 

3. View 환경설정

3-1. Welcome Page(도메인 첫 화면) 만들기

'resources/static/index.html'

스프링 부트는 먼저 static location(resources/static)에서 index.html 탐색하고, 없다면 index template을 찾아 welcome page로 설정하는 기능을 제공한다.

 

3-2. thymeleaf 템플릿 엔진

스프링 부트가 auto-configuration을 제공하는 템플릿 엔진

 

>Web Browser: localhost:8080(Tomcat)/hello

 

HelloController.java

@Controller
public class HelloController {
    @GetMapping("hello")
    public String hello(Model model){
        model.addAttribute("data", "hello!!");
        return "hello";
    }
}

return "hello"     =>     'resources/templates/' +{viewName} + '.html'을 rendering 

(viewName = "hello")                                              (by viewResolver using template engine)

 

hello.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Hello</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'안녕하세요. ' + ${data}" >안녕하세요. 손님</p>
</body>
</html>

model(data:hello!!)

 

 

※Error: Identify and stop the process that's listening on port 8080 or configure this application to listen on another port.

process kill

 

서버를 배포할 때는 .jar 파일만 서버에 넣어 java 명령어로 실행하면 된다.

gradlew.bak을 build -> build 디렉터리 생성
.jar 실행
clean build -> 결과 완전히 지운 후 다시 build

 

4. MVC(Model, View, Controller)

사용자                                                                                 스프링 컨테이너

웹 브라우저 -> URL(Mapping path, Request prameter) -> 웹 서버 -> Controller(by path) -> (View name(template), Model(data)) -> viewResolver

 

5. API

@ResponseBody 를 사용하면 viewResolver가 아닌 HttpMessageConverter가 동작하여 HTTP(프로토콜)의 BODY에 문자 내용을 직접 반환하거나, 객체를 JSON 형식으로 변환하여 반환 (HTML BODY TAG를 말하는 것이 아님)

기본 문자처리: StringHttpMessageConverter

기본 객체처리: MappingJackson2HttpMessageConverter

 

*생성자, getter/setter 등 자주 쓰는 메서드 빠른 추가: alt+insert

*Reactor 옵션: ctrl+shift+alt+T

 

6. 테스트 케이스

JUnit 프레임워크: @BeforeEach > @Test > @AfterEach 순

클래스나 소스 파일 단위 테스트 시 실행 순서가 보장되지 않기 때문에, 테스트 메서드는 서로 의존관계 없이 설계되어야 한다. ex. @AfterEach 공용 데이터 지우기

테스트 결과 검증: Assertion의 메서드를 통해 condition의 참 거짓 판별. 거짓 반환시 즉시 테스트 중지.

 

'Advance I > Spring' 카테고리의 다른 글

22.04.27  (0) 2022.04.27
22.04.26  (0) 2022.04.26
22.04.25 :: 스프링 핵심 원리 - 기본편  (0) 2022.04.25
22.04.22  (0) 2022.04.22
22.04.20  (0) 2022.04.20