수정중
📂 목차
- Spring Boot 빌드를 위한 Gradle 의 필요 파일
- Nginx 의 기본 홈페이지 경로
- Docker Container 의 자동 실행 경로
- nginx.conf 환경마다 달리 가져가기
- DBeaver(디비버) Public Key Retrieval is not allowed
- DB 와 Back Container 간의 실행 시각 조정
- WebMvcTest
- Bash script 문자열 패턴 case 별 매칭
📚 본문
미니프로젝트를 토대로 배운 점들을 나열
Spring Boot 빌드를 위한 Gradle 의 필요 파일
build.gradlesettings.gradlesrc/main/*src/test/*-> 테스트 하고 싶을때gradlewgradle/
혹은
tasks.named('bootBuildImage') {
imageName = "todo-app:0.1"
environment = [
"BP_JVM_VERSION": "21"
]
}
./gradlew bootBuildImage # 이미지 빌드
docker images # 확인
또한 gradle 문법을 사용하면 다음과 같이 인자로도 받을 수 있다.
tasks.named('bootBuildImage') {
def imgName = project.hasProperty('imageName')
? project.property('imageName')
: 'todo-back:latest'
imageName = imgName
environment = [
"BP_JVM_VERSION": "21"
]
}
project 는 예약된 변수인 듯하다(추후에 공부 더 필요).
Nginx 의 기본 홈페이지 경로
/usr/share/nginx/html/
Docker Container 의 자동 실행 경로
/docker-entrypoint-initdb.d/ 폴더에 있는 .sql, .sh, .sql.gz 를 자동으로 실행
nginx.conf 환경마다 달리 가져가기
만약 /usr/share/nginx/html/nginx.conf 에 설정파일이 위치되어 있다고 하면 Dockerfile 에서 아래와 같이 가져가면 될 듯하다.
CMD ["sh", "-c", "nginx -c /usr/share/nginx/html/nginx-${PROFILE}.conf -g 'daemon off;'"]
DBeaver(디비버) Public Key Retrieval is not allowed
MySQL JDBC 연결 문자열에 붙여 쓰는 파라미터들이며, DBeaver 에서 MySQL 접속 시 자주 보는 오류인 Public Key Retrieval is not allowed 를 해결하는 설정이다.
오류 원인은 MySQL 8.x 이상에서 caching_sha2_password 인증 방식을 사용할 때, 클라이언트(DBeaver, …) 가 서버로부터 암호화용 public key를 자동으로 받아오는 기능이 기본적으로 금지되어 있다.
그래서 아래처럼 public key 자동 요청이 필요한 상황이면 오류가 뜨게 된다.
allowPublicKeyRetrieval=true&useSSL=true
DB 와 Back Container 간의 실행 시각 조정
시간 상 DB 가 구동되는 시간보다 Back Container 가 구동되는 시간이 더 클 수 있다.
이때 사용할 수 있는게 healthcheck 이며, back 은 db 가 service healthy 한지 체크 후에
정상적으로 구동이 시작된다.
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 5s
timeout: 3s
retries: 10
...
depends_on:
db:
condition: service_healthy
WebMvcTest
테스트를 하기 위해 다른 layer 를 올릴 필요 없이 테스트를 수행하고 싶다면 다음 애노테이션을 사용하자.
@WebMvcTest(TodoController.class)
Bash script 문자열 패턴 case 별 매칭
for arg in "$@"; do
case "$arg" in
name=*) BACK_SERVER_NAME="${arg#*=}" ;;
version=*) VERSION="${arg#*=}" ;;
no-execution) NO_EXEC=true ;;
*)
echo "알 수 없는 인자: ${arg}"
;;
esac
done
args#*=: # 으로 문자열 패턴 매칭되는 것들 제거, “(모든 문자열)=” 는 제거 후 남은거 반환
URI 복습
scheme:[//[user[:password]@]host[:port]][/]path[?query][#fragment]