반응형

전체 글 63

[NestJS 튜토리얼 초급] 0. NestJS 튜토리얼 초급 소개

NestJS를 사용해야 하는 이유 NestJS는 NodeJS 런타임에서 구동되는 서버 사이드 애플리케이션을 구축하기 위한 프레임워크입니다. NestJS 프레임워크를 학습하기 전, NestJS를 사용하면 어떤 점이 좋은지를 우선 소개해 드리겠습니다. 1. TypeScript 기반 NestJS는 TypeScript를 주 언어로 사용합니다. TypeScript는 정적 타입 언어로 런타임에 발생할 수 있는 오류를 사전에 개발 과정에서 방지할 수 있고 코드의 가독성을 높여줍니다. 이에 따라 코드 유지 보수가 용이해지며, 협업과 확장성이 향상됩니다. TypeScript 언어는 "lingua franca(공통어)"가 되었다고 해도 과언이 아닙니다. 누구나 TypeScript를 쉽게 사용할 수 있기 때문에 NestJS..

hey, 사용이 간단한 웹서버 부하테스트 커맨드라인 프로그램

웹서버 부하테스트 툴은 많습니다. 오늘은 여러 툴 중 하나인 커맨드라인으로 간단히 테스트를 쉽게할 수 있는 오픈소스인 hey를 소개합니다. 소스코드는 https://github.com/rakyll/hey에서 보실 수 있습니다. GitHub - rakyll/hey: HTTP load generator, ApacheBench (ab) replacement HTTP load generator, ApacheBench (ab) replacement. Contribute to rakyll/hey development by creating an account on GitHub. github.com 소개 hey는 웹 애플리케이션을 부하테스트 하는 경량화된 프로그램으로 Go 언어로 작성되었고 https://github...

2023.08.01

NestJS Provider Injection scopes에 대해(singleton, request, transient)

현대 웹 개발에서 확장 가능하고 유지보수가 용이한 애플리케이션을 구축하는 것은 성공에 아주 중요합니다. NestJS는 강력하고 진보적인 Node.js 프레임워크로서, 체계적이고 효율적이며 확장 가능한 애플리케이션을 만들 수 있는 능력으로 큰 인기를 얻고 있습니다. NestJS 애플리케이션의 유지보수성과 유연성에 기여하는 핵심 기능 중 하나가 강력한 의존성 주입 시스템입니다. 이 의존성 주입 시스템의 핵심에는 "프로바이더(Provider)"라는 개념이 있습니다. 프로바이더는 다른 부분에서 주입될 수 있는 클래스 또는 값으로, 기능을 구성하고 공유하는 데 도움을 줍니다. 그러나 프로바이더를 정의하는 것만으로는 충분하지 않습니다. 또한 이러한 프로바이더들이 어떻게 애플리케이션 내에서 관리되고 공유되어야 하는지..

NestJS 2023.07.31

NestJS + TypeORM 트랜잭션(Transaction) 사용에 대한 고민

