[포스코 x 코딩온] 스마트팩토리 개발자 과정 10주차 회고 | git bash, winpty

배돌·2023년 3월 9일

MySQL, CMD, Git Bash로 각각 데이터베이스에 접근하는 실습을 했다. 그 중 Git Bash를 이용하면서 저지른 삽질과 해결과정을 공유하고자 한다. ChatGPT는 무적이고 신이다.

1. 시작은 CMD에서 하듯이

$ mysql -u root -p
mysql( mysql을 실행시켜라 ) -u root ( 관리자 권한으로 ) -p ( 비밀번호를 입력하게 )

우선 CMD 환경에서 MySQL에 접속 하듯이 입력했다. 아래는 그 결과창

MySQL은 정상적으로 실행되지 않고 프롬프트만 계속 깜빡이고 있다.
처절한 탈출시도의 흔적을 뒤로 하고 Ctrl+C 로 현재 상태를 탈출하고 원인을 생각해 본다.

2. 야, 전달 - winpty

$ winpty mysql -u root -p

해결책은 간단했다. Git Bash 환경에서 MySQL을 실행 시키려면 winpty 키워드를 이용해야 한다고 한다.

Git Bash는 Windows에서 Unix 기반 셸 환경을 제공하여 Git 명령어와 Unix/Linux 명령어를 실행할 수 있게 한다.

하지만 MySQL이 Git Bash와 같은 Unix 기반 환경이어도 클라이언트를 실행하면 문제가 발생할 수 있다. 이는 Git Bash가 Windows 콘솔과는 다른 PTY(Pseudo Terminal, 슈도터미널 · 피-티-와이 혹은 페-티-와이 등등) 를 사용하기 때문이다.

때문에 운영체제의 환경에 따라 사용하는 PTY가 달라지며 windows 환경의 PTY와 Unix-like 환경의 PTY는 호환성 문제가 있어 명령어가 제대로 작동하지 않는 것이다.

(사진 : TVN, 신서유기 중)

Git for Windows 패키지에 있는 winpty 프로그램은 Windows와 Unix-like 환경의 중개자 역할을 하여 두 환경간의 통신을 연결시켜준다. 이를 통해 Git Bash에서 MySQL 클라이언트를 실행하면 정상적으로 입력과 출력을 처리할 수 있으며, Ctrl+C로 MySQL 클라이언트를 종료해도 Git Bash 터미널이 비정상적으로 종료되지 않게된다.

자 이제 설명을 맞췄으니 엔터키를 누르면

3. 안대잖아?

winpty: error: cannot start 'mysql': Not found in PATH

흠, 이번엔 컴퓨터가 mysql을 실행시키지 못했다. 설치된 경로를 못찾은 모양인데 MySQL이 설치된 경로로 이동해서 입력만하면 되는거 아니었나?

4. 느그 서장 충청북도 제천시 남천동 살제 - 절대 경로

절대 경로(Absolute Path)는 파일이나 디렉토리가 시스템의 루트 디렉토리(root directory, 경로의 초기점. 일반적으로 C 드라이브) 부터 시작하여 목적지까지의 경로를 의미한다. Windows 폴더 주소창에 씌여있는 부분, 그것이 절대 경로다.

(그, 그곳은..!)

프로그램을 절대 경로로 실행하면 해당 프로그램의 실행 파일이 어디에 있든지 상관없이 항상 동일한 경로로 실행할 수 있다. 파일이 있는 디렉토리의 경로를 명확히 지정할 수 있으므로 프로그램을 절대 경로로 실행하는 것이 더 안정적이고, 예기치 않은 문제를 방지할 수 있게 된다.

이전의 작성한 코드를 다시 살펴보자.

"winpty mysql -u root -p"

winpty 키워드를 통해 mysql을 조건에 맞게 호출을 하려 했지만 mysql의 정확한 위치를 파악할 수 없어 호출이 되지 않았음을 알 수 있다. Git Bash에 내장된 키워드가 아닌 외부 프로그램을 실행해야 하기 때문에, MySQL의 실행위치를 절대 경로로 지정해줌으로써 문제를 해결할 수 있다

람쥐썬더
또 에러가 뜬다. 망할거.

5. ERROR 2003, (HY000), (10061)

ERROR 2003 (HY000) : Can't connect to MySQL server on 'localhost:3306' (10061)

MySQL 서버에 연결을 할 수 없었고 원인이 된 부분을 찾기 위해 다시 검색을 했다. 기똥차게도 MySQL 공식 홈페이지에서 해당 에러코드에 대한 문서를 제공하고 있었다.
(https://dev.mysql.com/doc/refman/8.0/en/can-not-connect-to-server.html)

해당 글에 의하면 위의 에러코드는

ERROR 2003 : MySQL 서버에 연결할 수 없습니다.
(HY000) : 이것은 일반적인 SQL 오류이며
(10061) : 클라이언트에서 MySQL 서버로 연결을 시도할 때, 로컬호스트의 MySQL 서버 포트에 연결이 되지 않습니다

~는 내용이라고 한다.

나의 사례면서 가장 일반적인 원인은 강제종료나 코끼리가 노트북을 밟음으로 인해 MySQL 서버가 실행 중이지 않거나 잘못 구성되어 있을 때다. 이 경우, 작업관리자를 열어 서비스 탭의 MySQL80 을 '실행 중' 상태로 바꾸면 간단하게 문제를 해결할 수 있다.

이외에 방화벽, 포트 및 사용자 계정, 혹은 단순한 암호입력 실수와 같은 요소들 또한 연결 실패의 원인이 될 수 있다.

경로 중간에 공백이 있을 때 문제가 생길 수 있으므로 큰 따옴표로 가두고 비밀번호를 입력하면

(보이는가, Git Bash의 저력!)

드디어 Git Bash 환경에서 MySQL 환경에 접속을 성공적으로 해냈다!

명령어를 사용해 미리 입력한 실습용 테이블을 호출하면서 잘 실행이 되는 것을 확인해 본다.


헷깔리는 단어 정리

터미널 : 사용자가 컴퓨터와 상호작용하기 위한 인터페이스. 일반적으로 키보드를 사용하여 명령어를 입력하고, 컴퓨터의 출력을 텍스트로 표시한다.

PTY : 실제 터미널처럼 동작하는 가상 터미널이다. 일반적으로 터미널 프로그램과 같은 애플리케이션에서 사용되며, 입력한 명령을 실행하고 출력 결과를 화면에 표시하는 등의 역할을 한다.

profile
스마트팩토리 지향 누-비

0개의 댓글