springboot+mysql+docker 멀티 컨테이너 환경 구성 + ec2에서 실행하기[2]
이전 글을 보고오면
java.sql.SQLException: Incorrect string value: '\xEC\x82\xB0\xEC\x97\x85...' for column 'dept' at row 1 해당 에러를 확인 할 수 있다.
해당 문제의 원인은 DB테이블에 올바르지 않은 문자열 값이 들어갔기 때문이다. 찾아보니 DB는 기본적으로 latin1으로 charset이 설정되어 있다. 이를 utf8로 변경해줘야 위와 같은 오류가 발생하지 않는다.
문제는 내 도메인 지식의 부족이었다..
나는 구글링을 통해 my.cnf에 아래와 같은 코드를 추가하면 된다는 것을 알게되었다.
[client]
default-character-set = utf8
[mysqld]
init_connect = "SET collation_connection = utf8_general_ci"
init_connect = "SET NAMES utf8"
character-set-server = utf8
collation-server = utf8_general_ci
[mysql]
default-character-set = utf8
그런데 문제는 ec2에서 my.cnf를 못찾겠는것이다...
문제의 원인은 바로 mysql 컨테이너 내부에서 my.cnf를 찾고 고쳐줘야하는데, 멍청하게 호스트 os인 우분투에서 찾고 있던것이다.
명심하자. 도커는 컨테이너 기술로 나는 mysql과 spring application을 도커 위에 컨테이너로 올린 상태이다.
그래서 컨테이너 내부로 들어가보겠다.
docker exec -it 컨테이너 이름 혹은 컨테이너 아이디 /bin/bash
참고로 들어가기 전
들어가서 우선 my.cnf 파일을 찾아보자.(mysql버전에 따라 위치가 다를 수 있다.)
find /my.cnf
나는 /etc 하위에서 발견할 수 있었다.
이제 vim을 통해 위의 코드를 추가해주자.
bash: vi: command not found
위와 같이 vi찾지 못하는 에러가 발생했다.
이는 현재 vim이 설치되어 있지 않기 때문에 발생하는 것으로 이를 설치해주자.
yum install vim-enhanced or apt-get install vim
나는 우분투 환경인데, mysql 컨테이너 내부에서는 yum 명령어가 먹었다.
어찌저찌 설치하고 vim을 실행했다.
vim my.cnf
위의 코드를 다시 붙어 넣어주고, 저장후 닫기를 한다.
그리고 다시 mysql과 springboot를 실행하면.... 다시 오류가 발생했다..
바로
접속이 거부 되는 문제가 발생했다.
이전에 sql 컨테이너 생성시 MYSQL_USER=user 값을 설정해줬기 때문에 user가 생성되어 있을것이다. 해당 객체에 접근 권한을 주도록 하겠다.

docker exec -it [container id] /bin/bash
mysql -uroot -p

우선 유저를 확인하는 명령어로 유저를 확인한다.
mysql> use mysql;
mysql> select user, host from user;
%은 모든 ip에서 접근할 수 있다는 뜻이다.
이제 모든 db권한을 주겠다.
mysql> grant all privileges on *.* to 'user'@'%'; # 권한 부여
mysql> flush privileges; # 권한 적용
모든 설정이 마쳤다..
이렇게 설정하고 두개의 컨테이너를 돌리면 잘 작동한다..
이렇게 springboot application+mysql+docker+ec2 기술들을 이용해서 배포에 성공해봤다.
도커 컴포즈를 이용하면 쉬울텐데, 한번 멀티컨테이너의 구조를 알아야 이후에 도움이 될것같아서 하나씩 띄웠다.
다음에는 컴포즈를 이용해서 도커를 띄어봐야겠다.~~