이 글은 이동욱 님의 스프링 부트와 AWS로 혼자 구현하는 웹 서비스를 읽고 정리한 글입니다.
내용보다 중요한 점, 추가적으로 알아본 것 등을 위주로 적었습니다.
http://www.yes24.com/Product/Goods/83849117
많은 사람들의 리뷰, 추천으로 이 책을 정리하려 한다.
스프링부트의 기본을 알고, 그것을 통해 AWS를 접하고자 하는 사람에게 좋을 것 같아서 이 책으로 결정했다.
01장. 인텔리제이로 스프링 부트 시작하기
인텔리제이 소개
이 책에서는 스프링 부트 개발의 IDE 중 인텔리제이를 채택했다.
보통 자바 웹 개발에서 대표적인 개발 도구는 이클립스이다. 보통 자바를 학습할 때에는 이클립스, 스프링을 학습할 때에는 인텔리제이를 많이 쓰는 것 같다.
자바를 학습할 때 이클립스를 써오던 관성이 지금까지 남아있는 것 같다. 많은 자바의 학습자료들이 이클립스를 사용하고 있어 자바 언어 자체를 학습할 때는 이클립스를 더 많이 사용할 수 밖에 없는 것 같다.
반면 스프링은 최근에 나와, 발전된 IDE인 인텔리제이를 표준으로 사용하고 이것을 바탕으로 학습자료들이 만들어지고 있는 것 같다.
이클립스는 무료인 것에 반해 인텔리제이는 커뮤니티 버전(무료)에 제한되는 것이 있다. 커뮤니티 버전도 다음과 같은 것들을 지원하므로 스프링 부트 개발에 크게 어려움이 없다.
- 자바 개발에 대한 모든 기능 지원
- Maven, Gradle과 같은 빌드 도구 기능 지원
- 깃 & 깃허브와 같은 VCS(버전 관리 시스템) 기능 지원
- 스프링 부트의 경우 톰캣과 같은 별도의 외장 서버 없이 실행 가능
다만, HTML과 CSS, JS에 대한 지원이 없다. 또한 SQL 등에 대한 지원도 부족하다.
단, 인텔리제이 얼티메이트(유료)는 학교 메일이 있는 학생들에게 1년간 얼티메이트 버전을 무료로 사용할 수 있도록 해준다.
JetBrain에서 학생들을 위한 1년 무료 패키지에 들어있다.
학교 메일이 있는 학생들은 젯브레인(Jetbrain)에 해당 계정으로 로그인해서 1년간 무료로 사용해보자.
https://www.jetbrains.com/community/education/#students
프로젝트 생성하기
이 책에서는 build.gradle의 역할과 의존성 추가 방법을 익히기 위해 start.spring.io(스프링 이니셜라이저)를 사용하지 않고 그레이들 프로젝트를 직접 생성한 뒤 스프링 부트 프로젝트로 변경해본다.
단, 정리하는 데에 편의를 위해 스프링 이니셜라이저로 프로젝트를 생성하고 build.gradle을 분석해보겠다.
책에 나온 예시들과 다른 부분들이 얼핏 보인다. 이 부분들을 중점적으로 찾아보았다.
//책의 기존 코드
buildscript {
ext {
springBootVersion = '2.1.7.RELEASE'
}
repositories {
mavenCentral()
jcenter()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
//변경된 코드
plugins {
id 'java'
id 'org.springframework.boot' version '3.0.1'
id 'io.spring.dependency-management' version '1.1.0'
}
다른 블로그를 찾아보니 변경에 대한 내용을 찾을 수 있었다.
정확한 파라미터와 버전을 사용해서 적용시기를 세밀하게 제어하여 최적화를 돕는다고 한다.
https://doughman.tistory.com/19
또한 책에서 소개된 jcenter()를 build.gradle에 추가하려 했지만 deprecated 되었다고 떴다.
책에서는 mavenCentral에서 jcenter로 repository사용이 넘어가고 있다고 했는데, 어떻게 된 일인지 찾아보았다.
원인은 정확히 알 수 없지만, 여러 기술적이고 경제적인 사정으로 jcenter를 운영하는 JFrog가 2021년 3월 31일, JCenter를 읽기 전용으로 변경, 즉 지원을 중단했다.
현재 거의 모든 곳에서 기본적으로 repository를 mavenCentral을 쓰는 것 같지만, 책에도 나와있고 검색도 해보니 단점도 꽤 많은 저장소이다. 앞으로 어떤 저장소로 바뀔지, 아니면 계속 mavenCentral을 많이 쓸지 궁금하다.
https://developer.android.com/studio/build/jcenter-migration
다음으로 책에서 설명한 dependencies 부분도 보자.
//책의 기존 코드
dependencies {
compile 'org.springframework.boot:spring-boot-starter-web'
testCompile 'org.springframework.boot:spring-boot-starter-test'
}
//변경된 코드
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
compile은 implementation을 포함하는 개념이다. implementation이 가져오는 의존성 말고도 한참 더 많은 의존성을 가져온다.
이는 비합리적으로 볼 수 있다. 따라서, 보통 implementation을 사용한다고 생각하면 된다.
또한, 지금 compile은 deprecated되었고, api로 대체되었다.
책이 나온지 몇 년이나 됐다고 많은 내용이 바뀌어 놀랍다...
https://bcp0109.tistory.com/340
이와 같은 변경점때문에 지금은 의존성 추가를 할 때 보통 implementation 한 줄이면 끝난다.
build.gradle을 변경하면 해당 파일 오른쪽 상단에 gradle의 아이콘이 뜨고, 누르면 다시 컴파일해서 의존성을 새로고침한다.
만약 새로고침을 하고 싶은데 아이콘이 뜨지 않는다면 오른쪽 gradle 탭을 열어 새로고침 버튼을 누르면 된다.
인텔리제이에서 깃과 깃허브 사용하기
Git은 버전 관리 서비스로, 자신과 팀의 코드들을 저장하고 관리하는 데 쓰인다.
이제 Git은 협업하는 데 기본이므로 몰라서는 안된다.
또한 IDE가 제공하는 Git의 여러 버튼이나 구성들을 사용하지 않고 터미널 창에서 직접 명령어를 치는 것이 도움이 될 것이다.
나는 책과 다르게 Git 명령어를 직접적으로 사용해 Git과 연동하도록 하겠다.
프로젝트를 처음 생성한 경우
github의 repository를 처음 만들면 대문짝만하게 나오는 내용이니 크게 어렵지 않게 따라할 수 있을 것이다.
-현재 프로젝트는 Git과 상관없는 프로젝트이다. ".git"파일을 만들어 Git과 관련있는 프로젝트로 만들기 위해 git init 을 실행한다.
이러면 왼쪽 하단 탭과 상단 탭에 있던 VCS(Version Control System)이 Git으로 바뀌면서 프로젝트가 Git에 연동된다.
-이제 책에 나와있는 것처럼 .gitignore를 관리해야 한다. 특히 .idea 안의 workspace.xml이라는 파일은 개인 컴퓨터와 관련있는 파일이므로 push하면 다른 사람들의 파일과 충돌이 계속 난다. 만약 프로젝트 진행 중에 이러한 문제가 생기면 골치아프니 처음부터 .gitignore를 잘 설정하는 것은 매우 중요하다.
책과 같이 .gradle과 .idea 만 제외해도 당장은 문제가 없지만, .gitignore에 담아야 할 코드들을 자동으로 생성해주는 페이지가 있다.
사이트에 접속해 java, gradle, windows, macOS, intelliJ 등 자신이 사용하는, 혹은 자신의 팀원이 사용하는 모든 것들을 입력하고 코드를 생성해 .gitignore 파일에 복사한다. 반드시 프로젝트 생성 직후 해주자.
- 다음으로 add를 해서 unstaged file을 staged file로 변경해주자. "git add ." 을 실행하면 .이 있는 모든 파일을 add한다는 뜻이다.
- 그 후 commit을 해 로컬 저장소에 저장한다. "git commit -m "first commit""과 같이 실행하면 된다.
만약 -m 옵션 없이 실행하면 커밋 메시지를 입력하는 vim 편집기가 나온다. 커밋 메시지를 길게 입력해야 하지 않는 이상 -m 옵션을 사용하자.
-이제 push로 원격 저장소에 업로드하면 끝난다. 하지만 아직 원격 저장소에 연결되어 있지 않은 상태이다.
원격 저장소를 github에서 생성하자. 생성하고 돌아와서 원격 저장소에 연결하면 된다.
-"git remote add origin 원격_저장소의_주소" 를 실행하면 된다. 이러면 그 원격 저장소와 연결되고 origin이 원격 저장소의 주소가 된다. 단, 내용을 처음 fetch(혹은 pull) 할 때 깃허브 계정에 로그인을 해야한다.
-이제 "git push origin main"을 실행하면 첫 push는 끝나는 것이다.
'스프링부트와 AWS로 혼자 구현하는 웹 서비스' 카테고리의 다른 글
08장 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - EC2 서버에 프로젝트를 배포해 보자 (0) | 2023.02.10 |
---|---|
06,07장 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - AWS 서버 와 데이터베이스 환경을 만들어보자 - AWS EC2, RDS (0) | 2023.02.03 |
03장 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 스프링 부트에서 JPA로 데이터베이스 다뤄보자 (0) | 2023.01.20 |
02장 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 스프링 부트에서 테스트 코드를 작성하자 (0) | 2023.01.20 |