constants, config, .env 만들기
나의 경우는 로아를 같이 켜고 있어서 문제였다. 도커 엔진이 계속 멈췄는데 로아를 끄자마자 엔진이 멀쩡히 돌아갔다. 팀원분들도 설치 중 어려움을 겪으셨는데 LOL의 뱅가드와 충돌이 나기 때문이라고.
동혁님도 생활코딩 유튜브를 보셨다고 하니 혹시라도 모르겠으면 찾아보도록 하자.
오늘의 강의 세션(?)은 대충 다음과 같다.
docker 어디서 왔는가 - linux
왜 쓰는가
image
container
volumes
docker compose
개발자가 프로그램 필요하다는 사람 찾아가서 git 깔고 git pull 하고 npm install 하고 할 수 없기 때문에, 그 설치 환경과 이것 저것을 다 한 세트로 담아놓은것.
리눅스에서 시작된 이유는 리눅스 커널이 컨테이너화 하는 기술을 갖고 있어서 거기에서 온것이기 때문.
Images - config들이 모여있는 곳(?)
OS 환경 같은걸 저장하는 걸 이미지라고 부른다. 우리 CD스페이스나 데몬 쓸때도 CD 이미지 라고 했던것 처럼, 데이터와 실행 환경들이 스냅샷마냥 딱 고정되어 있어서 이미지라고 부름.
Environment variables에서 초기 비밀번호를 설정해줘야 한다
초기설정은 도커 문서를 보거나 도커 환경변수 설정 이라고 검색하면 될 것.
이미지 Run 시켰을 때의 PORT는 외부에서 몇번 포트로 들어올 것인지를 정해주는 것
그래서 Docker는 외부 PORT와 내부 PORT가 별도로 있다. 왜냐? 내부 포트가 노출되면 해킹의 위험이 있기 때문. 동혁님은 실제로 해킹을 당하신 적이 있다고.
도커는 기본적으로 CLI 기반이라 cmd를 켜서 명령 프롬포트에서 실행할 수 있다. 물론 docker desktop에서 해도 된다.
일단 cmd에서 docker pull mysql 입력해서 도커 이미지를 땡겨와보자.
그리고 다음과 같이 입력하면 실행시킬 수 있다.
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=비밀번호 -d -p 외부포트번호:내부포트번호 mysql:latest
ex)
-> -e는 환경변수 설정해주겠다는 얘기
-> -d는 백그라운드에서 실행하겠단 얘기
-> -p는 포트번호를 설정해주겠다는 얘기. 외부포트:내부포트 순으로 써주면 ok
혹은 docker desktop에서 이걸 써도 된다. 이때 환경변수에서 MYSQL_ROOT_PASSWORD 라는 이름을 넣고 비밀번호를 설정해주자.
이때 설정한 비밀번호는 이후 docker를 접속할 때 쓰이므로 기억해두어야 한다.
여기서 제대로 실행이 되었다면 컨테이너의 ID가 표시된다.
이후 docker start mysql-container 라고 입력해주자. mysql-container 라고 뜨면 성공.
시작
$ docker start mysql-container
mysql-container멈춤
$ docker stop mysql-container
mysql-container재시작
$ docker restart mysql-container
mysql-container
그리고 나면 cmd에서 docker exec -it mysql-container bash
라고 쳐도 되고, docker desktop에서 exec 탭으로 이동해도 된다. 그후 mysql -u root -p
라고 입력하면 비밀번호를 쳐달라고 나온다. 리눅스 특성 상 타이핑해도 보이지 않는게 정상이니 믿음을 갖고 기도메타로 타이핑 후 엔터하자.
비밀번호가 맞다면 위와 같이 나온다.
그리고 나면 create database (원하는 DB이름) default character set utf8;
을 입력하자. 문제가 없다면 DB가 생성될 것. 나는 USER_DB와 GAME_DB를 만들고 싶으니 다음과 같이 입력했다. 자바스크립트를 쓰다보면 세미콜론에 무감각해지지만 꼭 붙여야 실행되니 주의하자!
create database USER_DB default character set utf8;
create database GAME_DB default character set utf8;
이렇게 되면 RDS를 쓰지 않고 도커로 일종의 로컬DB를 띄울 수 있게 된 셈.
일종의 git checkout 같은 기능.
라이브쉐어를 하다 보니 이렇게 노란 박스가 마구마구 쳐진다는 팀원들의 고충이 있어 찾아보았다.
이걸 false로 돌리면 OK
상현님이 말씀하시길 '이전 프로젝트를 해봤더니 LE가 거꾸로 쓰는건 맞는데, 만들어지는 버퍼 객체는 결국 같더라'는 말씀을 해주셨다. 🤔?? 이해하지 못했다.
내가 이해하지 못한 점 - 클라에서 LE로 쏘면 우리도 readUIntLE로 읽어야 하는거 아닐까? 라는 의문.
-> 내가 생각한 것은 클라에서 LE로 오면 LE로 read 해주고, 서버는 BE로 쏴주니 BE로 write 해주는 것이 맞지 않나~ 하는 것이었다.
맞는 말씀이다. 하지만 전 바보에요 팀장님... 알고리즘 할 줄 몰라... 낑낑...
protobuf 파일 로드 중 오류가 발생했습니다. Error: no such type: enum.GlobalFailCode
라는 메시지가 발생했다. 이건 뭐지?
net stop winnat / net start winnat을 해줘도 그대로였다. 대체 뭐가 문제일까 고민하던 차에 허탈한 이유를 알게 됐다.
PORT, HOST 순서인데 내가 이걸 뒤집어서 써서 되지 않는 것이었다...
주말은 사전캠프처럼 최소 4시간 이상 공부할 것을 약속했다.