인프런 커뮤니티 질문&답변

송원님의 프로필 이미지

작성한 질문수

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

08-06 Docker 패키징

도커의 데이터베이스 컨테이너와 nestjs typeORM이 어떤 방식으로 연동되는지 궁금해요

해결된 질문

작성

·

417

0

 docker-compose 에 있는 my-database의 연결

app.module.ts에 있는 typeOrmModule에 있는 데이터베이스 연결이 어떤 원리로 작동되는지 궁금합니다.

  my-database:
    image: mysql:latest
    environment:
      MYSQL_DATABASE: 'mydocker'
      MYSQL_ROOT_PASSWORD: 'root'
    ports:
      - 3306:3306
TypeOrmModule.forRoot({
            //.env 파일은 모두 string 형태로 인식이 됩니다. 따라서, type과 port에 추가 설정을 해주었습니다.
            type: mysql,
            host: "localhost",
            port: 3306,
            username: "root",
            password: "12345678",
            database: practice,
            entities: [Board],
            synchronize: true,
            logging: true,

        })

답변 1

0

노원두님의 프로필 이미지
노원두
지식공유자

안녕하세요! 소민님!

mysql도커typeorm 3개는 모두 독립적이에요!

아래 자세한 순서를 설명드려볼게요!

===============================================================
[도커를 사용하지 않을 때]

  1. mysql을 설치하게 되면, 해당 프로그램에 접속할 수 있는 계정과 비밀번호를 생성하게됩니다
    mysql에 직접 sql쿼리문을 사용하여 테이블생성, 데이터입력 등을 진행하게 되어요!
    ex) create table ...,
    insert into ...,
    select * from ...,
    이러한 명령어를 외우기 힘들기 때문에, 이러한 명령어를 자동으로 만들어서 입력해주는 도구가 typeorm이 되겠어요!

    2. 따라서, typeorm에 mysql접속 정보를 입력하시게 되면, typeorm이 mysql에 접속하여 entity에 작성한 내용을 바탕으로 create table... 의 sql쿼리문 명령어를 생성해서 우리가 해야할 일을 대신 해주게 되죠!
    정말 편리하죠?!

    ==============================================================
    [도커를 사용할 때]
    1. 역시 마찬가지로 mysql을 설치하셔야 해요!
    다만, 위에서 내 컴퓨터에 설치했다면, 이번에는 도커컴퓨터에 mysql을 설치하는 차이밖에 없어요!
    (실제로 도커컴퓨터 안에 접속해서 mysql이 설치된 것을 수업때 확인해 보셨죠?!^^)

  2. 역시 마찬가지로 typeorm에 도커컴퓨터에 깔린 mysql접속 정보를 입력하시게 되면, typeorm이 도커컴퓨터에 깔린 mysql에 접속하여 entity에 작성한 내용을 바탕으로 create table... 의 sql쿼리문 명령어를 생성해서 우리가 해야할 일을 대신 해주게 된답니다! (결과적으로 똑같아요!, typeorm이 내 컴퓨터에 깔린 mysql에 접속할래? 아니면 도커컴퓨터에 깔린 mysql에 접속할래? 차이에 불과합니다!)


===============================================================


마지막으로, 도커컴퓨터에 깔린 mysql에 접속하는 방법으로 수업때 배운 크게 2가지 방법이 있었죠!
바로 네임리졸루션포트포워딩이었어요!

1. 네임리졸루션의 경우, 따로 포트포워딩을 통해 포트를 공개하지 않으시더라도, 같은 docker-compose 내에서 서로간에 접속이 가능했답니다! 따라서 typeorm이 설치된 도커에서 mysql이 설치된 도커로 my-database라는 이름(localhost 아님)으로 접속이 가능하겠죠?!

 

  1. 포트포워딩의 경우, typeorm은 yarn start:dev 등의 명령으로 내 컴퓨터(localhost)에서 실행하였더라도, 도커안에 설치된 mysql이 3306포트를 포트포워딩을 통해 외부에 공개하고 있다면. 내 컴퓨터에서 실행중인 typeorm이 localhost를 통하여 도커안에 설치된 mysql에 접속 가능했답니다!

    따라서, 내 컴퓨터에서 도커안에 접속하려면 localhost를 사용(대신 도커에서는 포트포워딩 되어있어야함)하시고,
    도커에서 도커로 접속하려면 네임리졸루션(my-database)를 사용하시면 된답니다!^^

    버전에따라, 운영체제 특히 우분투, MacOS에따라 도커에서 도커로의 접속시 localhost도 허용되는 경우가 있고, 또는 허용하도록 만드는 설정도 있는데, 이러한 방식은 서로 다른 운영체제를 사용하는 여러 사람간의 협업시 문제가 될 수 있으므로 추천드리지 않습니다

송원님의 프로필 이미지

작성한 질문수

질문하기