김영한의 스프링 로드맵을 시작했다.
국비교육과 회사에서 사용하는 이클립스(Eclipse)가 아닌 인텔리제이(IntelliJ)를 사용해서 공부하려고 한다.
인텔리제이에 한번 빠지면 편리함 때문에 다시는 이클립스로 돌아가지 못한다는 말이 있어 궁금하다..
나의 경우, 커뮤니티버전이 아닌 유료 버전을 받아서 대학교 이메일 인증을 통해 학생 계정으로 이용한다.
인텔리제이 환경설정(Set up)
에 접속하여, spring을 시작하자.
프로젝트 빌드 툴 (Gradle / Maven) , 언어(Java / Kotlin / Groovy) , Spring Boot 버전, 프로젝트 기본 명칭, 패키징(Jar / War), 자바버전,Dependency 를 설정할 수 있다.
강의에서는 2.4(?) 버전을 사용하는데, 이미 3.1.0 버전이 나와있고 최신 버전으로 공부하는 것이 좋다고 생각이 들어 3버전을 선택하였다. SNAPSHOT의 경우 아직 미완성 된 버전 이라고 보면 된다.
스프링부트 3.0 이상 부터는, Java버전을 17이상만 지원하므로 LTS인 17 버전을 선택하였다. (자바버전 관련링크)
미처 캡쳐하지 못한 아래 Dependencies에서는 ADD버튼을 누르면 스프링 개발 환경에 필요한 많은 것들을 받을 수 있다.
Spring Web과 Thymeleaf라는 템플릿 엔진을 Dependency로 설정하고 Generate를 누르면 파일이 받아진다.
인텔리제이에서는 새 프로젝트 만들기를 선택하여, build.gradle을 실행하면 gradle이 알아서 설치해준다.
이게 기본적으로 빌드하면 나오는 구조이다. main에는 실제로 실행할 내용들이 들어가고, test에는 테스트코드와 관련된 소스들이 들어가게 된다.
* .gitignore도 이클립스는 사이트에 들어가서 다운받아 설정했어야 하는데, 알아서 깔린다!
build.gradle
15번째줄 dependencies에 세가지가 있다.
1. thymeleaf
2. starter-web
3. starter-test
1,2의 경우 처음에 지정한 Dependency이고, test는 starter-web을 의존성으로 사용할 경우 기본적으로 사용하는 test인거같다.
여기서 의존성을 더 추가하거나 https://start.spring.io/ 에서 설정했을 경우 갯수가 늘어날 것이다.
실행해보기
src/main/java/hello/hellospring/HelloSpringApplication을 실행해보면
이런 실행 내용이 나오게 된다. 기본적으로 포트는 8080이므로 localhost.8080 에 접속해보면 된다.
이렇게 뜨면 성공! (아직 index페이지가 없어 뜰게 없다)
빌드가 Gradle을 통해서 할 경우, 느려질 수 있기 때문에 Settings에서 Gradle을 찾아 Build and run using, Run test using을 IntelliJ IDEA로 바꿔준다.
그러면 보다 빠르게 실행되는 것을 확인할 수 있다.
라이브러리 살펴보기
프로젝트 구조 아래에, External Libraries를 보면 엄청나게 많은 라이브러리가 들어있다.
타임리프랑 spring web starter만 가져왔는데.. 이 내용들은 웹 어플리케이션을 쓸 때 모두 필요하기 때문에 가져온 것이다.
오른쪽 gradle을 열어보면, springboot-starter-web과 타임리프가 쓰는 라이브러리들을 볼 수 있다.
*표시는 둘중 다른데서 이미 쓰고있어서 중복이라 땡겨오지 않음
현업은 System.out.println이 아닌 로그로 저장하여, 로그 관리도 해야하고 결과를 확인해야 하므로 log 관련 의존도 필요한데, slf4j와 logback 두종류가 설치되어있었다.
slf4j를 회사와 국비교육 당시 배워서 사용하고있는데, 요즘은 logback을 사용한다고 한다.
Logback은 새로운 라이브러리가 아닌, log4j아키텍쳐 기반으로 설계되었다.
XML설정뿐만 아니라 XML을 대신할 수 있는 그루비(Grooby) 설정을 지원한다.
Logback과 slf4j의 차이는 요기 참고
라이브러리들을 요약하자면 다음과 같다.
spring-boot-starter-thymeleaf: 타임리프 템플릿 엔진(View)
- spring-boot-starter(공통): 스프링 부트 + 스프링 코어 + 로깅
- spring-boot
- spring-core
- spring-boot-starter-logging
- logback, slf4j
테스트 라이브러리
- spring-boot-starter-test
- junit: 테스트 프레임워크
- mockito: 목 라이브러리
- assertj: 테스트 코드를 좀 더 편하게 작성하게 도와주는 라이브러리
- spring-test: 스프링 통합 테스트 지원
타임리프(Thymeleaf)는 템플릿 엔진으로, 뷰 템플릿이라고 부른다.
HTML과 백단의 데이터를 조합하여 결과물을 만들어주는 엔진이라고 보면 된다. (JSP를 대체할!)
그외 다양한 종류와 구분에 따른 템플릿 엔진이 존재한다.
( Groovy / Thymeleaf / Freemarker / Mustache )
*spring-boot-devtools라이브러리를 추가하면, html 파일을 컴파일만 해도 재시작 없이 View파일 변경이 가능하다.
View 환경 설정
main/resource/static/index.html 에 내용을 작성하면, 기본 도메인 입장시 나오는 화면이 설정된다.
기본적으로 resource 안에 Controller를 만들어서 하나 작성하고, view단에서 링크를 설정하면 작동이 가능하다.
이 동작 순서는 다음과 같다.
1. 웹 브라우저에서 링크 요청
2. 내장 톰캣 서버에서 컨트롤러 찾기
3. 컨트롤러에서 리턴 값 반환
4. 뷰 리졸버가 화면을 찾아서 반환값 처리
(스프링 부트의 기본 view 매핑 : resources:template / {ViewName} / .html )
5. 뷰 리졸버에서 템플릿엔진(타임리프)이 view를 매핑하면 이 화면을 찾아서 처리
뷰 리졸버(View Resolver)란
백단에서 가져온 데이터를 View 영역으로 전달할 때, View를 어떤 것을 사용할 지 정할 수 있는데 이를 지정 역할을 하는 것이 View Resolver 이다. View의 템플릿 종류에 따라 뷰 리졸버도 다르게 사용한다. 뷰
타임리프의 경우 Dependency없이 HTML파일로 View를 제작할 수 있어 템플릿 종류 중 가장 인기가 많다.
빌드
빌드(build)는 소스코드로 작성한 프로젝트가 JVM, WAS에서 실행할 수 있도록 만드는 것을 의미한다.
빌드 도구로는 Gradle / Maven이 있다.
빌드 방법은 생각보다 간단하다.
명령프롬프트 (cmd)창을 켜서, 프로젝트 위치로 이동한다.
윈도우의 경우 gradlew.bat build 를 입력한다.
build/libs 에 들어가서 dir를 입력해보면, 내부 파일들을 볼 수 있는데
hello-spring-0.0.1.snapshot.jar파일이 생성된 것을 볼 수 있다.
java -jar hello-spring-0.0.1-SNAPSHOT.jar 입력하면 실행이 된다.
이제 배포를 하고 싶다면 .jar파일만 실행하면 되는것이다!
.jar 와 .war의 차이 (참고)
.jar 는 JRE만 있어도 실행이 가능하지만, .war는 웹서버나 WAS가 있어야 실행 가능
.war는 JSP/Servlet 등의 웹 관련 자원을 포함한다.
springboot는 표준으로 .jar를 채택하고 있다.
그외, 스프링으로 개발 할 때 참고할 문서들 정리