목록개발 상식 (11)
A Developing Developer
트랜잭션(Transaction)은 데이터베이스(Database)에서 수행하는 작업의 논리적 단위를 말한다. 여러 개의 쿼리문으로 이루어진 하나의 논리적인 작업 단위를 말하며, 일련의 작업을 모두 수행하거나 모두 취소하는 것이 가능하다. 트랜잭션은 데이터베이스에서 안전하게 데이터를 관리하기 위한 기능 중 하나이다. 예를 들어, 한 번에 여러 개의 계좌에서 돈을 이체하는 작업을 수행할 때, 이체하는 과정에서 일어나는 문제로 인해 중간에 작업이 멈추게 되면, 일부 계좌에서만 이체가 이루어졌을 가능성이 있다. 이러한 문제를 방지하기 위해 트랜잭션을 사용하여 작업이 완료되거나 모두 취소되도록 하여 데이터 일관성을 유지한다. 트랜잭션은 보통 ACID라는 속성을 가지고 있습니다. ACID는 다음과 같이 정의된다. 원..
Redis는 인메모리 데이터 저장소로서, 키-값 구조로 데이터를 저장하고 검색하는 데 사용되는 데이터 구조 서버이다. Redis는 Remote Dictionary Server 의 약자로, 특정 데이터 구조를 캐시로 사용하거나, 세션 관리, 메시지 브로커 등으로 사용되는데 적합한 솔루션이다. Redis는 메모리에서 데이터를 읽고 쓰기 때문에 매우 빠른 응답 속도를 제공한다. 또한 다양한 데이터 구조를 지원하므로, 문자열, 해시, 목록, 집합, 정렬된 집합 등 다양한 데이터 타입을 지원한다. Redis는 또한 클러스터링, 레플리케이션, 트랜잭션, Pub/Sub 등의 기능도 제공한다. Redis는 주로 웹 애플리케이션에서 세션 관리, 캐싱, 랭킹, 실시간 알림 등에 사용된다. Redis는 다양한 언어와 프레임..
Scope Scope는 변수가 어디에서 선언되었는지에 따라서 해당 변수의 유효 범위가 결정된다. 즉, 변수가 선언된 함수나 블록 스코프에 따라서 변수에 접근할 수 있는 범위가 결정된다. 예를 들어, 함수 안에서 선언된 변수는 해당 함수 내에서만 유효하며 함수 바깥에서는 접근할 수 없다. 또한 중첩된 함수에서는 내부 함수에서 외부 함수의 변수에 접근할 수 있지만, 외부 함수에서 내부 함수의 변수에 접근할 수 없다. Closure Closure는 함수와 해당 함수가 선언된 Scope 와의 관계를 의미한다. 클로저는 함수가 반환된 후에도 해당 함수가 선언된 스코프에 접근할 수 있는 메커니즘을 말한다. 즉, 함수 안에서 선언된 변수는 해당 함수가 반환된 후에도 해당 함수가 선언된 스코프에서 유지될 수 있다. 이..
TypeORM에서 'n + 1 problem'은 대개 관련 엔티티의 쿼리를 로드할 때 발생하는 문제이다. 예를 들어, 게시물(Post)과 게시물 작성자(User) 엔티티가 있다고 가정하면, 모든 게시물과 각 게시물 작성자를 로드하려고 할 때 여러 개의 SQL 쿼리를 실행하여 데이터를 가져올 수 있다. 이러한 방식은 쿼리 성능을 저하시키고 데이터베이스 부하를 높일 수 있으므로, TypeORM에서는 'n + 1 problem'을 해결하기 위한 몇 가지 방법을 제공한다. 1. eager 옵션 사용 : TypeORM에서는 관련된 엔티티를 즉시 로드하기 위해 eager 옵션을 사용할 수 있다. 이를 통해 관련된 모든 엔티티를 한 번에 가져올 수 있다. 예를 들어, 게시물(Post) 엔티티와 게시물 작성자(User..
Nest.js에서 "eager"는 모듈의 로딩 시점을 의미하는 옵션입니다. Nest.js는 기본적으로 지연 로딩(lazy loading)을 사용하여 모듈의 로딩을 최소화하고 애플리케이션의 부하를 줄입니다. 이는 필요한 모듈만 로딩하기 때문에 애플리케이션의 시작 속도를 높이는 데 도움이 됩니다. 하지만, 때로는 애플리케이션 시작 시점에 모든 모듈을 로딩해야 할 때도 있습니다. 이때 "eager" 옵션을 사용하면 모든 모듈이 애플리케이션 시작 시점에 로딩됩니다. 예를 들어, 다음과 같이 AppModule에서 "eager" 옵션을 사용하여 모든 모듈을 애플리케이션 시작 시점에 로딩할 수 있습니다. @Module({ imports: [ UsersModule, PostsModule, CommentsModule, ..
Nest.js 는 IoC (Inversion of Control) 컨테이너를 내장하고 있는 프레임워크이다. IoC 는 애플리케이션의 제어 흐름을 개발자가 작성한 코드에서 외부 컨테이너로 제어의 흐름을 바꾸는 디자인 패턴이다. 이 패턴은 의존성을 관리하고 코드를 더 유연하고 유지보수 가능하도록 만들어준다. Nest.js 에서는 이러한 IoC 패턴을 사용하여 애플리케이션의 모듈, 서비스, 컨트롤러 등을 관리한다. Nest.js 의 IoC 컨테이너는 애플리케이션의 클래스와 객체를 생성, 구성 및 제어하며, 이들의 생명주기를 관리한다. IoC 컨테이너를 사용하면 의존성 주입 (Dependency Injection)이 용이해지며, 다른 클래스와 서비스를 사용하는데 필요한 객체를 애플리케이션의 전역 컨테이너에서 찾..
JavaScript 에서 this 키워드는 현재 실행 중인 함수 또는 메소드 내에서 현재 객체를 참조하는 데 사용된다. this는 함수의 호출 방법에 따라 결정된다. 아래 예시 코드를 살펴보면 this 키워드를 사용하여 현재 객체를 참조하는 방법을 보여준다. // 예시 객체 생성 const person = { firstName: "John", lastName: "Doe", fullName: function() { return this.firstName + " " + this.lastName; } } // fullName() 메소드 호출 console.log(person.fullName()); // "John Doe" 위 코드에서 person 객체의 fullName 메소드 내에서 this 키워드를 사용하여..
호이스팅은 코드가 실행하기 전 '변수선언', '함수선언' 이 해당 스코프의 최상단으로 끌어 올려진 것 같은 현상을 말한다. 자바스크립트 엔진은 코드를 실행하기 전 실행 가능한 코드를 형상화하고 구분하는 과정을 거친다. 자바스크립트 엔진은 코드를 실행하기 전 실행 컨텍스트를 위한과정에서 모든 선언(var, let, const, function, class)을 스코프에 등록한다. 코드 실행 전 이미 '변수선언', '함수선언' 이 저장되어 있기 때문에 선언문보다 '참조', '호출' 이 먼저 나와도 오류없이 동작한다. 자바스크립트 실행 컨텍스트에 의한 위의 현상을 호이스팅이라고 할 수 있다. 변수는 3단계에 걸쳐 생성되는데, 1단계 : 선언 단계 (Declartion phase) 변수를 실행 컨텍스트의 변수 객..