분류 전체보기 210

23.10.02 NestJS에서 모듈(Module)

모듈 애플리케이션의 구조와 조직을 위한 메타데이터를 갖춘 클래스이다. 그래서 무슨 역할인데? 코드 조직화: 관련된 기능, 컴포넌트, 서비스 등을 모듈 내부로 그룹화함으로써 코드의 구조를 깔끔하게 유지한다. 의존성 주입: 의존성 주입에 필요한 서비스나 리포지터리와 같은 제공자의 집합을 정의한다. 모듈 재사용: 응용 프로그램 내의 다른 모듈 또는 외부 라이브러리에서 제공된 모듈을 임포트하고 재사용할 수 있다. 캡슐화: 모듈은 내부 구현을 숨기고 필요한 것만을 익스포트함으로써 캡슐화를 제공한다. 주요 구성 요소 제공자 (Providers): 서비스, 리포지터리, 팩토리 등 다양한 클래스들이 여기에 포함되며, 의존성 주입에 사용 된다. 컨트롤러 (Controllers): 요청을 처리하고 응답을 반환하는 클래스이..

23.10.01 데코레이터( @, Decorator)

NestJS 강의를 들으면서 처음 데코레이터라는 것을 보고 이게 뭐야 하는 의문이 들었다. 데코레이터 주어진 상황 및 용도에 따라 어떤 객체에 책임을 덧붙이는 디자인 패턴으로, 기능 확장이 필요할 때 서브클래싱 대신 쓸 수 있는 유연한 대안이 될 수 있다. NestJS는 TypeScript 기반의 백엔드 프레임워크로, TypeScript의 데코레이터는 클래스, 메서드, 속성, 매개변수 등에 메타데이터를 추가하거나 변경하는 데 사용된다. 이것이 어떻게 작동되냐 데코레이터 정의: 데코레이터는 함수로 정의되며, 이 함수는 데코레이트되는 대상에 대한 정보를 인자로 받는다. 데코레이터 적용: 데코레이터는 클래스, 메서드, 속성, 매개변수 등에 @데코레이터명 형태로 적용된다. 메타데이터 리플렉션: NestJS는 내..

23.09.30 NestJS에서 의존성 주입

NestJS는 기존에 사용해왔던 Express와 다르게 어떻게 의존성 주입을 할까? 전체적인 과정 1. 서비스 생성하기 import { Injectable } from '@nestjs/common'; @Injectable() export class CatsService { findAll(): string[] { return ['cat1', 'cat2']; } } 2. Module에 Provider 추가하기 import { Module } from '@nestjs/common'; import { CatsService } from './cats.service'; @Module({ providers: [CatsService], }) export class CatsModule {} 3. Service를 Cont..

23.09.29 제어 역전 (Inversion of Control, IoC)

이것도 DI와 같이 찾아봤었는데 그 때는 이게 뭐야 컨테이너는 뭐고 빈은 뭔데 하면서 이해하지 못했는데 이것도 다시 정리한다. 간단하게 말하면 의존성 주입에 필요한 객체들의 라이프 사이클을 관리하여 의존성 주입을 자동으로 하는 것을 제어 역전이라고 한다. 의존성 주입을 위해 객체를 전달하는데 그게 한 두개도 아니고 사람이 다 처리하면 시간이 오래 걸리고 이것도 더 편하게 손이 덜가게 처리하기 위해서 컨테이너라는 곳에서 관리한다. 제어 역전 프로그램의 제어 흐름이 기존의 사용자 코드에서 프레임워크나 컨테이너에 의해 결정되는 개발 패러다임이다. 컨테이너 다양한 개체나 요소를 보관, 관리, 운반, 또는 포장하는 데 사용되는 객체 또는 구조물이다. 흔히 알고 있는 컨테이너가 포장, 운반, 관리, 보관 등의 역할..

23.09.28 의존성 주입이 있을 때 없을 때

