Spring

[Spring] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 #1

solfa 2024. 7. 13. 02:50

본 글은 해당 강의를 보고 작성한 글입니다.

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8

 

[지금 무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 강의 | 김영한 - 인프

김영한 | 스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., 스프링 학습 첫 길잡이! 개발 공부의 길을 잃지 않도록 도와드립니다. 📣 확

www.inflearn.com


#1  프로젝트 환경설정

1. 프로젝트 생성

본 강의에 필요한 설치 목록들

 

1. 자바 설치

- 자바는 jdk 설치 후 환경변수 설정을 해준다.

- Java 17 이상 설치!

 

2. IDE 설치

- IDE: IntelliJ 또는 Eclipse 설치

인텔리제이를 설치해준다. 학생이라면 스튜던트 팩을 사용하자.

 

스프링 부트 3.0 이상, JDK 17 이상을 사용해야 한다!

3. 스프링 부트 스타터 사이트로 이동해서 스프링 프로젝트 생성

https://start.spring.io

 

프로젝트 선택은 다음과 같이 해준다.

 

Project: Gradle - Groovy

Project Spring Boot: 3.x.x
Language: Java
Packaging:

Jar => 자바 프로젝트를 압축한 파일 -> tomcat이 내장되어 단독 실행 가능  이거 선택!

War => 웹 어플리케이셔늘 압축한 파일 포맷 -> 사전에 정의된 구조 사용. 실행 시 웹 서버 또는 웹 컨테이너 필요.

Java: 17 또는 21 Project Metadata

groupId: hello

artifactId: hello-spring

Dependencies: Spring Web, Thymeleaf 두 개 추가해줌!

 

옵션 선택 후, Generate 버튼으로 zip 파일 다운로드후 압축을 풀어 IDE로 파일을 열어준다.

 

 

+ start.spring.io 사이트에서 스프링 부트 2.x에 대한 지원이 종료되어서 더는 선택할 수 없기 때문에 스프링 부트 3.0 이상을 선택해야 함!

 

스프링 부트 3.0을 선택한 후 추가로 설정해야 할 것!

1. Java 17 이상을 사용해야 한다.

2. javax 패키지 이름을 jakarta로 변경해야 한다.

 => 오라클과 자바 라이센스 문제로 모든 javax패키지를 jakarta 로 변경하기로 했다고 한다.

인텔리제이나 쓰고 있는 IDE에서 전체검색으로 javax를 검색한 후 jakarta로 수정해준다.

검색할 때 *를 써서 전체 검색을 하면 쉽게 검색할 수 있다.

javax.*

 

패키지 이름 변경 예)

- JAP 애노테이션

javax.persistence.Entity ➜ jakarta.persistence.Entity

 

- 스프링에서 자주 사용하는 @PostConstruct 애노테이션

javax.annotation.PostConstruct ➜ jakarta.annotation.PostConstruct

 

- 스프링에서 자주 사용하는 검증 애노테이션

javax.validation ➜ jakarta.validation

 

근데 javax를 검색해도 아무것도 나오지 않았고 jakarta로 검색하니 여러 애노테이션들이 나오는 걸 확인할 수 있었다. 최신꺼라 아예 수정된 채로 나온 것 같다. 혹시 모르니 검색 한 번 해보자!

 

3. H2 데이터베이스를 2.1.214 버전 이상 사용해야 한다.

 

자세한 건 https://techblog.lycorp.co.jp/ko/how-to-migrate-to-spring-boot-3

링크를 참고하자.

 

기본 설정 파일들

.idea : 인텔리제이가 사용하는 설정파일

gradle: Gradle이 사용하는 폴더

src/main/java : 실제 패키지 및 소스파일 정보

src/main/resources : 실제 자바 코드파일을 제외한 xml이나 설정 파일, html 등

src/test : 테스트 코드 관련 소스 

.gitignore : Git 버전 관리에서 제외할 목록 지정

src/build.gradle : gradle은 버전을 설정하고 라이브러리를 불러옴

 

프로젝트 실행하는 방법

HelloSpringApplication.java의 main 메서드를 run해준다.

package hello.hellospring;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HelloSpringApplication {

	public static void main(String[] args) {

		SpringApplication.run(HelloSpringApplication.class, args);
	}

}

→ main 메서드를 실행하면 SpringBootApplication이 실행되면서 내장하고 있는 tomcat이라는 자체적인 웹서버를 띄우면서 스프링부트가 같이 올라오는 형태! localhost:8080에 들어가서 에러페이지가 뜨면 잘 실행이 된 것이다.

 

Gradle 대신 자바 직접 실행 설정

