5. 도커 & TypeORM 세팅

수원 개발자·2023년 12월 1일
0

NestJS

목록 보기
7/15
post-thumbnail

환경 세팅을 위해 도커를 사용하려고 한다.

도커는 소프트웨어를 개발, 배포 및 실행하기 위한 플랫폼으로, 다양한 이유로 사용된다.

이러한 장점이 있다.

  • 포터빌리티(Portability): 도커 컨테이너는 어디서든 실행될 수 있다.
    이는 개발 환경과 운영 환경 사이에서 일관성 있게 애플리케이션을 배포하고 실행할 수 있음을 의미한다.

  • 자원 격리(Isolation): 도커는 애플리케이션과 그 의존성들을 격리된 환경에 담아 실행할 수 있게 한다. 각 컨테이너는 자체 파일 시스템을 가지며, 호스트 시스템과 격리되어 있어 충돌을 방지하고 안정성을 제공한다.

  • 유연성과 확장성(Flexibility & Scalability): 도커는 컨테이너 기반의 가볍고 빠른 실행을 가능케 하며, 애플리케이션의 확장성을 높여준다.
    필요에 따라 쉽게 추가적인 인스턴스를 생성하여 확장할 수 있다.

  • 간편한 관리와 배포(Easy Management & Deployment): 도커는 이미지를 사용하여 애플리케이션과 환경을 패키징하고 배포하는 것을 용이하게 만든다. 이를 통해 개발자와 운영팀은 효율적으로 애플리케이션을 관리할 수 있다.

  • 마이크로서비스 아키텍처(Microservices Architecture): 도커는 마이크로서비스 아키텍처를 구현하는 데 매우 유용하다. 각 마이크로서비스는 독립적인 컨테이너로 실행될 수 있어, 애플리케이션을 더 작고 모듈화된 단위로 분할하여 개발하고 배포할 수 있다.

이러한 이유들로 도커는 현대적인 소프트웨어 개발과 배포에서 널리 사용되고 있다.

services:
  postgres:
    image: postgres:15
    restart: always
    volumes:
      - ./postgres-data:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    environment:
      POSTGRES_USER:
      POSTGRES_PASSWORD: 
      POSTGRES_DB:

도커를 세팅하고 postgres 라는 이름의 데이터베이스를 생성해줬다.

그리고 이를 typeORM을 사용해서 데이터베이스를 작업하려고 한다.

sudo yarn add @nestjs/typeorm typeorm pg

TypeORM은 TypeScript와 JavaScript를 위한 ORM(Object-Relational Mapping) 라이브러리다.
이는 관계형 데이터베이스를 다룰 때 객체 지향 프로그래밍의 개념을 적용하여 데이터베이스와의 상호작용을 쉽게 만들어준다.

TypeORM은 다음과 같은 기능과 장점을 제공한다.

  • 객체-관계 매핑 (ORM): 관계형 데이터베이스의 테이블과 JavaScript/TypeScript 클래스 간의 매핑을 제공한다.
    이를 통해 객체 지향적인 방식으로 데이터베이스를 다룰 수 있다.

  • 다양한 데이터베이스 지원: TypeORM은 MySQL, PostgreSQL, SQLite, MSSQL 등 다양한 관계형 데이터베이스 시스템을 지원한다.

  • 마이그레이션(Migrations): 데이터베이스 스키마 변경을 추적하고, 새로운 변경사항을 데이터베이스에 적용하는 기능을 제공한다.

  • 관계 매핑 (Relationship Mapping): 엔티티들 간의 관계를 쉽게 설정하고 관리할 수 있다. 일대일, 일대다, 다대다 등의 관계를 쉽게 정의할 수 있다.

  • 클라이언트 사이드 및 서버 사이드 사용: TypeORM은 Node.js 기반의 서버 사이드 애플리케이션뿐만 아니라 브라우저에서 동작하는 클라이언트 사이드 애플리케이션에서도 사용할 수 있다.

TypeORM은 객체 지향적인 프로그래밍 패러다임을 사용하여 데이터베이스 작업을 단순화하고, 코드의 가독성을 높이며, 유지보수를 쉽게 만들어준다.

@Module({
  imports: [
    ServeStaticModule.forRoot({
      rootPath: join(__dirname, '..', 'client'),
    }),
    PostsModule,
    TypeOrmModule.forRoot({
      // 데이터베이스 타입
      type: 'postgres',
      host: '127.0.0.1',
      username: 'postgres',
      password: 'postgres',
      database: 'postgres',
      entities: [
        PostsModel,
      ],
      synchronize: true,
    }),
  ],

레포지토리는 데이터베이스를 연결해주는 다리 역할을 한다.
사용 메서드는
Forroot : typeorm 연결 설정
forFeature : 레포지토리 주입할 때
이렇게 하면 기본적인 세팅은 완료다!

0개의 댓글

관련 채용 정보