해당 내용은 nestJS와 typeorm에서 mysql DB host를 연결하는데 있어서 발생한 현상을 기준으로 작성했습니다.
작업을 위해서 mysql과 nestjs로 DB연결을 하던중에 문제가 발생했다.
name: 'default',
type: 'mysql',
database: process.env.DB_NAME,
host: 'localhost',
port: parseInt(process.env.DB_PORT, 10),
username: 'root',
password: process.env.DB_PASSWORD,
logging: true,
위의 코드블럭은 typeorm과 nestjs를 연동하기위해 작업하는 typeorm config 내용이다.
host명을 localhost
로 연결했을때 아래 이미지와 같은 현상이 일어났다.
내용인 즉슨 ::1:3306의 연결에러.
여기서 ::1가 무엇인지 알고 넘어가보자.
::1은 127.0.0.1의 주소를 ipv6로 나타낸 것이다.
참고링크: https://serverfault.com/questions/238100/what-does-1-mean
근데 나는 127.0.0.1로 접속했을때는 또 괜찮았다.
예측되는 이유인 즉슨,
cd /
cd ./private
cd ./etc
sudo vi hosts
로 접속했을때
127.0.0.1의 localhost와 ::1의 localhost가 활성화될때 충돌이 일어나 연결이 되지 않는 현상이 있었다.
내용을 찾아보니 typeorm을 사용하는 m1 mac을 사용하는 일부 유저에게서 일어나는 버그였다.
참고링크: https://github.com/typeorm/typeorm/issues/9592
(참고링크는 typeorm github의 내용에서 확인한 이미지다.)
그리하여 진행해본 결과는 ::1
를 주석처리해서 비활성화 시켜보았다.(아래 이미지)
그리고 테스트 해 본 결과
정상적으로 DB연동을 성공했다.
해당 문제는 m1 mac을 사용하는 유저중에서도 일부만 발생할 수 있는 현상으로 모든 m1 mac유저가 발생하는 현상은 아니다.
나같은 현상을 겪는 분들이 이 블로그를 찾아서 삽질하는 시간을 덜었으면 좋겠다....
일부 로컬 컴퓨터의 문제로 typeorm으로 mysql을 db와 연동시키고자 할 때, 로컬호스트를 127.0.0.1과 ::1를 모두 설정 해놓았을때 ipv4와 ipv6의 충돌로 인하여 연동이 되지 않는 현상이다. 그럴때는 설정의 일부분을 주석하거나 삭제해서 비활성화시켜 연동이 되도록 하는 것이다.
어찌보면 typeorm을 일부 m1 mac에서 사용하게 됐을때 발생하는 버그의 현상중 하나인 것이다.
오우 host 말고 다른 원인일줄 알고 한참 해맸는데... 감사합니다!!