[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" 이다. 이번 글은 실무..
[개인 스터디] NestJS 정복하기 #07 - 커스텀 Pipe 구현
·
백엔드 개발
커스텀 파이프란, 지금까지는 NestJS에서 이미 구성해놓은 built-in 파이프를 사용했다. 하지만, 이것 말고도 따로 생성해서 사용할 수 있는 커스텀 파이프도 있다. 커스텀 파이프는 built-in에서 지원하지 않는 Validation이 있으면, 따로 Validation 검증을 진행하는 커스텀 파이프를 생성해서 Validation 검증을 진행한다. 커스텀 파이프 구성 Pipe Transform 인터페이스 우선 Pipe Transform이라는 인터페이스를 새롭게 만들 커스텀 파이프에 구현해줘야 한다. Pipe Transform 인터페이스는 모든 파이프에서 구현해줘야 하는 인터페이스이다. 그리고 이것과 함께 모든 파이프는 transform() 메소드를 필요로 한다. 이 메소드는 NestJS가 인자를 처..
[개인 스터디] NestJS 정복하기 #06 - Pipe 사용법
·
백엔드 개발
Pipe를 사용하기 위한 터미널 설정 NestJS Pipe 모듈 설치 [Validation & Transformer] 아래와 같은 터미널 명령어를 통해 Validation & Transformer Pipe를 설치한다. 해당 Pipe는 이전 포스팅에서 소개했던, NestJS에서 지원하는 Pipe 중 하나이다. (그렇기에, npm으로 모듈을 설치해서 바로 사용할 수 있다.) $ npm install class-validator class-transformer --save Part. 1-2 게시글 생성 API 파이프사용해서 Validation 진행 게시글 생성 DTO에 Pipe - Data Validation 적용 게시글 DTO에서 | 클라이언트 request 요청 클래스이자, 객체에서 request 값에 대..
[개인 스터디] NestJS 정복하기 #05 - Pipe { Data Transformation & Validation }
·
백엔드 개발
Pipe 란? 파이프는 @injectable() 데코레이터로 주석이 달린 "클래스"이다. 파이프는 Data transformation과 Data Validation을 위해서 사용된다. {데이터 변형 & 데이터 유효성 검사} 파이프는 컨트롤러 경로 처리기에 의해 처리되는 인수에 대해 작동한다. Nest는 메소드가 호출되기 직전에 파이프를 삽입하고 파이프는 메소드로 향하는 인수{Request 값}로 수신하고 이에 대해 작동한다. 아래는 Pipe를 포함시킨 클라이언트 - 서버의 동작논리를 나타낸 것이다. 참고하길 바란다. Pipe를 통해 클라이언트가 요청 Data에 대한 Transformation & Validation을 처리해준다. Pipe는 API 작동에 있어서 유효한 데이터인지를 검증하는 "클래스"로 A..
[개인 스터디] NestJS 정복하기 #04 - DTO | Data Transfer Object
·
백엔드 개발
DTO (Data Transfer Object) 란 DTO는 계층간 데이터 교환을 위한 "객체"이다. (데이터 교환 시 사용하는 객체 | 일종의 개발 규칙이다.) DB에서 데이터를 얻어 Service나 Controller 등으로 보낼 때 사용하는 객체를 말한다. DTO는 데이터가 네트워크를 통해 전송되는 방법을 정의하는 객체이다. # DTO 구현 방식 Interface나 Class를 이용해서 정의 될 수 있다. (하지만, 클래스를 이용하는 것을 NestJS에서 추천하고 있다.) # DTO (Data Transfer Object)를 쓰는 이유는 무엇인가? 데이터 유효성을 체크하는데 효율적이다. 더 안정적인 코드로 만들어준다. | 타입스크립트의 타입으로도 사용된다. DTO 구현 게시글 생성 API의 Para..