프로젝트 생성
강의를 시작하기 전에 Java 17 버전과 IntelliJ IDE가 설치되어 있어야 한다. 이 강의는 Java 11 버전을 기반으로 작성되었지만, 최근 Spring Initializr에서 Java 11 버전과 Spring Boot 2.x 버전을 지원하지 않기 때문에 Java 17 버전과 Spring Boot 3.0 이상 버전으로 진행해야 한다.
*Spring Initializr란, 스프링 기반 프로젝트를 빠르게 시작할 수 있는 온라인 도구이다. 이 도구는 스프링 프레임워크와 관련된 의존성과 프로젝트 구조를 선택하여 초기 프로젝트를 쉽게 생성할 수 있으며, 이를 통해 개발자는 복잡한 설정과 의존성 관리에 시간을 낭비하지 않고 주요 비즈니스 로직에 집중할 수 있다.
*스프링 부트 3.0을 선택하게 되면 다음 부분을 꼭 확인해야 한다.
1. Java 17 이상을 사용해야 한다.
2. javax 패키지 이름을 jakarta로 변경해야 한다.
- 오라클과 자바 라이센스 문제로 모든 javax 패키지를 jakarta로 변경하기로 했다.
3. H2 데이터베이스를 2.1.214 버전 이상 사용해야 한다.
Step 1 :
https://start.spring.io 해당 URL로 접속하여 스프링 프로젝트를 생성한다.
- Project : 프로젝트에서 사용할 자바 빌드 도구를 선택하는 옵션이다.
- Language : 프로젝트에서 사용할 언어를 선택하는 옵션이다.
- SpringBoot : SpringBoot 프레임워크의 버전을 선택하는 옵션이다.
- Project Metadata : 프로젝트의 메타데이터를 입력하는 옵션이다. 일반적으로 Group에는 기업명이나 도메인명, Artifact는 프로젝트명을 사용한다. 이러한 정보는 프로젝트의 고유 식별자를 지정하고 Maven이나 Gradle과 같은 빌드 도구에서 의존성 관리에 사용된다.
- Dependencies : 프로젝트에 필요한 스프링 관련 의존성을 선택하는 옵션이다. 예를 들어, "Spring Web" 의존성을 선택하면 스프링 웹 애플리케이션을 개발하기 위한 필수 라이브러리와 설정이 포함된다.
초기 세팅이 완료되었으면 아래 GENERATE 버튼을 클릭한다.
hello-spring.zip 파일이 생성되었다면, Spring Initializr을 통해 수행해야 할 작업은 성공적으로 마무리되었다. 이제 zip 파일의 압축을 해제한 후 인텔리제이에서 아래 사진과 같이 build.gradle을 선택하여 오픈한다.
처음 프로젝트를 오픈할 경우, 아래와 같은 메시지를 확인할 수 있다. 이 메시지는 build.gradle 파일이 프로젝트 파일임을 알려주면서, 이를 어떤 형태로 열지 선택할 수 있도록 안내해준다. "Open as Project"를 선택하면 IDE는 build.gradle 파일을 기반으로 프로젝트의 구조와 파일을 자동으로 인식하여 개발 환경을 구성하고 반면에 "Open as File"을 선택하면 build.gradle 파일이 단순히 파일로 열리며, 프로젝트 자체가 아닌 해당 파일만을 처리한다. 이 경우 프로젝트 구조 관련 설정은 자동으로 인식하지 않는다.
여기까지 별 문제없이 진행되었다면, 이제 정상적으로 프로젝트가 구동될 것이다. 다만 주의할 점은 프로젝트가 처음 구동될 때 외부에서 프로젝트에 필요한 라이브러리를 자동으로 다운로드하기 때문에 네트워크에 연결되어 있어야 한다.
- .gradle : 프로젝트의 빌드에 필요한 임시 파일 저장 폴더
- .idea : IntelliJ에서 사용되는 폴더
- gradle : gradle과 관련된 파일이 모여있는 폴더
- src
- main
- java : 실제 소스파일
- resources : 실제 소스파일을 제외한 설정 파일
- test : 테스트 소스 코드(요즘 개발 트렌드에서 제일 중요함)
- main
- .gitignore : git에는 필요한 소스 코드만 올라가고, 빌드된 나머지 부분들은 올라가지 않도록 해야 하는데 이를 도와줌
- build.gradle : Gradle 빌드 도구에서 사용되는 프로젝트 빌드 스크립트 파일이며 프로젝트의 빌드 설정과 의존성을 관리함
예전에는 개발자들이 수작업으로 이러한 스크립트 파일을 작성해야 했기 때문에 시간이 많이 소요되었지만, 지금은 Spring Initializr을 통해 개발자들이 편리하게 프로젝트를 설정할 수 있어서 초기 프로젝트 구성을 간편하게 처리할 수 있게 됐다.
라이브러리 살펴보기
build.gradle 파일을 열어보면, Dependencies 속성에서 설정된 라이브러리는 별로 없다는 것을 알 수 있다.
하지만, External Libraries을 펼쳐보면 실제 라이브러리가 엄청나게 많다는 것을 알 수 있는데, 웹 개발을 하기위해 기본적으로 필요한 라이브러리가 정말 많다.
추가적으로, 빌드관리툴의 특징 중 하나는 의존성을 관리해주는 것이다. 처음 우리가 Spring Initializr로 Spring Web과 Thymeleaf를 추가했을 때 해당 라이브러리와 의존관계를 갖고 있는 또 다른 라이브러리들을 전부 가져온다.
서버는 어떻게 구동될까?
예전 개발자들은 웹서버(WAS; 톰캣)를 프로젝트에 설치한 후 자바 소스를 서버에 올리는 방식으로 서버를 구동했다. 즉, 웹 서버와 개발 라이브러리가 분리되어 있었다. 반면에 요즘에는 소스 라이브러리에서 웹 서버를 들고 있다. 이를 임베디드(내장)하고 있다고 하는데, 별도로 설정하는 것 없이 자바 메인 메소드만 실행하는데도 웹 서버가 구동된다. 최근에는 이렇듯 서버 라이브러리 하나를 빌드해서 웹서버에 올리는 방식을 선호한다.
View 환경 설정
Welcome Page 만들기(정적)
스프링은 자바 엔터프라이즈 웹 애플리케이션 개발과 관련된 전반적인 생태계 환경를 제공한다. 그렇기때문에 정보량이 무시하지 못할 정도로 어마어마한데, 이때 개발자에게 중요한 것은 수 많은 데이터 속에서 내가 필요한 정보를 찾을 수 있는 능력이다. 예로, Welcome Page를 만들려면 스프링 부트에서 제공하는 레퍼런스를 참고하면 도움이 된다.
스프링 부트 레퍼런스에서 찾을 수 있는 Welcome Page 기능 https://docs.spring.io/spring-boot/docs/2.7.17/reference/html/web.html#web
위의 본문을 해석해보면, index.html을 static에서 먼저 찾고 만약에 못 찾으면 index template에서 찾겠다는 의미이다.
방금 우리가 한 것은 그냥 정적 페이지를 만든 것이다. 개발자가 작성한 파일을 웹 서버로 넘겨주고, 웹 서버는 별 다른 동작 없이 개발자의 파일(HTML, CSS, JavaScript)을 그대로 웹 브라우저에 넘겨주는 것을 일반적으로 정적 페이지라고 한다. 예를 들어, 네이버가 정적 페이지로 작성되었고 우리가 로그인을 했다고 가정하면
모든 사용자의 메일 수가 471이고 블로그 수는 26일 것이다. 이처럼 모든 사용자가 같은 페이지를 보는 것을 바로 정적페이지라고 한다. 그럼 사용자마다 다른 화면을 보게 하려면 어떻게 해야할까? 정적으로 처리하던 것을 동적으로 처리하면 되는데, 여기서 등장하는 것이 바로 템플릿 엔진이다. 해당 강의에서는 Thymeleaf 엔진을 사용한다.
Thymeleaf 템플릿(동적)
템플릿 엔진은 템플릿 파일과 데이터를 결합하여 동적 페이지를 생성하는 도구이며, 그 중 Thymeleaf는 Java 웹 개발에서 인기 있는 템플릿 엔진 중 하나이다.
[프로젝트]
- 컨트롤러 생성 :
웹 애플리케이션에서 첫 번째 진입점은 컨트롤러이다. 컨트롤러는 사용자 요청을 처리하고 템플릿 파일과 데이터를 결합하여 결과 페이지를 생성한다.
- src/main/java/hello.hellospring 밑에 controller 패키지 생성
- hello.hellospring.controller 밑에 HelloController 클래스 생성
- @Controller 어노테이션 입력
- public String hello(Model model){} 메서드 생성
- @GetMapping("hello") 어노테이션 입력
- hello 메서드 내부 구현
- Thymeleaf 파일 작성 및 데이터 처리 :
- src/resources/templates 밑에 hello.html 생성
- hello.html 내부 구현
- 결과 페이지 출력
[내부 동작 설명]
- 웹 브라우저에서 localhost:8080/hello을 입력하면 톰캣 내장 서버(WAS)가 해당 요청을 받고, 스프링에게 요청을 전달한다.
- 스프링 컨테이너는 해당 요청을 받고, 컨트롤러에서 /hello와 매핑되는 게 있는지 찾아보고 있으면 해당하는 메소드를 실행한다.
- 그렇기 때문에 우리가 앞서 컨트롤러에서 @GetMapping("hello")로 설정했던 것이 URL과 매칭이 됐고, hello 메서드가 실행되면서 모델이 생성되어 개발자가 설정한 값이 담기게 된다.
- hello 메소드가 실행된 후 리턴되는 "hello" 값과 model 값을 viewResolver에게 전달한다.
- viewResolver는 resources/templates에 있는 파일 중에서 리턴된 값과 일치한 .html 파일(예를 들어 hello)이 있는지 찾아서 있으면 렌더링한다.(Thymeleaf 템플릿 엔진 처리)
* 참고 : spring-boot-devtools 라이브러리를 추가하면, html 파일을 컴파일만 해주면 서버 재시작 없이 View 파일 변경이 가능하다. 인텔리J컴파일 방법 : 메뉴 build -> Recompile
IntelliJ IDEA와 Git Bash 연동하기
JetBrains 계열의 IDEA와 Git Bash를 연동하는 방법을 소개합니다.
violetboralee.medium.com
이걸 참조해도 좋다.
'스프링부트 > 김영한' 카테고리의 다른 글
😀 회원 관리 예제 - 백엔드 개발( 2 )by 김영한 (0) | 2024.04.16 |
---|---|
😀 회원 관리 예제 - 백엔드 개발( 1 )by 김영한 (0) | 2024.04.15 |
😀 스프링 입문 - 스프링 웹 개발 기초 by 김영한 (0) | 2024.03.27 |
😀 스프링 입문 by 김영한 (0) | 2024.03.18 |
👨🔬 코드로 배우는 스프링 부트, 김영한 (0) | 2024.03.18 |