전체 글 45

[AWS] ECR 을 활용한 Docker Image 저장

1. ECR 이란2. ECR Docker Image Push 1. ECR 이란ECR은 Elastic Container Registry 의 약자로 AWS에서 지원하는 관리형 컨테이너 이미지 레지스트리 서비스입니다. IAM 권한을 이용하여 리소스 기반 권한을 가진 프라이빗 레포지토리를 지원하여 EC2 인스턴스가 컨테이너 레포지토리 및 이미지에 접근할 수 있습니다. ECR 구성요소 RegistryECR private registry 하나에 여러개의 레포지토리, 도커 이미지, Open Container Initiative(OCL) 이미지 등을 저장할 수 있습니다. 사용자 권한 토큰클라이언트는 ECR Private registry 에 AWS 사용자 인증후에 이미지 푸시 및 풀이 가능합니다. RepositoryEC..

CampusMeet 2024.10.10

[AWS] VPC EndPoint + CodeCommit을 활용한 Private EC2

1. VPC EndPoint2. CodeCommit3. VPC EndPoint + CodeCommit 이전에 프라이빗 서브넷에 배포된 인스턴스에 연결하는 과정을 경험했고, ALB를 생성해 가비아 도메인과 연결하는 단계까지 완료했습니다. 현재 프라이빗 서브넷의 인스턴스에는 접근이 가능하지만, 내부가 비어 있어 기존 소스코드를 가져와 실행하거나 Docker Hub 또는 ECR에서 이미지를 받아 컨테이너를 실행해야 합니다. 하지만, 프라이빗 서브넷에서는 외부 인터넷에 접근할 수 없기 때문에 git clone 명령어를 통해 외부 레포지토리에서 소스코드를 가져오는 것이 불가능했습니다. 이는 NAT 게이트웨이가 없어 인터넷 접근이 차단되어 있기 때문인데, NAT 게이트웨이는 서울 리전 기준으로 시간당 0.059달러..

CampusMeet 2024.10.09

[AWS] ALB 생성 및 연결

1. ELB2. ALB3. ACM 생성 1. ELB ELB는 Elastic Load Balancing 의 약자로 VPC 에 탑재되며, 사용자의 요청을 받고 VPC 내 리소스(EC2)에 부하 분산합니다. 외부의 요청을 받아들이는 리스너와 요청을 분산할 리소스의 집합인 대상 그룹 으로 구성되며, 하나의 ELB는 다수의 리스너와 대상 그룹을 거느릴 수 있습니다. ELB를 사용하는 이유는 다음과 같습니다. 트래픽 분산- 여러 EC2 인스턴스 또는 컨테이너에 들어오는 트래픽을 자동으로 분산시켜, 과부하를 방지하고 애플리케이션의 성능을 향상시킵니다.고가용성- 최소 2개 이상의 가용영역을 설정해줘야하기 때문에, 하나의 인스턴스나 가용영역에 문제가 생길경우 설정해두었던 다른 가용영역으로 트래픽을 분산하여 서비스의 가용..

CampusMeet 2024.10.07

[AWS] Private 인스턴스 연결

1. SSM2. Bastion Host 보안상의 이유로 인스턴스를 프라이빗 서브넷에 배치했기 때문에 외부에서 인스턴스에 쉽게 접근할 수 없습니다. 하지만 서버를 운영하려면 인스턴스에 접속이 필요하므로, 다양한 방법을 통해 프라이빗 서브넷에 위치한 인스턴스에 연결할 수 있는 방안을 살펴보겠습니다. 1. SSM가장 먼저 IAM 콘솔에서 역할을 생성해줘야합니다.  권한도 추가해줍니다.   역할 생성을 완료했으니 Private subnet에 위치한 Ec2 에서 내가 생성한 역할을 연결 해 줍니다.   IAM 역할을 부여하였으니 다시 인스턴스에 접근해보도록 하겠습니다.  그런데 "SSM 에이전트가 온라인 상태가 아닙니다" 라는 경고가 나오면서 연결할 수가 없었고, Systems Manager를 사용해서 EC2 인..

CampusMeet 2024.10.06

[AWS] EC2 생성 및 실행

지금까지 FastAPI로 만든 애플리케이션을 Docker, AWS 를 활용하여 배포해보도록 하겠습니다.1. AWS EC2 생성2. Docker Image Build and Push3. EC2 인스턴스 접속 및 실행1. AWS EC2 생성AWS 프리티어를 사용할 예정이기에 "프리 티어 사용 가능" 이라고 적혀있는 범위 내에서 타입들을 선택 해줍니다.  저는 Ubuntu  OS를 선택해 주었고  인스턴스 유형은 프리 티어가 지원하는 t2.micro를 선택해주었습니다. 키 페어는 인스턴스에 접근할 수 있는 강력하게 설정된 비밀번호입니다. 기존에 생성해둔 키페어가 있다면 사용하면 되고, 없다면 새로운 키 페어를 만들어줍니다. 저는 RSA 유형에 OpenSSH와 함께 사용하는 .pem 프라이빗 키 파일 형식을 선..

