시작하기에 앞서
배포가 뭐임?
📌 배포를 알기 전에 잠깐!! 컴파일과 빌드와 배포의 차이는 알고 있나요?
--본인이 번역가라고 해보자--
1. 영문으로된 글을 한글로 번역하는 것은 컴파일이다.
2. 번역한 글을 책으로 엮는 것은 빌드이다.
3. 완성된 책을 고객들이 읽을 수 있도록 서점에 진열하는 것은 배포이다.
4. 1~2번 과정을 하나로 묶어 '빌드한다'고 하기도 한다.
순서대로 보면 컴파일-빌드-배포지만 “빌드하고 배포하죠” 안에서 빌드는 보통 컴파일을 포함하고 있다.
--프로그래밍적 관점으로 보자면...--
1. 컴파일: 사용자가 작성한 코드를 컴퓨터가 이해할 수 있는 언어로 번역하는 일
2. 빌드: 컴파일된 코드를 실제 실행할 수 있는 상태로 만드는 일
3. 배포: 빌드가 완성된 실행 가능한 파일을 사용자가 접근할 수 있는 환경에 배치시키는 일
4. 혹은 컴파일을 포함해 war, jar 등의 실행 가능한 파일을 뽑아내기까지의 과정을 빌드한다고도 함.
InteliJ에서 JAVA로 코딩을 한다고 해보자.
코드를 짜고 나서 Run 버튼을 눌러 실행시킨다 → 컴파일 + 실행
정상적으로 실행되면 이것을 jar(혹은 war) 파일로 뽑는다. → 빌드
jar 파일을 웹서버에 올린다 → 배포
❗ 즉, 배포란 빌드가 완료된 파일을 사용자가 접근할 수 있는 환경에 배치하는 것!
heroku는 뭐임?
📌 잠깐!! 호스팅에 대해서 알고 있나요?
우리가 일반적으로 말하는 서버는 하나의 컴퓨터라고 보면 된다.
이 서버(=컴퓨터)를 사용자들이 편하게 사용하려면!!
- 24시간 내내 안정적으로 전기를 공급해야 하고
- 빠르고 안정적인 인터넷 회선을 사용해야 하며
- 철저한 보안 시스템을 갖추고 있어야 함
근데 일반인인 우리가 컴퓨터를 24시간 내내 돌리고 있으면…
- 전기세 폭탄!
- 집 와이파이에 의존적!
- V3에게 내맡긴 보안!
그래서 우리같은 나약한 일반인들의 컴퓨터를 살리기 위해 등장한 게 호스팅이다.
❗ 호스팅이란, 서버의 전체 혹은 일부를 이용할 수 있도록 임대해 주는 서비스를 말합니다.
가장 대표적인 호스팅 사이트는 당연히 AWS 다.
하지만 AWS 무료 티어는 임대해 주는 서버 사이즈가 작아서!!!!
스프링 프로젝트 같은 용량이 좀 되는 놈들은 넣자마자 터질 수 있다.(실화)
때문에 트래픽이나 프로젝트 스케일 걱정을 할 필요가 없다면
무료 호스팅 사이트를 써보자!!!
무료 호스팅에는 국내에는 유명한 닷넷, 카페24, 해외에는 netflify, firebase, 기타 등등이 있으나…
우리는 heroku를 쓸 거다. 이유는 다음과 같다.
- 배포가 (정말) 쉽다. 익숙해지면 초기 세팅 초스피드로 할 수 있음 짱
- 웹 호스팅이라 배포가 덜 힘들다.
- 널리 알려진 프론트엔드 친화적 Netflify와 다르게 백엔드 친화적임
- 명령어가 쉬움(딥하게 들어가면 어려운 건 매한가지지만 간단한 배포는 일단 쉬움)
하지만 미리 말해두자면 heroku가 짱이라는 건 아니다. 단점 당연히 있음
- 해외 서비스라 느림(당연함 해외에 있는 컴퓨터를 빌리는 거임)
- 하루에 최대 16시간만 켜둘수 있음
(but, 잠자는 시간 대에 설정해 두면 해결) - 30분동안 서비스 접속이 없으면 sleep 모드로 들어감. 이후 첫 접속시 시간 소요
(however, 자동으로 api 호출하는 서비스 있음) - 인프라를 깊이 다루지 않음
(nevertheless, 이렇게 얕게 인프라를 맛보고 시작하는 것도 나쁘지 않다고 생각함)
본격적으로 배포를 해보자!
0. Heroku를 사용하기 위한 준비
❗ 준비물 : IDE, 터미널, YOU
깃허브 필요없음!! 깃허브에 후크 걸어서 하는 것도 있긴 한데 제가 바빠서 이건 못해봄 ㅈㅅ
0-1. 여기로 들어가 운영체제 맞는 heroku를 설치합니다.
잘 깔렸는지 궁금하면 터미널에 heroku --version
치면 됨
0-2. heroku 회원가입
사이트에서 회원가입만 하면 되니까 PASS
0-3. App 생성
회원가입 하고 나면 대시보드가 나올 텐데 create new app 누르기
차피 연습용이니까 이름은 대충 test-닉네임 하세요
리전은 US랑 UK 밖에 없으니까 US ㄱㄱ
앱 생성하고 Settings 들어가서 Add buildpack 해가지고 gradle 누르고 save 하기
0-4. Heroku CLI로 로그인
터미널에 일케 적으셈 [APPNAME]은 0-3에서 쓴 App name 쓰면 됨
heroku config:add TZ="Asia/Seoul" --app [APPNAME]
그담에 이렇게 써서 헤로쿠에 로그인하셈(암거나 치면 홈피로 이동됨 놀라지 마셈)
heroku login
1. 프로젝트 생성
1-1. 인텔리제이로 스프링 프로젝트 생성
연습용이니까 대충 만드셈요
- 이름 상관없음
- 그룹 상관없음
- 언어 JAVA
- 타입 Gradle
- JDK는 8추천이지만 저는 11로 했습니다(그래서 따로 설정해줘야 하는 게 있음 나중에 설명)
- 패키지 Jar
그 뒤에 뜨는 건 걍 대충 넘겨도 됨
스프링부트 2.5.5 뜨면 그걸로 하고(우리 플젝 버전이 2.5.5임)
없으면 걍 기본으로 가세요 전 2.7.0 이엇음
아 이거 잘 만들어진건가?? 싶으면 인텔리제이 터미널에
./gradlew clean build
라고 치면 됨
대충 BUILD SUCCESFUL 뜨면 된거임
1-2. 프로젝트 세팅
프로젝트가 완료됐으면 인텔리제이 터미널에 git init
이라고 치기
그래야 아래처럼 git이 생김
(+) 브랜치 없으면 main으로 하나 파세요 git checkout -b main
치면 됨
이제 디렉토리를 보면 대충 이렇게 뜰거임
주황색 build 파일은 ./gradlew clean build 치면 나오는 거라 없어도 ㄱㅊ
- build 파일 글자색이 노랗지 않아여
- .gitignore 파일에 build/ 추가하고
git rm -r --cached .
실행git add .
실행- 좀만 기다리면 노랗게 변함
❗ target 디렉토리랑 Procfile 이랑 system.properties를 만들어야 함!! 없으면 이 배포는 죽소
1-3. target 디렉토리
디렉토리 직접 만들 필요 없음!
먼저 build.gradle 맨 아래에 이렇게 적으셈
그 담에 ./gradlew clean build
돌리면 자동으로 생길 거임
(build 할 때 bootJar가 돌아가는데 저 명령어 때문에 target 파일이 생기면서 안에 jar 파일이 생김!)
1-4. Procfile
먼저 src/main/resources에 있는 application.properties를 application.yml로 바꾸고 이렇게 치셈
heroku는 랜덤 포트로 열어주기 때문에 고정시키려면 이래야 함ㅇㅇ
이러고 Prockfile을 루트 디렉토리에서 만들어서 이렇게 치셈
-jar [jar파일명] 에서 jar파일명은 1-3에서 빌드 돌리고 나온 파일명 쓰면 됨
1-5. system.properties
heroku는 기본적으로 자바8로 돌아가서 우리가 버전 설정을 해줘야 함ㅇㅇ
루트 디렉토리에 파일 만들고 이렇게 적으면 됨
1-6. 확인용 API 만들기
build.gradle 에서 dependencies에 아래 코드 추가
implementation 'org.springframework.boot:spring-boot-starter-web
그 담에 배포한 다음에 잘 나오는지 확인하게 간단한 API 구현하면 됨
구현하고 애플리케이션 Run 시키면 로컬 서버에서 작동하는지 확인할 수 있음
여기까지 다 됐으면 커밋하면 됨(그 전에 조금씩 커밋했어도 ㄱㅊ)
2. 프로젝트 배포(드디어!!!)
2-1. heroku 서버와 연결하기
인텔리제이 터미널에 heroku git:remote -a <app-name>
라고 쳐서
님이 0-3에서 만든 헤로쿠 원격 저장소와 연결시키면 됨
그럼 git remote -v
라고 쳤을 때 이렇게 뜰거임(연결된 원격저장소 목록 불러오는 명령어)
오리진은 제가 깃헙에도 연결한 거라 절케 뜬거고 헤로쿠 어쩌구만 뜨면 됨
- Q. 헤로쿠 원격저장의 저긴 뭔 주소죠
- A. 만든 앱 Settings에 들어가면 나오는 info에 걸린 깃 url임
2-2. 진짜진짜 배포하기
마음의 준비가 됐으면 git push heroku
를 하면 됩니다.
이제 실패가 뜨지 않길 기도메타를 하면서 결과를 기다리면 됩니다
무사히 배포가 완료되면 대충 이런 식으로 뜹니다(와!!)
헤로쿠 사이트로 가서 Activity를 클릭하면 빌드가 성사했다는 걸 보여줍니다
저 페이지의 오른쪽 상단을 보면 Open app이 보이죠?
저걸 누르면 우리의 플젝이 배포된 사이트로 이동합니다..
🎉 축하합니다 heroku로 첫 배포를 성공했습니다!!!
배포 후기
배포가 처음인 분들도 있고 아닌 분들도 있을테죠…
처음인 분들에게 좋은 경험이 되길 바라는 마음으로 작성했습니다.
잘못된 부분이나 수정할 부분은 댓글로 편히 남겨주세요.
감사합니다.
참고링크
https://hsik0225.github.io/heroku/2021/12/13/Spring-Boot-Application-배포/
https://hayden-archive.tistory.com/465
https://devcenter.heroku.com/articles/getting-started-with-gradle-on-heroku?singlepage=true
'인프라 슛슈슛슛' 카테고리의 다른 글
[Infra] Github Actions 간단 실습(2) ~ 헤로쿠 배포 ~ (0) | 2022.09.29 |
---|---|
[Infra] Github Actions 간단 실습(1) ~ 빌드및 테스트 ~ (0) | 2022.09.28 |
[Infra] kubernetes 간단 정리 (1) (0) | 2022.06.24 |