[Mac] MySQL 설치 가이드

원민관·4일 전

[TIL]

목록 보기
213/213
post-thumbnail

0. 들어가며 ✍️

맥북의 파일 구조와 환경 변수(PATH)의 작동 원리를 완벽히 이해하고 올바르게 MySQL(LTS 버전)을 설치하는 과정을 정리했습니다.

1. MySQL 8.4 설치 및 Homebrew 파일 구조 이해 ✍️

brew install mysql@8.4

설치는 위 명령어 한 줄만 입력하면 끝납니다. 그런데 MySQL은 도대체 어디에 설치된 것일까요? 구조를 한 번만 제대로 이해해두면 앞으로 어떤 패키지를 설치하더라도 헷갈리지 않을 수 있습니다.

opt ✅

맥의 핵심 운영 디렉토리 /usr, /bin, /etc 등은 macOS의 핵심 시스템 파일이 설치되는 곳입니다. Homebrew가 이런 종류의 폴더에 직접 파일을 심으면 OS 업데이트나 시스템 보호 메커니즘(System Integrity Protection)과 충돌이 발생할 수 있습니다.

그래서 Homebrew는 처음부터 /opt/homebrew라는 독립적인 영역을 잡고, 해당 영역 안에서만 패키지를 관리합니다. /opt는 이름 그대로 Optional입니다. 맥북의 기본 시스템을 건드리지 않고 개발 도구를 설치하기 위한 안전구역입니다.

Intel Mac vs Apple Silicon Mac의 차이

Intel Mac은 /usr/local/Cellar/, Apple Silicon(M1/M2/M3)은 /opt/homebrew/Cellar/ 하위에 설치됩니다. brew --prefix를 터미널에 입력하면 현재 맥에 맞는 Homebrew 루트 경로를 확인할 수 있습니다.

Cellar ✅

Homebrew가 패키지를 설치하면 실제 바이너리, 라이브러리, 설정 파일 등은 아래 경로에 들어갑니다.

/opt/homebrew/Cellar/mysql@8.4/8.4.10_1/

경로에 8.4.10_1처럼 패치 버전 숫자가 적혀 있습니다. 나중에 8.4.11로 업데이트되는 순간 이 경로는 바뀝니다. 만약 설정 파일에 이 경로를 직접 적어두면 업데이트할 때마다 경로를 일일이 고쳐야 하는 끔찍한 상황이 펼쳐집니다.

opt 심볼릭 링크 ✅

이 문제를 해결하기 위해 Homebrew는 Cellar 외에 별도의 opt 폴더를 관리합니다.

/opt/homebrew/opt/mysql@8.4   
→  (심볼릭 링크)  →  
/opt/homebrew/Cellar/mysql@8.4/8.4.10_1/

/opt/homebrew/opt/mysql@8.4는 실제 파일이 아니라 현재 설치된 최신 버전을 가리키는 바로가기(심볼릭 링크)입니다. 패치 버전이 8.4.11, 8.4.12로 올라가도 이 심볼릭 링크는 자동으로 새 경로를 가리키도록 Homebrew가 업데이트해줍니다.

그래서 우리가 설정 파일에 적어야 할 경로는 항상 이 고정된 opt 경로입니다. brew --prefix mysql@8.4를 치면 이 경로가 출력됩니다.

$ brew --prefix mysql@8.4
/opt/homebrew/opt/mysql@8.4

2. 환경 변수(PATH) 설정 ✍️

설치는 됐습니다. 그런데 터미널에서 mysql이라고 쳐도 command not found가 뜹니다.

PATH란 ✅

터미널에 mysql이라고 입력하면 셸(zsh)은 "mysql이라는 이름의 실행 파일을 어디서 찾아야 하지?"를 판단해야 합니다. 이때 참조하는 것이 바로 $PATH라는 환경 변수입니다.

$PATH의 실체는 단순한 텍스트 문자열입니다. 여러 폴더 경로가 콜론(:)으로 이어진 하나의 긴 문자열이죠.

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

셸은 명령어가 입력되면 이 문자열을 콜론으로 잘라서 앞에서부터 순서대로 각 폴더를 뒤집니다. 해당 이름의 실행 파일을 찾는 즉시 실행하고, 끝까지 없으면 command not found를 뱉습니다.

MySQL을 방금 /opt/homebrew/opt/mysql@8.4/bin/에 설치했지만, 이 경로는 기본 $PATH에 포함되어 있지 않습니다. 그래서 터미널이 찾지 못하는 것입니다. 해결책은 간단합니다. 경로를 $PATH에 추가해주면 됩니다.

# ~/.zshrc에 MySQL 실행 폴더 경로 추가
echo 'export PATH="/opt/homebrew/opt/mysql@8.4/bin:$PATH"' >> ~/.zshrc

# 변경 사항 즉시 반영
source ~/.zshrc

우선순위 오버라이딩 ✅

조립된 $PATH를 시각화하면 이렇습니다.

/opt/homebrew/opt/mysql@8.4/bin : /usr/local/bin : /usr/bin : /bin
        ↑ 1순위                      ↑ 2순위           ↑ 3순위   ↑ 4순위

