프로젝트 생성
사전 준비
IDE : IntelliJ 또는 Eclipse 설치.
- 요즘은 IntelliJ를 많이 사용하고, 강의 내용에 따라가기 힘들 수 있으므로 나또한 IntelliJ 커뮤니티 버전으로 듣는다.
과거에는 Spring 프로젝트를 밑바닥부터 다 만들었지만 요즘은 Spring boot를 사용해 프로젝트를 생성한다.
아래의 링크는 Spring boot기반으로 Spring 프로젝트를 빌드해주는 스프링에서 운영하는 사이트다.
Project
- 과거(레거시 프로젝트) - Maven : 정형화된 빌드 시스템, 플러그인으로 구동되어 build 진행
- 요즘 - Gradle : JVM 기반의 빌드 시스템, Task 기반으로 작업 수행. 캐시를 이용하여 시간이 단축됨.
Version
- SNAPSHOT - 아직 만들고있는 버전
- M(Milestone) - 정식 Relase 되지 않은 버전
스프링 부트 3.0 이상 버전을 사용하려면 자바 17버전 이상이 필요하므로 3.0 이상 버전을 제외하고 정식 릴리즈 된 버전중 최신인 2.7.15를 선택 (강의 노트에 적혀있는 2.3.x 버전이 보이질 않았다.)
Project Metadata
- Group : 보통 기업 도메인 명을 기입한다.
- Artifact : 빌드 된 후 나오는 결과물
Packaging
- Jar(Java ARchive) : Class(자바 리소스, 속성 파일), 라이브러리 압축 파일로 JRE만 있어도 실행가능
- War(Web application ARchive) : Servlet / JSP 컨테이너에 배치할 수 있는 웹 애플리케이션을 구성할 떄의 필요한 요소들의 압축 파일. WEB(웹 서버) 혹은 WAS(웹 컨테이너) 필요.
Dependencies(중요)
본인이 직접 검색하여 라이브러리를 추가할 수 있다.
- Spring Web, Thymeleaf
강의 내용 기반으로 아래처럼 작성하였다.
모두 입력 후 GENERATE 버튼을 클릭하여 다운받고 압축풀기
인텔리제이에서 Open -> 폴더의 build.gradle을 선택 -> Open as Project 선택
처음 프로젝트를 열면 라이브러리를 다운받으므로 네트워크에 연결되어 있어야하고, 로딩하는데 시간이 걸린다.
프로젝트 구조를 먼저 살펴보면..
- .idea : Intellij가 사용하는 설정 파일
- resources : html, css, javascript, image 등 자바 파일을 제외한 모든 것들
- test : 테스트 코드 작성
- build.gradle : 라이브러리에 관한 내용
- gitignore : git에 올라가지 않을 파일들
그리고 java 폴더 내부의 HelloSpringApplication을 클릭하여 main() 메서드를 실행하면
정상적으로 실행된경우 스프링 부트의 버전과 톰캣버전, 사용 포트번호 등의 정보를 알 수 있다. 이후 주소에 localhost:8080을 입력하여 Error Page가 노출된다면 성공.
실행이 안된다면 Gradle의 버전확인(자바와 맞는지 Ctrl+Alt+S의 Builds Tools > Gradle), 또는 자바의 버전을 확인한다. (File > Project Structure)
라이브러리 살펴보기
Gradle은 의존관계가 있는 라이브러리를 함께 다운로드 한다. 프로젝트 생성 시 Spring Web, Thymeleaf 라이브러리를 넣어주었는데, 이들이 필요한 라이브러리까지 물고 물고 추가해주는 것.
스프링부트 라이브러리
- spring-boot-starter-tomcat(웹서버) : 설정 필요없이 웹서버 사용
- spring-webmvc : 스프링 웹 MVC
- spring-boot-starter-thymeleaf : 타임리프 템플릿 엔진(View)
- spring-boot-starter(공통) : 스프링 부트와 관련된 라이브러리 사용시 무조건 땡겨옴 (부트+코어+로깅)
- logging(logback, slf4j) / autoconfigure / dependencies / core
실무에서는 System.out.println을 사용하지 않고 logging 라이브러리를 땡겨오면 땡겨지는 logback과 slf4j를 통해 디버깅한다.
테스트 라이브러리
- spring-boot-starter-test
- junit : 테스트 프레임워크
- mockito : 목 라이브러리
- assertj : 테스트 코드를 좀 더 편하게 작성하게 도와주는 라이브러리
- spring-test : 스프링 통합 테스트 지원
View 환경설정
스프링부트는 resources/static/index.html
을 웰컴페이지(도메인 입력했을 때의 첫 화면)로 지정한다. 해당 경로에 html 삽입후 서버 재실행을 했더니 아래와 같이 적용되었다.
워낙 편리한 기능이 방대하니, 아래의 공식문서를 적극 활용하도록 하자.
이건 어디까지나 정적페이지일 경우에 해당한다.
Thymeleaf
- 자바 라이브러리로 웹과 환경 양쪽에서 text, html, xml, javscript, css를 생성할 수 있는 템플릿 엔진
- 애플리케이션에서 JSP로 만든 기능들을 완전히 대체가능하다.
장점
- 코드를 변경하지 않으므로 협업이 편해짐
- 비즈니스 로직과 분리되어 View에 집중가능
- 서버상에서 동작하지 않아도 서버 동작 없이 바로 화면을 확인 할 수 있다. (순수 HTML)
사용
Gradle 프로젝트: build.gradle 파일에 아래의 코드를 추가한다.
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
Maven 프로젝트: pom.xml 파일에 아래의 코드를 추가한다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
이후 html 파일에 아래의 코드를 추가한다.
<!DOCTYPE html>
<!-- namespace 추가 -->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
</body>
</html>
그리고 Controller 패키지 추가후, HelloController를 작성했다.
컨트롤러에서 리턴 값으로 문자열 반환시 viewResolver(뷰 리졸버)가 화면을 찾아서 처리한다.
- 스프링 부트 템플릿 엔진은 기본으로 viewName 매핑
resources:templates/{ViewName}.html
빌드하고 실행하기(Window)
이제 intellij가 아닌 cmd에서 빌드후 실행하는 방법을 알아보도록 한다. 당연히 intellij에서 서버를 사용중이라면 중지한다.
1) 명령프롬프트(cmd)에서 해당 프로젝트의 폴더로 이동한다. cd 이동할 폴더명
2) gradlew.bat
3) gradlew build
빌드가 된 이후 dir
명령어를 생성된 파일목록을 확인할 수 있다
나는 build 폴더가 생성되었으나 안에 libs 폴더가 생성되지 않았고 gradlew clean build
명령어를 통해 완전히 지우고 다시 로드했다.
4) build > libs 폴더로 이동 후 java -jar hello-spring-0.0.1-SNAPSHOT.jar
.jar파일을 성공적으로 실행 후 localhost:8080
에 접속해보면 아래와 같이 정상적으로 서버가 작동한다.
'Backend > Spring' 카테고리의 다른 글
[Spring] 의존성 주입(Dependency Injection) 4가지 방법 (0) | 2023.12.29 |
---|---|
Configuration은 어떻게 Bean을 등록하고 관리할까? (0) | 2023.12.28 |
[Spring] 스프링 입문 - 코드로 배우는 스프링 부트 #4 스프링 빈과 의존관계 (0) | 2023.11.21 |
[Spring] 스프링 입문 - 코드로 배우는 스프링 부트 #3 회원 관리 예제(백엔드) (0) | 2023.09.12 |
[Spring] 스프링 입문 - 코드로 배우는 스프링 부트 #2 (0) | 2023.08.31 |