과거 그리고 현재에도 웹 애플리케이션을 개발할 때 Spring Boot(https://spring.io/projects/spring-boot)가 많이 사용되고 있습니다. 하지만 요즘 TypeScript 생태계가 점점 강력해지면서 NestJS의 점유율도 조금씩 증가하는 것 같습니다. NestJS는 Spring을 모방하면서 발전한다는 생각이 드는데 이유는 사용법과 철학이 매우 유사하게 느껴지기 때문입니다. Spring에서 주요하다고 여겨지는 개념인 DI, IoC, AOP 등의 개념이 NestJS 에서도 그대로 보여지구요. 하지만 아직은 Spring Boot에 비해 다른 기능들이 빈약한 편이긴 합니다. 한 가지 예로, 트랜잭션(Transaction) 사용법입니다. Spring에서 표준이다 시피한 JPA를 사용..

NestJS 2023.07.23

MySQL innodb_flush_log_at_trx_commit 옵션

서론 실무에 있어서 MySQL 설정 중 하나인 innodb_flush_log_at_trx_commit 옵션이 무엇인지 알아두면 좋다. 공식문서 내용을 참고하는 것이 가장 정확하겠지만 영어문서를 읽는 것이 익숙하지 않다면 아래 정리 내용을 봐도 좋을 것 같다. 요약 innodb_flush_log_at_trx_commit 옵션은 InnoDB 스토리지 엔진에서 트랜잭션의 커밋(commit) 작업 시 로그 파일을 언제 디스크에 쓸 것인지를 결정하는 옵션이다. DB 운영 중 고민 해야 할 부분이 성능(performance)와 데이터 트랜잭션 커밋 신뢰성(ACID) 사이의 균형일텐데 이 둘 사이의 균형을 조절하는 옵션이라 보면 될 것 같다. 성능과 트랜잭션 커밋된 데이터의 신뢰성은 양립할 수 없고 경우에 따라 이 ..

MySQL 2023.03.03

헤드퍼스트 디자인패턴

얼마 전 지인에게 「헤드퍼스트 디자인페턴」이라는 책을 추천받아 읽게 되어 책을 읽고 난 후 느낀 점을 남기려 한다. 평점은 4/5점을 주고 싶다. http://www.yes24.com/Product/Goods/108192370 헤드 퍼스트 디자인 패턴 - YES24 유지관리가 편리한 객체지향 소프트웨어 만들기!“『헤드 퍼스트 디자인 패턴(개정판)』 한 권이면 충분하다.이유 1. 흥미로운 이야기와 재치 넘치는 구성이 담긴 〈헤드 퍼스트〉 시리즈! 하나 www.yes24.com 코드를 자주 읽고 쓰는 사람이라면 디자인 패턴을 학습하는 것이 필요하다고 생각한다. 왜냐하면 다른 사람의 코드를 더 쉽게 읽을 수 있어 더 빠르게 파악할 수 있다고 생각하기 때문이다. 좋은 코드를 작성하기 위해서는 다른 사람의 코드를..

multi-stage로 TypeScript 기반 Nodejs docker image 크기 줄이기

서론 최근 몇 년 전만 해도 소스코드의 runtime을 container 환경으로 빌드해서 배포&운영 한다는 것이 생소하고 어려웠던 것으로 인식되던 것으로 기억한다. 하지만 요즘은 container 환경으로 빌드만 할 수 있으면 쉽게 배포&운영할 수 있게 해주는 제품들이 시장에 많이 나와서 이러 진입장벽이 많이 낮아진 것 같다. 심지어 소규모 스타트업 회사가 kubernates를 운영할 줄 모른다고 해도 AWS의 ECS, EKS 등을 사용한다면 container 환경으로 쉽게 배포&운영하는데 큰 지장이 없을 정도이다. 현재 내가 몸담고 있는 서비스회사에서도 ECS를 사용하는 곳이 있는데 크게 무리없이 서비스를 잘 하고 있는 것 같다. container는 주로 Docker가 사용되는 것 같다. 사실 나도 ..

Docker 2022.08.02

Clustered Index와 Secondary Index

Index란? Index란, 테이블에 대한 동작속도를 높여주는 자료구조이다. 조금 더 자세히 설명하자면, Disk에서 발생하는 I/O 시간은 Main Memery에서 발생하는 I/O에 비해 매우 크다. 따라서, DB를 통해 데이터를 검색시 Disk I/O가 빈번히 일어나지 않도록 하는 것이 유리할 것 같다. 이를 위해 Index를 사용한다. Index를 통해 Disk I/O의 횟수를 최대한 줄여 DB의 성능을 높일 수 있는 것이다. 따라서, Index는 DB에서 뿐만 아니라, random access를 할 때 사용하면 적합하다. 아래 그림은 id=106번 학생을 검색하는 과정이다. Disk I/O에 비해, block 내의 탐색 시간은 매우 적게 걸리므로 일단 무시한다. 순서대로 정렬되어 있는 key인 경..

MySQL 2021.01.28

TypeScript, tsconfig.json 주요 설정

서론 TypeScript를 더 잘 사용하기 위해 컴파일 하기 위한 설정, 동작방식을 정의하는 tsconfig를 어느 정도 이해할 필요가 있다고 생각한다. Node.js 프로젝트에 TypeScript를 설정하기 위해서 공식문서를 참고하는 것이 가장 정확하겠지만 정보의 양이 방대해서 주요한 몇몇 설정만 정리해 보고자 한다. 앞으로 지식과 경험이 더 넓어지면 내용을 계속 덧붙여 나갈 계획이다. 자세한 설명은 당연히 공식문서를 참조하는 것이 좋겠다. tsconfig.json을 작성하는 것은 옳고 그름의 문제가 아니다. 프로젝트 마다, 팀마다 각각 상황에 맞게 설정하면 되는 것이기 때문에 무조건 따라야 하는 설정은 없다. 잘 모르겠으면 권장하는대로, 기본값대로 사용해도 될 것이다. 다만, 각 프로젝트 마다 성격에..

TypeScript, any와 unknown 타입 비교

any vs unknown TypeScript에서 any와 unknown 타입은 용도가 다르기 때문에 구분해야 해야한다. 다음과 같이 User class가 role에 따라 Member, Store로 나뉘는 경우를 보자. Member는 일반 계정으로 주문을 넣을 수 있고, Store는 상점 계정으로 주문을 완료시킬 수 있는 메소드를 갖는다. export abstract class User { id!: number; role!: 'member' | 'store'; } export class Member extends User { constructor({ id, role}: { id: number; role: 'member' }) { super(); this.id = id; this.role = role } ..

반응형