얼마전부터 팀 프로젝트를 하게됐는데
팀 프로젝트를 시작하고 가장 먼저 한일은
EC2 인스턴스를 생성하고 Git Actions와 CodeDeploy를 이용해서
CI/CD 자동 배포 환경을 구축한 것이다.
자동 배포를 설정해두고 EC2에서 서버를 상시 구동중인 채로
팀 프로젝트를 진행하게 되면
실제 서버 배포 상황에서 클라이언트에게서 요청을 받거나
클라이언트에게 응답을 보낼 수 있고
지속적으로 배포를 하기에 용이하다는 장점이 있다.
자동 배포의 장점은 이 밖에도 많은데
가장 중요한 것은 한번 구축해놓으면 아주 편리하다..!
자동 배포를 구축하는 방법에 대해서는 많은 정보들을 찾아볼 수 있고
설정 파일을 작성하고 각 단계를 차근차근 진행한다면
대체로 큰 문제없이 배포까지 완료할 수 있을 것이다.
나또한 학습과정에서 자동 배포를 성공적으로 구축해보았고
이번 프로젝트를 시작하고나서도 먼저 테스트 해본
실험 프로젝트에선 배포를 성공했지만
팀의 프로젝트에 적용을 해보려니 서버가 구동되지 않았다.
경험이 부족한 탓도 있었지만 이번에 마주한 문제를 해결하는 것은 정말 쉽지 않았다..
Actions에서 빌드가 성공하고 S3에 build.zip 파일이 성공적으로 전송되었지만
CodeDeploy에서는 이벤트가 진행되지 않고 보류(일시 중단)된 상태가 지속되다가 실패했다.
원인을 찾다가 EC2의 디렉토리와 zip 파일의 압축을 풀어서 확인해 보았더니 build 디렉토리가 없었다.
즉, 사실 Actions에선 프로젝트를 인식조차 못하고 있는 상태였고
빌드를 진행하지 않았기 때문에 오류없이 다음 단계로 넘어간 것이었다.
원인은 디렉토리 구조였다.
팀의 프로젝트 디렉토리 구조는 다음과 같다.
루트 디렉토리인 seb44_pre_014 폴더안에
client 프로젝트와 server 프로젝트로 나뉘어져 있다.
처음엔 단순히 프로젝트를 인식하지 못하는 것을 원인으로 생각하여
루트 디렉토리가 아닌 단일 프로젝트를 Actions에서 인식하도록 방법을 찾아보았다.
멀티 모듈 프로젝트부터 시작해서 오랫동안 여러 정보를 찾아보고
가장 관련있는 방법인 듯한 사진 속의 방법도 시도해보았지만
빌드 단계에서 오류가 발생할 뿐이었다.
로그도 보았지만 해결 방법과는 관련이 없어 보였다.
마지막 방법으로 깃 허브의 gradle-build-action에서 README를 읽어 보다가
기적적으로 방법을 찾았다..!
Git Actions를 이용해 gradle 프로젝트를 빌드하기 위해서는
workflow에서 gradle build action을 사용하는데
이곳에 사용 방법에 대한 것들이 정리되어 있었던 것이다..
해결 방법도 있었다.
build-root-directory를 작성하여 빌드하려는 디렉토리를 지정해줄 수 있었다.
이걸 모르고 괜한 멀티 모듈 프로젝트를 설정해보려고 했었다..
server 디렉토리를 최상위 빌드 디렉토리로 지정하니 제대로 인식되었고
서버 구동까지 오류없이 진행되었다!
설명한 방법은 gradle 프로젝트에 대한 방법이었지만
workflow에서 사용할 수 있는 각 빌드 툴마다
빌드 경로를 지정하는 방법이 분명 있을 것이다.
'개발 일지' 카테고리의 다른 글
JPA 양방향 연관관계 무한 참조 현상 (0) | 2023.06.20 |
---|---|
RestController에서 url 리다이렉트 (0) | 2023.06.17 |
CodeDeploy 자동 배포시 EC2 인스턴스의 환경변수 사용하기 (0) | 2023.06.17 |
아마존 리눅스 EC2 인스턴스에서 포트포워딩하는 법 (1) | 2023.06.17 |
카카오 로그인 및 메시지 api를 이용한 메시지 전송 (0) | 2023.06.13 |