프로그래밍(Basic)

    [바미] Nest 모듈(Module) 이해하기

    Nest 소개 Nest? Nest.js는 TypeScript로 작성된 프레임워크로, Node.js를 기반으로한 서버 사이드 애플리케이션을 구축하기 위한 도구입니다. Angular와 비슷한 구조와 기능을 제공하여 Angular 사용자들에게 친숙하 codesk.tistory.com 앞서 소개글에도 설명했듯이 Nest.js에서 모듈은 애플리케이션의 기능을 나타내는 단위입니다. 간단한 예제 코드를 통해 각 모듈의 컨트롤러, 서비스, 프로바이더 등이 어떻게 구성되어 있는 지 확인하는 시간을 가져보도록 하겠습니다. 예제 코드 준비 사항 예제 코드에 들어가기 전에 프로젝트를 Nest 프로젝트를 생성해봅시다. nest new Nest-project 위 명령어를 터미널 창에 입력하면 아래와 같은 구조를 가지게 됩니다. ..

    [바미] Nest 소개

    Nest? Nest.js는 TypeScript로 작성된 프레임워크로, Node.js를 기반으로한 서버 사이드 애플리케이션을 구축하기 위한 도구입니다. Angular와 비슷한 구조와 기능을 제공하여 Angular 사용자들에게 친숙하고 익숙한 느낌을 주는 특징을 가지고 있습니다. Nest.js의 주요 특징 Nest.js 애플리케이션의 기능을 나타내는 단위인 모듈은 각 모듈은 @Module() 데코레이터를 사용하여 정의되며, 해당 모듈에는 HTTP 요청을 처리하고 해당 요청에 따른 응답을 반환하는 역할을 담당하는 Controller, 애플리케이션의 비즈니스 로직을 담당하는 Service, 의존성 주입(Dependency Injection)을 위해 사용되는 객체인 Provider등의 다양한 모듈러 구조를 가지고..

    Nest - EntityMetadataNotFoundError

    EntityMetadataNotFoundError는 TypeORM이 데이터베이스 테이블과 연결될 엔티티의 메타데이터를 찾을 수 없을 때 발생하는 오류입니다. 이 문제는 대개 엔티티 파일의 위치가 잘못되었거나, TypeOrmModule에 엔티티를 잘못 등록했을 때 발생하게 되는데요. 저는 아래와 같이 entities를 지정한 상태에서 에러가 나서 import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { UsersModule } from './users/users.module'; // Other imports... @Module({ imports: [ TypeOrmModule.forRoot..

    Nest - Swagger에서 변수 optional하게 처리해야 할 때

    Controller 부분에서 아래와 같이 함수를 짜면 잘 보이지만 swagger에서는 잘 잡히지 않는 경우가 있습니다. @Query('쿼리파라미터1') 쿼리파라미터1?: string, @Query('쿼리파라미터2') 쿼리파라미터2?: string, @Query('쿼리파라미터3') 쿼리파라미터3?: string, 위와 같이 optional 하게 주려고 해도 스웨거 상에서 필수값으로 지정 되버리더라구요. 해결 방법은 아래 깃허브 링크를 클릭하면 찾을 수 있습니다. Please Add `optional: boolean` to @Query route param decorator · Issue #2169 · nestjs/nest I'm submitting a... [x] Feature request Current..

    [바미] SSR과 CSR

    브라우저 렌더링 먼저 브라우저 랜더링이란 브라우저가 서버로부터 요청해 받은 내용을 브라우저 화면에 표시해주는 작업을 말합니다. 브라우저가 서버로부터 HTML, CSS, JS 문서를 전달받아 브라우저 엔진이 각 문서를 해석해 브라우저 화면을 그려주는 것이죠. 예를 들어, 아무 브라우저에 접속해서 주소창에 https://www.naver.com/ 을 입력한다면 브라우저는 네이버 서버로부터 네이버 웹사이트에 대한 정보를 받아 브라우저 화면에 네이버 홈페이지를 그려 주게 되는 것이죠. 그리고 이러한 브라우저 렌더링은 크게 ' 서버 사이드 렌더링'과 ' 클라이언트 사이드 렌더링' 방식으로 나누어 지죠. 서버 사이드 렌더링 서버 사이드 렌더링은 클라이언트(브라우저)가 서버에 매번 데이터를 요청하여 서버에서 처리하는..

    Node.js 동작 원리

    Node.JS? JavaScript를 브라우저 외부에서 실행하는 런타임입니다. Node.js는 싱글 스레드, 논블로킹 모델을 사용합니다. 이 모델은 비동기 I/O 작업을 통해 여러 요청을 동시에 처리하며, 클러스터링을 통해 확장성을 갖추고 있죠. 싱글스레드? 프로세스 내에서 하나의 스레드가 하나의 요청만을 수행합니다. 한 번에 여러 요청을 수행할 수 없는 것이죠 그래서 싱글 스레드는 블로킹 모델이라고 합니다. 반면 멀티스레드는 스레드 풀에서 실행의 요청만큼 스레드를 매칭 하여 작업을 수행합니다. NodeJS 는 완전한 싱글 스레드인가? NodeJS는 싱글 스레드이지만 완전한 싱글 스레드를 기반으로 동작하지는 않습니다. 무슨 말일까요? 일부 블로킹 작업들은 libuv의 스레드 풀에서 수행되기 때문이죠. 이..

    Go - GC에 대해 알아봅시다.

    GC란 가비지 컬렉션(Garbage Collection, GC)은 프로그래밍 언어가 자동으로 메모리 관리를 수행하는 메커니즘을 말합니다. 프로그램이 실행되는 동안 동적으로 할당된 메모리 중에서 더 이상 사용되지 않는 부분을 탐지하고 자동으로 해제함으로써 메모리 누수를 방지합니다. Go 언어도 가비지 컬렉션을 지원하며, 이를 통해 개발자는 명시적인 메모리 관리에 대한 부담을 덜 수 있습니다. 메모리 누수는 프로그램이 메모리를 계속해서 사용하지만 더 이상 필요하지 않은 메모리 블록이 해제되지 않는 상황을 의미합니다. Go 언어의 GC 작동 원리 가비지 컬렉션의 주요 원리는 더 이상 사용되지 않는 메모리를 식별하고 회수하는 것입니다. 이를 위해 가비지 컬렉터는 프로그램 내의 모든 객체 간의 참조 관계를 추적하..

    defer와 GC의 상관관계

    안녕하세요. 최근 질문 중에 "Go에서는 defer가 있는데 왜 GC를 사용해야 할까요?"라는 질문이 있었어요. defer와 GC는 하는 역할이 서로 다르기 때문에 '이건 무슨 내용의 질문이지?'하며 한 동안 벙쪄서 아무 말도 하지 못했죠. 그 후 그 질문에 대한 답변을 해주기 위해 공부했던 것들을 정리 해봅니다. 역시 Go에서의 defer와 가비지 컬렉터(GC)는 서로 다른 개념이였어요. 즉, 그들 간에 직접적인 관련은 없었죠. Go를 사용해보신 분들이라면 defer는 함수 내에서 특정 코드를 지연 실행시키는 데 사용되는 기능이며, 주로 리소스 정리나 오류 처리에 유용하고, 가비지 컬렉터는 메모리 관리를 자동으로 처리하여 더 이상 사용되지 않는 객체를 탐지하고 해제하여 메모리 누수를 방지해주는 도구라는..

    Go 1.20 릴리즈 요약

    1.19 이후 6개월 만의 릴리즈. 하위호환 정책으로 기존 프로그램 컴파일/실행은 문제 없음 언어에 4가지 변화 slice를 array로 변환 가능 unsafe 패키지에 SliceData, String, StringData 함수 추가 구조체의 필드값이 정의에 나타난 순서대로 하나씩 비교되도록 하고, 첫번째 미스매치에서 중단되도록 정의됨. 비슷하게 배결 값도 하나씩 인덱스 순으로 비교 Comparable 타입들이 타입 인자가 strictly comparable 하지 않은 경우에도 comparable 조건을 충족 가능 GC 데이터 구조 개선으로 메모리 오버헤드가 줄어들고 전체 CPU 성능 최대 2% 향상 그외 툴체인, 런타임, 라이브러리 구현등이 개선