프로젝트 환경 구성 for Mac (with. Docker)

박양원·2024년 2월 21일
0

Trouble Shooting

목록 보기
8/16
post-thumbnail

해당 포스팅은 사이드 프로젝트 진행 중 겪은 크고 작은 이슈들에 대한 기록입니다.

프로젝트 환경을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를 이용.

  • brew install cask  # cask 설치
    
    # 완료 후
    
    brek install --cask docker    # Homebrew 2.6.0 버전 이후 사용 방식

MariaDB Image 설치 및 Container 생성 과정

  1. 원하는 이미지 검색 후, 버전에 맞게 설치
docker search mariadb							# docker search image_name (또는 docker hub 들어가서 직접 검색)
docker pull mariadb:10.6.10				# docker pull image_name:version (default: latest)
  1. 이미지 정상 설치 확인 후, 컨테이너 생성과 동시에 실행
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
  1. 실행중인 container 확인

docker ps

MariaDB 접속 후 DB 환경 설정

  1. MariaDB 컨테이너 접속
# exec container_name 실행중인 컨테이너에서 이후의 cmd를 실행 (여기선 /bin/bash)
# -i 접근 권한 부여 (?) 이 옵션이 없으면 접속이 안 되고 막힘
# -t tty(TeleTYpewrite)를 열어줌 (그냥 텍스트 편집기 열어준다고 생각)
# /bin/bash 실행할 cmd 부분
# docker 컨테이너에서 bash shell을 열어줌
docker exec -it mariadb /bin/bash
  1. 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 컨테이너에 연결을 하지 못함)
    • 참고 링크

sequel pro

RDS와 연동

  • Host에 RDS의 엔드포인트를 입력
  • 당연하게 RDS의 보안 그룹 인바운드 규칙에 본인의 IP가 접근 허용이 되어있어야 한다!

sequel pro


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)

sequel pro

  • 상단에서 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 접속 환경 설정

기본적인 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에 등록한 서비스 이름]

0개의 댓글