Developer.

[멋사 백엔드 19기] TIL 66일차 미니프로젝트2 회고

수정중

📂 목차


📚 본문

미니프로젝트를 토대로 배운 점들을 나열

Spring Boot 빌드를 위한 Gradle 의 필요 파일

  • build.gradle
  • settings.gradle
  • src/main/*
  • src/test/* -> 테스트 하고 싶을때
  • gradlew
  • gradle/

혹은

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]