1장 스프링부트 개발 준비하기 1-01, 1-02 요약 (스프링부트 개념, 개발환경 준비, 프로젝트 생성)
https://wikidocs.net/book/7601
점프 투 스프링부트
"점프 투 스프링부트"는 "Spring Boot Board(SBB)"라는 이름의 게시판 서비스를 만들어가는 과정을 설명한 스프링부트 입문서이다. 자바 설치부터 시작하여 서비스 운…
wikidocs.net
아래 서술한 내용은 "점프 투 스프링부트"를 공부하고 복습 겸 요약하여 작성한 내용입니다.
무료로 전자책을 배포해주신 박응용 님께 감사의 인사를 드립니다!
* 개념적인 부분은 대부분 서술하였으나 생략된 내용이 있을 수 있습니다.
* 개인적으로 공부한 내용을 추가하여 서술한 부분이 있습니다.
1-01 스프링 부트란?
스프링부트 Spring Boot
- 웹 프로그램(웹 애플리케이션)을 쉽고 빠르게 만들 수 있도록 도와주는 자바의 웹 프레임워크.
- 스프링 프레임워크에 톰캣 서버를 내장하고, 여러 편의 기능들을 추가한 것.
- 웹 프로그램을 쉽고 빠르게 만들어주는 장점이 있다.
* 톰캣 : 클라이언트의 요청을 해석하여, 그에 맞는 자바 프로그램을 실행한 후, 결과를 응답해주는 웹 애플리케이션 서버 (WAS)
* WAS(Web Application Server) : 웹 애플리케이션과 서버 환경을 연결하는 중간 역할을 하는 소프트웨어.
사용자가 웹 브라우저로 서버에 요청을 보내면, WAS는 사용자의 요청을 해석하여 그에 맞는 서버를 구동한 후, 그 결과를 사용자에게 보여준다.
WAS의 종류로는 아파치 톰캣(tomcat), 오라클 웹로직(Weblogic), IBM 웹스피어(WebSphere), 제이보스(JBoss), 와일드플라이(WildFly), 제우스(Jeus) 등이 있다.
웹 프레임워크란?
- 웹 프로그램을 만들기 위한 스타터 키트
- 쿠키, 세션 처리, 로그인/로그아웃 처리, 권한 처리, 데이터베이스 처리 등,
웹 프로그램을 완성하기 위해 만들어야 하는 기능들을 미리 만들어둔 것
- 개발자는 위에 나열한 기능들을 직접 개발할 필요 없이 사용법을 익혀서 활용하기만 하면 된다.
- 스프링부트는 자바로 만든 웹 프레임워크 중 하나이다.
스프링부트를 배워야 하는 이유
- 튼튼한 웹 프레임워크이다.
SQL 인젝션, XSS, CSRF, 클릭재킹 같은 보안 공격을 막아준다.
이러한 보안 공격을 막아주는 코드를 짤 필요가 없음.
* SQL 인젝션 : 악의적인 SQL을 주입하여 공격하는 방법
* XSS(cross site scripting) : 자바스크립트를 삽입하여 공격하는 방법
* CSRF(cross site request forgery) : 위조된 요청을 보내는 공격 방법
* 클릭재킹 : 사용자가 의도하지 않은 클릭을 유도하는 공격 방법
- 스프링부트에는 여러 기능이 준비되어 있다.
로그인 기능, 페이징 기능 등 웹에 필수적으로 필요한 기능들이 아주 잘 만들어져 있다.
이미 만들어져 있는 기능을 새로 만들지 말고, 활용할 수 있는 능력도 필요하다.
- 스프링부트는 WAS가 필요없다.
스프링부트 대신 스프링을 사용하여 웹 애플리케이션을 개발한다면, 서비스를 실행할 톰캣과 같은 WAS가 필요하다.
WAS의 종류는 매우 다양하고 설정 방식도 제각각이어서 공부할 내용이 상당하다.
그러나 스프링부트에는 톰캣이 내장되어 있고, 설정도 자동 적용되기 때문에 WAS를 신경 쓸 필요가 없다.
또한, 배포되는 jar 파일에도 톰캣 서버가 내장되어 실행되므로, 서로 다른 WAS들로 인한 문제들도 사라진다.
* 스프링부트로 작성하더라도, 톰캣 대신 다른 WAS 사용 가능
* jar 파일 : 자바 클래스들을 담고 있는 압축파일
- 스프링부트는 설정이 쉽다
스프링은 복잡하고 어렵다.
애써 세팅한 기능도 버전업으로 인해 변경되거나 삭제되는 일도 많다.
스프링의 복잡한 설정을 자동화, 단순화하여 쉽게 스프링을 사용할 수 있게 한 프레임워크다.
* 파이썬으로 작성된 장고(Django), 루비로 작성된 레일즈(Rails)와 같은 웹 프레임워크들은 코드가 간결하다는 장점이 있다.
1-01 스프링 부트 개발 환경 준비하기
- JDK 설치하기
https://www.oracle.com/java/technologies/downloads/
2024.12.10 기준 가장 최신버전은 JDK23 버전이나, 구글검색으로 17버전을 다운받았다.
위 링크에서 알맞은 OS를 선택 후, x64 MSI Installer 를 클릭하여 설치하면 된다.
일반적인 설치 경로는 다음과 같다.
C:\Program Files\Java\jdk-17
설치가 잘 되었다면 명령프롬프트 창에서 명령어 입력하여 버전확인을 반드시 해보자.
다음과 같은 명령어 입력했을 때 버전이 뜨지 않고 다른 문구가 나온다면 환경변수 설정을 해보자!!
* JDK(Java Development Kit) : 자바 프로그래밍에 꼭 필요한 도구?소프트웨어? 모음집
JDK는 자바로 코드를 실행하는 도구와, 코드를 번역하는 컴파일러 등으로 이루어졌다.
- STS 설치하기
2024.12.10 기준 가장 최신버전은 4.27.0 버전이나, 나는 4.24.0 버전을 사용하고 있다.
본인의 OS에 맞게 X86_64 파일을 다운받으면 된다.
다운받은 후, 폴더 채로 tools 아래로 옮겨주었다.
해당 폴더 안에 exe 파일을 클릭하면 STS를 실행할 수 있다.
* STS는 IDE(Integrated Development Environment)의 한 종류이다.
IDE는 '통합개발환경'이라고도 하고, 코드 작성을 도와주는 도구라고 보면 된다.
스프링부트 IDE 중 가장 추천되는 것이 STS이다.
STS는 스프링 개발에 최적화된 에디터로, 이클립스 기반으로 제작되었다.
*스프링부트 기반 개발시 인텔리제이도 많이 사용한다.
인텔리제이 사용시, community 버전(무료 버전)보다 ultimate 버전(유료 버전)을 추천함.
무료버전은 스프링부트 지원이 적어서 자동 리로딩같은 설정에 시간이 많이 필요하다.
무료이면서 안정화된 STS 쓰는게 더 낫다고 판단됨
- 실습 프로젝트 만들기
Create new Spring Starter Project 선택하여 만들자.
세팅은 아래와 같이 설정한다.
Name : 프로젝트 이름
Type : 프로젝트 관리하는 도구를 선택하는 항목, 기본값은 Gradle-Groovy
Packaging : 기본값은 Jar (스프링부트로 개발시 Jar로 하자)
Java Version : 위에서 설치한 JDK 버전을 선택한다. 17버전 이상이 권장된다.
Spring Boot Version 은 스냅샷이 달리지 않은 가장 최신 버전을 선택한다.
Available에 web 이라고 검색하면 나오는 'Spring Web'을 선택 후, Finish 해준다.
dependencies {
//Spring Web
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
//코드수정시 자동 서버재기동
developmentOnly 'org.springframework.boot:spring-boot-devtools'
//롬복
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
//H2 DB
runtimeOnly 'com.h2database:h2'
//jpa
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
//타임리프 html템플릿
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect'
//폼클래스 사용시 필수값 체크하는 validation 라이브러리
implementation 'org.springframework.boot:spring-boot-starter-validation'
//스프링 시큐리티
implementation 'org.springframework.boot:spring-boot-starter-security'
//타임리프 템플릿 엔진과, 스프링 시큐리티를 함께 사용할 때 필요한 타임리프 확장기능
implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity6'
//마크다운
implementation 'org.commonmark:commonmark:0.21.0'
/* 버전정보입력하는 이유 : 스프링부트가 관리하지 않는 라이브러리일 때 작성함.
스프링부트가 관리하는 라이브러리일 경우, 스프링부트가 자동으로 가장 잘 맞는 버전을 선택하므로
라이브러리 호환성을 생각하면 버전정보는 따로 입력하지 않는게 좋다.
*/
}
파일명:build.gradle
* 위의 코드는 실습을 모두 완료한 후에 작성된 모든 내용이다. 참고만 하자
* 실습을 진행한 최초 시점에서는 교재의 흐름대로 Spring Web만 추가해서 Finish 하였다.
프로젝트 생성 후, JDK 설정이 맞게 되었는지 체크한다.
- 프로젝트 선택 후, STS 상단의 [File -> Properties] 클릭
- [Java Build Path -> Libraries] 클릭하여 JRE System Library가 위에서 다운로드한 JDK 버전과 맞는지 체크한다!
나의 경우 JRE System Library[JavaSe-17] 로 세팅되어 있다.
만약 버전이 다를 경우 JRE System Libary[JavaSe-17] 우측에 (unbound)라는 표시가 떠있을 것.
- 오류 표시가 있는 JRE System Library 선택 후 [Edit] 클릭
- 이어 등장한 창에서 Alternated JRE 선택 후, [Installed JREs] 클릭
- Preferences 화면에서 [Add] 클릭
- Add JRE의 JRE Type 화면에서 'Standard VM' 선택 후 Next
- Add JRE의 JRE Definition 화면에서 JRE home을 JDK 다운받았던 경로를 선택 후 Finish
나의 JDK 설치 경로는 C:\Program Files\Java\jdk-17 이다.
- Preferences 화면에 방금 등록한 jdk가 추가되어있는데, 해당 jdk 선택 후 Apply and Close 하면 된다.
* 이후에도 Problems 탭에 Warnings 항목이 뜬다면, 우클릭 후 Quick Fix 클릭하여 해결하면 된다.
Problems 탭이 보이지 않는다면 상단 [Window -> Show View] 에서 찾아보면 된다.
* 내용이 많아 요약 작성했다. 위의 자세한 과정이 필요하다면, 아래 링크를 참고하면 된다.