묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨비전공자도 이해할 수 있는 CI/CD 입문·실전
RAM & 스왑메모리 폭증하는 문제
안녕하세요! 강의 늘 잘 듣고 있습니다! CI/CD 배포하다가 서버가 자꾸 죽어서 스왑 메모리까지 도입을 했는데도 비정상적으로 RAM과 스왑메모리가 꽉 차는 이슈가 있는데 도저히 어떻게 해결해야할 지 몰라서 이렇게 질문 남깁니다! 서버 인프라 환경 ELB - EC2(t3.small, EBS: 30GiB)EC2 내부 : Docker 기반 Spring Boot + MySQL 8.0 + Redis문제 상황 어디가 구체적으로 문제인지 몰라서 그냥 구구절절 다 설명드릴게요.처음부터 CI/CD가 안된건 아닙니다. 원래 잘 됐었는데요.인증 도메인(일반/소셜 로그인) 정상 작동하는거 확인하고 push 해서 배포완료 후 docker-compose.yml 수정해서 push 하고나니까 갑자기 CICD 할때마다 서버가 다운되는 문제를 발견했습니다. yml 파일을 바꾸게 된 경위는, 토큰 받아오는 과정에서 에러 뜨는거 보고 docker-compose.yml에 redis 관련 환경변수를 등록하는걸 깜빡했구나 싶어서 그거 추가한게 다 입니다. 이게 전혀 문제가 안될텐데 이상하게 이 시점 이후로 계속 문제가 터져서 좀 난감합니다. 애플리케이션이래봤자 아직 인증도메인 & 유저 간단한 CRUD가 전부라서 무거울게 없기 때문에 t3.small로도 충분할거라 생각했지만, 혹시나 하는 마음에 t3.medium으로 scale up을 해봤습니다.그랬더니 이번엔 RAM 4GB와 Swap Memory를 5.9GB 까지 잡아먹는 비정상적인 현상이 계속 반복되더라구요. 혹시 한꺼번에 docker build를 해서 그런가 싶어서 container 별로 나눠서 빌드시키고 각 단계마다 sleep을 줘봤는데도 결과는 똑같았습니다. 아래가 이제 t3.small (Swap 4GB 설정)이구요 이게 t3.medium (Swap 6GB)입니다. (위와 로직이 좀 달라요. 근데 이러나 저러나 결과는 똑같아서..) 배포 관련 파일대상 : deploy.yml, docker-compose.yml, Dockerfile 글자 수 제한 이슈로 노션에다가 코드 올렸습니다.https://hooby.notion.site/CICD-OOM-2a6f6c063f3e805ba105d78284365fbe?source=copy_link 질문 혹시 제 deploy.yml이나 docker-compose.yml 에 문제가 있나요? 메모리 80% 이상 차지하는게 전부 Docker 관련 프로세스여서요. Update 2: 테스트 결과에 따라 하단의 질문들이 원인이 아니라는게 검증됨아니면.. t3.small이 docker 기반 Spring Boot + MySQL + Redis를 빌드 못할 수준인가요? (아닐 것 같긴해요.) 아니면 제 인증 구현 방식에 문제가 있어서 저럴 수도 있는건가요? Redis 기반으로 Token에 블랙리스트 설정하고, 클라이언트한테 쿠키로 토큰 심어서 내보내는 방식인데, 혹시 이게 문제가 될 수도 있는건가요? 근데 로컬에서 redis 랑 스프링부트 가동하고 htop으로 메모리 변화를 봤을 땐 문제 없어보이긴 했습니다.긴 글 읽어주셔서 감사합니다. Update 1: EC2에 직접 실행해본 결과 EC2에서 docker-compose.yml을 그 안에다가 직접 만들어서 mysql, redis만 띄우고Spring Boot는 클론해서 환경변수 직접 세팅해주고 실행해봤습니다. 이는 혹시나 혹시나 애플리케이션이 너무 비정상적으로 설계되서 메모리를 많이 잡아먹진 않을까 하는 우려에 임시로 이렇게 세팅해뒀습니다.결과적으로 잘 돌아갑니다. 메모리가 1.36GB 정도 잡히긴 하지만...? 그래도 redis + mysql + spring boot 다 돌렸을 때 이정도고 Swap 메모리 있으니까 괜찮지 않을까 하는 판단 중입니다. (아니면 호되게 지적해주세요) 하단은 임시로 세팅하기 위한 docker-compose.yml 입니다.https://hooby.notion.site/CICD-OOM-2a6f6c063f3e805ba105d78284365fbe?source=copy_link한번 이것도 CI/CD로 돌려봐야겠긴 한데, 우선 문제가 됐던 deploy.yml과 docker-compose.yml에서 어떤 문제가 있었길래 저런 사태가 발생했던건지 알고싶습니다.Update 2: 우선 대안으로 SCP 활용 강의에서 초기 프로젝트에 좋다고 했던 방법대로 해결했습니다. CICD 과정에서 메모리는 900MB 미만 수준에서 안정적으로 돌았습니다. 근데 제가 원했던 설계는 Docker로 Spring Boot + MySQL + Redis 일원화였기 때문에 개발 완료되는대로 다시 찾아봐야겠습니다.https://hooby.notion.site/Server-Infra-Setup-Remodeling-2a8f6c063f3e808a8674fbc2a62cdd22?source=copy_link
-
해결됨비전공자도 이해할 수 있는 CI/CD 입문·실전
섹션 4, 5와 6, 7은 유사한가요?
현재 스프링부트 프로젝트의 인프라와 CI/CD를 공부하고 있습니다섹션 4, 5와 6, 7이 프레임워크 (스프링부트 / Nest.js)의 차이만 있는것으로 보이는데6, 7 섹션을 우선 넘어가도 괜찮은지 궁금합니다
-
미해결비전공자도 이해할 수 있는 CI/CD 입문·실전
code deploy 배포입니다.
배포까지 잘 끝났고, s3파일 업로드로 잘됬습니다.여기도 문제없는것같고요...그런데...java구동이 안되는것 같습니다.. 이유가 뭘까요??
-
미해결비전공자도 이해할 수 있는 CI/CD 입문·실전
사용자 삭제가 안되는 이유
그림 보시면 사용자 삭제 버튼이 활성화 안되는 이유는 뭘까요??하위 정책도 없습니다.
-
미해결비전공자도 이해할 수 있는 CI/CD 입문·실전
이미지 pull중 no basic auth credentials 문제입니다.
msa 프로젝트 중 각 마이크로 서비스의 이미지를 pull 하는 곳에서 문제가 생깁니다.err: ERROR: for seat-service Head "https://139144002104.dkr.ecr.ap-northeast-2.amazonaws.com/v2/seat-service/manifests/1.0": no basic auth credentials이렇게 에러가 나오게 되네요... IAM 사용자 생성했고 권한 정책에 AmazonEC2ContainerRegistryFullAccess를 추가해줬습니다. 또한 이 사용자를 EC2에 연결까지 했습니다. 추가적으로 helper 설정을 위해 ./docker 폴더를 만들고 config.json에 "credsStore":"ecr-login"도 추가해주어 강의랑 매우 똑같이 만들었습니다. 이 deploy.yml 은 github action 코드입니다. 7번에서 이 오류가 발생하게 됩니다.======선을 기준으로 아래는 docker-compose.yml파일입니다. 이 문제를 어떻게 해결해야할까요? 또한 각 마이크로 서비스에 연결된 데이터베이스가 모두 maraiDB라면 이걸 docker-compose.yml로 이미지화 시켜야하는것이 맞을까요?# 6. EC2로 Compose 파일 전송 - name: Copy docker-compose.yml to EC2 uses: appleboy/scp-action@v0.1.7 with: host: ${{ secrets.EC2_HOST }} username: ${{ secrets.EC2_USERNAME }} key: ${{ secrets.EC2_PRIVATE_KEY }} source: "docker-compose.yml" target: "/home/ubuntu/movie-project/" strip_components: 0 overwrite: true # 7. EC2에서 Compose 실행 - name: SSH into EC2 and deploy uses: appleboy/ssh-action@v0.1.7 with: host: ${{ secrets.EC2_HOST }} username: ${{ secrets.EC2_USERNAME }} key: ${{ secrets.EC2_PRIVATE_KEY }} script: | cd /home/ubuntu/movie-project sudo docker-compose down sudo docker-compose pull sudo docker-compose up -d ================================================ movie-service: image: 139144002104.dkr.ecr.ap-northeast-2.amazonaws.com/movie-service:1.0 depends_on: - redis book-service: image: 139144002104.dkr.ecr.ap-northeast-2.amazonaws.com/book-service:1.0 depends_on: - kafka payment-service: image: 139144002104.dkr.ecr.ap-northeast-2.amazonaws.com/payment-service:1.0 depends_on: - kafka seat-service: image: 139144002104.dkr.ecr.ap-northeast-2.amazonaws.com/seat-service:1.0 depends_on: - kafka
-
미해결비전공자도 이해할 수 있는 CI/CD 입문·실전
Docker Compose파일을 작성했을때 CI CD와의 연동
현재 강의에서는 간단한 instagram-server 프로젝트를 docker에 이미지화 시켜서 이를 ecr에 연결해 이미지를 업로드하고 ec2에서 이미지를 다운받아 실행하고 배포하는 것을 잘 이해했습니다.하지만 혹시 간단한 프로젝트가 아닌 MSA의 각 서비스들, Kafka, Redis가 모두 모인 프로젝트 일때에는 각 서비스, kafka, redis 모두 이미지로 만들어야하는 것으로 알고 있습니다. 이때 한번에 docker compose 파일을 만들면 될 것 같지만 이를 CI CD의 deploy.yml에 어떻게 연결짓는 것인지가 궁금합니다. 아니면 혹은 cmopose 파일을 github action에 직접 입력해서 수동으로 관리하는 것인가요? 불편하게 그저 각 서비스, redis, kafka를 deploy.yml에 작성해서 일일이 하면 편하긴 하겠지만 이런 경우는 보통 compose 파일을 만드는 것이 훨씬 장점이 있다고 생각합니다. 이 compose 파일을 어떻게 deploy.yml 혹은 EC2에 보내는 것인지 궁금합니다.
-
미해결비전공자도 이해할 수 있는 CI/CD 입문·실전
보안그룹 생성 오류
강사님, 보안그룹 HTTP 추가 하면 위와 같이 경고문구가 뜨면서 인스턴스 생성이 불가합니다..! 어떻게 수정해야 할까요
-
미해결비전공자도 이해할 수 있는 CI/CD 입문·실전
AWS 5월에 탈퇴해서 그러는데....
안녕하세요 선생님.제가 1월부터 5월까지 Spring,Java 벡엔드 과정 교육을 온라인으로 들었습니다.그 과정에서 AWS 기초를 배우는 과정이 있었는데 5월달에 교육이 끝나면서 탈퇴를 하지 3개월 밖에 안됬는데.. 혹시 이걸 다시 가입해야 되는 걸까요?? 한달 무료 사용해버려서요..
-
미해결비전공자도 이해할 수 있는 CI/CD 입문·실전
배포 오류
Actions 는 다 통과하는데 저기서 배포 오류가 뜨는데 이유를 알 수 있을까요?
-
미해결비전공자도 이해할 수 있는 CI/CD 입문·실전
node.js 설치시 에러
node.js 설치 명령어를 실행하면 odesource.gpg: command not foundbash: /: Is a directorydeb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro mainbash: /: Is a directoryE: Malformed entry 1 in list file /etc/apt/sources.list.d/nodesource.list (Component)E: The list of sources could not be read.E: Malformed entry 1 in list file /etc/apt/sources.list.d/nodesource.list (Component)E: The list of sources could not be read. 이렇게 뜨면서 설치가 되지 않는 것 같습니다. root@ip-172-31-34-207:/home/ubuntu# node -vCommand 'node' not found, but can be installed with:apt install nodejs
-
미해결비전공자도 이해할 수 있는 CI/CD 입문·실전
appspec.yml, 스크립트 파일 수정요청
안녕하세요CI/CD 강의를 재미있게 수강중 입니다수강 중 수정 사항을 요청드리기 위해 여기에 남깁니다노션 : https://jscode.notion.site/CI-CD-c028a6824f824524bcb35b8c384c9771 appspec.yml 파일 작성 중 오타가 있습니다이로 인해 정상적인 배포가 되지 않습니다확인 해주시기 바랍니다
-
미해결비전공자도 이해할 수 있는 CI/CD 입문·실전
appleboy/ssh-action stop_script 대체
학습 도중 발견한 내용이 있어 공유합니다. appleboy/ssh-action 라이브러리에서 stop_script 설정에 대한 내용입니다. 결론부터 말하면, appleboy/ssh-action 최신 버전(작성일 기준 1.2.2)을 사용하는 경우 stop_script: true 대신 script 첫 줄에 set -e를 사용해야 합니다.script: | set -e cd /home/ubuntu/github-actions git pull origin main문제 상황강의를 따라하던 중, 테스트에서 RuntimeException을 던져 실패하는 부분에서 다음과 같이 빌드는 실패하는데 github actions가 성공하고 코드도 업데이트 되는 경우가 발생했습니다. deploy.yml과 github actions 결과는 다음과 같습니다.name: hello application on: push: branches: - main jobs: Deploy: runs-on: ubuntu-latest steps: - name: ssh to EC2 uses: appleboy/ssh-action@v1.2.2 with: host: ${{ secrets.EC2_HOST }} username: ${{ secrets.EC2_USERNAME }} key: ${{ secrets.EC2_PRIVATE_KEY }} script_stop: true script: | cd /home/ubuntu/github-actions git pull origin main ./gradlew clean build sudo fuser -k -n tcp 8080 || true nohup java -jar build/libs/*SNAPSHOT.jar > ./output.log 2>&1 & > Task :test GithubActionsApplicationTests > contextLoads() FAILED java.lang.RuntimeException at GithubActionsApplicationTests.java:11 1 test completed, 1 failed FAILURE: Build failed with an exception. > Task :test FAILED * What went wrong: Execution failed for task ':test'. > There were failing tests. See the report at: file:///home/***/github-actions/build/reports/tests/test/index.html * Try: > Run with --scan to get full insights. BUILD FAILED in 8s 8 actionable tasks: 8 executed 8080/tcp: 4782 =============================================== ✅ Successfully executed commands to all hosts. =============================================== 문제 원인이 차이점은 appleboy/ssh-action 버전을 최신 버전(1.2.2)으로 사용한 차이에서 발생한 것이었습니다. appleboy/ssh-action 링크에 가서 script_stop으로 검색해보니 다음과 같은 부분이 있습니다.1.0.3v 를 보니 해당 옵션이 있는 걸로 보아 script_stop 옵션은 제거된 것으로 보입니다. 그래서 적힌대로 set -e를 script 첫 줄에 추가했습니다.script: | set -e cd /home/ubuntu/github-actions git pull origin main이후 다시 푸시해보니 정상적으로 실패하는 것을 확인할 수 있습니다.1 test completed, 1 failed FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':test'. > There were failing tests. See the report at: file:///home/***/github-actions/build/reports/tests/test/index.html * Try: > Run with --scan to get full insights. GithubActionsApplicationTests > contextLoads() FAILED java.lang.RuntimeException at GithubActionsApplicationTests.java:11 BUILD FAILED in 8s 8 actionable tasks: 8 executed 2025/07/12 14:16:36 Process exited with status 1 Error: Process completed with exit code 1.
-
미해결비전공자도 이해할 수 있는 CI/CD 입문·실전
Vue.js 파일 배포
안녕하세요 강사님 ACM 에서 인증은 받았고 사진 1 바로아래입니다. CloudFront에 도메인 이름을 넣었습니다.(밑에 사진2) 사진 3 Route53 에 CloudFront로 배포를 했는데도 aws s3 를 통한 정적웹사이트 배포는 정말 잘 되는데 뭐가 문제인지 모르겠습니다. 이렇게 연결이 되지 않습니다. 뭐가 문제인지 잘 모르겠습니다.
-
해결됨비전공자도 이해할 수 있는 CI/CD 입문·실전
aws를완강하고 ci/cd로 넘어왔습니다.
스프링부트로 진행중이라서 nest.js는 아예모르는데 섹션6,7부분은 뺴고 들어도 상관업나요?
-
미해결비전공자도 이해할 수 있는 CI/CD 입문·실전
vue.js 를 cloudfront+s3+Route53를 적용하여 배포
안녕하세요 강사님의 AWS 강의도 들었습니다.만약 도메인을 적용하고 배포하는 경우 CNAME을 통한 배포방식이 맞는지블로그도 열심히 찾아보고 했는데 안되가지고 질문 드립니다. cloudfront가 기존에 pdf랑 달라서 chatgpt한테 물어보면서 배포를 해 보아도 https + domain이 동시에 적용이 되지 않아 질문 드립니다. 단순 정적 웹사이트(S3 ) 만을 이용한 것은 정말 잘 되지만 cloudfront에 htpps+ domain 을이용한 배포가 되지 않아 질문 드립니다.
-
미해결비전공자도 이해할 수 있는 CI/CD 입문·실전
S3에 프로젝트 업로드하기 오류
안녕하세요 이 부분분을 듣고 코드를 깃허브에 push 했는데 이런 에러가 계속 나가지고 질문드립니다. chatgpt로 돌려서 답장 받은거는 다 해봤습니다.
-
미해결비전공자도 이해할 수 있는 CI/CD 입문·실전
CI/CD 자동화 배포 문제
강사님이 알려주신 대로 개인프로젝트 CI/CD 구축 방법-2 이거에서 하는데 자꾸 위와 같은 에러가 뜨는데 뭐가 문제인지 모르겠습니다.
-
미해결비전공자도 이해할 수 있는 CI/CD 입문·실전
키페어 생성 시기
EC2를 생성 완료 한 후에 해당 EC2에 키페어를 만들어서 적용하는게 가능한가요? 아니면 EC2 생성할때 키페어를 추가하는것만 가능한건가요?
-
미해결비전공자도 이해할 수 있는 CI/CD 입문·실전
ECS는 사용 안 하나요?
ECS는 사용 안 하나요? ECS도 많이 쓰이는 거 같던데..
-
미해결비전공자도 이해할 수 있는 CI/CD 입문·실전
백엔드 프론트엔드 배포 흐름이 이해가 안갑니다.
글을 작성하고 조금 더 공부해봤는데 저는 프론트(3000번 포트)와 백엔드(8080번 포트)간의 통신으로 웹이 배포되고 운영되는걸로 알았는데, 3000번 포트와 8080번 포트간의 통신을 하는 게 아니라고 하는 것 같아서 댓글에 다시 정리해보았습니다. 글의 내용처럼 서버가 배포되는것이 아닌, 댓글에 남긴 흐름으로 배포가 되는 게 맞는건지 궁금합니다.🥹안녕하세요.최근 재성 강사님의 AWS, Docker, CI/CD 강의를 수강하며, Spring Boot 프로젝트를 Docker 이미지로 패키징하고 무중단 배포하는 과정까지 직접 구축해보았습니다.Spring 서버를 EC2에 자동으로 배포하고 무중단으로 교체하는 구조는 충분히 이해하고 구현도 해보았지만, 이번 프로젝트에서 프론트엔드까지 함께 연동하려다 보니 새로운 고민이 생겼습니다.프론트 지식이 전무한 상태에서, 프론트엔드 팀원이 React로 만든 프론트 화면까지 백엔드와 함께 배포해달라는 요청을 주셨는데, 여기서부터 개념적으로 막히기 시작했습니다. React에서 api/login 같은 요청을 보내면 Spring 서버가 응답하고, 이 데이터를 바탕으로 React가 화면을 렌더링한다는 구조를 이해하고, AWS강의를 들으며 S3, CloudFront로 프론트를 배포하는 과정도 실습하였는데 Spring과 React를 동시에 배포하려니까 흐름이 잘 이해가 가지않습니다..ㅠㅠ https://velog.io/@jwo0o0/AWS-S3%EB%A1%9C-React-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0https://velog.io/@jwo0o0/AWS-S3-%EB%B2%84%ED%82%B7-Github-Action%EC%9C%BC%EB%A1%9C-CICD강사님이 AWS 강의에 react 배포하는 방법으로 올려주신 블로그 포스팅을 참고해서 이해하려고 하는데 제가 이해한 흐름이 맞는 지 확인해주실 수 있나요? 현재 프로젝트에서 백엔드와 프론트를 분리해서 각각 repository에 올리고있는데요!Spring에서 workflow에 Github에 올라와있는 React 프로젝트를 S3에 업로드하고 CloudFront로 배포하도록 자동화이후 workflow에 백엔드 Spring 프로젝트를 Docker 이미지로 패키징하여 ECR에 이미지를 Push.workflow에 SSH로 EC2에 접속하는 코드를 작성. EC2에서 ECR에 올린 이미지를 Pull받은 뒤 해당 이미지로 docker run 하여 spring server를 띄움.이렇게 흐름을 이해하고 github Actions workflow를 작성해도 괜찮을까요?react는 3000포트를 사용하고, Spring은 8080포트를 사용하는걸로 아는데, 포트번호가 달라도 알아서 잘 통신이 되나요..??또 Spring workflow에서 프론트 Git 레포지토리까지 왔다갔다 하면서 S3 업로드 자동화를 해주는게 맞나요...?? 제가 프론트 지식이 아예없어서 S3에 프론트 프로젝트를 업로드하면 어떻게 백엔드와 어떻게 통신을 하는건지 잘 이해가 가지않습니다. 홈화면의 페이지가 있다면, 로그인이라는 버튼을 눌렀을 때 백엔드에 api/login이라는 요청을 보낸다고 했을 때 아무런 작업을 안해줘도 알아서 서로 통신을 하는지... 인프라 개념이 아직 미숙하다 보니 글도 장황한 것 같습니다 죄송합니다.. 😢정리해보면서도 스스로 구조를 잡고자 하는 중인데, 혹시 제가 놓치고 있는 개념이 있다면 알려주시면 정말 감사하겠습니다!