<aside> ❓ 왜 Local 환경에서 H2가 아닌 MySQL 환경을 구축해야할까?

이전 프로젝트에서는 Local 환경에서 H2 데이터베이스를 사용했었습니다. 당연히 운영 환경에서는 “MySQL을 사용할거니까 테스트 용도로 많이 사용되는 H2를 사용해도 되지 않을까?” 라는 생각을 하며 사용했던 것 같습니다. 그렇게 프로젝트 진행중 비관적 락과, 낙관적 락 등 다양한 락을 접해보면서 실제 코드로 구현하고 배포를 했는데 원하던대로 동작을 하지 않아서 확인해보니 DBMS별로 트랜잭션 격리수준이 다른 default 값이 원인이었습니다. 이렇게 로컬, 개발, 운영 환경에서의 환경이 조금이라도 다르면 어느 곳에서든 문제가 발생될 수 있겠다 라는 생각이 들어 H2를 사용하지 않기로 결정했습니다.

로컬에서는 개별적으로 MySQL을 만들어서 사용하면 되는데 꼭 SynologyNas를 이용해서 구현 해야할까?

사실 모든 개발자의 PC에 MySQL을 설치해서 직접 로컬에서 돌려볼 때 테스트 용도로 사용해볼 수는 있습니다. 하지만 그렇게 할 경우 모든 개발자의 PC에 MySQL을 설치해서 테이블을 생성하고 데이터를 집어넣는 작업을 해야하는 번거로움이 있었습니다. 저희 팀은 이러한 번거로움을 없애기 위해 하나의 서버를 두고 여러 곳에서 하나의 MySQL서버로 진입해서 테스트해보는 방법을 채택했습니다. 물론 로컬 환경에서 서버를 띄우고 API 테스트를 해볼 때 각각 사용하다보면 데이터의 정합성이 맞지 않을 수도 있겠다 생각했지만, 팀원의 수가 적고 중요한 데이터들이 아니므로 충분히 사용성에 있어서 번거롭지 않을 것 같다고 판단했습니다.

</aside>

SynologyNAS서버의 Docker 기능으로 MySQL서버 구축

  1. Synology NAS서버의 Container Manager에 접속하여 레지스트리를 클릭 후 MySQL을 검색하여 클릭합니다.

    Untitled

  2. 이미지 탭에서 mysql이 정상적으로 나와있는 것을 확인 해볼 수 있습니다.

    Untitled

  3. 컨테이너 탭을 클릭 후 생성을 눌러 mysql 이미지를 선택 후 컨테이너 이름을 적고 다음을 클릭합니다.

    Untitled

  4. 고급 설정에서 포트를 설정하라고 나오는데 왼쪽 줄은 외부 포트, 오른쪽 포트는 컨테이너 안에서의 내부 포트입니다. 컨테이너 안에서 돌아가는 MySQL이 기본으로 3306 포트이므로 동일하게 사용하고 왼쪽은 제가 컨테이너 외부에서 접속할 때 사용하는 포트로 직접 지정해서 변경했습니다.

    Untitled

  5. 그리고 아래를 내려보면 환경을 추가해주는 부분이 있는데 도커로 어떠한 컨테이너를 만들 때 환경변수를 추가해서 만들 수 있습니다. MySQL의 경우 기본 값으로 아래 4가지가 들어가므로 키 값과 값을 입력해주고 다음을 클릭하여 생성합니다.

    Untitled

  6. 컨테이너 탭에서 생성된 mysql을 확인해볼 수 있습니다.

    Untitled

MySQL서버 접속

  1. 저는 보통 MySQL Workbench를 많이 이용합니다. MySQL Workbench 메인 화면에서 +버튼을 클릭하여 커넥션을 생성합니다.

    Untitled

  2. 커넥션을 생성 후 위처럼 Connection Name(아무거나), Hostname(서버 주소), Port(서버 포트), Username(서버 유저명)을 입력하고 하단 Test Connection을 클릭하여 비밀번호를 입력 후 정상적으로 로그인되는지 확인해봅니다.

  3. 오른쪽에 뜬 창 처럼 나오면 정상적으로 로그인 된 것 입니다.