팀과제를 잘 마무리하고 배포까지 기분좋게 끝냈다. 다음 주차부터는 또 새로운 사람들과 프론트까지 묶여서 협업하게 될텐데, 기대반 걱정반인 것 같다.
1. JAVA InputStream
- Stream: 외부의 데이터가 입력/출력되는 통로
- InputStream(입력 통로), OutputStream(출력 통로)
- 둘은 추상 클래스로서 추상 메소드를 오버라이딩해서 다양한 역할을 수행한다
- 과제에서 요청으로 multipartfile을 받아서 InputStream 객체로 변환한 것을 AwsS3Client 객체가 S3에 저장해주었었다
https://bamdule.tistory.com/179
2. Github Actions
- 이 기능을 이용해 자동 배포하라는 요구사항이 있었어서 공부해보았다
- CI(Continous Integration), CD(Continuous Deployment)을 위한 서비스
- repo에서 발생하는 특정 이벤트에 대해 특정 작업을 자동으로 진행해주거나, 반복적으로 어떤 작업을 하도록 설정할 수 있다
- 예: PR 생성 시 자동 검사, main에 푸시가 오면 자동 배포, 특정 시각에 하루 통계 데이터 수집 등
- 사람이 하기에 비효율적이고 실수할 가능성이 있는 이러한 작업들에 대해 자동으로 도와주는 서비스이다
Workflows
- repo의 .github/workflows 폴더 아래에 yml파일로 설정하며, 한 repo에 여러 파일이 존재할 수 있음
- on: 어떤 상황에서 특정 작업을 수행할 것인지
- jobs: 그 상황에서 어떤 작업을 수행할 것인지
- runs-on: 필수 속성, 실행 환경 지정
- steps: 순서가 필요한 작업에 순서 지정
- run: 커맨드나 스크립트 실행
- uses: 액션 사용
- YAML 문법에서 시퀀스 타입을 사용하기 때문에 각 단계 앞에 '-' 꼭 붙혀야 함
// 푸시 이벤트 발생 시
on:
push:
branches:
- main
jobs:
job1:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: npm install
- run: npm test
job2:
# job2에 대한 세부 내용
job3:
# job3에 대한 세부 내용
// 스케줄링 된 작업 시
on:
schedule:
- cron: "0 0 * * *"
- Actions: Github Actions에서 빈번하게 필요한 반복 단계를 재사용하기 용이하게 만들어 놓은 것
- 하나의 repo 안에 여러 workflow에 공유 및 여러 repo에서 공유 가능
- 예) actions/checkout
https://www.daleseo.com/github-actions-basics/
3. Github Actions CD
- EC2에 Spring Boot 프로그램을 배포해보았다
- main 브랜치에 푸시하면 자동으로 EC2까지 배포되는 Workflow이다
- 이전에 파일질라를 이용해서 EC2에 복사하고 Git Bash SSH로 접속해 서버를 실행했던 것과 다른 방식이다
1. EC2 인스턴스 생성
2. 탄력적 IP: EC2 인스턴스가 서버를 중지하고 재실행하면 퍼블릭 IP가 계속 바뀌기 때문에 변하지 않는 IP로 만들어줌
3. SSH 클라이언트로 서버 접속: SSH config 파일 생성하여 호스트를 등록해 쉽게 로그인 할 수 있게 처리
4. EC2 보안 그룹 설정: 인스턴스와 별개로 생성하여 다른 인스턴스에도 바로 적용 가능
- 인바운드(외부 -> 내부 접근), 아웃바운드(내부 -> 외부 접근)
https://bcp0109.tistory.com/356
5. EC2 태그 추가: CodeDeploy 생성 시 어떤 인스턴스에서 수행할 지 구분하기 위함
6. IAM 역할 추가: EC2 인스턴스에서 S3에 저장된 파일에 접근가능하게 하기 위함
7. CodeDeploy Agent 설치
8. AWS S3 생성: 빌드한 프로젝트 코드를 압축해서 S3에 저장한 후 EC2에서 이 압축파일을 읽어옴
9. CodeDeploy 생성: 배포를 도와주는 CodeDeploy 생성 및 설정
10. CodeDeploy 전용 IAM 역할 추가
11. Github Actions에서 사용할 IAM 사용자 추가: Github Actions 워크플로우에서 AWS에 접근하기 위함
12. appspec.yml 파일 생성: 프로젝트 루트 디렉토리에 위치하며 CodeDeploy가 배포를 위해 참조하는 파일
- gradlew 파일이 실행되지 않는 에러 처리:
- https://spacetech.dk/error-gradle-script-home-runner-work-gradlew-is-not-executable.html
13. 배포 스크립트 작성: appspec 파일에서 지정한 위치에 저장하며, appspec 파일에서 실행할 스크립트 파일이다
맨위 #!/bin/bash 로 설정 및 jar 파일명 주의(주의 필요없음)
14. build.gradle 파일 수정: -plain.jar 파일은 만들어지지 않도록 설정 추가
15. Github Actions Workflow 작성: 프로젝트 빌드 -> AWS S3에 저장 -> CodeDeploy가 AWS EC2에 배포
https://bcp0109.tistory.com/363
많은 시행착오 끝에 배포에 성공해서 매우 뿌듯했다 ㅎ.ㅎ
'이노베이션 캠프' 카테고리의 다른 글
[TIL] 37일차 (0) | 2022.09.07 |
---|---|
[WIL] 5주차 (0) | 2022.09.04 |
Spring 심화 주차 개인과제 (1) | 2022.09.01 |
[TIL] 31일차 (0) | 2022.09.01 |
[TIL] 29일차 (0) | 2022.08.30 |