[AWS] 클라우드 아키텍처, 왜 복잡한 걸까?
·
백엔드 개발
들어가며“EC2 하나면 되지 않아?”라고 생각한 적이 있는가? 아마도 클라우드 서버를 처음 다뤘을 때 누구나 한 번쯤은 그렇게 느꼈을 것이다. 하지만 어느새 서비스가 성장하면서 트래픽이 급증하고, 배포 실수 한 번에 서비스가 멈추고, 보안 이슈가 현실이 되는 시점이 찾아온다.그제야 깨닫는다. 클라우드 설계는 단순히 서버 하나 띄우는 문제가 아닌, 복합적인 문제들에서 최선의 균형점을 찾는 행위이다.클라우드 설계란, 균형의 기술클라우드 인프라는 다양한 요소들의 조합이다. 그중 어떤 요소를 강조하느냐에 따라 완전히 다른 결과를 만든다.개발자 생산성: 빠르게 코딩하고 배포하는 환경은 시간과 비용을 절약한다. 특히 스타트업에서 중요하다.비용 최적화: 트래픽이 없을 땐 리소스를 줄이고, 있을 때만 확장되는 구조가 ..
[Spring Boot] HTTP 외부 Restful API를 RestTemplate로 처리하기
·
백엔드 개발
들어가며이전 시간에, Private EC2 환경에서 외부 API인, "네이버 로그인 API"를 호출할 수 있도록 구성했다.EC2 브라우저 -> 네이버 로그인 URL로 프록시 서버를 거쳐 리디렉션을 성공적으로 수행할 수 있었다.이번 시간에는 Private EC2에서 구동 중인 Spring Boot 서버가 외부 Restful API인, 네이버 로그인 API에 요청/응답을 보낼 수 있는 방법에 대해서 소개한다.로그인 성공 시 네이버 로그인 API 작동방식:미리보기클라이언트가 네이버 아이디, 비밀번호를 입력 후, 로그인을 성공적으로 수행했을 때, 네이버 API는 에 사전 등록된네이버 로그인 Callback URL로 인가코드:code, state 정보를 가지고 리디렉션을 수행한다.(code, state: 네이버 ..
[AWS] Private EC2에서 Oauth2.0 네이버 로그인 구현 ?!
·
백엔드 개발
들어가며Private EC2는 Private VPC Subnet 환경으로, 외부 인터넷 연결이 되지 않는다.이는, AWS Cloud에서, 가상 공간인 "VPC" 에서 Private Subnet을 구성하고, 내부에 공인 IP가 할당되지 않는 EC2 서버를 구축하는 방식이다. 외부 인터넷과 연결이 되지않고, AWS Cloud VPC 내부에만 생성되어 있는 Private EC2는 네이버 로그인 API와 같은 외부 API와 송신을 할 수 있을까? ? ?? ? 우리는 당연히, 이러한 의문점이 생긴다. 이번 포스팅은 이러한 의문점을 통쾌하게~ 해소되도록AWS Private EC2 아키텍처를 실제로 운영/관리하면서 네이버 로그인 API를 구현했던 과정들을 A부터 Z까지 설명한다.문제상황: 네이버 로그인 API 호출이..
[AWS] 스케줄러로 EC2 인스턴스 비용 절약하기
·
백엔드 개발
여는 글클라우드 인프라를 운영할 때 가장 중요한 요소 중 하나는 바로 "비용관리"이다.특히 AWS EC2 인스턴스처럼 사용량에 따라 과금되는 서비스는, 어떤 설정과 운영 방식을 선택하느냐에 따라 매달 지출이 크게 달라진다. 아래는 EC2 인스턴스의 한달 비용을 정리했다.t2.small$0.023/시간월간 예상 비용$16.79한달 서버를 중단없이 배포했을 때 비용이 $16.79이다. (한화 약, 24,429원) EC2 인스턴스는 시간당 과금 정책으로, 인스턴스 서버가 활성화된 시간 기준을 비용이 산정된다. 따라서 이번 포스팅에서는비활성화 시간대에는 인스턴스 서버가 다운되도록 설정해주는 AWS 스케줄러 서비스를 도입하여 비용절약하는 방법을 상세히 소개한다.1. Instance Scheduler 스택 설치 (..
[CI/CD] self-hosted runner 기반 EC2 자동화 배포 구축하기
·
백엔드 개발
[CI/CD] AWS EC2 자동화 배포 파이프라인 구축하기실무환경에선 소프트웨어 개발(Development)과 ""운영(Operation)""이 결합되어있다.쉽게말해, 효율적이고 "지속 가능한" 소프트웨어 제공을 목표로 한다.(기업이 시장에서 생존하기 위해선,실적을 높ceo-uk22.tistory.com여는글프로젝트 초기에는 빠른 개발과 배포에 집중하기 위해, CI/CD 파이프라인을 AWS CodeDeploy 기반으로 구성했었다.빌드된 애플리케이션을 Docker 이미지로 변환하고,ECR 업로드 후 S3에 저장된 배포 스크립트를 토대로 EC2에 배포하는 구조였다.아래는 deploy.yml 스크립트 동작 요약이다.1. Spring Boot 애플리케이션 빌드  2. Docker 이미지 변환  3. ECR 업..
[DevOps 실무] 프로젝트 관리 효율을 2배 높이는 폴더 정리법
·
백엔드 개발
이번 주 팔로업에서 정말 중요한 인사이트 하나를 얻었다.바로, 너무 당연하게 여겨왔던 폴더 정리 방식에 대한 근본적인 재고이다. 기존 문서 정리 방식그동안 팔로업을 진행할 때마다, 노션 내에 새 페이지를 만들고 팔로업 당시의 핵심 내용을 페이지 제목에 워딩한 뒤, 그 아래에 어젠다 상세 내용들을 순차적으로 기록해왔었다.처음에는 나쁘지 않았다. 하지만 시간이 지나며 팔로업이 쌓이기 시작하자 문제가 드러났다. 문제점 발견팔로업마다 어젠다와 논의 흐름이 달라지기 때문에, 페이지 간의 연결성과 흐름이 유기적으로 이어지지 않다는 걸 발견했다.기록은 분명히 남기고 있었지만, 그 기록들이 결국 ‘프로젝트의 방향성과 목적성’을 담지 못하는 상황에 이르렀다.결과적으로 팔로업 문서는 점점 기억의 스냅샷이 되었고, 운영적으..
[AWS] 서버 보안 : 팀원의 EC2 접근, 어떻게 열어줘야 할까?
·
백엔드 개발
AWS에서 프라이빗 서브넷에 EC2를 배포하고 Bastion Host를 통해 관리자가 SSH 접속하는 구조는 보안성과 실용성 면에서 굉장히 유리하다.하지만 실무에서는 혼자만 접속하는 게 아니라, 팀원 혹은 다른 개발자와도 EC2를 함께 사용해야 하는 상황이 생긴다."팀원이 내 EC2에 접속하려고 하는데, PEM 키는 공유해도 되는 걸까?"답은 절대 아니다. 이번 글에서는 개발자에게 받은 Public Key를 활용해 별도의 EC2 사용자 계정(backend-dev)을 만들고, Bastion Host를 통해 접속할 수 있도록 구성하는 과정을 소개한다.왜 PEM 키를 공유하면 안될까?PEM 키는 EC2 인스턴스의 루트 권한에 해당하는 키로, 이를 공유하는 건 비밀번호를 공유하는 것보다 더 위험하다.1. 접속자..
[AWS] 서버 보안 : Bastion Host 기반 Private EC2 구축하기
·
백엔드 개발
프라이빗 환경에서 AWS 클라우드 리소스를 관리하는 방법은실무/운영환경에서 ""필수""이다. 프라이빗 환경은 외부 인터넷과 분리되어, 특정 기업이나 사용자만 접근할 수 있는 독립된 클라우드 인프라 환경이다.외부 인터넷으로 프라이빗 환경 리소스에 접근이 불가능하여, 보안상 민감한 정보들을 주로 프라이빗 환경으로 관리한다. 이전 포스팅에서, VPC에 대한 기본 개념과 서버 보안을 위한 프라이빗 환경으로 리소스를 분리하여 관리하는 전략에 대한 여러 전략들을 소개했다. [AWS] VPC로 클라우드 리소스 보호하기클라우드 자원 (AWS, GCP, Microsoft Azure 등)을 활용해서,서비스 배포환경(웹/앱 서버 & 백엔드 서버)를 쉽고 간편하게 구성할 수 있다.이와 같은 서비스를 "클라우드 호스팅" 서비스..
[AWS] VPC로 클라우드 리소스 보호하기
·
백엔드 개발
클라우드 자원 (AWS, GCP, Microsoft Azure 등)을 활용해서,서비스 배포환경(웹/앱 서버 & 백엔드 서버)를 쉽고 간편하게 구성할 수 있다.이와 같은 서비스를 "클라우드 호스팅" 서비스라고 한다.대표적으로 AWS (아마존 웹 서비스) / Google Cloud Platform (GCP) / Microsoft Azure 가 있다.따라서, 클라우드 호스팅 서비스를 통해, 누구나 일정 금액을 지불하여""누구나 접근할 수 있는 서비스 환경""을 구축할 수 있다.그럼, 서비스 배포작업은 클라우드 호스팅?클라우드 호스팅을 토대로 서버환경을 구축하여누구나 접근할 수 있게 만들 수 있다. 하지만, 실제 운영 중인 서비스 (토스, 카카오, 쿠팡, 네이버 등등)는단순 클라우드 호스팅 서비스 구축 후, 서..
[CI/CD] AWS EC2 자동화 배포 파이프라인 구축하기
·
백엔드 개발
실무환경에선 소프트웨어 개발(Development)과 ""운영(Operation)""이 결합되어있다.쉽게말해, 효율적이고 "지속 가능한" 소프트웨어 제공을 목표로 한다.(기업이 시장에서 생존하기 위해선,실적을 높여야하고 더 좋은 서비스를 매일매일... 제공해야되기 때문이다.) 기업 및 실무에서 이를 핵심요소로 손 꼽고 있다.이에 대한 전체 프로세스를 "Dev Ops"라고 부른다.Dev Ops는 효율적이고, 시장에서 지속가능한 소프트웨어를 위해개발 운영/경영을 하나의 과정으로 묶어두었다. 소프트웨어 개발임무를 맡은 "개발자"는 Dev Ops의 이해를 토대로 전반적인 개발 실무환경을 구축해야한다.Dev Ops를 전반적으로 반영한 코드 개발 및 배포과정이 우리가 알고 있는"CI/CD" 이다. 이번 글은 실무..