[인프런 워밍업 스터디 클럽 1기 BE] 세번째 발자국
Section - 6 생애 최초 배포 준비하기
배포란?
배포
최종 사용자에게 SW를 전달하는 과정
전용 컴퓨터에 Spring과 MySql 등이 설치되고 코드가 작성된 우리의 서버를 옮겨 실행시키는 것이다.
AWS(Amazon Web Service)같은 클라우드 서비스에서 서버를 빌릴 수 있다.
Profile
똑같은 서버 코드를 실행시키지만 실행 환경에 따라 설정을 다르게 한다.
데이터베이스 설정, 외부 API 키 등...
똑같은 서버 코드를 실행시키지만, local 이라는 profile을 입력하면, H2 DB를 사용하고, dev 라는 profile을 입력하면 MySQL DB를 사용하게 한다.
H2 DB
경량 Database로 개발 단계에서 많이 사용하며 디스크가 아닌 메모리에 데이터를 저장할 수 있다.
데이터가 휘발될 수 있다.
개발 단계에서는 변경이 잦기 때문에 오히려 휘발 되는 것이 장점일 수도 있다.
application.yml
수정
spring:
config:
activate:
on-profile: local
datasource:
url: "jdbc:h2:mem:library;MODE=MYSQL;NON_KEYWORDS=USER"
username: "sa"
password: ""
driver-class-name: org.h2.Driver
jpa:
hibernate:
ddl-auto: create
properties:
hibernate:
show_sql: true
format_sql: true
dialect: org.hibernate.dialect.H2Dialect
h2:
console:
enabled: true
path: /h2-console
---
spring:
config:
activate:
on-profile: dev
datasource:
url: "jdbc:mysql://localhost/library"
username: "root"
password: 1234
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
ddl-auto: none
properties:
hibernate:
show_sql: true
format_sql: true
dialect: org.hibernate.dialect.MySQL8Dialect
git과 github란?
git
코드를 쉽게 관리할 수 있도록 해주는 버전 관리 프로그램
다양한 버전으로 개발된 프로그램들을 손쉽게 합치고 관리해 준다.
GitHub
git으로 관리되는 프로젝트의 코드가 저장되는 저장소
GitHub에 저장하는 이유
내 컴퓨터에 있는 코드는 모종의 이유로 소실 될 수 있다.
배포 과정에서 소스 코드를 옮길 때 활용할 수 있다.
git 기초 명령어
작성한 코드 원격 저장소에 올리기
# 해당 프로젝트를 git이 관리하도록 함
git init
# github 저장소와 git 프로젝트를 연결
git remote add origin [repository 주소]
# 모든 파일을 추가
git add .
# 특정 파일/폴더만 추가
git add [파일/폴더 이름]
# 현재 add한 상태를 확인
git status
# 현재 add된 파일들을 다 제거
git resest
# add한 파일을 메시지와 함께 묶는 커밋
git commit -m “메시지”
# 커밋한 파일을 github 저장소로 보냄
git push
# git push 하는 경우 최초 1회는 반드시 실행해주어야 함
git push --set-upstream origin master
.gitignore
이 파일 안에 작성된 폴더나 다른 파일들이 git에 의해 추적되거나 관리되는 것을 방지함
build/
.gradle/
.idea/
AWS EC2
Elastic Compute Cloud
탄력적으로 사용할 수 있는 원격 컴퓨터
언제든지 필요할 때 빌리고 반납할 수 있다.
Section - 7 생애 최초 배포하기
EC2 접속방법
다운로드 받은 키 페어(pem key)를 이용하는 방법
접속하려는 EC2의 IP 주소
다운로드 받은 키 페어
접속하기 위한 프로그램(git CLI or Mac Terminal)
키 페어의 권한을 닫아준다. (보안 처리)
chmod 400 경로/키페어명.pem
보안 처리가 되어야만 접속이 가능하다. 만약, 처리가 되지 않고 접속을 시도하면 unprotected private key file을 사용하고 있다며 접근 자체가 거부 된다.
접근 명령어ssh -i 경로/키페어명.pem ec2-user@IP
AWS 콘솔을 활용하는 방법
AWS ec2 웹사이트에 접속해서 연결 버튼을 통해 연결한다.
기본적인 리눅스 명령어
# 폴더를 만드는 명령어
mkdir folder1
# 현재 위치에서 폴더나 파일을 확인하는 명령어
ls
# 조금 더 자세한 정보를 확인
ls -l
drwxrwxr-x 2 ec2-user ec2-user 6
# d : folder1은 폴더이다.
# r : 읽는 권한, w : 쓸 수 있는 권한, x : 실행 권한
# rwx/rwx/r-x
# 폴더 소유자의 권한 / 폴더 소유 그룹의 권한/ 아무나 접근했을 때의 권
# 2 : 폴더에 걸려 있는 바로가기 개수
# ec2-user : 폴더 소유주의 이름
# ec2-user : 폴더 소유 그룹의 이름
# 6 : 폴더(파일의 크기) 단위 : byte
필요한 프로그램 설치하기
코드를 가져오기 위한 git 설치
서버를 구동하기 위한 java 설치
데이터베이스 역할을 하는 MySQL 설치
GitHub에서 코드 가져오기
git clone [레포지토리 주소]
EC2 Swap 설정
Swap 설정 : RAM이 부족할 경우 일부 DISK를 사용하게 해준다.
# swqp 메모리 할당
sudo dd if=/dev/zero of=/swapfile bs=128M count=16
# swqp 파일에 대한 권한 업데이트
sudo chmod 600 /swapfile
# swap 영역 설정
sudo mkswap /swapfile
# swap 파일 사용 설정
sudo swapon /swapfile
# swap 성공 확인
sudo swapon -s
빌드하기
# gradlew를 사용할 수 있도록 쓰기 권한 설정
chmod +x ./gradlew
# gradle을 이용해 테스트를 돌리지 않고 프로젝트 빌드
./gradlew build -x test
서버 실행하기
java -jar build/libs/[빌드한 파일명.jar] --spring.profiles.active=dev
foreground vs background
foreground
우리가 보고 있는 프로그램
ex) PDF 프로그램이 foreground 프로그램
background
우리가 보고 있지 않은데 실행 중인 프로그램
ex) 컴퓨터에서의 백신 프로그램
c2 접속을 종료해도 서버가 종료되지 않도록 하려면 서버를 background로 동작하게 해야 함
nohup [명령어] &
background 서버 다운
ps aux
: 현재 실행중인 프로그램 목록을 확인ps aux | grep java
:java
가 들어가는 프로그램을 확인(각 프로그램의 고유 번호 확인)kill -9 프로그램번호
: 해당 프로그램을 종료
DNS 적용
가비아에서 도메인 구매
DNS 레코드 수정
타입 : A
호스트 : www
값/위치 : EC2에서 빌린 인스턴스의 퍼블릭 IP 주소
Section - 8 Spring Boot의 이모저모
build.gradle
빌드 스크립트
gradle을 이용해 프로젝트를 빌드하고 의존성을 관리하기 위해 작성
plugins
: 프로젝트에 적용하고 싶은 플러그인 추가group
: 프로젝트의 그룹version
: 프로젝트의 버전sourceCompatibility
: 프로젝트가 사용하고 있는 JDK 버전repositories
: 외부 라이브러리나 프레임워크를 가져오는 장소 설정dependencies
: 우리가 사용하는 라이브러리/프레임워크 표시tasks.named('test')
: 테스트를 수행할 때 사용할 프레임 워크
Spring Boot의 특징
간편한 설정
xml
대신 어노테이션 기반의 설정 가능기본적으로 필요한 것을 모두 자동 설정
간단한 의존성 관리
의존성을 필요한 것끼리 묶어
starter
로 관리필요한 라이브러리나 프레임워크 하나 하나 적을 필요 없음
강력한 확장성
starter
추가만으로 필요한 기술을 도입할 수 있음
application.yml
YAML 문법 사용
.yaml
또는.yml
: YAML의 확장자기본적으로 key : value 형식으로 데이터 정의
각 계층은 들여쓰기를 통해 구분 (이를 통해 중복 제거)
value로 들어갈 수 있는 타입 : 참/거짓, 숫자, 문자열(큰 따옴표 사용)
배열은
-
사용
#
로 주석 표현
application.properties
applicatoin.yml 대신 사용 가능
key : value 형식으로 데이터 기록
들여 쓰기를 통해 중복을 제거할 수는 없음
application-프로파일 이름.properties
파일을 새로 만들어 profile 설정가독성 떨어짐
lombok
생성자, getter, setter, equals, toString 등 반복되는 보일러 플레이트 코드(boiler palte code)를 자동으로 생성해줌(반복되는 코드 제거)
lombok 도입을 위한 설정
lombok 의존성 추가
IntelliJ lombok 플러그인 추가
intelliJ Annotation Processor 설정
과제
블로그를 찾아보며 겨우 혼자 배포한 경험이 있었는데 이렇게 다시 배포의 과정을 차근차근 배워볼 수 있어서 좋았다. 완강을 해서 뿌듯했고 앞으로 남은 미니 프로젝트도 잘 마무리할 수 있으면 좋겠다.
댓글을 작성해보세요.