# 서론 예를들어 AWS S3를 통해 이미지를 업로드 하는 기능이 있다고 했을때, 서버 로직은 일단 1. 이미지 파일을 로컬(서버) 디렉토리에 임시 저장한다. 2. 이 임시 저장한 파일을 S3에 업로드 한다. 3. 임시 저장한 파일을 삭제한다. 로 진행된다. 이때 Docker 이미지를 통해서 서버를 컨테이너 방식으로 띄웠을 때 살짝 문제가 발생할 수 있는데, Docker 컨테이너 내부에 임시 저장 디렉토리가 없어서 No Such File or directory 에러를 맞이할 수 있다. 이럴 때는, Dockerfile에 이미지를 빌드할때 임시 디렉토리도 같이 생성해주는 명령어를 추가해주면 해결된다. RUN mkdir -p temp 명령어를 추가한다. *-p 옵션을 줘야 잘 작동한다.
# 서론 스프링 부트 프로젝트를 Github Actions + Docker + Docker Hub + AWS EC2로 CI/CD 파이프라인 구성하는 방법을 기록한다. 기본적인 흐름도는 다음과 같다. 1. 로컬에서 작업 -> 깃허브 푸쉬 2. Github Actions이 해당 프로젝트를 빌드하고, 도커 이미지로 생성 후 도커 허브에 Push 3. Github Actions이 AWS EC2에 접속하여 해당 이미지를 Pull 받고, 실행 사전 환경 - JDK 17 - AWS EC2 t2.micro (Ubuntu 20.04 LTS) - Docker Hub 무료 계정 먼저 AWS EC2를 생성하고, 해당 인스턴스에 JDK 17를 설치하는 과정은 생략한다. # 도커, 도커 허브 세팅 1. 도커 설치 인스턴스에 도커..
2024-11-28 updated# 서론CI/CD 파이프라인을 구축할 필요가 있어서 Github Actions로 파이프라인을 구축하던 도중 맞이했던 오류들과 해결법, 사용법 미숙으로 인한 시행착오, 삽질을 기록하기 위함이다. Github Actions 배포자동화 과정은 다음 블로그 글을 전적으로 참고했다.https://bcp0109.tistory.com/363 Github Actions CD: AWS EC2 에 Spring Boot 배포하기Overview 애플리케이션을 개발하면 외부에서도 접근 가능하도록 클라우드 환경에 배포합니다. 이전에 포스팅 했던 AWS 1편에서는 마지막에 scp 명령어로 로컬에 존재하는 빌드 파일을 EC2 인스턴스bcp0109.tistory.com # Codedeploy Agent..
# 서론 EC2 내부 리눅스 파일 시스템에서 vim을 통해 무언가 작업을 하려고 할 때, 디스크 공간이 부족해서 저장이 안 되는 경우가 생길 수 있다. 기본적으로 EC2 프리티어 t2.micro 인스턴스를 기준으로 설명하며, 디폴트 디스크 크기는 8GiB이다. (30GiB까지 무료로 확장할 수 있다.) # 디스크 공간 사용량 확인 df 명령어를 통해서 현재 디스크 사용량을 파악할 수 있다. 공간 부족 에러가 발생했을경우 Use%가 100%인 디렉토리가 있을 것이다. 필자는 /dev/root 디렉토리가 8GiB로, 꽉 차 있었었다. # 용량이 큰 파일 찾기 sudo du -sh * | sort -hr 명령어를 입력하면 해당 디렉토리에 용량이 큰 파일을 순서대로 정렬해서 보여준다. 디렉토리를 이동하면서 불필..
# 서론 딥러닝 모델을 탑재한 백엔드 서버를 프리티어를 사용하는 인스턴스 (t2.micro) 를 통해서 배포하니까, 성능이슈가 발견되었다. (필자 로컬에서는 6초 정도 소요되는 style_transfer 모델이 EC2 에서는 무려 80초나 걸리는 문제가 있었다.) 조사해보니, vcpu랑 메모리 스펙관련 문제였다. 그래서 여러가지 EC2 인스턴스들을 바꿔가며 테스트해본 결과를 공유하고자 한다. # EC2 인스턴스 변경 방법 인스턴스 중지 후 변경하고 재시작하면 된다. 중지-시작 할 때 마다 유동 아이피가 변경된다. 이 점에 유의한다. 테스트 프로젝트 : FastAPI + NginX기반 EC2 서버, Route 53으로 DNS 매핑 그래서 새로운 인스턴스의 아이피를 계속 바꿔줘야한다. (Route 53 매핑..
# 서론 FastAPI로 서버를 만들고 nginx로 프록시 서버를 EC2에 띄운 뒤에 Route 53을 이용해서 도메인까지 연결하는 걸 기록한다. # Route 53 에서 도메인 구입 도메인 구입하는 건 구글링 하면 쉽게 나오니 도메인을 구입한다. AWS에서 직접 구입한 도메인은 별도의 네임서버를 지정하지 않고도 바로 사용할 수 있다. 주의! 도메인을 구입할 때 입력한 메일로 verfiy 메일이 도착하는데, 꼭 링크를 눌러서 도메인을 활성화 해줘야 사용할 수 있다. # EC2 도메인 연결 EC2 public ip4 주소값을 레코드 생성을 눌러서 값에 넣는다. (53.79.232.232 이런식으로 아이피 값만 넣는다.)
# EC2 가상 인스턴스에 원격 접속하기 - Putty를 활용할 수 있으나, git bash를 활용해본다 git bash를 열어서 ssh -i 키페어위치 ubuntu@공개아이피 를 입력한다 *키페어 위치는 드래그 앤 드랍하면 되고 공개 아이피는 인스턴스 공개 아이피를 말한다 (당연히 모든 포트 인바운드가 열려있어야 함) # JDK 설치 sudo apt-get update // 동기화한번 해주가 sudo apt-get install openjdk-11-jdk // 자바 11 설치 java -version //버전 확인 (나오면 설치된 것) # FileZilla 로 jar 파일 배포 맨 왼쪽위 새 사이트 연결을 클릭하고 다음과 같이 입력 오른쪽이 원격으로 파일을 업로드할 가상 인스턴스이다. 디렉토리를 하나 ..
AWS 람다에서는 파이썬 기본적인 모듈 외에 pip으로 설치하는 외부 모듈은 지원하지 않는다 따라서 외부 모듈을 import 하려면 람다 Layer(계층)에 따로 등록해줘야 한다 계층에 모듈을 등록하려면 모듈 파일을 따로 설치한 폴더를 압축해서 zip 파일로 만든 뒤, 얘를 업로드해야 한다 Layer에 추가할 파이썬 외부 모듈 zip 파일 만드는 법 1. cmd를 켜서 다음을 입력 만들어진 python파일은 C:\사용자\user에 가보면 있다 -t 명령어는 현재 디렉터리에 pip install 하겠다는 뜻이다 반드시 주의해야 할 것! 람다 Layer에 올릴 zip 파일 구조는 아무 이름.zip -> python -> 모듈 폴더들 이 구조를 무조건적으로 지켜야 인식한다 그리고 반드시 폴더명을 python으..