banner image

전체 글 77

[TypeORM] connection pool size 조정해서 데이터베이스 작업 효율 높이기

커넥션 테스트 준비(현재 글은 typeorm 0.3.21 버전, mysql 8.0 버전을 토대로 작성하였습니다.)저는 NestJS 프레임워크에서 typeorm을 활용하여 데이터베이스 작업을 진행하고 있습니다. 그리고 typeorm과 관련된 설정에서 connection pool과 관련된 설정은 어떠한 것도 수정하지 않았습니다. 이때 typeorm에서 데이터베이스와 연결되는 커넥션 수가 궁금하여 다음과 같은 테스트를 진행하였습니다.커넥션 수 확인nest js 어플리케이션 실행 후 커넥션 수 확인nest js 서비스 코드 중 데이터베이스에 한 번 CRUD 작업을 진행하는 메서드 실행 후 커넥션 확인nest js 서비스 코드 중 데이터베이스에 여러 번 CRUD 작업을 진행하는 메서드 실행 후 커넥션 확인이때 사..

[AWS] Auto Scaling 사용해 트래픽에 맞춰 스케일링하기 (EC2, ALB)

클라우드 서비스를 이용하는 이유 중 하나는 고가용성일 것입니다. 예전에 물리적 서버를 직접 운영하던 시절에는 트래픽이 증가하면 서버실에 개발 인원이 직접 가서 물리적 서버를 한 대 더 켜야했습니다. 이런 작업은 굉장한 불편함을 발생시켰고, 현재는 클라우드 서비스의 등장으로 모두 자동화되가고 있습니다. 즉, 특정 조건이 만족되면 알아서 서버가 스케일 아웃되게 할 수 있는 것이죠. 오늘은 AWS에서 제공하는 스케이일 서비스인 Auto Scaling을 활용하는 방법에 대해 간략히 공유하겠습니다.Auto Scaling 설정1. 그룹 크기최소 용량과 최대 용량만 제대로 작성하면 될 듯 싶습니다. 원하는 용량 값은 스케일 아웃, 스케일 인이 실행되면 현재 인스턴스 개수로 수정되고 있었습니다. 2. 동적 크기 조정 ..

[Docker] docker-compose.yml 작성하기

도커 컴포즈는 여러 개의 컨테이너를 하나의 docker-compose.yml이라는 설정 파일을 이용해 관리할 수 있게하는 서비스입니다. 저는 개인적으로 도커 컴포즈를 활용해 어플리케이션 컨테이너, 데이터베이스 컨테이너 등을 묶어 한 번에 실행시키며 개발을 진행합니다. 이를 통해 빠른 개발이 가능해집니다. 최상단 프로퍼티 종류docker.compose.yml 파일에 작성해야할 프로퍼티는 다음과 같습니다. ✅ version해당 프로퍼티는 예전에 사용되던 프로퍼티로 도커 컴포즈 버전을 명시하도록 되어있었습니다. 하지만 현재는 해당 프로퍼티가 삭제되어 작성하면 에러가 발생합니다. 현재는 필요 없는 프로퍼티입니다. Version and name top-level elementsUnderstand when and ..

데브옵스/Docker 2025.04.16

동시성 문제 직접 테스트해보고 이해하자 - 비관적 락 / 낙관적 락

데이터베이스 동시성 관련 문제에 대해 직접 테스트 코드를 작성해보고 이를 해결한 경험을 공유하겠습니다. 동시성 문제(Concurrency problem)란?데이터베이스 동시성 문제(concurrency issue)는 여러 작업(트랜잭션)이 동시에 같은 데이터에 접근하거나 수정할 때 발생할 수 있는 문제를 일컫습니다. 이를 제대로 다루지 않으면, 데이터 무결성에 심각한 오류가 생길 수 있습니다. 동시성 문제가 발생하는 예제는 다음과 같습니다.A와 B라는 사람이 동시에 사용하는 공동계좌가 존재. 이때 해당 계좌에 1,000원 존재A가 계좌에서 500원을 출금 시도동시에 B도 계좌에서 500원을 출금 시도일반적으로 생각했을 때 A가 출금한 500원과 B가 출금한 500원이 합쳐져 1,000 - 500 - 50..

[TS] 타입스크립트 추론 종류 - 타입 추론(Type Inference) / 리터럴 추론(Literal Inference)

