목록DevOps (44)
민프

ECS에서 서비스를 운영할 때, Task를 어떤 서브넷에 배치해야 할까요?처음에는 “Public Subnet에 배포하면 더 간단하잖아?“라는 생각이 들 수 있지만,운영 환경에서는 보안성과 안정성을 위해 Private Subnet을 사용하는 것이 권장됩니다. 이번 글에서는 왜 ECS Task를 Private Subnet에 배포해야 하는지,그리고 Private Subnet에서도 인터넷을 사용할 수 있게 하는 NAT Gateway 구성 방법을 정리해보겠습니다.왜 Public Subnet이 아닌 Private Subnet에 ECS를 배포해야 할까?1. 보안성 강화Public Subnet에 배포된 ECS Task는 퍼블릭 IP가 부여되며 외부 인터넷에서 접근이 가능합니다.이는 해킹, 취약점 공격 등 보안 위협에 ..

Bastion Host에 대해서 알아보도록 하겠습니다.1. Bastion Host란?Bastion [ˈbæstiən]. "요새", "보루"를 뜻하는 영어 단어이다. 특히 성형 요새를 의미하는 모양이다. 그러나 자주 사용되지는 않고 이러한 의미로는 Fortress가 압도적으로 많이 쓰인다.- 나무위키, 위키백과, 네이버 사전 Bastion Host는 Private Subnet에 위치한 리소스에 접근할 수 있도록 중간에 배치하는 ‘관문 서버’입니다.외부 네트워크와 내부 네트워크 사이에서 SSH 또는 터널링을 통해 보안된 접근 경로를 제공합니다.2. 왜 Bastion Host가 필요한가?항목일반적인 접근Bastion Host 사용 시RDS 보안퍼블릭 IP 노출됨퍼블릭 IP 없이 내부만 노출보안그룹 설정IP 기..

서비스 운영을 하다 보면 JWT_SECRET, DB_PASS, REDIS_HOST 같은 민감한 설정값을 안전하게 관리해야 합니다.예전에는 .env 파일로 로컬에 숨겨두곤 했지만, 클라우드 인프라에서는 AWS Systems Manager Parameter Store(SSM) 또는 AWS Secrets Manager를 활용하는 것이 안전하고 효율적인 방법입니다. 특히 저는 ECS로 배포를 하면서 .env.dev, .env.prod 등등.. 환경변수와 관련 된 것들을 컨테이너와 같이 올릴 수 없기에 SSM을 선택하여 진행하였습니다. Git Actions CICD를 이용해서 배포를 하고 있어서 Git Actions의 Actions secrets and variables를 사용하여 해보려고 했지만 dev, pr..

1. 도메인 구입 (가비아) 2. Route 53 호스팅 영역 생성AWS > Route 53 > 호스팅 영역 생성도메인 이름: 가비아 도메인 넣기 (ex. example.co.kr)타입: 퍼블릭 호스팅 영역생성 후 -> NS 레코드 4개가 나옴 (ns-xxxx.awsdns-xx.com 등) 3.가비아 도메인에서 네임서버 변경가비아 > 내 도메인 > 네임서버 변경기본 네임서버 -> “사용자 지정 네임서버” 선택Route53이 보여준 NS 레코드 4개 복붙 (마지막 '.'을 제거해주셔야 합니다.)이걸로 가비아 -> Route 53 연결 완료! 주의사항현재 가비아에서 구매한 도메인에서 이미 레코드들이 있었는데 네임 서버를 바꾸게 되면 더이상 가비아의 네임서버에서는 동작하지 않고, Route53을 통해서 동..

무중단 배포란 무엇인가?무중단 배포(Zero Downtime Deployment)란서버를 새 버전으로 배포할 때 기존 서비스에 끊김 없이 사용자에게 지속적으로 서비스를 제공하는 방식입니다. 전통적인 방식처럼 배포 중에 서비스가 잠시 중단되거나 에러가 발생하는 걸 방지하는 목적 입니다.왜 무중단 배포가 필요한가?서비스가 중단되면 사용자 경험은 나빠지고, 트래픽 손실과 매출 손실까지 이어집니다.또한 DevOps와 CI/CD가 기본이 된 지금, 자동화된 안정적인 배포 환경은 필수입니다. (실무에서는 배포하는 동안 다른 개발자들도 서버를 사용할 수 없어서 약간의 개발 딜레이가 발생하여 필수적으로 필요한 부분 같습니다.)항목설명사용성 유지고객의 UX를 해치지 않음 (특히 B2C 서비스는 타격 큼)수익 손실 방지서..

