전체 글
-
Jest private method mockingNode 2024. 12. 11. 21:38
Object.getPrototypeOf()Object.getPrototypeOf() 를 사용하면 인스턴스의 원형에 접근할 수 있어 private 메서드도 mocking 할 수 있다.class MyClass { private myPrivateMethod(): string { return 'Original Private Method'; } public callPrivateMethod(): string { return this.myPrivateMethod(); }}describe('MyClass', () => { it('should mock private method using `Object.getPrototypeOf`', () => { const myInstance = new MyC..
-
gRPCBackend 2024. 12. 9. 22:54
gRPC 는 Google 에서 개발한 오픈 소스 원격 프로시저 호출(Remote Procedure Call) 프레임워크로, 기존의 RPC 시스템을 현대화하여 다양한 환경에서 효율적인 통신을 지원한다. gRPC는 HTTP/2 를 기반으로 하며, 프로토콜 버퍼(Protocol Buffers) 를 사용하여 데이터를 직렬화한다. 전통적인 RPC 시스템과 gRPC 의 차이데이터 직렬화 방식RPC: 일반적으로 XML이나 JSON 같은 텍스트 기반의 직렬화 형식을 사용한다.gRPC: 프로토콜 버퍼라는 이진 직렬화 형식을 사용하여 데이터의 크기를 줄이고, 직렬화 및 역직렬화 속도를 향상시킨다.전송 프로토콜RPC: 주로 HTTP/1.1 을 사용하며, 요청-응답 방식으로 통신한다.gRPC: HTTP/2 를 기반으로 하여 ..
-
마샬링(Marshalling)과 직렬화(Serialization)기타 2024. 12. 7. 18:40
마샬링(Marshalling)과 직렬화(Serialization)은 모두 데이터를 특정 형식으로 변환하는 과정이지만, 그 목적과 범위에서 차이가 있다. 직렬화(Serialization)직렬화는 객체의 상태를 저장하거나 전송하기 위해 객체를 바이트 스트림과 같은 원시 데이터 형식으로 변환하는 과정이다. 이를 통해 객체를 파일에 저장하거나 네트워크를 통해 전송할 수 있으며, 나중에 이 바이트 스트림을 역직렬화(Deserialization)하여 원래의 객체로 복원할 수 있다. 직렬화는 주로 동일한 시스템 내에서 데이터를 저장하거나 전송할 때 사용된다.마샬링(Marshalling)마샬링은 직렬화와 유사하지만, 주로 서로 다른 시스템이나 프로그래밍 언어 간의 통신을 위해 데이터를 변환하는 과정이다. 이는 원격 프..
-
RPC(Remote Procedure Call)Backend 2024. 12. 7. 18:27
RPC(Remote Procedure Call)는 네트워크를 통해 분산 시스템에서 서로 다른 컴퓨터 간의 프로시저(함수)를 호출할 수 있도록 하는 통신 메커니즘이다. RPC는 로컬 함수 호출처럼 보이지만, 실제로는 원격 서버에서 실행되는 프로세스다. 이를 통해 부산 시스템 간의 통신을 쉽게 구현할 수 있다. 이를 통해 개발자는 네트워크 통신의 복잡성을 신경 쓰지 않고도 원격 서버의 기능을 사용할 수 있다. 주요 특징투명성: 개발자는 원격 함수 호출을 로컬 함수 호출처럼 수행할 수 있으며, 네트워크 통신의 복잡성을 숨겨준다.언어 및 플랫폼 독립성: RPC 는 다양한 언어와 플랫폼 간의 통신을 지원하여 이기종 시스템 간의 상호 운용성을 높인다.계층 구조: 클라이언트와 서버는 서로 계층적으로 구성되며, 클라이..
-
Terraform nonsensitive기타 2024. 11. 28. 22:16
Terraform에서 nonsensitive 함수는 민감한(Sensitive) 값의 민감성 표시를 제거하여 해당 값을 일반 값처럼 취급할 수 있게 한다.이 함수는 Terraform 버전 0.15부터 사용 가능하다. 사용 목적Terraform은 민감한 정보를 보호하기 위해 변수나 리소스의 값을 민감한 값(Sensitive Value)으로 표시할 수 있다. 이렇게 설정된 값은 Terraform의 출력이나 로그에 노출되지 않도록 처리한다. 그러나 특정 상황에서는 이러한 민감성 표시를 제거하고 값을 일반 값처럼 사용해야 할 필요가 있다. 이때 nonsensitive 함수를 사용하여 민감성 표시를 제거할 수 있다. 사용 예시variable "secret_value" { type = string se..
-
Nestjs Request LifecycleNode 2024. 11. 24. 18:41
1. Middleware (미들웨어)위치: 요청 처리의 가장 첫 단계역할: HTTP 요청/응답을 가로채어 수정하거나 처리 여부를 결정주요 기능:요청 로깅헤더 조작요청 본문 파싱CORS 설정// Interceptor 구현@Injectable()export class LoggerMiddleware implements NestMiddleware { use(req: Request, res: Response, next: NextFunction) { console.log(`Request ${req.method} ${req.url}`); next(); }}// Interceptor 적용import { Module, NestModule, MiddlewareConsumer } from '@nestjs/co..
-
Nestjs Lifecycle 과 Event hooksNode 2024. 11. 19. 22:52
1. 라이프사이클NestJS는 애플리케이션 시작과 종료 시 다양한 이벤트를 발생시킨다. 이를 통해 초기화 작업, 리소스 설정, 클린업(종료 작업) 등을 수행할 수 있다.전체 수명 주기를 초기화, 실행 및 종료의 세 단계로 나눌 수 있다.2. 라이프사이클 이벤트NestJS 의 Lifecycle Events 는 애플리케이션 또는 특정 구성 요소(module, provider, controller)의 수명 주기 동안 특정 시점에 실행되는 메서드이다. 명시적으로 각 훅의 인터페이스를 implements 해야 훅이 정상적으로 트리거된다. 2.1. 애플리케이션 초기화 관련 이벤트이벤트대상설명OnModuleInit모듈, 프로바이더모듈이나 프로바이더가 생성되고 의존성이 주입된 후 호출된다.OnApplicationBo..
-
분산 락(Distributed lock)Backend 2024. 11. 17. 20:19
1. 분산 락의 상세 개념정의: 분산 시스템에서 공유 자원에 대한 동시 접근을 제어하는 동기화 메커니즘입니다.작동 방식:모든 서버/프로세스가 접근할 수 있는 공유 저장소(Redis, ZooKeeper 등)에 락을 저장락을 획득하려는 프로세스는 원자적 연산으로 락 생성을 시도락을 획득한 프로세스만 공유 자원에 접근 가능작업 완료 후 락을 해제하여 다른 프로세스가 사용할 수 있게 함2. 분산 락의 핵심 요구사항상호 배제(Mutual Exclusion): 특정 시점에 하나의 프로세스만 락을 보유할 수 있음데드락 방지(Deadlock Prevention):락 획득 실패 시 적절한 타임아웃 설정락 보유자가 비정상 종료된 경우를 대비한 자동 해제 메커니즘고가용성(High Availability):락 서비스 자체의 ..