본문 바로가기

전체 글

(33)
[Spring WebFlux] 왜 WebFlux를 선택했는가? (Tomcat NIO와 비교) 목차들어가며티켓팅 프로젝트에서 Spring WebFlux를 사용했다는 이야기를 하면 종종 이런 질문을 받습니다.“톰캣도 NIO를 지원하는데, 굳이 WebFlux를 선택한 이유가 뭔가요?” 저도 처음에는 “어차피 둘 다 non-blocking이면 큰 차이가 없지 않을까?” 라고 생각했지만, 실제로 비교해보면 철학과 활용 범위에서 확실한 차이가 있었습니다. 이번 글에서는 WebFlux와 Tomcat NIO를 비교하며 WebFlux를 선택한 이유를 정리해 보겠습니다.아키텍처의 차이Tomcat NIOServlet API 기반으로 동작필터 체인, Request/Response 객체 등 서블릿 스펙의 제약 존재WebFluxReactive Streams 표준 기반Netty 같은 이벤트 루프 서버에 최적화서버-프레임워..
[EFFECTIVE JAVA 3/E] #2 생성자에 매개변수가 많다면 빌더를 고려하라 목차중점적으로 봐야 하는 내용선택적 매개변수가 많은 클래스는 생성자나 정적 팩터리 메서드만으로 표현하기 어렵다.점층적 생성자 패턴이나 자바빈즈 패턴은 유지보수성·안정성 측면에서 한계가 있다.이런 경우 빌더 패턴을 사용하면 가독성과 객체 일관성 면에서 유리하다.주요 개념 요약빌더 패턴은 복잡한 객체를 구성할 때 필수 매개변수와 선택 매개변수를 분리하고, 단계별 설정을 가능하게 하는 설계 기법이다.보통 클래스 내부에 정적 멤버 클래스로 Builder를 두고, 메서드 체인 방식으로 속성들을 설정한 뒤 build() 메서드로 객체를 생성한다.장점매개변수가 많은 경우 코드 가독성이 좋아진다.필수 매개변수와 선택 매개변수를 명확히 구분할 수 있다.메서드 체인(Fluent API)을 통해 설정이 직관적이다.계층적으로..
[EFFECTIVE JAVA 3/E] #1 생성자 대신 정적 팩터리 메서드를 고려하라 목차중점적으로 봐야 하는 내용클래스는 생성자와 별도로 정적 팩터리 메서드를 제공할 수 있다.정적 팩터리 메서드는 생성자와 달리 이름을 가질 수 있어 의도를 명확히 표현할 수 있다.또한, 하위 타입 반환, 인스턴스 재사용, 구현체 캡슐화 등 다양한 이점을 제공한다.주요 개념 요약정적 팩터리 메서드는 new 키워드로 객체를 직접 생성하지 않고,클래스 내부에 선언된 static 메서드를 통해 객체를 반환하는 방식이다. 예시:public class User { private final String name; private User(String name) { this.name = name; } public static User of(String name) { ret..
[TypeScript] 추상 클래스 vs 인터페이스 - 직원 조직도로 이해하기 목차 TypeScript에서 추상 클래스(abstract class)와 인터페이스(interface)는 둘 다 “규약”을 정의하는 도구이다. 하지만 실제 목적과 사용법은 다르다. 이번 글에서는 직원 조직도 비유를 통해 이 차이를 쉽게 정리해보고자 한다.추상 클래스 vs 인터페이스 — 핵심 차이인터페이스 (interface)컴파일 후 사라짐: 타입 정보만 제공, JS 출력 없음.구조적 타이핑: 이름이 아니라 모양(shape) 이 같으면 호환.다중 구현 가능: class A implements I1, I2선언 병합 가능: 같은 이름의 인터페이스를 여러 번 정의하면 자동으로 합쳐짐.상태(필드) 불가: 런타임 상태나 공통 구현은 가질 수 없음.추상 클래스 (abstract class)런타임에 남음: 공통 메서드..
[짧은 책 리뷰] LUVIT♥ 나의 첫 타입스크립트 프로젝트 제목 : LUVIT♥ 나의 첫 타입스크립트 프로젝트부제: 타입스크립트 + 리액트 + NestJS + 몽고DB로 나만의 블로그 만들기저자: 조용수 LUVIT♥ 나의 첫 타입스크립트 프로젝트 | LUVIT(러빗) 시리즈 | 조용수타입스크립트는 자바스크립트의 슈퍼셋 언어로, 웹 개발 및 대규모 프로젝트에서 널리 채택되고 있다. 이 책은 타입스크립트의 기본 개념부터 핵심 문법, 고급 기능까지 살펴보고, 나만의 블로www.aladin.co.kr 나는 이미 자바스크립트 기반으로 개발을 하면서 타입스크립트도 어느 정도 사용해본 상태였다. 그래서 이번에는 단순히 문법을 익히는 것보다는, 타입스크립트를 실제 프로젝트에 적용해보는 경험을 원했다. 이 책의 제목과 소개에 있는 “나의 첫 타입스크립트 프로젝트” 라는 문구를..
[TypeScript] infer 목차타입스크립트를 조금만 깊게 쓰다 보면 infer라는 정체불명의 키워드를 보게 된다. ReturnType, Parameters, ConstructorParameters 같은 공식 유틸리티 타입들의 핵심에도 항상 숨어 있는 존재이다. 이번 글에서는 infer에 대해서 정리하고, infer가 실제로 타입스크립트 타입 시스템의 강력한 추론 엔진 역할을 어떻게 하는지 살펴보려고 한다. infer 란?infer는 조건부 타입(Conditional Types) 내부에서만 사용할 수 있는 키워드이다.문법은 다음과 같다:T extends SomeType ? U : Fallback 여기서 핵심은 infer U.타입스크립트에게 "여기서 타입을 추론해서 U라는 이름으로 쓰겠다"라고 지시하는 것이다.함수의 매개변수, 반환 ..
[TypeScript] ERROR: TS2550 tsconfig.json이 무시되는 이유와 해결 방법 목차npm run dev에서만 TS2550 오류가 발생하는 이유TypeScript를 쓰다 보면 동일한 코드임에도 실행 방식에 따라 오류가 발생하는 경우가 있다. 이번 글에서는 npm run dev에서만 findIndex 같은 ES2015 메서드가 인식되지 않는 TS2550 오류를 파헤치고, monorepo 환경에서 자주 겪는 tsconfig 무시 문제까지 확장해 보겠습니다. 문제 상황코드:const i = user.findIndex((u) => u.name === name); 직접 실행하면 정상 동작한다.tsc --target es2015 main.ts # 정상 컴파일 하지만 package.json에 다음과 같이 스크립트를 등록해 실행하면 에러가 발생한다. { "scripts": { "dev":..
[JavaScript] this 목차 자바스크립트를 하다 보면 가장 많이 헷갈리는 개념 중 하나가 바로 this이다. 특히 함수 선언식, 객체 메서드, 화살표 함수에서 각각 어떻게 동작하는지가 다르기 때문에 명확히 정리해두면 실수를 줄일 수 있다.this는 언제 결정될까?this는 함수가 정의된 위치가 아니라, 호출되는 방식에 따라 결정된다. 다만, 화살표 함수는 예외적으로 정의될 때 상위 스코프의 this를 그대로 물려받는다.함수 선언식에서의 thisfunction foo() { console.log(this);}전역 호출브라우저: windowNode.js: globalstrict mode: undefined명시적 바인딩foo.call({ a: 1 }); // { a: 1 } 즉, 함수 선언식은 호출 주체에 따라 this가 달라진다..