MSA란 무엇이며, 왜 중요할까?MicroService Architecture는 크게 Inner Architecture와 Outer Architecture로 구분할 수 있습니다.위 그림에서 남색 부분은 Inner Architecture의 영역이고, 회색 부분은 Outer Architecture 부분입니다.1. MSA 기본 개념 (Inner Architecture) MSA는 대규모 애플리케이션을 작고 독립적인 서비스들로 분리해 배포하고 운영하는 방식입니다.Monolith vs MSA모놀리식은 하나의 커다란 앱이지만, MSA는 여러 독립 서비스의 모임독립 배포가 가능해 개발, 운영이 유연해지고, 장애도 격리 가능해짐 도메인 중심 분리비즈니스 영역(주문, 결제, 회원 등)을 기준으로 서비스 단위 구성“한 서..

“Lambda에서 발생하는 6MB 초과 오류? Presigned URL로 해결하자!” 문제상황최근 OCR 분석 기능을 Lambda + S3 + SQS 조합으로 구현하던 중 다음과 같은 에러를 마주하게 되었습니다:Request must be smaller than 6291456 bytes for the InvokeFunction operation Lambda invocation failed with status: 413이 문제는 이미지 파일의 크기가 Lambda가 허용하는 최대 요청 바이트 수(6MB) 를 초과한 경우 발생합니다.그렇다면, Lambda를 거치지 않고 S3로 직접 업로드하면 해결됩니다. 이 글에서는 Presigned URL을 사용하여 클라이언트에서 직접 S3로 파일을 업로드하는 방법을 소개..

원래 항상 Slack을 이용하여 서부 내부적인 알림을 보냈었는데회사에서 works를 이용하자는 제안에 이번엔 works를 통하여 알림을 보내려고 한다.앱추가https://dev.worksmobile.com/kr/console/openapi/v2/app/list/view https://auth.worksmobile.com/login/login?accessUrl=http%3A%2F%2Fdev.worksmobile.com%3A80%2Fconsole%2Fopenapi%2Fv2%2Fapp%2Flist%2Fview auth.worksmobile.comBot 추가 단체 채팅방에 봇을 사용하려면 Bot 정책 - 조직/그룹, 1:N 메세지방 초대 기능을 체크해야합니다. Bot 연동https://admin.worksmob..

이번 글에서는 API Gateway + Lambda + S3를 활용하여 사용자가 이미지를 업로드하면 Lambda가 이를 S3 버킷에 저장하는 아키텍쳐를 구축한 과정을 알려드리겠습니다 실습 과정클라이언트가 multipart/form-data 형식으로 이미지를 POST로 전송API Gateway가 요청을 받아 Lambda를 호출Lambda는 S3 버킷에 이미지를 저장저장 후 결과를 반환 (성공/실패 여부)구현 과정1. S3 버킷 생성2. Lambda 함수 구성 (Python 3.11) python에서 multipart/form-data를 받기 위하여 toolbelt-layer를 계층으로 삽입하였습니다.// Python디렉토리 생성 및 패키지 설치mkdir -p pythonpip install requests..

1. 사전 준비NCP - Server, VPC2. 공인 IP 설정Server에 적용 할 공인 IP를 생성합니다. 3. ACG 설정Server에 적용되어있는 ACG를 설정합니다.(각 포트 등..)4. Root 비밀번호 받기서버를 생성하면서 받은 pem키로 비밀번호를 받으면 됩니다.(서버 선택 -> 서버 관리 및 설정 변경 -> 관리자 비밀번호 확인) 5. VScode에서 서버 접근 (Remote-SSH)Host {서버 별명} HostName {포트포워딩에서 확인한 서버 접속용 공인 IP} Port {포트포워딩에서 확인한 서버 접속용 외부 포트} 접근 성공 6. Container Reistry 생성 방법6-1. Object Storage 이용 신청 및 버킷 생성6-2 Container Regi..