의존성 주입이 뭔지 정의는 알겠는데 이게 있을 때와 없을 때가 뭐가 다른지는 잘 모르겠다. 그래서 이것도 나중에 보고도 알 수 있게 찾아봤다. 결론부터 말하면 의존성 주입이 없어도 다 처리할 순 있다. 다만 손이 더 많이 가고 그만큼 실수할 가능성이 높아지니까 의존성 주입을 통해서 처리하는 것이 좋다. 의존성 주입이 없을 때 class Car { constructor() { this.engine = new Engine(); // 직접 의존성 생성 } start() { this.engine.turnOn(); } } class Engine { turnOn() { console.log('Engine turned on!'); } } const car = new Car(); car.start(); 의존성 주입이 ..

23.09.27 모듈화(Modularization)

모듈화 코드를 작은 독립적인 모듈 또는 컴포넌트로 분해하는 프로세스를 의미한다. 모듈이란? 특정 기능이나 목적을 수행하는 코드의 논리적 단위입니다. 모듈은 일반적으로 관련된 함수, 클래스 또는 파일로 구성된다. 모듈의 특징 독립성: 각 모듈은 독립적으로 동작할 수 있어야 하며, 다른 모듈에 크게 의존하지 않고 자체적으로 기능을 수행할 수 있어야 한다. 인터페이스: 모듈은 외부와 상호작용하기 위한 인터페이스를 정의하는데, 이 인터페이스는 모듈 외부에서 모듈의 기능을 호출하거나 데이터에 접근하는 방법을 규정한다. 재사용성: 모듈화된 코드는 다른 프로젝트나 부분에서 재사용될 수 있어야 한다. 가독성: 모듈화된 코드는 논리적으로 구성되어 있어 코드를 읽고 이해하기 쉬워진다. 유지보수성: 모듈은 수정 또는 업데이..

23.09.26 의존성 주입(Dependency Injection, DI)

기존에도 찾아봤던 내용이지만 그 때는 이해하기 힘들었다. 대부분 스프링에 대한 내용만 있었고, 나중에 다시 공부할 일이 있을거란 생각으로 가볍게 보고 넘어갔는데 이번에 Nest.JS 강의를 보면서 의문이 들어서 조금 더 끈질기게 찾아보고 이해하려고 하다보니 조금은 알 것 같아서 찾아본 내용을 정리하려고 한다. 의존성 주입 의존성 (Dependency): 의존성은 한 객체가 다른 객체에 의존하는 상황이다. 주입 (Injection): 의존성을 생성자, 메서드 매개변수, 또는 속성으로 받아서 사용한다. 이를 통해 객체는 직접 의존성을 생성하지 않고 외부로부터 주입 받게 된다. 의존성 주입을 사용하는 이유 결합도 감소(Decoupling): 객체 간의 결합도를 낮추어 코드의 변경이나 유지 보수가 더 쉬워진다...

23.09.25 실행 컨텍스트(Execution Context)(다시 정리)

기존에 정리한 글이 있어서 다시 보니까 글이 너무 난잡해서 오히려 더 내용을 모르겠어서 다시 정리했다. 솔직히 지금도 잘한다 말할 순 없지만 이것도 이렇게 쓰다보니 느는 것 같긴다. 실행 컨텍스트 실행할 코드에 제공할 환경 정보들을 모아 놓은 객체이며, 자바스크립트의 동적 언어로서의 성격을 가장 잘 파악할 수 있는 개념이다. 언제 생길까? 전역공간 함수를 실행한다. eval() 함수를 실행한다. block을 만든다 (ES6+) 어떻게 동작할까? // ------------------- (1) var a = 1; function outer() { function inner() { console.log(a); var a = 3; // --------------- (2) } inner(); // -------..

23.09.24 미들웨어(Middleware)

미들웨어(Middleware) 소프트웨어 애플리케이션에서 클라이언트와 서버 간의 요청(request)과 응답(response) 사이에서 동작하는 소프트웨어 구성 요소 또는 함수입니다. 미들웨어는 애플리케이션의 중간에 위치하여 다양한 작업을 수행하고 요청과 응답 데이터를 처리, 변환 또는 조작하는 역할을 한다. 그래서 무엇을 할 수 있냐? 요청 파싱(Request Parsing) 로그 기록(Logging) 인증과 권한 부여(Authentication and Authorization) 캐싱(Caching) 압축(Compression) 에러 처리(Error Handling) 라우팅(Routing) 응답 변환(Response Transformation) 클라우드 컴퓨팅에서 미들웨어는? 조직이 클라우드 네이티브 ..

23.09.23 B-Tree

B-Tree B트리는 이진트리에서 발전되어 모든 리프노드들이 같은 레벨을 가질 수 있도록 자동으로 벨런스를 맞추는 트리입니다. 또한 정렬된 순서를 보장하고, *멀티레벨 인덱싱을 통한 빠른 검색을 할 수 있기 때문에 DB에서 사용하는 자료구조 중 한 종류라고 합니다. *멀티레벨 인덱싱 : 데이터를 여러 수준의 인덱스로 구성하여 데이터 접근을 빠르게 하는 기술 B트리는 이진트리와 다르게 하나의 노드에 많은 수의 정보를 가지고 있을 수 있습니다. 최대 M개의 자식을 가질 수 있는 B트리를 M차 B트리라고 하며 다음과 같은 특징을 같습니다. 노드는 최대 M개 부터 M/2개 까지의 자식을 가질 수 있습니다. 노드에는 최대 M−1개 부터 [M/2]−1개의 키가 포함될 수 있습니다. 노드의 키가 x개라면 자식의 수는..