앞에 붙이는 이유는 버전 충돌 방지에 있습니다. macOS에는 기본적으로 시스템 mysql 클라이언트가 /usr/bin/ 같은 경로에 존재하거나, 이전에 설치했던 다른 버전의 mysql이 /usr/local/bin에 남아있을 수 있습니다. 새 경로를 뒤에 붙이면 셸이 구버전을 먼저 발견하고 실행해버립니다.

앞에 붙여야 우리가 원하는 8.4 LTS 버전이 우선순위를 점하게 됩니다. 이를 우선순위 오버라이딩(Priority Overriding)이라고 합니다.

환경 변수와 셸 변수의 차이 ✅

export 키워드를 왜 붙이는지 궁금합니다.

셸 변수(MY_VAR="hello")는 현재 터미널 세션에만 존재하는 지역 변수입니다. 하지만 MySQL처럼 자식 프로세스(서브 셸, 외부 프로그램 등)도 이 경로를 알아야 할 때는 export환경 변수로 승격시켜야 합니다. export PATH=...는 "이 변수를 이 터미널에서 실행되는 모든 자식 프로세스에게도 물려줘라"는 선언입니다.

~/.zshrc vs ~/.zprofile ✅

환경 변수를 어느 파일에 설정하느냐도 자주 헷갈리는 포인트입니다. ~/.zshrc는 터미널 탭을 새로 열 때마다 실행되는 인터랙티브 셸 설정 파일이고, ~/.zprofile은 맥 부팅 직후 로그인 셸이 시작될 때 한 번만 실행됩니다. 일반적인 개발 환경 PATH 설정은 ~/.zshrc에 넣는 것이 관례입니다.

설정 확인 ✅

$ which mysql
/opt/homebrew/opt/mysql@8.4/bin/mysql

which 명령어는 "셸이 실제로 어떤 경로의 실행 파일을 쓰고 있는가?"를 보여줍니다. 위처럼 mysql@8.4 경로가 찍히면 PATH 설정이 완벽하게 적용된 것입니다.

3. MySQL 서버 실행 및 초기 보안 설정 ✍️

이제 MySQL 바이너리의 위치도 알려줬으니, 데이터베이스 서버를 직접 켜고 초기 설정을 진행합니다.

brew services start mysql@8.4

brew services는 Homebrew가 패키지를 백그라운드 서비스(데몬)로 관리하기 위한 도구입니다. 한 번 등록해두면 맥북이 재부팅되어도 MySQL이 자동으로 켜집니다.

# 서비스 시작 + 부팅 시 자동 시작 등록
brew services start mysql@8.4 
# 서비스 중지
brew services stop mysql@8.4
# 서비스 재시작
brew services restart mysql@8.4
# 전체 서비스 상태 목록 확인
brew services list              

서버가 켜졌으면 보안 초기화 스크립트를 실행합니다.

mysql_secure_installation

mysql_secure_installation은 MySQL이 기본 제공하는 보안 강화 스크립트로, 실행하면 아래 항목들을 대화형으로 설정합니다.

VALIDATE PASSWORD COMPONENT ✅

Would you like to setup VALIDATE PASSWORD component? [Y/N]:

비밀번호 복잡도 검증 플러그인 활성화 여부입니다. 로컬 개발 환경이라 1234 같은 단순한 암호를 쓰려면 N을 선택합니다. 프로덕션 환경이라면 Y 후 레벨을 STRONG으로 설정하는 것을 권장합니다.

Root 비밀번호 설정 ✅

New password: (입력해도 화면에 아무것도 안 보임)
Re-enter new password:

보안상 입력한 문자가 화면에 표시되지 않습니다. 타이핑이 되고 있으니 입력 후 Enter를 누르면 됩니다.

Remove anonymous users? → Y ✅

MySQL 설치 직후에는 비밀번호 없이 접속 가능한 익명 계정이 존재합니다. 보안을 위해 반드시 삭제합니다.

Disallow root login remotely? → Y ✅

root 계정은 MySQL의 최고 관리자입니다. 원격에서 root로 직접 접속하는 것은 심각한 보안 위협이 됩니다. 로컬 개발 환경이라면 원격 접속을 차단합니다.

Remove test database? → Y ✅

MySQL 기본 설치 시 test라는 더미 데이터베이스가 생성됩니다. 불필요하므로 삭제합니다.

Reload privilege tables now? → Y ✅

지금까지 변경한 권한 설정을 즉시 메모리에 반영하는 단계입니다. Y를 선택해야 재부팅 없이 바로 적용됩니다.

4. 최종 접속 테스트 및 버전 확인 ✍️

모든 설정이 끝났습니다. 정상적으로 접속되는지 확인합니다.

mysql -u root -p

-u root는 MySQL 사용자를 root로 지정하는 옵션입니다. 생략하면 현재 맥 계정명으로 로그인을 시도해 인증이 실패합니다. -p는 비밀번호 입력 프롬프트를 띄우는 옵션입니다.

비밀번호를 입력하고 mysql> 프롬프트가 나오면 접속 성공입니다. 최종적으로 버전을 확인합니다.

SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 8.4.10    |
+-----------+
1 row in set (0.00 sec)

8.4.x 버전이 출력되면 LTS 버전이 정상적으로 설치된 것입니다. exit를 입력해 빠져나옵니다.

profile
Write a little every day, without hope, without despair ✍️

0개의 댓글