앞으로의 계획
- 크레딧을 가지고 전체 배포와 인프라 쪽을 옮겨오는 작업
- CI/CD 안 되어 있음. 기존에는 손배포 진행 -> jar 로컬에서 만들어서 scp 후 run
- CI는 github action 으로 되고 있음. CD도 github action을 쓸 것이다. jenkins를 좀 더 실무에서 많이 쓴다.
- 쓰는 이유: jenkins의 플러그인들이 다양하고, 플러그인을 사용하기 위해 어쩔 수 없이 쓴다.(Circle CI) 커스텀이 편해서 대부분의 회사가 쓴다.
- 안 쓰는 이유: 새로 구축하는 것이 귀찮다. 젠킨스용 서버를 따로 띄워야 해서 계속 관리를 해주어야 한다. (번거로움)
- 손배포 할 때 메모리가 터진다. t4g.micro는 메모리가 딸리는데 jenkins 빌드할 때는 메모리가 중요하다.
./gradlew bootJar
는 메모리가 필요하다. 그러나 스왑 메모리 설정을 하면 매우 느리다. - 서버 관리 필요 없고, 메모리 관리가 필요 없는 github action을 쓸 것이다.
- CI github action (확정)
- CD github action (예정)
기존 서버 설명
- EC2
- 실제 서버 application
- 스프링 서버
- 내부에서 ssl 설정을 해줄 수 있지만 안하는 이유? : 스프링 서버는 application(api 제공)의 역할만 해야 한다.
- ssl을 수행할 수는 있지만, ssl을 관리하는 역할을 수행하면 안 된다.
- nginx
- ssl 인증을 할 때 443 포트로 요청을 한다. ssl redirect, dns 요청을 처리하는 역할
- 통신 전반에 대한 처리를 수행한다.
- https -> http + ssl 인증서
- 스프링 서버
- 테스트용 데이터베이스 서버
- 실제 서버 application
- RDS (프리티어 사용할 예정)
- 실제 서버 데이터베이스
- 호스팅
- 가비아 (블링)
- 모두 수행한 후에 블링에게 옮겨달라고 요청하면 된다.
오늘 해야 하는 것
기존 인프라 구조 가져오기
- aws ec2 테스트용 데이터베이스를 가져와서 로컬에 저장해둔다.
- 성능 테스트용 데이터베이스 (리뷰 데이터가 1000만~2000만건이 들어가있다.)
- aws rds 데이터베이스를 가져와서 dev.matzip에 올리기
- 데이터 가져오기
- security group 설정
- 인바운드, 아웃바운드 설정
- aws ec2에 있는 nginx config 설정 값 가져와서 로컬에 저장해둔다.
- 코드 보고 이해하기
- github action에 CI용 yml script 정리 -> 오리가 과제로 내주기로 했다
인프라 구조 구축하기 (언젠가 누구든)
- 새로 띄운 aws ec2를 dns에 붙이는 것 (블링한테 요청하기)
- github action cd 구축
나중에 추가로 할 것들
- 무중단 배포
웬만하면 우테코 교육 과정 내에서 배우는 정도로 진행할 것.
진행
- 탄력적 IP는 언제나 할당하자. 안 그러면 과금되니까!
- 프라이빗 IPv4을 막아두어야 하는 이유?
- 퍼블릭 IP가 열려야 외부에서 접근할 수 있다.
- 데이터베이스가 퍼블릭 IPv4가 열려있으면 디도스 공격을 맞을 수 있다.
- application 서버가 디도스를 맞더라도 앞 단에서 조치를 취할 수 있기 때문에 프라이빗 ip는 막아두는 것이 좋다.
- 굳이 서버 설정에서 퍼블릭 ip를 쓸 이유가 없다.
설명해주신 개념들
- 프록시 서버: 요청을 대리하는 것. 프론트 단에서 프록시 서버가 있어서 프론트의 요청을 대신 넘겨주는 역할을 한다.
- 리버스 프록시: 백엔드 서버 앞에서 요청을 필터링하는 역할을 한다.
- 게이트웨이: 요청에 대한 처리들을 앞쪽에서 처리해주는 것.
- 사이드카 패턴: spring boot 애플리케이션이 nginx를 사이드카처럼 데리고 다닌다
- 사이드카를 붙이든 떼어내는 것처럼 애플리케이션의 기능에 영향을 주지 않고 추가 기능을 적용할 수 있다.
오늘 한 것
- 테스트 DB dump (복사)
scp -i pem키 복사할파일 ssh유저이름@주소:복사할파일경로/파일명
mysqldump -uroot -p루트비밀번호 데이터베이스이름 > 경로/저장될파일명.sql
- nginx config 코드 이해하기
- github action ci 코드 읽어보기