1.1 스프링 부트란
스프링 부트(Spring Boot)는 자바 웹 프로그램을 더욱 쉽고 빠르게 만들기 위한 도구입니다.
스프링 부트에는 자바 웹 프로그램을 만들기 위한 기능과 도구가 모여 있습니다. 그래서 스프링 부트를 사용하면 더 쉽고 빠르게 자바 웹 프로그램을 만들 수 있습니다.
스프링과 스프링 부트
스프링 부트는 사실 새로운 기술이라기보다는 스프링 프레임워크(Spring framework)를 개선한 것입니다.
대표적인 개선 사항은 다음과 같습니다.
- 개발 환경 설정을 간소화 : 스프링은 버전에 따라 동작하는 외부 라이브러리를 일일이 찾아 연동해야 합니다. 하지만 스프링 부트는 미리 설정된 스타터 프로젝트로 외부 라이브러리를 최적화해 제공하므로 사용자가 직접 연동할 필요가 없습니다.
- 웹 애플리케이션 서버를 내장 : 스프링 부트는 내부에 웹 애플리케이션 서버 (WAS, Web Application Server)인 톰캣을 가지고 있습니다. 따라서 웹 서비스를 jar 파일로 간편하게 배포할 수 있습니다.
결론적으로 스프링 부트는 개발자가 개발에만 더 집중할 수 있게 돕습니다.
항목 | 스프링 | 스프링 부트 |
목적 | 유연한 프레임워크 제공. 다양한 설정 가능. | 스프링을 더 쉽게 사용하도록 간소화 및 자동화. |
설정 방식 | XML, Java Config, Annotation을 사용한 복잡한 설정 | 기본적으로 자동 설정(Auto Configuration) 제공 |
WAS 설치 | 별도의 서버(WAS) 필요 | 내장 서버 제공(Tomcat, Jetty 등) |
초기 개발 속도 | 상대적으로 느림 | 빠르게 프로젝트 시작 가능 |
확장성 | 매우 유연하고 확장 가능 | 유연성보다는 빠른 개발과 기본 기능에 초점 |
빌드와 실행 | 일반적으로 War 파일 생성 | Jar 파일 생성으로 독립 실행 가능 |
- 스프링 : 복잡한 엔터프라이즈 애플리케이션에서 세부적인 제어와 커스터마이징이 필요한 경우 사용
- 스프링 부트 : 빠른 프로토타이핑이나 단순한 RESTful API 개발처럼 초기 개발 속도가 중요한 경우 사용
1.2 스프링 부트 개발 환경 설정하기
스프링 부트의 개발 환경 설정은 3단계를 거칩니다. 먼저 JDK(Java Development kit, 자바 개발 도구)를 설치합니다. JDK는 자바 코드의 번역과 실행을 담당하는 자바 개발 도구입니다.
다음으로 IDE(Integrate Development Enviroment, 통합 개발 환경)를 준비합니다.
1.2.1 JDK 설치하기
- 맥OS에 JDK 17 설치하기
1. 컴퓨터에 JDK 17이 설치되어 있는지 확인합니다. terminal을 실행합니다.
2. 터미널 창에서 java-version을 입력합니다.
JDK 17이 설치돼 있다면 넘어가고, 설치된 JDK가 없거나 다른 버전이 설치돼 있다면 해당 버전의 JDK를 삭제한 후 다음 단계를 진행합니다.
맥OS에서 JDK 삭제는 터미널 창에서 다음 순서대로 명령어를 입력하면 됩니다. 첫 번째는 JVM 설치 디렉터리로 이동하는 명령이고, 두 번째는 JDK를 삭제하는 명령입니다.
- JVM 설치 디렉터리로 이동 : cd /Library/Java/JavaVirtualMachines/
- JDK 삭제 명령 : sudo rm -rf 설치된_JDK_버전
3. 맥OS에 JDK 17을 설치하기 위해 홈브루 홈페이지에 접속합니다.
홈브루는 패키지 설치 관리자로, 홈브루를 사용하면 터미널에서 단 몇 줄의 명령어로 프로그램을 쉽게 설치할 수 있습니다.
Homebrew
The Missing Package Manager for macOS (or Linux).
brew.sh
5. 터미널에서 복사한 코드를 붙여 넣은 후 Enter를 누릅니다. 컴퓨터 관리자 비밀번호를 입력하면 설치할 준비가 끝납니다.
계속 진행하기 위해 Enter를 누르면 설치 파일을 내려받아 홈브루가 설치됩니다.
6. 설치가 끝나면 홈브루를 이용해 OpenJDK 17을 설치할 수 있습니다. 터미널에 brew search openjdk@17을 입력해 설치 대상을 검색합니다.
7. brew install openjdk@17을 입력합니다. 잠시 후 파일을 다운로드하며 JDK 17의 설치를 진행합니다.
8. JDK 17이 잘 설치됐는지 확인해 보겠습니다. 터미널을 다시 실행하고 java -version을 입력합니다. OpenJDK 17이 설치된 것을 확인할 수 있습니다.
1.2.2 IDE 설치하기
1. 인텔리제이 다운로드 페이지(https://www.jetbrains.com/ko-kr/idea/download)에 접속하여 Community Edition의 [다운로드] 버튼을 클릭합니다.
- macOS 탭
2. 내려받은 설치 파일을 클릭해 실행합니다. 설정값은 기본값을 그대로 두고 다음과 같이 진행합니다.
3. 설치가 끝나면 인텔리제이를 실행합니다. 인텔리제이 설정을 임포트(import)하라는 팝업 창이 뜨면 Do not import settings를 선택하고 [OK] 버튼을 클릭합니다.
1.2.3 스프링 부트 프로젝트 만들기
스프링 부트 프로젝트를 만들고 웹 브라우저에 "Hello World!"를 출력해 보겠습니다.
- 프로젝트 만들고 실행하기
1. 스프링 부트는 Spring Initializr를 사용해 쉽게 프로젝트를 생성할 수 있습니다. Spring Initializr 페이지(http://start.spring.io/)에 접속한 후 각 항목을 다음과 같이 설정합니다.
- Project : Gradle - Groovy
- Language : Java
- Spring Boot : 3.1.0(없으면 기본값으로 선택)
- Packaging : Jar
- Java : 17(앞에서 설치한 JDK 버전으로 선택)
2. 가운데 Project Metadata에서 Artifact는 프로젝트 이름을 설정하는 부분입니다. 이 부분을 firstproject로 수정합니다.
3. 화면 오른쪽에 있는 Dependencies는 스프링 부트 프로젝트에 필요한 여러 도구를 가져오는 역할을 합니다. 먼저 웹 도구를 가져옵니다. [ADD DEPENDENCIES...] 버튼을 클릭하고 web을 입력합니다.
목록이 뜨면 첫번째로 나오는 Spring Web을 선택합니다.
같은 방법으로 다음 3가지 도구를 추가합니다. 모든 설정이 끝나면 [GENERATE] 버튼을 클릭해 프로젝트를 내려받습니다.
- H2 Database : 자료를 저장하기 위한 데이터베이스
- Mustache : 화면을 만들기 위해 필요한 도구
- Spring Data JPA : 데이터베이스를 좀 더 편리하게 다룰 수 있게 해 주는 도구
5. 폴더를 다운 받으면 firstproject.zip 파일이 압축되어있습니다. 압축을 풀고 폴더를 확인해보면 gradle을 비롯해 여러 폴더와 파일이 들어있습니다.
6. 인텔리제이를 실행하고 [Open]을 클릭해서 열기 창을 띄웁니다.
first project 폴더를 선택하고 [OK] 버튼을 클릭합니다. 이 프로젝트를 신뢰하는지 묻는 창이 뜨면 신뢰한다(Trust...)는 체크 박스에 표시하고 [Trust Project] 버튼을 클릭합니다.
7. 프로젝트를 처음 열면 필요한 파일들을 내려받고 프로젝트 구조를 파악하느라 시간이 조금 걸립니다. 모든 빌드가 끝나면 BUILD SUCCESSFUL 메시지가 나옵니다. 여기서 빌드(build)란 소스 코드를 실행할 수 있는 독립적인 형태로 만드는 것을 말합니다. 즉 프로젝트를 빌드하면 독립된 파일이 생성되고 이를 실행해 프로젝트에 작성한 기능들을 이용할 수 있습니다.
8. 스프링 부트 프로젝트를 인텔리제이에서 어떻게 실행하는지 인텔리제이 화면 구성을 살펴보겠습니다.
인텔리제이 화면 왼쪽을 보면 프로젝트명 아래로 여러 디렉터리가 있는데, 이 부분을 프로젝트 탐색기라고 합니다. 여기서 프로젝트 구조를 탐색하고 특정 파일을 바로 열 수 있습니다.
프로젝트 탐색기에서 src 디렉터리를 펼치면 main과 test가 나옵니다. main을 펼치면 java와 resources가 나오는데, java에는 자바 코드가 저장되고 resources에는 외부 파일이 저장됩니다.
9. 자바 프로그램의 시작점인 메인 메서드는 java 디렉터리의 com.example.firstproject 안에 하나의 클래스로 존재합니다. com.example.firstproject는 앞서 스프링 프로젝트를 만들 때 설정한 기본 패키지입니다. 이 기본 패키지에 있는 FirstprojectApplication을 열면 메인 메서드를 확인할 수 있습니다.
9. 자바 프로그램의 시작점인 메인 메서드는 java 디렉터리의 com.example.firstproject 안에 하나의 클래스로 존재합니다. com.example.firstproject는 앞서 스프링 프로젝트를 만들 때 설정한 기본 패키지입니다. 이 기본 패키지에 있는 FirstprojectApplication을 열면 메인 메서드를 확인할 수 있습니다.
- Hello World! 출력하기
1. src > main > resources > static 디렉터리에서 마우스 오른쪽 버튼을 누릅니다. 메뉴에서 New -> HTML File을 선택한 후 입력창이 뜨면 파일명을 hello.html이라고 입력하고 Enter를 누릅니다. 그러면 편집기에 기본 코드가 적힌 HTML 파일이 열립니다. 본문(<body></body> 사이)에 <h1>Hello World!</h1>을 입력합니다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>Hello World!</h1>
</body>
</html>
2. 프로젝트 실행을 위해 서버를 시작합니다.
프로젝트 탐색기의 FirstprojectApplication에서 마우스 오른쪽 버튼을 눌러 메뉴가 뜨면 [Run 'FirstprojectAp...main()']을 선택합니다.
3. 웹 브라우저(localhost:8080/hello.html)에 접속하면 다음과 같이 나옵니다.
1.3 웹 서비스의 동작 원리 이해하기
앞서 실습한 "Hello World!"가 출력되기까지 서버 내부에는 어떤 일이 일어날까요? 이를 알기 위해 웹 서비스의 동작 원리를 살펴보겠습니다.
1.3.1 클라이언트-서버 구조
웹 서비스는 클라이언트의 요청에 따른 서버의 응답으로 동작합니다. 여기서 클라이언트란 서비스를 사용하는 프로그램 또는 컴퓨터를 말하고, 서버는 서비스를 제공하는 프로그램 또는 컴퓨터를 말합니다.
앞에서 실습한 "Hello World"도 클라이언트의 요청에 따른 서버의 응답 결과였습니다. 웹 브라우저가 클라이언트로서 동작하고 스프링 부트는 서버 역할을 수행했습니다.
클라이언트의 요청에 응답하려면 당연히 서버가 실행 중이어야 합니다. 인텔리제이를 닫아서 스프링부트 프로젝트를 종료하면 localhost:8080으로 접근할 수 없게 됩니다.
1.3.2 localhost:8080/hello.html의 의미
서버에 접속할때 사용하는 localhost:8080의 의미는 무엇일까요? 또 그 뒤에 붙이는 hello.html은 어떻게 해석될까요?
- localhost
실행 중인 서버의 주소 중 특별한 주소인 '내 컴퓨터'를 의미합니다. localhost를 IP 주소로 변경하면 127.0.0.1이 됩니다.
-8080
포트번호를 의미합니다. "Tomcat started on port(s):8080..."이란 메시지는 톰캣이 8080번에서 수행되고 있다는 뜻입니다. 톰캣은 웹 서버를 말하는데, 스프링 부트는 이 톰캣에 담겨 실행됩니다.
스프링 부트는 8080에서 기본 실행됩니다. 이 포트번호는 필요에 따라 변경할 수 있습니다.
-hello.html
localhost:8080으로만 접속하면 에러 페이지가 뜹니다. 그 뒤에 hello.html을 붙여 접속해야 원하는 화면을 볼 수 있습니다. 이는 웹 브라우저(클라이언트)에서 요청한 hello.html 파일을 스프링 부트(서버)가 응답으로 보여줬기 때문입니다.
여기서 hello.html은 서버에 요청하는 파일을 말합니다. 웹 브라우저에서 localhost:8080/hello.html로 접속하면 내 컴퓨터의 8080번에서 수행되는 서버에 hello.html 파일을 요청합니다. 이렇게 파일을 직접 지정할 경우 스프링 부트는 기본적으로 src > main > resources > static 디렉터리에서 파일을 찾습니다. 그리고 찾은 HTML 코드를 응답으로 보냅니다.
'스프링부트' 카테고리의 다른 글
6장 게시판 내 페이지 이동하기 (2) | 2025.01.20 |
---|---|
5장 게시글 읽기: Read (1) | 2025.01.20 |
4장 롬복과 리팩터링 (2) | 2025.01.15 |
3장 게시판 만들고 새 글 작성하기: Create (2) | 2025.01.15 |
2장 MVC 패턴 이해와 실습 (2) | 2025.01.13 |