Trouble Shooting 기록 07. 프로젝트 환경 구성 for Mac
프로젝트 환경을 Mac에서 세팅해보자
- 집에서 쓰는 Windows Desktop으로 주로 개발 공부를 하다 보니 AWS 인프라 구축 및 DB Migration (MySQL -> MariaDB) 이후 변경된 사항들을 MacBook에는 반영하지 않고 방치해둔 상태라 이를 재설정하면서 공부하게 된 것들을 정리하고자 한다.
재설정해야 하는 요소들
- Mac Local DB는 아직 MySQL이다. (Docker 사용)
- DB GUI Tool이 아예 없다. Windows에선 MySQL Workbench를 사용하고 있었는데, 다른 분들의 추천도 있고 새로운 Tool도 알아볼겸 Mac OS에서는 Sequel Pro을 사용하려고 한다.
설정은 했지만 정리하고자 하는 요소들
- Docker 설치 및 환경 설정
- 무지에 가까운 레벨이고 항상 구글링을 하면서 사용하였기 때문에 나의 패턴에 맞는 방식으로 정리를 할 기회를 가져야겠다.
- Windows와 달리 Mac은 같은 유닉스 계열이라 Linux에 친화적이고, 한 번쯤 공부를 하고 싶어 Docker를 간단하게라도 사용해보기로 다짐했다.
- 실제로 Windows에서 WSL2를 사용하거나 도커를 써보려고 했을 때 버그때문에 스트레스 받은 기억이 너무 커서 Mac에서만 사용하기로…
- Mac에서 EC2 접속 설정
- 별도로 정리한 적이 없는 것 같아 이참에 정리를 하고자 한다.
Docker 설치 및 DB 환경 설정
Docker란?
- Docker에 관한 좋은 설명들이 인터넷에 많으므로 여기선 간단하게 설명하고 바로 다음 과정으로 넘어간다 - 참고 블로그
- 리눅스 컨테이너 기반의 오픈소스 가상화 플랫폼.
- 필요한 라이브러리, 실행환경, 프로그램 등을 별도의 서버처럼 추상화하여 구성한 것으로, 각각의 컨테이너마다 독립적인 시스템 자원을 소유한다.
- VM (가상 머신)과는 다르게 OS 단위의 가상화가 아닌 Application 단위의 가상화를 한다.
- 쉽게 얘기하면 Application의 파일과 설정값 등을
Image
라는 Immutable한 친구에 모두 담아서 이를Conatiner
로 실행시켜 실제 로컬에 설치한 것처럼 원하는 Application을 호스트 OS에서 간편하게 가져다 쓸 수 있는 플랫폼이다.
Docker 설치
Hombrew Cask 설치
-
공홈에서 설치하는 방법은 너무 간단하고 개인적으로 Mac인 이상 Terminal을 적극 활용하는 것이 좋아서 homebrew를 활용하여 설치 진행 예정.
-
Homebrew 설치는 Homebrew 홈페이지에 매우 친절하게 나와있다.
-
또한 brew로 설치하는 방법보다 Mac OS 자체에 Docker를 띄울 수 있는 brew cask를 이용.
- cask를 이용하면 Mac의 /Applications에 원하는 Application이 설치된다.
- Homebrew & Homebrew Cask 참고 블로그
-
brew install cask # cask 설치 # 완료 후 brek install --cask docker # Homebrew 2.6.0 버전 이후 사용 방식
MariaDB Image 설치 및 Container 생성 과정
- 원하는 이미지 검색 후, 버전에 맞게 설치
docker search mariadb # docker search image_name (또는 docker hub 들어가서 직접 검색)
docker pull mariadb:10.6.10 # docker pull image_name:version (default: latest)
- 이미지 정상 설치 확인 후, 컨테이너 생성과 동시에 실행
docker images # 설치된 images 리스트 출력됨
# run 이미지를 기반으로 새로운 컨테이너를 생성하고 이후의 cmd를 실행
# --name container_name
# -d 컨테이너를 백그라운드에서 실행
# -p host-port:container-port (호스트 3306 포트 연결 시, 컨테이너 3306 포트로 포워딩)
# --restart=always 도커가 실행되면 컨테이너도 항상 같이 실행
# -e 기타 환경설정 (environment)
# MYSQL_ROOT_PASSWORD=password DB root 사용자 초기 비밀번호 설정
# mariadb:10.6.10 컨테이너에 쓸 이미지 이름 (버전을 명시하지 않으면 latest로 동작함. latest가 없으면 이걸 설치하므로 주의)
docker run --name mariadb -d -p 3306:3306 --restart=always -e MYSQL_ROOT_PASSWORD=root mariadb:10.6.10
- 실행중인 container 확인
MariaDB 접속 후 DB 환경 설정
- MariaDB 컨테이너 접속
# exec container_name 실행중인 컨테이너에서 이후의 cmd를 실행 (여기선 /bin/bash)
# -i 접근 권한 부여 (?) 이 옵션이 없으면 접속이 안 되고 막힘
# -t tty(TeleTYpewrite)를 열어줌 (그냥 텍스트 편집기 열어준다고 생각)
# /bin/bash 실행할 cmd 부분
# docker 컨테이너에서 bash shell을 열어줌
docker exec -it mariadb /bin/bash
- bash shell 접속 후 루트 계정으로 로그인 후 DB 세팅
mysql -u root -p
# 패스워드 입력 창에서 패스워드 입력 : 위에서 컨테이너 생성 시 root로 만들어둠
create database db_name # DB 생성
# IP 부분에 %가 들어가면 모든 IP에서 접속이 가능함
create user 'user_name'@'IP' identified by 'password'; # 유저 생성 ('' <- 이거 필수)
# grant 권한 종류 on db_name.table(*.* 사용시 모든 DB의 모든 테이블) to 'user_name'@'IP';
grant all privileges on db_name.* to 'user_name'@'IP'; # 권한 부여
flush privileges; # 권한 refresh
기타 매우 매우 기본적인 Docker 기능들
docker ps # 실행중인 컨테이너 출력
docker ps -a # 호스트 OS에 존재하는 모든 컨테이너 출력
docker images # 이미지 리스트 출력
docker rmi image_name # 이미지 삭제
docker stop container_name # 컨테이너 중지
docker start container_name # 컨테이너 시작
docker rm container_name # 컨테이너 삭제
Sequel Pro설치 및 Local DB, RDS DB와 연동
Sequel Pro 사용 이유
- 개인적으로 MySQL Workbench가 뭔가 이상하게 불편했는데 Mac에서 사용할 수 있는 GUI Tool을 찾고 있었다.
- 처음엔 HeidiSQL을 사용하려고 했으나, Mac에선 지원을 안 하는듯하여 다른 대안을 찾던 중 많은 선배 개발자 분들이 Mac용 GUI Tool로 Sequel Pro를 추천하셨기에 사용해보려고 한다.
- 쿼리 실행 단축키 : command + R
설치
brew install --cask sequel-pro
Local DB와 연동
- 위에서 Docker로 설치한 MariaDB와 연동
- Host에 IP 주소 또는 URL을 입력
- 별다른 설정을 할 필요없이 위에서 만든 계정으로 접속하면 정상적으로 작동한다.
- 이 과정에서 처음 안 사실 : MySQL Server에서 127.0.0.1과 localhost는 다른 방식으로 작동
- 둘 모두 루프백을 의미하는 주소인 것은 동일하나, 통신 방식에 있어서 차이가 있다.
- 이 부분에 대하여 더 공부를 해봐야겠다. (일단 현시점에서 localhost를 사용 시, docker 컨테이너에 연결을 하지 못함)
- 참고 링크
RDS와 연동
- Host에 RDS의 엔드포인트를 입력
- 당연하게 RDS의 보안 그룹 인바운드 규칙에 본인의 IP가 접근 허용이 되어있어야 한다!
RDS DB 데이터 Export 후 Docker DB로 Import
- Windows에서 또는 Mac에서 잠시나마 Workbench를 사용했을 때 Import / Export 과정에서 에러가 발생하는 경우가 정말 잦았다.
- 예를 들어, MariaDB를 사용하기 시작하면서 Workbench가 지원하는 버전과 맞지 않는 경우가 되게 많았으며 이 경우 데이터가 이상하게 Import 되던가 Encoding 에러가 발생하던가 아예 Export부터 막혀버리는 등 다양한 문제를 겪었다.
- 또한, RDS의 데이터를 Export해서 Docker DB로 Import 하는 과정을 CLI로 수행하기엔 너무 과정이 난잡하고 비효율적이라는 생각이 들어 어떻게 해야할까 고민을 많이 했었다. (물론 이 부분은 도움이 될 것 같아 추후에 공부할 예정)
- 근데 위의 모든 고민을 Sequel Pro에서 수행하니 에러가 하나도 발생하지 않았다! (MariaDB 버전까지 호환되게 잘 만들어졌나?)
RDS DB에서 Export 하기
- Sequel Pro로 RDS DB에 접속 후 [상단 메뉴바] - [File] - [Export] 클릭 (단축키 : command + shift + E)
- 상단에서 Export 형식을 정할 수 있음 (난 SQL 사용)
- S (Structure)
- Import 시 Create Table 쿼리가 포함
- C (Content)
- Export 시 DB의 데이터도 함께 Export 됨
- Import 시 insert 쿼리가 포함
- D (DROP TABLE syntax)
- Import 시 Drop Table 쿼리가 포함
- 중복인 경우, 기존 Table들을 날리고 새로 테이블을 생성함
Local DB에서 Import
- Sequel Pro로 Local DB에 접속 후 [상단 메뉴바] - [File] - [Import] 클릭 (단축키 : command + shift + I)
- Export한 SQL 파일을 Import 시키면 끝
사용 후기
- 확실히 Workbench보다 가벼운 느낌이고 UI가 훨씬 이뻐서 전체적인 만족감이 너무 좋다.
- 골머리 앓았던 에러들이 너무 간단하게 해결된 느낌이라 찜찜하기도 하면서도 기분이 좋다.
- 물론 현재까진 에러가 발생할 상황이 없었을 뿐이기에 에러가 발생하면 그에 따른 트러블 슈팅 과정도 추후에 기록해야겠다.
- 또한 성능적인 부분이나 기타 이슈 등은 더 오래 써보고 느낀 점 역시 함께 기록해야겠다.
Mac Terminal에서 EC2 접속 환경 설정
- AWS EC2가 구축되어 있다는 가정하에서 진행합니다.
- 이동욱 님의 [스프링 부트와 AWS로 혼자 구현하는 웹 서비스] 책을 참고하였습니다.
- 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - yes24 링크
기본적인 SSH 접속 커맨드
- 일반적으로 Mac (Linux) Terminal에서 SSH에 접속하고 싶은 경우 아래와 같은 긴 커맨드를 매번 입력해줘야 하는 번거로움이 존재한다. (대괄호는 구분을 위해서 썼을 뿐 아무런 의미가 없습니다.)
ssh -i [pem 키 위치] [EC2의 탄력적 IP주소]
SSH 접속 커맨드를 간소화해보자
- 앞서 커맨드를 ~/.ssh/ 경로에 pem 키를 옮겨 놓음으로써 ssh 실행 시 자동으로 pem키 파일을 읽어 들이게 하여 커맨드를 간소화 시킬 수 있다!
cp [pem 키 절대 경로/pem키] ~/.ssh/
cd ~/.ssh/ # /.ssh/로 이동
ll # ll을 이용하여 파일 목록 확인하여 pem 파일이 존재하는지 체크
# 600의 의미
# 각 자리마다 자신 / 그룹 / 전체 권한을 의미
# 권한 종류 : 읽기 (4), 쓰기 (2), 실행(1)
# 즉 600이라면 자신에게 읽기 + 쓰기의 권한을 준다는 의미
chmod 600 ~/.ssh/[pem키] # pem키의 권한 변경
# 권한 변경 이후 ssh 구성 정보를 설정할 config 파일 생성
vim ~/.ssh/config
# vim에 들어왔다는 가정하여 들여쓰기 사용했음
# 아래 설정값 입력
Host [서비스 이름]
HostName [EC2의 탄력적 IP주소]
User ec2-user # EC2 Amazon Linux의 default 유저명 - OS마다 상이할 수 있음
IdentityFile ~/.ssh/[pem키]
# :wq로 저장 후 vim 종료
# config 파일은 실행 권한이 필요
chmod 700 ~/.ssh/config
- 위의 과정까지 성공적으로 마무리 했다면 아래와 같은 간단한 커맨드로 EC2에 접속할 수 있다.
ssh [config에 등록한 서비스 이름]
댓글남기기