CampusMeet 2024.09.30

[AutoScaling] 다양한 AutoScaling 전략

1. AutoScaling2. HPA3. CA 1. AutoScalingAutoScaling이 효율적이라는 이야기를 듣고 적용하려고 알아보니, 생각보다 종류가 다양했습니다. 제가 조사한 것 외에도 여러 세부적인 AutoScaling 방식이 존재했습니다. 하지만 이번에는 일반적으로 많이 사용되며, 제가 프로젝트에 적용할 AutoScaling 방식들에 대해 간단히 설명하고 넘어가겠습니다.수직적 스케일링:VPA (Vertical Pod Autoscaler) 활용Pod의 리소스를 감시하여, Pod의 리소스가 부족한 경우 Pod를 Restart하며 Pod의 리소스를 증가수직적 증가 (Scale Up) , 수직적 감소 (Scale Down)Stateless App에 적합초기에는 노드의 CPU와 메모리를 증가시키는 ..

CampusMeet 2024.09.19

[DNS] Nginx ingress controller 와 Domain

1. Nginx ingress controller2. 도메인 구매3. 도메인 연결1.  Nginx ingress controller이전 시간에는 hoseo-meet-web 서비스를 LoadBalancer 타입으로 생성하고, 할당된 ExternalIP를 이용해 웹 브라우저에서 접근하는 방법을 실습했습니다. 하지만 여러 개의 서비스를 모두 LoadBalancer 타입으로 설정하면, 비효율적일 뿐만 아니라 관리하기도 어렵습니다. 이 문제를 해결하기 위해서는 각 서비스를 ClusterIP 타입으로 생성하고, 외부 트래픽을 적절하게 라우팅해줄 중앙 관리자가 필요합니다. 바로 이 역할을 수행하는 것이 NGINX Ingress Controller입니다.  Ingress Controller는 클러스터 외부에서 들어오..

CampusMeet 2024.09.15

[NKS] NKS를 활용한 배포 (1)

1. NKS(Ncloud Kubernetes Service)2. 클러스터 접속 이번 프로젝트를 진행하면서 클라우드 서비스는 이제 선택이 아닌 필수 요소가 되었습니다. 처음에는 가장 많이 사용되는 AWS를 고려했으나, "제 8회 개방형 클라우드 플랫폼(K-PaaS) 기반 서비스 개발 아이디어 공모전"을 알게 되었습니다. 이 공모전은 NAVER Cloud, NHN Cloud, KT Cloud 중 하나를 제공받아 해당 플랫폼을 기반으로 서비스를 개발하는 것이 목표입니다. 저희 팀은 수상을 목표로 하기보다는 AWS 외의 다양한 클라우드 플랫폼을 경험해보고, 무료로 클라우드 환경을 제공받는 기회를 활용하기 위해 참여하기로 결정했습니다. 그중 Naver Cloud의 NKS를 선택했으며, 이번 포스팅에서는 이 과정에..

CampusMeet 2024.09.08

[CS] .env 파일 유출 문제와 해결 방안

1. 발생 문제2. 해결 과정3. 추가 문제 발생 및 해결 과정 1. 발생 문제CampusMeet 프로젝트를 진행하면서 형상관리는 GitHub를 통해 이루어졌고, 저장소는 public으로 관리하고 있었습니다. 개발 도중 GitHub를 확인하던 중, .env 파일이 그대로 저장소에 노출된 것을 발견했습니다. 다행히 초반이었고 파일에는 로컬 DB에 대한 간단한 정보만 담겨 있었지만, 이후에는 API 키나 비밀번호 등 민감한 정보들이 다뤄질 예정이었기 때문에, 이를 미리 해결하기로 했습니다. 2. 해결 과정1 ) .env 파일 제거 및 .gitignore 설정먼저, .env 파일이 앞으로 푸시되지 않도록 .gitignore 파일에 추가해줍니다. echo ".env" >> .gitignore 명령어를 입력하면 ..

CampusMeet 2024.08.28

[Backend] FastAPI

프로젝트의 백엔드를 FastAPI로 구성하기로 했지만, 실전에 들어가 보니 FastAPI가 상대적으로 덜 대중적이다 보니 자료를 찾기가 쉽지 않고, 디렉토리 구조를 어떻게 잡아야 할지 감이 잘 오지 않았습니다. 그래서 "https://github.com/fastapi/full-stack-fastapi-template"를 참고하여 디렉토리 구조를 작성해보았습니다. 오늘은 이 디렉토리 구조의 각 부분이 어떤 역할을 하는지 간단하게 정리하도록 하겠습니다.1. 디렉토리 구조 시각화2. 디렉토리 구조별 역할1. 디렉토리 구조 시각화디렉토리 구조를 작성했지만, 막상 만들어보니 헷갈리는 부분이 많고 한눈에 들어오지 않아서 구조를 한눈에 보면서 각 디렉토리별 역할을 정리해보기로 했습니다. 외부 사이트를 이용할까 했는데..

CampusMeet 2024.08.14