본문 바로가기

Back-end(Spring Framework)/필기일지

240112 [Back-end] Spring Framework 배포 / mysql

[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 컨테이너는 서로 다르기 때문에,

로컬호스트가 아닌 도커 컨테이너의 이름으로 변경해주어야한다.

root-context.xml

 

변경 후 다시 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
		&amp;serverTimezone=UTC
		&amp;allowPublicKeyRetrieval=true" />

컨테이너가 초기화돼서 테이블이 없기 때문에, 테이블을 만들면 된다.

 

정리하자면, 로컬에서 작업할 땐 내 컴퓨터의 자바와 내 컴퓨터의 mysql을 연결한 것이고,

도커에선 자바 컨테이너와 mysql 컨테이너를 각각 만들었고 얘네는 서로 다른 컴퓨터이다.

그래서 자바 컨테이너의 root-context에서 127.0.0.1로 mysql과 연결은 당연히 불가하다.

  1. mysql connector : pom.xml에 의존성 추가
  2. Query 실행 : root-context.xml에서 mysql url의 아이피를 컨테이너 이름(good-db)으로 수정
  3. public key 에러 : root-context.xml에서 &allowPublicKeyRetrieval=true 옵션 설정
  4. table 에러 : 테이블 만들어줌

 

[AWS 배포]

 

aws 인스턴스 생성 및 세팅은 동일.

 

보안규칙에서 톰캣 port 9999와 함께 mysql의 3307도 열어준다.

mysql 설정 - aws-db 추가

ip주소는 인스턴스의 ip주소로 설정

 

생성하고 나면 들어가서 쿼리문으로 db 세팅하기

 

아마 테이블 추가하기가 애매할텐데, 이 땐 aws 보안설정에서 mysql 외부접속 포트인 3307을 열어주고 로컬 컴퓨터의 MySQL 프로그램에서 아이피와 3307 포트로 연결해주면 된다.

아니면 aws 안에서 mysql에 접속해서 create table 해도 상관 없다.