왕승재의 학습 저장소
Fiber의 Default Error Handler
•
•
그러기에 많은 개발자들이 Custom Error Handler를 만든다.
•
fiber 공식 문서에 Custom Error Handler를 만드는 방법에 대해 아주 간략하게 나와있다.
•
다만, 해당 내용만으로 개발자가 원하는 Custom Error Handler를 만들기 힘들기에
내가 Custom Error Handler를 만든 경험을 공유하고자 글을 적는다.
Custom Error Handler
먼저 내가 만들고 싶은 Error Handler에 대해 정의했다.
Error 구조 정의
•
Code: 사전에 정의된 Custom Error Code.
•
Err: Golang 기본 error type.
Go Fiber Error Handler 커스텀하기
Backend
2024/01/23
Decorator란?
데코레이터는 함수로서 호출됩니다. 데코레이터 함수는 꾸밀 대상인 클래스, 메서드, 프로퍼티를 인자로 받고, 그 대상을 변경한 결과를 반환합니다. 이 결과를 다시 대상에 할당함으로써, 대상을 꾸밀 수 있습니다.
자바스크립트의 데코레이터는 클래스, 메서드, 프로퍼티 등을 꾸밀 수 있는 기능입니다.
ES2016(ES7)에서는 이 기능이 표준으로 추가되었습니다.
•
데코레이터는 비즈니스와 상관 없는 로직들을 숨기면서 기능을 변경하거나 확장할 수 있게 한다.
•
또한 여러 클래스에서 반복되는 공통 관심사가 있을 때 데코레이터를 사용하면 중복 코드를 줄이고 코드를 모듈 단위로 관리하는 효과를 거둘 수 있다.
TypeScript에서의 Decorator
TypeScript 및 ES6에 클래스가 도입됨에 따라, 클래스 및 클래스 멤버에 어노테이션을 달거나 수정하기 위해 추가 기능이 필요한 특정 시나리오가 있습니다. 데코레이터는 클래스 선언과 멤버에 어노테이션과 메타-프로그래밍 구문을 추가할 수 있는 방법을 제공합니다. 데코레이터는 JavaScript에 대한 2단계 제안이며 TypeScript의 실험적 기능으로 이용 가능합니다.
tsconfig.json
소개
•
TypeScript의 많은 라이브러리는 데코레이터를 기반으로 만들어졌다.
•
데코레이터의 종류 및 적용 가능 범위
NestJS Custom Decorator
Backend
2023/05/02
Cluster Mode
PM2의 cluster mode
The cluster mode allows networked Node.js applications (http(s)/tcp/udp server) to be scaled accross all CPUs available, without any code modifications. This greatly increases the performance and reliability of your applications, depending on the number of CPUs available.
•
코드 수정 없이 Node.js 애플리케이션을 CPU에 따라 확장할 수 있다.
•
안정성과 성능을 크게 향상할 수 있습니다.
•
Node.js의 cluster mode를 사용한다.
Node.js의 cluster mode
A single instance of Node.js runs in a single thread. To take advantage of multi-core systems, the user will sometimes want to launch a cluster of Node.js processes to handle the load.
•
Node.js의 단일 인스턴스는 단일 스레드에서 실행되는데, 멀티 코어 시스템을 이용하기 위해서 Node.js 프로세스들을 클러스터로 사용할 수 있다.
•
이를 통해 모든 서버 포트를 공유하는 하위 프로세스를 생성한다.
The worker processes are spawned using the child_process.fork() method, so that they can communicate with the parent via IPC and pass server handles back and forth.
•
이 하위 프로세스들은 child_process.fork() 메서드를 사용해서 생성되는데, 부모 자식 간의 통신을 위한 IPC(Inter-process communication) 채널을 가지고 있으며, 생성된 각 프로세스는 자체 V8 인스턴스가 있다.
무중단 배포 맛보기
DevOps
2022/12/17
기존 방식의 문제점
•
클라이언트측에서 /api/oauth/google을 호출 할 경우 AuthGuard로 인해 자동으로 구글 로그인 페이지로 redirect됩니다.
•
그 후, 로그인을 완료할 경우 아래의 구글 측에서 /api/oauth/google/callback 으로 access token과 함께 callback합니다.
•
이 경우, 클라이언트측에서는 /api/oauth/google/callback API를 호출한적이 없으므로 로그인 여부를 알 수 없고, 유저 정보 또한 얻을 수 없습니다.
•
SSR을 사용할 경우 문제 없이 유저 정보를 전송할 수 있지만, CSR을 사용하고 있는 상황에서는 해당 문제가 발생한다.
개선된 방식
•
구글 공식 문서를 확인해본 결과 사용자가 request token을 주면 구글에서 authorization code를 보낸다.
•
그 후, 사용자는 authorization code를 이용해 access token을 요청하고, access token을 이용해 구글 로그인을 수행한다.
•
실제 프로젝트에 대입해보면 아래와 같은 흐름도가 나온다.
Google OAuth 트러블 슈팅
Backend
TroubleShooting
2022/12/10
SSL Server Test A등급으로 올리기
•
ssllabs.com를 통해 SSL Server Test를 한 결과 B등급이 나왔다. 해당 결과에 만족스럽지 못한 나는 Protocal Support에 문제가 있다는 것을 발견했다.
•
cerbot + let’s encrypt를 이용해 HTTPS 설정을 하게 될 경우 ssl 관련 설정들이 /etc/letsencrypt/options-ssl-nginx.conf에 저장된다.
•
해당 파일을 살펴보면 ssl_protocols TLSv1 TLSv1.1 TLSv1.2 라고 적혀 있는걸 볼 수 있는데, 2020년부터 TLSv1.0 TLSv1.1에 대한 지원을 중단했다.
•
그 때문에 SSL Server Test에서 B등급이 나왔다는 것을 알 수 있었다. 단순히 TLSv1와 TLSv1.1을 삭제하는 것만으로도 A등급이 나오며 문제를 해결 할 수 있었다.
•
하지만 최신 버전인 TLSv1.3도 적용할려고 할 경우
POODLE(Padding Oracle On Downgraded Legacy Encryption) 취약점
•
구식 암호화 기법을 악용할 수 있게 하는 프로토콜 다운그레이드 취약점.
BEAST(Browser Exploit Against SSL/TLS) 취약점
•
앤드 유저 브라우저에서 HTTPS 의 쿠키들을 해독하고 효과적인 타킷의 세션을 하이제킹할 수 있는 취약점.
•
주요 웹 브라우저 및 애플리케이션에 구현된 TLS 는 다운그레이드 협상 프로세스 (downgrade negotiation process)를 지원하기 때문에 서버가 최신 버전을 지원하더라도 공격자가 취약한 프로토콜을 이용할 수 있다.
TLSv1.3 적용하기
SSL Server Test A+ 받기
DevOps
2022/12/10
Kafka란?
Apache Kafka는 고성능 데이터 파이프라인, 스트리밍 분석, 데이터 통합 및 미션 크리티컬 애플리케이션에 사용되는 오픈 소스 분산 이벤트 스트리밍 플랫폼입니다.
https://kafka.apache.org/
Apache Kafka는 전통적인 엔터프라이즈 메시징 시스템의 대안이다.
용어 정리
기본 명령어
카프카를 사용할 때 주로 사용하는 기본 명령어
Kafka는 어떻게 작동하는가 (Replication, Partition, Sement)
Database
2023/10/28
코드 리뷰
코드 리뷰가 끼치는 효과 5가지
•
동작 오류 제거 (Reduce behavioral erros)
•
구조 결함 제거 (Reduce structural errors)
•
팀 이해도 향상 (Improve team understanding)
•
학습 촉진 (Accelerate learning)
•
팀 위험 제거 (Reduce team risk)
구글
100% 코드 리뷰, 모든 코드를 리뷰하는 Google
•
Google은 코드 리뷰 개발자 가이드(Introduction)를 통해 코딩 스타일을 비롯한 주요 원칙을 공개하고 있습니다. (한글 번역본 : Review · Soojin Ro )
•
Google은 코드 리뷰가 요청되고 나서 1영업일 이내에 반드시 코드 리뷰가 완료되어야 하는 것을 원칙으로 합니다.
코드 리뷰의 필요성과 Branch 전략
etc.
2023/09/06
Go는 객체 지향 언어일까?
Is Go an object-oriented language?
•
공식 문서에 따르면
객체 지향 프로그래밍(OOP)이란?
Go가 객체 지향인지 아닌지를 논하기전에 먼저 객체 지향 언어에 대해 정의해야한다.
위키피디아를 기준으로 아래와 같이 OOP에 대해 정의해봤다.
•
"객체 지향 프로그래밍"은 “객체”라는 개념을 기반으로 하는 프로그래밍 패러다임이다. 이 객체는 종종 속성(attribute)이라고 알려진 필드의 형태로 데이터를 포함할 수 있으며, 종종 메소드라고 알려진 procedure의 형태로 코드를 포함할 수 있다.
•
객체의 procedure는 연관된 객체의 속성(attribute)에 접근하고, 종종 해당 속성(attribute)을 수정할 수 있다.
•
객체의 내부 상태는 속성(attribute)과 메소드의 private/protected/public을 활용하여 외부로부터 보호(캡슐화)된다.
•
객체는 종종 객체 지향 언어에서 클래스의 인스턴스로 정의된다.
OOP 메커니즘
위의 개념 특성들은 가장 일반적인 객체 지향 언어인 Java와 C++에서 다음과 같은 메커니즘으로 구현된다.
•
Encapsulation
Go는 OOP일까?
Backend
2023/08/21