본 글은 해당 강의를 보고 작성한 글입니다.
[지금 무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 강의 | 김영한 - 인프
김영한 | 스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., 스프링 학습 첫 길잡이! 개발 공부의 길을 잃지 않도록 도와드립니다. 📣 확
www.inflearn.com
#1 프로젝트 환경설정
1. 프로젝트 생성
본 강의에 필요한 설치 목록들
1. 자바 설치
- 자바는 jdk 설치 후 환경변수 설정을 해준다.
- Java 17 이상 설치!
2. IDE 설치
- IDE: IntelliJ 또는 Eclipse 설치
인텔리제이를 설치해준다. 학생이라면 스튜던트 팩을 사용하자.
스프링 부트 3.0 이상, JDK 17 이상을 사용해야 한다!
3. 스프링 부트 스타터 사이트로 이동해서 스프링 프로젝트 생성

프로젝트 선택은 다음과 같이 해준다.
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
'Spring' 카테고리의 다른 글
[Spring] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 #5 (0) | 2024.09.06 |
---|---|
[Spring] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 #4 (0) | 2024.09.06 |
[Spring] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 #3 (1) | 2024.09.06 |
[Spring] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 #2 (1) | 2024.07.13 |