해당 게시물은 인프런에 있는 김영한님의 강의 "스프링 입문 - 코드로 배우는 스프링부트, 웹, MVC, DB 접근 기술" 강의를 참고하여 작성하였습니다.
링크 : 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
프로젝트 생성
위 홈페이지는 스프링부트로 프로젝트를 생성할 수 있는 홈페이지다.
옛날에는 스프링 프로젝트를 밑바닥 부터 모두 만들었다고 하는데, 요즘에는 스프링 부트라는 걸 가지고 스프링 프로젝트를 만든다.
Project
- 생성할 프로젝트의 빌드하는 라이프사이클을 자동화를 해주는 툴이다.대표적으로 Maven과 Gradle이 있는데 요새는 Gradle을 사용하는 추세라고 한다.
Language
- 생성할 프로젝트의 언어이다.
Spring Boot
- 생성할 프로젝트의 스프링 부트 버전이다. 사이트에 들어가서 프로젝트를 생성하다보면 (SNAPSHOT)이라고 되어있는 버전은 완전한 버전이 아니며 (M1) 또한 정식 릴리즈 버전이 아니다.
프로젝트 생성시 스프링 부트의 버전은 Java버전에도 크게 영향을 준다. 아래의 글을 읽어보기를 권장한다.
Project Metadata
- Group - 기업 도메인명을 정어준다.
- artifact - build의 결과물이 볼 수 있다.
Artifact를 수정하면 Name과 Package name이 자동으로 조정된다.
Dependencies
- 프로젝트를 진행할 때 자신이 필요한 라이브러리를 ADD DEPENDENCIES를 클릭하여 추가할 수 있다.
글쓴이의 프로젝트 셋팅은 이렇다.
Project | Gardle - Groovy |
Language | java |
Spring Boot | 3.2.0 |
groupId | hello |
artifactId | hello-spring |
Dependencies | Spring Web, Thymeleaf |
다음으로 GENERATE 버튼을 클릭하여 다운로드를 받는다. 그러면 그 이후에 다음과 같은 파일을 받게되고, 압축을 푼다.
그럼 아래와 같이 프로젝트의 디렉터리 구성을 확인할 수 있다.
글쓴이의 IDE는 인텔리제이를 사용할 것이다. 실행 이후 OPEN을 클릭한 뒤에 프로젝트의 압축을 푼 디렉토리를 찾은 후 build.gradle 파일을 클릭 한 후 OK를 누른다. 그러면 프로젝트 빌드가 시작되면서 프로젝트 생성이 완료된다.
프로젝트 파일 구조를 잠깐 살펴보자
1. .idaea
- 인텔리제이 설정 파일이다.
2. src/main
- 실제 패키지와 소스 파일들이다.
3. src/main/resources
- 자바 클래스에서 사용하는 리소스를 보관하는 곳이다. DB 연결을 위한 자원, 의존성 주입을 위한 파일, xml파일이나 프로퍼티스등 자바코드 이외의 자원을 보관하는 곳이다.
4. src/test
- 테스트 코드들과 관련된 소스 파일들이다. main과 test를 나눈 것을 보면 실제 개발에서 테스트 코드는 정말 중요하며 트렌드라고 한다.
5. .gitignore
- 깃을 사용할때 소스 코드를 관리해준다. 깃에는 필요한 소스코드 파일만 올라가야하며 빌드 된 결과물은 올라가면 안된다. 예를들면 데이터베이스 설정을 할 때 패스워드가 들어있는 파일을 올리지마! 라고 설정할 수 있는 것이다.
6. bulid.gradle
- 프로젝트 설정파일이다. 자바 버전설정, dependencies를 땡겨오는 설정등등.. 할 수 있는 파일이다. dependencies는 처음에 프로젝트를 생성할때 Thymeleaf, Spring Web의 라이브러리를 가져왔는데 다른 라이브러리가 더 필요하면 추가할 수 있다.
프로젝트 실행하기
public static void main 메소드 또는 class를 실행한 후 http://localhost:8080/ 페이지에 들어간다.
현재는 매핑된 페이지가 없기 때문에 에러 페이지를 반환해주는데 이러한 페이지가 뜬다면 실행 성공이다.
라이브러리 살펴보기
External Libraries를 펼쳐보면 우리가 가져온 Spring-Web, Thymeleaf에서 구현한 기능들이 쇠사슬처럼 엮여있다고 보면된다. 소위말해서 위 External Libraries 안에 있는 것들은 서로 의존관계를 가지고 있다는 것이다.
오른쪽에 Gradle을 눌러보면 Dependencies를 보면 의존관계를 살펴 볼 수 있는데, (*) 표시가 되어있는 땡겨온 라이브러리 중 중복으로 땡겨온것인데 중복을 제거해준것이다.
이번 강의에서 사용할 라이브러리를 정리해보자
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-looging (로깅)
- logback,slf4j
spring-boot-starter-test
- junit (테스트 프레임워크)
- mockito (목 라이브러리)
- assertj (테스트 코드작성을 편하게 도와주는 라이브러리)
- spring-test (스프링 통합 테스트 지원)
Welcome 페이지 만들기
7.1.6. Welcome Page의 설명을 보면, 스프링부트는 static 과 templated welcome pages를 모두 지원한다. 정적 콘텐츠 위치에서 index 파일을 찾는데 없으면 인덱스 템플릿을 찾는다. 둘 중 하나가 발견되면 자동으로 애플리케이션의 시작페이지로 사용된다고 되어있다.
위와 같이 main/resources/static 에 index.html을 만든 후 실행 해보면 아래와 같이 welcome page가 완성된다.
thymeleaf 템플릿 엔진
템플릿 엔진이라는 것을 쓰면 html파일에 REST의 기능이나, loof등을 넣는등 html을 커스텀 할 수 있다.
thymeleaf 공식 사이트 https://www.thymeleaf.org/
이 전의 docs의 7.1.10. 을 살펴보면 FreeMarker, Groovy, Thymeleaf, Mustache 등 템플릿엔진으로 사용할 수 있다고 명시되어있다. 글쓴이는 Thymeleaf 템플릿 엔진을 사용할 것이다.
main/java/controller/HelloController
main/resources/templates/hello
결과
웹브라우저가 hello를 요청하면 스프링부트 서버가 컨트롤러를 찾은 후 hello를 찾는다. 그것이 HelloController 파일에 @GetMapping hello를 찾아서 hello 메소드를 처리하는데 리턴 값으로 반환하면 viewResolver가 화면을 찾아서 처리한다. 스프링 부트 템플릿엔진 기본 viewName이 매핑되며, resources:templates/ +{ViewName}+ .html를 찾는다. 한마디로 resources/templates/hello.html을 찾은 것이다.
이러한 느낌이 아닌가 싶다.
빌드하기
웹서버를 배포할때 대부분 CLI(Command Line Interface)이므로 이러한 환경에서도 빌드하여 서버를 배포할줄 알아야한다. 글쓴이의 OS는 Windows이다.
먼저 프로젝트 디렉토리로 들어온 후 아래 그림과 같이 gradlew bulid를 입력해준다.
빌드가 완료되면 bulid, libs 디렉토리에 이동한 후, java -jar (프로젝트명)-0.0.1-SNAPSHOT.jar을 입력한다.
그러면 IDE의 도움이 필요없이 서버가 열린다!
(+)
프로젝트의 수정 사항이 일어났으면 본 프로젝트 디렉토리에서 gradlew clean build를 입력하여 재빌드해준다. 빌드한 것을 지우고 싶다면 gradlew clean만 입력해주면 된다.
HOMEWORK
디자인패턴 : MVC패턴 - MVC(Model-View-Controller) Pattan 바로가기
네트워크 : RESTful API란? - REST, REST API, RESTful 바로가기
깃허브와 프로젝트 연동 - 완료
'Framework > Spring' 카테고리의 다른 글
Spring Security 살펴보기 (0) | 2024.02.22 |
---|---|
스프링 핵심 원리 - 스프링 컨테이너 생성, 빈 조회 (0) | 2024.01.22 |
스프링 핵심 원리 - 예제 만들기 (0) | 2024.01.14 |
객체지향 설계와, 스프링 (1) | 2024.01.12 |
스프링 입문 - 스프링 웹 개발 기초 (1) | 2023.12.18 |