환경 세팅을 위해 도커를 사용하려고 한다.
도커는 소프트웨어를 개발, 배포 및 실행하기 위한 플랫폼으로, 다양한 이유로 사용된다.
이러한 장점이 있다.
포터빌리티(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 : 레포지토리 주입할 때
이렇게 하면 기본적인 세팅은 완료다!