Gradle 통하지 않고 자바로 바로 실행하는 게 실행속도가 더 빠르다. 환경설정에 들어가서 gradle -> inteliJ IDEA로 바꿔준다.


2. 라이브러리 살펴보기

Gradle(==maven과 같은 빌드 툴)은 의존관계가 있는 라이브러리를 함께 다운로드 해서 관리해준다.

→ 라이브러리간의 의존성이 존재하는데, 의존 관계가 있는 라이브러리를 함께 다운로드해주는 것!

ex) tomcat 같은 경우도 라이브러리에서 이미 내장하고 있기 때문에 따로 다운받지 않아도 main 메서드 실행해서 웹서버 띄울 수 있는 것

 

이렇게 gradle에서 라이브러리, 의존 관계 확인 가능!

 

<스프링 부트 라이브러리>

● spring-boot-starter-web

    ○ spring-boot-starter-tomcat: 톰캣 (웹서버)

    ○ spring-webmvc: 스프링 웹 MVC

 spring-boot-starter-thymeleaf: 타임리프 템플릿 엔진(View)

 spring-boot-starter(공통): 스프링 부트 + 스프링 코어 + 로깅

    ○ spring-boot

        ↓spring-core
    ○ spring-boot-starter-logging

        ↓logback, slf4j

 

=> 로깅을 남기는 이유 : 콘솔에 찍을 때 system.out.println 이걸 사용하지 않고 로그를 사용한다!!! 그렇다네요

slf4, logback 요즘 많이 쓴다네요

 

<테스트 라이브러리>

● spring-boot-starter-test

     junit : 테스트 프레임워크

       -> 핵심!, 버전5 사용

     mocktio : 목 라이브러리

     assertj : 테스트 코드를 좀 더 편하게 작성하게 도와주는 라이브러리

     spring-test : 스프링 통합 테스트 지원 

        ->junit 테스트할 때 스프링이랑 통합해서 테스트 할 수 있도록 해줌! 이걸 많이 쓰는 추세 이게 젤 중요하대


3. view 환경설정

1. Welcome Page 만들기 (정적 페이지 만들기)

src/main/resources/static/index.html 파일을 생성한다.

<!DOCTYPE HTML>
<html>
<head>
    <title>Hello</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
Hello
<a href="/hello">hello</a>

이건 정적 페이지!

정적 페이지 : index.html 파일을 그대로 웹브라우저에 넘겨준 것

스프링은 static/index.html 파일을 만들어두면 이걸 우선으로 Welcome Page로 설정한다.

 

2. thymeleaf 템플릿 엔진

controller : 웹어플리케이션에서 첫번째 진입점!

src/main/java/hello.hellospring/controller 패키지 생성

src/main/java/hello.hellospring/controller/HelloController 클래스 생성

package hello.hellospring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

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

 

resources/templates/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>
<p th:text="'안녕하세요. ' + ${data}" >안녕하세요. 손님</p>

여기에서 data가 "hello!!"로 치환 됨

model.addAttribute("data","hello!!");

 

model의 key가 value값으로 치환 된 것임

 

-웹브라우저에서 "localhost:8080/hello"를 입력 후 요청보냄

-Spring Boot의 내장되어 있는 웹서버(tomcat)이 해당 요청을 받고, 스프링 컨테이너에게 알림

-컨트롤러에서 /hello와 매칭되는 메서드를 실행

(GetMapping이 get메서드 같은 거!)

- 컨트롤러의 메서드는 Model을 넘겨받는데, Model은 Spring이 만들어서 넘겨준다.

- 컨트롤러에서 리턴 값으로 문자를 반환하면 뷰 리졸버(viewResolver)가 화면을 찾아준다.

(뷰 리졸버는 view를 찾아서 thymeleaf 템플릿 엔진과 연결시킴!)

-"hello"를 리턴했으니까 resources/hello.html를 찾아서 thymeleaf 템플릿 엔진이 처리하여 화면을 실행시켜준다.

 

스프링 부트 템플릿엔진 기본 viewName 매핑

resources/templates/+{viewName}+.html

 

spring-boot-devtools 라이브러리 : html 파일 컴파일만으로 서버 재시작 없이 view 파일 변경 가능


4. 빌드하고 실행하기

터미널(콘솔)에서 프로젝트로 이동 후

./gradlew build
cd build/libs
java -jar hello-spring-0.0.1-SNAPSHOT.jar

 

※ 서버 배포시, hello-spring-0.0.1-SNAPSHOT.jar 파일을 서버에 넣어서 실행하면 된다.

 

처음에 libs 파일이 생성되지 않았을 때는 clean 후 다시 빌드한다.

1) ./gradlew clean build

2) 또는 인텔리제이에서 직접 clean

 

728x90