[Spring Intro] Section 01. 프로젝트 환경설정
강의: 김영한의 스프링 입문
# 사전 환경 설정
필자는 맥북 M1 pro를 사용하고 있으며, 강의를 듣다 환경설정 오류를 마주하여 이 글을 읽는다면 자신의 OS에 맞게 설치할 수 있도록 주의하시길 바랍니다 !
1. 자바 설치
- https://www.oracle.com/kr/java/technologies/downloads/#java17
- 강의 내용을 정리하는 2023. 02. 17 기준으로, 스트링 부트 3.0을 선택하게 될 경우 강의 내용과 다르게 Java 17 이상을 설치해야 한다.
- 필자 같은 경우 이미 17.6 버전을 사용하는 중인데, 만약 설치하지 않았다면 위에 링크에서 다운할 수 있다.
- M1칩 혹은 그 이후 칩셋 사용자 기준으로 Arm64 DMG Installer를 설치하면 된다.
- 자바가 잘 설치되었는지 터미널에서 다음과 같이 확인한다.
$ java -version
2. IntelliJ 설치
- https://www.jetbrains.com/ko-kr/idea/download/#section=mac
- Community Edition으로 다운로드하면 설치할 수 있다.
- M1칩 혹은 그 이후 칩셋 사용자라면 Apple Silicon으로 다운로드한다.
# 프로젝트 생성
1. 스프링 부트를 기반으로 스프링 관련 프로젝트를 만들어주는 사이트
* Spring Boot Version 선택 시 버전 뒤에 (SNAPSHOT)이 붙어있으면 비정식 버전이므로, 정식 버전 설치를 권장한다.
* 스프링 부트 3.0 사용 시에는 다음과 같은 조건이 필요하다.
1. Java 17 이상을 사용한다.
2. javax 패키지 이름을 jakarta로 변경한다.
- 오라클과 자바 라이센스 문제로 모든 javax 패키지를 jakarta로 변경하기로 했다.
3. H2 데이터베이스를 2.1.214 버전 이상으로 사용한다.
- Group: 보통은 기업명을 작성한다.
- Artifact: 빌드되어 나오는 결과물이다.
- Dependencies: 필요한 dependencies를 추가할 수 있다.
- 현재 만들 프로젝트에서는 웹 프로젝트를 생성해야하므로 Spring Web을 선택한다.
- HTML 엔진을 만들어주는 템플릿으로 Thymeleaf를 선택한다.
- 사진과 같이 설정한 뒤 GENERATE 버튼을 누르면 프로젝트가 다운로드되며 압축을 풀어 원하는 위치로 옮긴다.
2. IntelliJ에서 프로젝트 열기
- Open > 다운받은 폴더를 저장한 경로 > hello-spring > build.gradle 선택 후 Open > Open as Project 선택
- 기본적으로 src 폴더 아래 main과 test가 나눠져 있고, test에는 테스트 코드와 관련된 소스들이 들어있다.
- build.gradle에서는 버전 설정과 라이브러리 implementation이 이루어진다.
- dependencies: 현재 프로젝트에서 사용하는 라이브러리
- repositories: 사용할 라이브러리를 다운로드하는 경로를 명시
- mavenCentral(): 사용할 라이브러리를 다운로드할 수 있는 공개된 사이트
3. 프로젝트 실행
- HelloSpringApplication.java
- 자바는 main 메소드가 모든 프로그램의 시작이다
- main method 내 SpringApplication.run을 통해 HelloSpringApplication 클래스를 실행하는 것이다
- 톰캣 웹서버가 자동으로 열리고 spring boot가 같이 올라가는 방식이다
package hello.hellospring;
import ...
@SpringBootApplication // SpringBoot를 사용한다는 annotation
public class HelloSpringApplication {
public static void main(String[] args){ // run시킬 부분
SpringApplication.run(HelloSpringApplication.class, args);
}
}
- HelloSpringApplication을 실행시키면 IntelliJ 터미널에 오른쪽과 같은 화면이 뜬다.
- 위 터미널에서 밑줄쳐져있는 Tomcat started on port(s) : 8080를 통해 8080번 포트를 통해 실행되고 있음을 확인할 수 있으므로, 웹에서 localhost로 접속해본다.
- 이 때 아래 사진과 같이 에러 페이지가 뜬다면 성공한 것이다.
- 다시 인텔리제이 터미널을 확인해보면 접속 이후 추가된 Info를 확인해볼 수 있다.
- 인텔리제이에서 실행되는 과정을 stop하고 웹페이지를 새로고침하면 에러페이지가 아닌 사이트에 연결할 수 없다는 메시지가 뜬다.
Preference -> Gradle -> Build and run using & Run tests using을 IntelliJ IDEA로 변경하면 인텔리제이에서 자바를 띄워 실행하므로 빠르게 실행할 수 있다
# 라이브러리 살펴보기
1. 의존 관계
- Gradle은 의존관계가 있는 라이브러리들을 함께 다운로드 한다
- 예전에는 웹 서버를 직접 서버에 설치하고 자바 코드를 밀어넣는 식으로 웹 서버 개발과 라이브러리가 분리되어 있었으나, 현재는 소스 라이브러리에서 웹서버를 내장하고 있기 때문에 자바 메인 메소드만 실행해도 웹서버가 실행된다
라이브러리들은 의존 관계를 가질 수 있으며 다른 라이브러리에 의해 이미 사용 중인 라이브러리들은 (*) 표시가 옆에 붙는다
2. 스프링 부트 라이브러리
- 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를 요즘은 많이 사용
- spring-boot
3. 테스트 라이브러리
- spring-boot-starter-test
- junit: 테스트 프레임워크 → 4에서 5으로 넘어가는 추세
- mockito: 목 라이브러리
- assertj: 테스트 코드를 좀 더 편하게 작성하게 도와주는 라이브러리
- spring-test: 스프링 통합 테스트 지원
4. 로깅
- 실무에서는 System.out.println()이 아닌 로그를 출력해야 함 → 심각한 에러나 로그 파일의 관리에 유용하기 때문이다
- logback → 실제 로그를 어떤 구현체로 출력할 것인가?
- slf4j → 인터페이스
- logback + slf4j 조합을 많이 사용하며 표준으로 채택된다고 생각하면 좋다 → 따라서 spring-boot-starter-logging에서는 의존관계에 의해 이와 관련된 라이브러리를 자동으로 주입한다
# View 환경설정
1. Welcome 페이지 만들기
Welcome 페이지란 도메인만 입력해서 접속했을 때 보여지는 첫 화면이다.
- 스프링부트는 resource/static/ 경로에 index.html을 welcome 페이지로 설정한다.
- https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/spring-boot-features.html#boot-features-spring-mvc-welcome-page
- 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>
</body>
</html>
- 실행결과
2. thymeleaf 템플릿 엔진
- Templete-Engine
- 스프링부트는 다음 4가지 템플릿 엔진을 위한 auto-configuration 지원을 포함한다
- FreeMarker
- Groovy
- Thymeleaf
- Mustache
- 스프링부트는 다음 4가지 템플릿 엔진을 위한 auto-configuration 지원을 포함한다
- thymeleaf 템플릿 엔진: https://www.thymeleaf.org/
- 스프링 공식 튜토리얼: https://spring.io/guides/gs/serving-web-content/
- 스프링부트 메뉴얼: https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/spring-boot-features.html#boot-features-spring-mvc-template-engines
- thymeleaf 템플릿 엔진은 Controller를 이용한 값 반환 및 사용이 가능하다
Controller는 웹 애플리케이션에서 첫 번째 진입점이다
- 실습
- src>main>java 아래 controller 패키지를 생성한다
- 생성한 controller 패키지안에 HelloController.java 파일을 생성한다
- resources/templates/경로에 컨트롤러와 연결되는 hello.html 파일을 생성한다
- src/main/java/hello.hellospring/controller/HelloController.java
- 스프링에서는 컨트롤러 사용을 위해서 @Controller를 주석으로 선언해주어야 한다
- @GetMapping(): 괄호 안에 들어오는 값이 호출될 때 아래 정의되는 메소드를 실행한다
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";
}
}
MVC: model view controller
- resource/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>
3. thymeleaf 템플릿엔진 동작 확인
- 실행: http://localhost:8080/hello
- 동작 환경
- 웹브라우저에서 localhost:8080/hello를 보내면 내장 tomcat 서버가 받아서 spring에게 전달한다
- helloController의 @GetMapping을 통해 "hello" url에 매핑된다
- Spring이 model(data:hello!!)를 만들어서 넣어주고 hello를 리턴한다
- hello를 리턴하는 것은 resources/templates/hello를 찾아 {data: hello!!}를 화면에 넘겨 랜더링 시키라는 의미이다
- 즉, 컨트롤러에서 리턴 값으로 문자를 반환하면 뷰 리졸버(viewResolver)가 화면을 찾아서 처리한다
- 기본적인 스프링 부트의 설정 값은 resources/templates 아래의 {ViewName}.html을 찾아서 매핑한다
spring-boot-devtools 라이브러리를 추가하면, html 파일을 컴파일만 해주면 서버 재시작 없이 View 파일 변경이 가능하다
* IntelliJ 컴파일 방법: 메뉴 build > Recompile
# 빌드 및 실행
반드시 IntelliJ에서 실행 중이던 프로젝트를 stop한 후 진행해야 한다
- gradlew를 통해 build를 실행하면 build 폴더가 생성됨
$ cd [구축한 프로젝트 경로]
$ ./gradlew build
- build/libs 아래 생선된 hello-spring-0.0.1-SNAPSHOT.jar를 확인
$ cd build
$ cd libs
$ ll
- 생성된 jar 파일을 java로 실행
$ java -jar hello-spring-.0.0.1-SNAPSHOT.jar
- 정상적으로 배포되었는지 확인하기 위해 localhost:8080에 접속
실제 배포시에는 .jar 파일을 실 서버로 옮겨 실행하면 된다
- 에러가 날 경우 clean build를 진행하고 다시 빌드한다
$ ./gradlew clean //build와 관련된 내용(폴더 등등)이 사라짐
$ ./gradlew build
// clean과 build를 한번에 하려면 아래 명령어를 사용하면 된다
$ ./gradlew clean build
'Study > Backend Note' 카테고리의 다른 글
[Spring Intro] Section 06. 스프링 DB 접근 기술 (0) | 2023.03.06 |
---|---|
[Spring Intro] Section 05. 회원 관리 예제 - 웹 MVC 개발 (0) | 2023.03.04 |
[Spring Intro] Section 04. 스프링 빈과 의존관계 (0) | 2023.02.28 |
[Spring Intro] Section 03. 회원 관리 예제 - 백엔드 개발 (0) | 2023.02.28 |
[Spring Intro] Section 02. 스프링 웹 개발 기초 (0) | 2023.02.26 |