1. 타입 추론(Type Inference)타입스크립트에서는 타입을 명시적으로 지정하지 않더라도 자동으로 타입을 유추합니다. 이를 타입 추론(Type Inference)라고 부릅니다. 자바스크립트와 타입스크립트의 차이를 통해 설명하겠습니다.자바스크립트// javascript 예시let js = "hello";js = 1234;타입스크립트// typescript 예시let js = "hello";js = 1234;// ❗️에러 발생 : Type 'number' is not assignable to type 'string'.// let js: string 이런 타입 추론으로 인해 타입스크립트에서 일일이 타입을 안 써도 되어 편리한 개발이 가능해집니다. 또한 타입 추론을 통해 타입 안정성이 확보됩니다. 2..

백엔드/Node.js 2025.04.14

[TS] 타입스크립트 type vs interface 차이?

공식문서 Documentation - Everyday TypesThe language primitives.www.typescriptlang.org 타입스크립트에서 타입을 표현하기 위해 Type 또는 Interface를 사용합니다. 이때 두 방식은 거의 비슷한데요. 어떤 경우에는 Type을 사용하는 것이 좋고 어떤 경우에는 Interface를 사용하는 것이 더 좋을지 궁금해져 이에 대해 알아보았습니다. typetype은 모든 타입을 표현할 수 있습니다. 객체 타입, 유니온 타입 등 모든 타입 모두 가능합니다.type Point = { x: number; y: number;}; // Exactly the same as the earlier examplefunction printCoord(pt: Poin..

백엔드/Node.js 2025.04.14

[TS] 타입스크립트 Satisfies 연산자 (4.9 버전부터)

타입스크립트 4.9버전부터 새롭게 등장한 연산자가 있습니다. 바로 Satisfies인데요. 해당 연산자를 통해 타입 가드를 이용하지 않고 더 간단하게 개발을 할 수 있습니다. Documentation - TypeScript 4.9TypeScript 4.9 Release Noteswww.typescriptlang.org  Satisfies란?satisfies는 타입을 명시적으로 선언하는 행위 대신해서 사용할 수 있는 방법입니다. 이때 명시적인 타입 선언과 다른점은 알아서 타입 가드처럼 validating 과정을 거쳐준다는 것입니다. 아래 예시를 통해 설명하겠습니다.type LocationValue = LocationName | LocationCoordinate;type LocationName = 'seo..

백엔드/Node.js 2025.04.10

HTTP 프로토콜에서 데이터 전송되는 방식 - JSON.stringfy(), JSON.parse()

HTTP 프로토콜 API를 하나 만들었다고 가정합니다. 보통 이런 API 응답 형식은 JSON이죠. 그럼 네트워크에 JSON 객체가 그대로 포함된채로 전달될까요? HTTP 요청과 응답 구조HTTP 프로토콜을 사용해 데이터를 주고 받을 때 요청와 응답 구조를 확인해봅시다.🔎 참고자료 HTTP 프로토콜 | 토스페이먼츠 개발자센터HTTP(Hypertext Transfer Protocol)는 웹에서 데이터를 주고받는 서버-클라이언트 모델의 프로토콜입니다. 쉽게 설명하자면 웹 브라우저가 서버와 통신하는 규칙이에요.docs.tosspayments.com 요청(Request)요청은 다음과 같은 구성으로 이루어집니다.요청 라인 (Request Line)요청 헤더들 (Request Headers)빈 줄요청 바디 (Re..

[TS] 타입 체킹 - 덕 타이핑(Duck Typing, Structural SubTyping)이란?

덕 타이핑(Duck Typing)이란?오리처럼 걷고, 오리처럼 꽥꽥대면, 그건 오리다 위와 같은 논리가 타입스크립트에서 사용되는 덕 타이핑입니다. 즉, 타입에 대한 형식만 맞으면 그 타입으로 간주하겠다는 방식입니다. 타입스크립트에서는 값의 형태에 기반하아여 타입 체크가 이루어져야 한다는 가치관이 존재하기 때문입니다. 그래서 구조적 형식 시스템(Structural SubTyping)이라고도 불립니다. 예시)type Person = { name: string; age: number;};const user = { name: 'Alice', age: 25, email: 'alice@example.com'};function greet(p: Person) { console.log(`Hi, ${p.name..

백엔드/Node.js 2025.04.09

[TS] 타입가드(Type Guard)란?

타입가드(Type Guard)란?여러 타입이 존재할 수 있을 때 내가 원하는 타입만 조건문으로 걸러내기 위한 타입 좁히기(narrowing)를 의미function print(value: string | number) { if (typeof value === 'string') { // 여기서 value는 string으로 좁혀짐 console.log(value.toUpperCase()); } else { // 여기선 number console.log(value.toFixed(2)); }}  사용자 정의(커스텀) 타입 가드아래와 같은 방식으로 많이 사용하기도 한다.function isString(val: any): val is string { return typeof val ===..

백엔드/Node.js 2025.04.09