[인프런 워밍업 클럽 BE]3주차 강의 정리 + 마지막 회고
이 문서는
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지] 강의 - 인프런 (inflearn.com)
강의와 연관 스터디 내용을 정리하였습니다
배포
: 최종 사용자에게 소프트웨어를 전달하는 과정 = 전용 컴퓨터에 우리의 서버를 옮겨 실행시키는 것
지금까지는 자신의 컴퓨터에만 코드, 스프링, DB가 존재했다. 만약 누군가 우리의 사이트에 접속하도록 만드려면? 몇 가지 문제가 존재한다.
컴퓨터를 24시간 내내 켜둘 수가 없다!
우리 컴퓨터를 온전히 서버를 위한 것들만 실행시키고 있을 수가 없다!
이 문제를 방지하기 위해서 전용 컴퓨터에 코드를 옮기고 스프링과 mysql이 설치 후 접속하게 만들 것 이다.
그렇다면 그 전용 컴퓨터는 어떻게 마련해야 할까.
=> AWS를 이용해서 대여하자.
AWS에서 대여 시 알아야 하는 부분이 존재한다. 우리는 보통 가정용 컴퓨터에서 mac이나 윈도우를 OS로 이용하지만, 서버용은 대부분 리눅스로 돌아간다!
profile과 H2
배포를 진행하기 전, 한 가지 과정을 더 거쳐보자.
자신의 컴퓨터와 전용 컴퓨터에서 사용할 환경을 다르게 설정해보자. (서버 코드는 동일하다.)
local profile에서는 H2 DB dev profile에서는 MySQL
H2 DB: 경량 데이터베이스, 메모리에 데이터를 저장(휘발) → 개발 단계에서만 사용!
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: "..."
password: "...."
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
설정한 profile에 맞춰 실행해보자!
Run/Debug Configuration > active profiles 에 적용할 profile 이름 지정
설정 후 실행을 하면 아래와 같은 로그가 나온다.
이제 H2 console로 접속해보자.
우리가 application.yml 에 path: /h2-console
이 부분을 작성하였기 때문에, localhost:8080/h2-console 로 접속이 가능하다!
JDBC url에는 yml에 작성한 url을 그대로 입력하면 된다.
git/github
git: 코드를 쉽게 관리할 수 있도록 해주는 버전 관리 프로그램
github: git으로 관리되는 프로젝트의 코드가 저장되는 저장소
github 왜 사용할까? → 내 컴퓨터에 있는 코드가 알 수 없는 이유로 소실되어도 대비 가능! 전용 컴퓨터와 내 컴퓨터와의 연결점
github 간단 사용법
저장소(레포지토리) 생성
이름과 간단한 설명 작성
private / public 여부 설정
생성!
참고로 github 홈페이지에서 하나하나 레포지토리를 생성하지 않고 intellij에서 간편하게 연동하는 법도 있다!
아래 블로그에 자세한 사용법이 있으니 참고하자.
필수로 알아야 하는 git 명령어
git init : 이 프로젝트를 git이 관리함을 알려주는 명령어
git remote add origin [저장소 주소] : 저장소를 설정
git add . : 변경된 모든 파일을 담아라
git add 파일명 : 특정 파일만 담아라
git status : 현재 상태 확인
git reset : add로 담았던 파일 다시 빼기
git commit -m "메시지 내용~" : add로 담았던 파일 commit (송장만 붙인 상태로 이해하자)
git config --global user.email "이메일 주소" : git hub의 이메일과 github의 username 작성
git config --global user.name "이름"
git push --set-upstream origin master : 최초 1회 권한 허가
git push : 저장소에 commit한 파일들 넣기
.gitignore : git이 관리하지 않을 폴더나 파일을 설정
build/
.gradle/
.idea/
AWS EC2에서 Linux 명령어 사용
EC2에 접속하는 법
다운로드 키페어 이용:
우리가 접속하려는 EC2의 IP 주소, 이전에 다운로드 받은 키 페어 필요
git CLI(git Bash) 혹은 Mac terminal로 접속
AWS에서 직접 연결 < 편리! 단, 서버가 많아지면 조금 불편
linux 명령어
mkdir : 폴더 생성
ls : 현재 위치에서 파일이나 폴더 확인
ls -l : 조금 더 자세한 정보 확인
drwxrwxr-x (-l 옵션으로 확인 가능한 정보)
맨 앞의 d: 폴더
r: 읽기 권한 / w: 쓰기 권한 / x: 실행 권한
폴더 소유자의 권한 / 폴더 소유 그룹의 권한 / 아무나 접근했을 때의 권한
cd : 폴더 안으로 들어가기
pwd : 현재 위치 확인
cd .. : 상위 폴더로 이동
rmdir : 비어있는 폴더 제거
build.gradle의 이해
: gradle을 이용해 프로젝트를 빌드하고 의존성 관리. groovy / kotlin 중 이용
plugins 블럭 - 플러그인을 추가
org.springframework.boot: 스프링 빌드 시 실행가능한 jar 파일이 발생하도록 함, 애플리케이션 실행을 돕고 다른 플러그인의 적용 도움
io.spring.dependency-management: 외부 라이브러리, 프레임워크 버전 관리 도움, 의존성 처리
group, version, sourceCompatibility - 그룹 명, 프로젝트 버전, 사용 중인 JDK 버전
repositories - 외부 라이브러리/프레임워크를 가져오는 장소 설정
dependencies - 사용할 라이브러리/프레임워크 표시. implementation은 의존성 항시 사용, runtimeOnly는 코드 실행시에만 의존성 사용
마치며...
드디어 스터디 마지막 주차다! 뭔가 정신없이 지나간 것 같으면서도 오랜만에 성실하고 꾸준한 학습을 한 것 같아서 보람을 느끼고 있다. 인프런에서 진행하는 스터디는 이번에 처음 참여해본 것이었는데, 망설임 없이 신청하길 잘한 것 같다.
사실 이번주 강의는 미니 프로젝트 진행에 급급해 지난 주차에 비해 성실하지 못하게 학습한 것 같았다. 배포 연습 진행 중, mysql 비밀번호 수정 시 약간의 트러블이 생겨 삽질을 오래 하느라 아직 다 실습하지 못한 상태로 남아있다... 비밀번호 초기화가 마음처럼 안 된다. 우선 EC2 컴퓨터를 지우고 다시 처음부터 진행해봐야겠다.
당장 토요일에 sqld 시험도 있고, 프로젝트는 기능 구현에만 급급한 상태라 에러 처리라던가 테스트 코드가 정말 미흡하다...같이 코드 리뷰 하는 분들의 테스트 코드를 보면 정말 반성을 하게 된다 😂😂 그래도 강의에서 사용하지 않은 여러 방법을 사용하거나 찾아보기도 하고 얻어가는 것도 많았다 (복합키 적용, validation 적용 등...). 자격증 시험이 끝나면 프로젝트에 미흡한 부분들을 보완하고 추가적인 공부를 하며 사이드 프로젝트를 대비해야 할 것 같다!