이 포스트는 김영한 이사님의 스프링 입문 강의를 듣고 작정하였습니다.
프로젝트 생성은 프로젝트 진행 전에 앞서 제일 기초적이고 중요한 작업이다.
장고 혹은 다른 IDE에서의 프로젝트 생성과는 달리 사이트에서 스프링 부트 프로젝트를 생성할 수 있다는 점이 신기했는데 그 방법을 천천히 알아보자.
https://start.spring.io
이 사이트에 접속하면 다음과 같은 화면이 뜬다.
이 화면에서 Project와 Language는 위와 같이 맞춰주자. Gradle은 빌드툴인데 쉽게 말해 여러 유용한 라이브러리를 프로젝트에서 쓸 수 있게 도와준다고 생각하면 된다. 이에 대해선 나중에 자세히 다뤄볼 예정이다.
Spring Boot의 버전에 대해서는 눈 여겨 볼 필요가 있다.
버전 선택 주의 사항
- Snapshot의 경우 베타버전이기 때문에 뒤에 숫자가 안 붙어있는 버전을 선택하는 것이 좋다.
- 3.XX버전을 사용할 땐 JAVA 17 이상으로 사용해주어야 한다.
사실 영상을 보면서 진행할 때 버전문제 관련 오류를 겪고 싶지 않아 2.7.7 버전을 선택해서 실습을 진행하려 하였으나 2.7.7 역시 JAVA 17이상을 요구해서 그냥 JAVA 17을 새로 깔고 스프링부트 3.0.1로 실습을 진행하였다.
프로젝트 정보를 다음과 같이 수정하자. 앞서 언급한대로 스프링부트 3.XX부터는 자바17버전 이상을 사용하여야 한다.
Jar와 War의 차이점에 관해서는 이 글을 참고하자. 일반적으로는 JAR형식을 선택하는 것이 좋다.

(참고) Project Metadata내용
- Group : 기업 도메인명
- Artifact : 빌드되어 나올 결과물
- Name : 프로젝트명 (일반적으로 Artifact와 동일하게 해준다.)
- Description : 설명
- Package name : 패키지 이름 (Group과 Artifact를 설정하면 자동으로 만들어준다.)
제일 중요한 것이 Dependencies를 추가해주는 것인데 프로젝트에 사용할 라이브러리를 추가하는 것이다. 우측 상단의 ADD DEPENDENCIES버튼을 클릭하여 다음과 같이 추가하자.

Spring Web은 스프링 웹개발에 대한 전반적인 기능을 제공하는 라이브러리이며 Thymeleaf는 템플릿 엔진이다.
이렇게 작성한 후에 GENERATE버튼을 누르면 프로젝트 파일이 다운로드 되어진다. 그 후 이 파일을 자신이 사용하고자 하는 디렉토리에 압축해주자.


바탕화면에 프로젝트를 생성하는 버릇 좀 버려야되는데 잘 안된다. 아무튼 압축해제를 하고 나면 위와 같은 폴더와 파일들이 보일텐데 IntelliJ를 써봤다면 흔하게 봤을 계층구조이다. 해당 위치에서 마우스 우클릭 후 IntelliJ로 열기를 눌러 실행하자.

실행하면 여러 라이브러리들이 깔리게 될 것이다. 깔렸으면 Intellij 우측의 Gradle을 통해 깔려있는 라이브러리들을 확인해볼 수 있다.

우리가 Dependencies로 추가한 Spring Web과 Thymeleaf의 패키지 구조를 확인해 볼 수 있다. 간략히 확인해보면 spring-boot-starter가 두 라이브러리에 공통적으로 포함되어 있는 것을 확인해 볼 수 있으며 Spring Web에는 특히 tomcat파일과 spring-web, spring-webmvc가 깔려있는 것을 확인할 수 있다.
프로젝트를 실행해보면서 라이브러리들이 정상적으로 작동하는지 알아보자.

main클래스를 실행해보면 다음과 같은 콘솔창이 뜰 것이다.

이 사진을 보면 내장 톰켓이 8080포트에 서버를 실행하였음을 확인할 수 있다.
8080포트에 접속하여보자.

아무것도 구현하지 않았으므로 에러페이지가 뜨는 것이 당연하다.
이제 서버가 웹페이지를 띄우도록 동작시켜보자. static폴더에서 index.html이란 파일명으로 html파일을 생성하면 이 페이지가 웰컴페이지로 화면에 뜨게 된다.
다음과 같이 html파일을 작성한 후 실행시켜보자.


실행하면 우리가 작성한 html문서가 화면에 잘 보여지는 것을 확인할 수 있다.
hello를 클릭하여보자.

아직 구현된 것이 없기 때문에 이 페이지는 오류화면이 나타난다.
templates폴더 안에 우리가 추가한 thymeleaf를 이용하여 /hello에 대한 페이지를 작성하여보자.

http://www.thymeleaf.org 이 스키마 주소를 적어줌으로써 html에서 thymeleaf를 사용할 수 있게 된다. 눈여겨 볼 점은 8라인의 ${data}라는 부분인데 이 부분은 다음 단계에서 살펴보겠다. 우선 이렇게만 적고 실행을 해보자.
여전히 뜨지 않는다. 왜냐하면 url mapping에 관한 처리가 아직 이루어지지 않았기 때문이다.
위 사진과 같이 hello.hellospring패키지 밑에 contoller패키지를 생성하여 HelloController 클래스를 작성하고 실행하여보자.
성공적으로 동작한 것을 확인할 수 있다.
우리가 작성한 HelloController는 /hello라는 주소에 접근하였을 때 동작하는 Controller이다.
여기서 hello.html에는 p태그안에 hello!! 라는 문자열이 없는데 웹페이지 상에선 hello!!라는 문자열이 떠있는 것을 확인할 수 있다. 이 이유는 HelloController에서 data에 대한 값을 hello!!로 지정해주었기 때문이다.
또한 컨트롤러에서 "hello" 라는 문자열을 반환하면 이 문자열은 viewName으로써 동작한다. 그럼 ViewResolver에서 "hello"라는 이름의 html파일을 templates폴더에서 찾아 화면에서 찾아 보여주게 된다.
스프링 부트 템플릿엔진 기본 viewName 매핑
resources:templates/ +{ViewName}+ .html
정리하자면 우리가 /hello에 접속했을 때 HelloContoller에서 수행하는 동작은 크게 2가지로 볼 수 있다.
HelloContoller에서 수행하는 동작
/hello라는 주소로와hello.html의 맵핑data라는 값에 대한 바인딩
스프링에 대해선 아예 처음 공부해봤는데 장고를 어느정도 알고 있는 상태에서 들으니 이해하는데 도움이 많이 됐던 것 같다.
지금은 강의의 흐름대로 따라가고 있기 때문에 많은 자세한 내용들을 다루지는 않았다. 나중에 시간이 된다면 spring의 동작 원리에 대해서 더욱 자세히 다뤄보고 싶다.
잘 보고 갑니다~~^^