들어가기 전
1. 매일 정리해야지 하며 미뤄두었던, 동시성 이슈 해결방법 강의를 정리하려 한다.
2. 동시성 이슈를 고려한 개발을 해보지 않아서 나한텐 흥미로운 접근방식의 강의였다.
3. 책에서 단편적으로만 경험했던 멀티스레드, 다중 서버 환경에서 실무적인 문제에 입각한 해결론을 제시한 강의였다.
까먹지 말고,, 기록하자,, 기록만이 살길
코드 샘플
개발 환경
- Intellij
- java 11
- docker
- mysql
- jpa
- redis
프로젝트 세팅
프로젝트 구조
- com.example.stock - 프로젝트 명
- domain
- Stock - entity로 database의 테이블이라고 생각
- repository
- StockRepository - 재고에 대한 crud
- service
- StockService - 비지니스 로직
- resources
- application.yml - Jpa (db), 로깅 정보
작업환경 세팅 (docker)
- docker 설치
- brew install docker (나는 brew install -- cask docker로 ui를 제공하는 도커도 같이 설치하도록 함)
- brew link docker
- docker version
- mysql 설치 및 실행
- docker pull mysql
- docker run - d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=1234 --name mysql mysql
- docker ps
- mysql 데이터베이스 생성
- docker exec -it mysql bash
- mysql -u root -p
- create database stock_example;
- use stock_example;
참고
세팅 다하고 테스트 코드 작성해서 돌렸는데 하기와 같은 에러가 자꾸 발생했다.
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
내가 다르게 한 것은 이미 로컬에 mysql이 3306으로 설치되어 사용 중이라 3307로 올렸고, application.yml 도 3307로 바꾼 것 뿐
jdbc:mysql://127.0.0.1:3307/stock_example
그래서 검색 시작
# 1 useSSL=false 세팅
url: jdbc:mysql://127.0.0.1:3307/stock_example?useSSL=false
=> 실패
# 2 docker에서 제공해주는 ip로변경
url: jdbc:mysql://172.17.0.2:3307/stock_example
=> 실패
# 3 port 번호 변경
구세주 같이 찾은 아래 게시글!
나와 같은 상황이었다.
인텔리제이의 mysql, mariadb 기본포트가 3306이라고 한다.
- docker run - d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=1234 --name mysql mysql
해서 나도,, 3307:3307을 3307:3306로 바꿔주니 테스트 코드가 정상 작동 하였다고 한다.
## 참고
- 밑에서 3번째를 확인해보면 MySql의 기본 내부 Port번호가 3306으로 설정되어있는것을 확인할 수 있다.
- 그래서 아래처럼 -P 옵션을 3307:3306으로 변경하여 동작하니까 DB 연동이 되었다.
날 살린 해당 글 참고 (개발자님에게 압도적 감사를)
https://hyeophyeop.tistory.com/153
강의 참고