- [ backend ][etc] passport를 이용하여 인증/인가 구현하기 (with nest)2024-01-18 02:20:04passport로 인증/인가 구현하기 passport란? 직접 구현한 인증/인가 로직을 passport 라이브러리를 활용하여 대체할 것이다. passport는 node에서 사용하는 인증 라이브러리다. 이미 인증/인가를 구현했으면서 왜 passport를 도입했을까? 바로 passport가 표준화된 방식을 이용하고 있기 때문이다. passport의 이점 표준화된, 다양한 인증 전략 제공 : 직접 다 구현할 필요없이 다양한 전략을 간단하게 사용할 수 있다. 풍부한 생태계 : 많은 곳에서 활발하게 사용되고 있기 때문에 문제가 발생했을 때 도움을 얻기 쉽다. ... @Injectable() export class JwtAuthGuard implements CanActivate { constructor(privat..
- [ backend/docker ][docker] Docker Compose로 멀티 컨테이너 어플리케이션 만들기 (yaml/volumes)2024-01-16 22:16:12이번엔 도커 컴포즈를 이용하여 멀티 컨테이너 어플리케이션을 만들 것이다. 멀티 컨테이너를 구축하면 서비스별로 컨테이너를 만들기 때문에 각 컨테이너가 한 가지 일만 수행하고, 서로의 리소스에 영향을 미치지 않는다는 장점이 있다. Docker Compose를 사용하는 이유 docker CLI의 단점 결론부터 말하면 도커 CLI는 단일 서비스에 최적화 되어있기 때문에 복잡한 멀티 컨테이너를 다루기엔 적합하지 않다. 도커 컨테이너는 격리된 환경을 가지므로 다른 컨테이너와 통신하기 위해서는 동일한 네트워크에 배치해줘야 한다. 이처럼 멀티 컨테이너를 위한 설정으로 인해 CLI 명령어가 길어지고 복잡해진다. docker CLI로 멀티 컨테이너를 띄울 때의 단점 복잡성 및 가독성 : 네트워크, 볼륨 등 멀티 컨테이너 ..
- [ backend ][etc] graceful shutdown으로 사용자 경험 저하 방지하기 (with docker & nest)2024-01-15 18:26:08UX는 프론트엔드 담당이라고? 백엔드도 할 수 있어 😎 새로운 어플리케이션이 출시되는 등의 이유로 서버를 종료하는 상황을 가정해보자. 사용자의 요청을 처리하는 도중에 서버를 종료하면 어떻게 될까? 사용자는 서버로부터 유의미한 응답을 받을 수 없기 때문에 불편함을 느낄 것이다. 지금부터 모든 요청을 처리한 후에 종료하는 방법을 알아보자! graceful shutdown 난 사실 우아한 종료가 아닌, 우하하 종료를 구현했다 🤪 그레이스풀 종료는 서버가 모든 요청에 대해 응답하고, 더 이상 처리해야 하는 작업이 없을 때 종료하는 것을 의미한다. 혹시 SIGKILL을 보내고 있진 않나요? 그레이스풀 종료를 구현하기 위해서는 몇 가지 유의사항이 있다. 우선, 프로세스를 강제로 죽이면 안된다. (처음엔 SIGKIL..
- [ backend ][etc] winston과 sentry로 서버가 터지는 이유 분석하기2024-01-13 03:56:16서버 개발자를 노트북에서 잠시 해방시켜 주는 법이번에 프로젝트를 진행하면서 가장 많이 했던 말이 "서버 왜 죽었지"다. 이전까지는 배포를 제대로 해본 적이 없어서 (과제 발표할 동안만 돌아가면 되기 때문에,, 어차피 개발해도 나만 쓰는 일회성이기 때문에,,) 로깅과 모니터링의 중요성을 느끼지 못했다.🙋♀️ : 프론트 테스트 하려고 하는데 서버 내렸어? 🙋♂️ : 서비스 안 되는데 혹시 서버 터졌나요?하지만 이번 프로젝트에서 매주 업데이트 된 것을 배포하고, 사용자를 모으면서 로깅과 모니터링이 정말 중요하다는 걸 깨달았다.🤯: 엥? 서버 안 돌아가?!?! 🤯: 엇,, 잠시만요,, 확인해보겠습니다,, (노트북 주섬주섬,,)지금 나에게 필요한 건 딱 두 가지다.1. 서버가 죽는 원인 찾기 2. 서버가 곧 ..
- [ backend/oauth ][oauth] 카카오 로그인 이해하기2024-01-09 21:36:42🔗 OAuth 2.0의 동작원리 🔗 카카오 로그인 시작하기 카카오 로그인 이해하기 로그인 과정 아래 다이어그램은 카카오 로그인을 이용한 서비스 로그인 과정을 나타낸 것이다. 사용자 클라이언트, 서비스 서버, 카카오 인증 서버, 카카오 API 서버를 OAuth 역할에 매핑해봤다. 사용자 클라이언트 == 클라이언트 FE 서비스 서버 == 클라이언트 BE 카카오 인증 서버 == 인가 서버 카카오 API 서버 == 리소스 서버 Step 1 : 카카오 로그인 사용자가 서비스에서 `카카오 로그인` 버튼을 클릭하면, 서비스는 카카오 인증 서버로 인가 코드 발급을 요청하게 된다. 카카오 인증 서버는 사용자에게 인증을 요청한다. 사용자가 인증에 성공하면 서비스의 동의 항목 설정을 바탕으로 사용자에게 동의 화면을 전달한다..
- [ backend/oauth ][oauth] 카카오 로그인 시작하기 (어플리케이션 등록/카카오 로그인 활성화)2024-01-09 17:18:05카카오 로그인을 위한 세팅 이번 포스팅에서는 카카오 로그인을 위한 사전 세팅만 다룬다. 어플리케이션 등록하기 카카오 로그인을 사용하려면 먼저 내 어플리케이션을 등록해야 한다. `kakao developers > 내 어플리케이션`에 접속한다. 어플리케이션 이용 안내를 참고하여 등록해주면 위와 같이 내 어플리케이션이 등록된 것을 확인할 수 있다!! 카카오 로그인 활성화하기 내 어플리케이션의 상세 페이지를 들어오면 좌측 상단에 햄버거 버튼이 보인다. 해당 버튼을 클릭하여 `카카오 로그인` 탭을 선택한다. 활성화 상태를 `ON`으로 변경하고, 리다이렉트 URI를 등록해줬다. 리다이렉트 URI는 카카오 로그인 서비스에서 서드 파티 어플리케이션인 클라이언트로 다시 돌려 보내기 위해 사용된다. 추후에 구글, 네이버도..
- [ backend/oauth ][oauth] OAuth 2.0의 동작원리2024-01-09 05:57:27구글, 트위터, 페이스북 계정으로 다른 사이트에 로그인하는 것은 무척 편리하다. 하지만 편리함이 전부가 아니다. 서드 파티 사이트에 새 계정을 생성하거나 SNS 계정의 아이디, 비밀번호를 입력하는 것보다 안전하다. OAuth란? OAuth의 개념에 대해 알아보기 전에 OAuth의 동작 시나리오부터 살펴보자! OAuth는 어떻게 동작할까? 구글 계정으로 서드 파티 어플리케이션 A에 로그인하는 상황을 가정하겠다. A가 구글 계정의 프로필을 사용하기 위해서는, 사전에 A가 구글 계정에 대한 접근 권한을 가지고 있어야 한다. 과거에는 서드 파티 어플리케이션에 구글 아이디와 패스워드를 전달해야 구글 서비스에 접근할 수 있었다. 하지만 이는 굉장히 큰 도박이다. 서드 파티 어플리케이션이 구글 계정을 악의적인 용도로..
- [ backend/aws ][aws] rds 만들기2024-01-08 17:49:22RDS 생성하기RDS란?rds는 Relational Database Service의 약자로, 데이터베이스를 설치하고, 운영하는 것을 좀 더 쉽게 만들어주는 웹 서비스다. 번거롭고 까다로운 작업을 제거함으로써 본질적인 어플리케이션 자체에 집중할 수 있다.일반적으로 DB 인스턴스는 vpc의 프라이빗 서브넷에 배치한다. 같은 vpc 내의 ec2에서 DB 인스턴스에 접근하는 것은 가능하지만 vpc 바깥의 리소스에서는 접근하지 못하도록 구성한다. MySQL RDS 생성하기rds 서비스에서 `databases`를 선택하고, `Create database` 버튼을 클릭한다.`Easy create`를 선택하고, MySQL 엔진을 선택한다. 인스턴스 크기는 프리티어로 지정했다.기존에 생성해놓은 ec2와 연결하기 위해 `..