Github Action에서 MySQL 이용하기 🐬

waterlyn·2023년 6월 23일
0
post-thumbnail

이번에 데브코스 수료 후 AWS 지원이 종료되면서 Github Action에서 사용하는 RDS와 연결이 되지 않아 리팩토링하는 과정에서 어려움을 겪었다.

특히 우리 프로젝트에서는 MySQL에서 지원하는 내장 함수를 사용하고 있었기 때문에 테스트 환경에서도 MySQL이 반드시 필요했다.
그래서 Github Action에서 테스트 시 MySQL을 사용할 수 있는 방법을 찾아봐서 적용한 경험을 적어보려고 한다.
(사실 다들 쉽게 잘 하시는 것 같은데 나만 엄청 헤맨 것 같아서,,, 혹시라도 어려우신 분들이 보고 도움을 얻어가셨으면 좋겠다는 마음으로 적어본다...ㅎㅎ)

Github marketplace

우선 Github Action에서 사용할 수 있는 도구들은 어디에 있냐면 Github marketplace라는 곳에서 쉽게 찾을 수 있다.

이 곳에서는 Github Action이 동작될 때 Runner 라는 서버에서 우리가 지정한 작업들이 동작하게 되고, 우리는 해당 작업들이 기대한 것처럼 잘 동작하도록 하기 위해서는 환경을 구성해줘야 한다.
바로 그러한 도구를 Github marketplace에서 다양한 사람들이 만들어서 제공해주고 있기 때문에 우리는 잘 가져다가 사용하면 된다! 😎

이번에 적용해볼 MySQL도 Github marketplace에서 제공하는 도구를 찾을 수 있다.

Github Action에 MySQL 설정하기

현재 프로젝트의 Github Action 플로우는 다음과 같다.

1. 해당 프로젝트 코드로 checkout 한다.
2. Java 프로젝트를 위한 JDK를 세팅한다.
3. MySQL DB를 준비한다. (빌드 전에 더 필요한게 있다면 준비)
5. Test와 함께 build를 진행한다.

이때 MySQL DB가 준비되지 않으면 테스트가 깨져버리고, 우리 팀이 정해놓은 빌드가 통과되지 않으면 Merge를 할 수 없는 규칙에 걸리게 된다.

이제 MySQL을 설정해봅시다 !!
Setup MySQL을 사용해서 설정해주었다. 해당 연결된 링크를 들어가면 어떻게 사용해야 하는지도 나와있으니 참고하길 바란다.

코드는 다음과 같다.

      - uses: mirromutth/mysql-action@v1.1
        with:
          host port: 3306
          container port: 3306
          mysql database: 'testdb'
          mysql root password: ${{ secrets.DB_PASSWORD }}
  • uses: 사용하는 Github Action 도구를 의미한다.
  • with: 도구를 사용할 때 함께 사용하는 환경 값을 넣을 수 있다.
  • host port: 해당 DB를 사용하는 호스트의 port이다. 기본적으로 MySQL은 3306을 사용하기 때문에 3306으로 설정해주었다.
  • container port: 이것은 MySQL이 도커를 사용하여 컨테이너를 띄워 DB를 사용하기 때문에 해당 컨테이너가 어떤 포트를 열어주었느냐에 따라 다르다. 기본으로 3306으로 설정되어 있다.(하지만 왜인지 모르겠는데, 포트 정보를 주지 않으면 제대로 작동하지 않았다.)
  • mysql database: 사용할 데이터베이스 스키마 이름
  • mysql root password: 사용하는 DB의 비밀번호(만약 사용자가 root가 아니라면 mysql username, mysql password를 설정해주면 된다.)

해당 작업은 반드시 빌드 전에 설정해줘야하는 것을 다시 한번 강조한다 !!

이렇게 설정하면 아마 문제없이 잘 작동할 것이라고 예상한다!!

번외) 로컬 MySQL이 아닌 MySQL에 연결하기

이것은 조금 주제에 벗어나는 이야기이지만, 나의 로컬에 설치된 MySQL이 아닌 도커를 사용하여 만든 MySQL을 사용하려고 했는데, 어떻게 해도 IntelliJ에서 연결이 안되는 것이었다. 그래서 알아보니 포트가 겹쳐서 내가 새롭게 형성한 MySQL에 연결되지 못한 것이었다.

그래서 컨테이너 외부의 3307 포트에서 요청된 것을 컨테이너의 3306 포트로 매핑하여 변경하도록 구성하였더니 잘 작동되었다. 더 자세한 이야기는 이 곳을 참고하길 바란다.


참고

https://ncookie21.tistory.com/23

profile
Hello there 🖤

1개의 댓글