banner image

전체 글 85

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

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

데브옵스/Docker 2025.04.16

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

데이터베이스 동시성 관련 문제에 대해 직접 테스트 코드를 작성해보고 이를 해결한 경험을 공유하겠습니다. 동시성 문제(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

[TS] 타입 단언(Type Assertion)이란?

타입 단언(Type Assertion)이란?다른 언어의 타입 캐스팅과 비슷한 개념. 개발자가 강제로 타입을 지정하는 행위라고 보면 됩니다. 타입 단언이 사용되면 이에 대해 타입스크립트 컴파일은 해당 부분에 대한 타입 체크를 진행하지 않고 구조도 신경쓰지 않습니다.타입 단언은 `as` 명령어로 정의됩니다.const something: any = 'hello';// 컴파일러에게: 이건 string이야!const strLength = (something as string).length;위에서 타입 단언을 하지 않았다면 .length 부분에서 에러가 났을 겁니다. 사용 이유타입 단언은 강제로 타입을 설정하는 것이기 에러가 발생할 위험이 존재합니다. 그렇기 때문에 타입 단언은 타입스크립트 컴파일러보다 개발자가 더..

백엔드/Node.js 2025.04.09

[TS] 유니온 타입(Union Type)과 인터섹션 타입(Intersection Type)

유니온 타입(Union Type)이란?`|`를 활용해서 타입을 OR로 엮는 타입. OR이기 때문에 유니온 타입으로 나열된 타입들 중 하나만 만족해도 된다.type Animal = 'dog' | 'cat';let pet: Animal;pet = 'dog'; // OKpet = 'cat'; // OKpet = 'fish'; // Error!  인터섹션 타입(Intersection Type)이란?`&`를 활용해서 타입을 AND로 엮는 타입. AND이기 때문에 인터섹션 타입으로 나열된 타입들 모두 만족해야 한다.type Name = { name: string };type Age = { age: number };type Person = Name & Age;const p: Person = { name: 'Char..

백엔드/Node.js 2025.04.09