[24.01.12] 105차
<<진도>>
[Back-end] Spring Framework 배포
/ MySQL 배포
/ AWS 배포
<<오늘의 팁>>
AWS 로그인 잘못된 요청 시 다른 브라우저에서 인스턴스생성
240111 docker-compose build 중 mysql이 실패한 이유 해결
pom.xml에 아래 내용을 추가
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.32</version>
</dependency>
JAVA와 MySQL을 연결하기 위해 jdbc를 사용하는데, 이 때 driver가 필요해서 넣어준다.
but, DB 내용을 불러올 때 에러가 발생
jdbc가 db 연결이 안된 상태
root-context에서 로컬호스트인 127.0.0.1:3306으로 mysql과 연결한다고 작성했지만,
자바 컨테이너와 mysql 컨테이너는 서로 다르기 때문에,
로컬호스트가 아닌 도커 컨테이너의 이름으로 변경해주어야한다.
변경 후 다시 war를 만들어서 docker-compose up --build를 진행하면 연결은 되지만
"Public Key Retrieval is not allowed" 에러가 난다.
mysql 8버전 이상부터 보안이 강화되어 Public Key 설정을 해줘야한다.
<property name="url" value="jdbc:mysql://good-db:3306/ver4?useSSL=false
&serverTimezone=UTC
&allowPublicKeyRetrieval=true" />
컨테이너가 초기화돼서 테이블이 없기 때문에, 테이블을 만들면 된다.
정리하자면, 로컬에서 작업할 땐 내 컴퓨터의 자바와 내 컴퓨터의 mysql을 연결한 것이고,
도커에선 자바 컨테이너와 mysql 컨테이너를 각각 만들었고 얘네는 서로 다른 컴퓨터이다.
그래서 자바 컨테이너의 root-context에서 127.0.0.1로 mysql과 연결은 당연히 불가하다.
- mysql connector : pom.xml에 의존성 추가
- Query 실행 : root-context.xml에서 mysql url의 아이피를 컨테이너 이름(good-db)으로 수정
- public key 에러 : root-context.xml에서 &allowPublicKeyRetrieval=true 옵션 설정
- table 에러 : 테이블 만들어줌
[AWS 배포]
aws 인스턴스 생성 및 세팅은 동일.
보안규칙에서 톰캣 port 9999와 함께 mysql의 3307도 열어준다.
mysql 설정 - aws-db 추가
ip주소는 인스턴스의 ip주소로 설정
생성하고 나면 들어가서 쿼리문으로 db 세팅하기
아마 테이블 추가하기가 애매할텐데, 이 땐 aws 보안설정에서 mysql 외부접속 포트인 3307을 열어주고 로컬 컴퓨터의 MySQL 프로그램에서 아이피와 3307 포트로 연결해주면 된다.
아니면 aws 안에서 mysql에 접속해서 create table 해도 상관 없다.