[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..
[개인 스터디] NestJS 정복하기 #03 - 게시글 생성 API | Create API
·
백엔드 개발
게시글 생성 API 만들기 - Express Post 메소드 게시글 Model 구현 [게시글 객체형태 지정] 게시글 생성 API를 만들기 위해선, 게시물에 필요한 데이터가 어떤 것이 필요한지를 정의해주기 위해서 게시글의 모델을 만들어준다. 모델을 정의할 때는 2가지 방법이 있다. # Interface로 정의 & 클래스로 정의 이번에 만들 게시글 생성 API는 게시글 생성 구조만 다뤄볼 것이기에 Interface로 게시글 Model를 만든다. 클래스로 모델을 만드는 것은 NestJS로 API를 여러가지 다뤄본 후 만들예정이다. 아래와 같이 게시글 모델을 파일을 boards 폴더 내에(Controller, Module, Service 파일이 있는 폴더) 생성 후 Interface로 구성한다. 인터페이스는 "..
[개인 스터디] NestJS 정복 - CRUD API 구현
·
백엔드 개발
해당 포스팅의 목적은 NestJS를 공부하면서 구현한 API를 정리해두는 포스팅입니다. 이론 포스팅과 실습 포스팅을 분리하기 위해서 만들어진 포스팅이고, 해당 포스팅은 실습 포스팅입니다. 블로그를 참고하실 때 유의해주시길 바랍니다. 해당 포스팅은 NestJS를 공부하면서 꾸준히 추가될 예정이고, 추가될 때마다 포스팅 업데이트를 진행합니다. Part. 1-1 | 모든 게시글 조회 API { Read API | Get } 해당 API는 데이터베이스와 연동하지 않고 Nest 로컬변수에 게시글 데이터를 저장해두고, 구현했음을 참고하길 바란다. 그리고, Module, Controller, Service 파일의 구성은 이전 포스팅에서 다뤘기에, 생략하도록 하겠다. 아래의 구현된 코드들은 각 파일의 클래스 내부에 작..