로컬 개발 환경 구축하기

김동환·2023년 12월 31일
0

개요

백엔드 개발자분들이 여럿 합류하게됐다. 현재는 나포함 총 4명인데 사람이 늘어나니 개발환경 구축 지원에 시간을 많이 들이게 됐다. 처음 합류하면 로컬에서 서버를 띄우는게 첫 시작이니 만큼, 해당 온보딩을 빠르게 진행할 수 있도록 로컬 개발환경 구축을 빠르고 간편하게 하는 작업을 시작했다.
로컬환경 구축의 어려운점은 크게 이랬다.

  • 서버 구동을 위해 설치할 인프라가 너무 많다.
  • Test Stub이 없어서 API를 호출해볼 수가 없다.

해결

서버 구동을 위해 설치할 인프라가 너무 많다.

  • 버디스탁 서버를 구동하기 위해서는 MYSQL, REDIS, SQS가 필요하다. 이들을 manual하게 설치하는 것은 container 시대를 살고 있는 우리에게 적합하지 않다. 그래서 docker compose를 도입했다.
version: '3'
services:
  mysql-8:
    image: 'mysql:8'
    ports:
      - '13306:3306'
    environment:
      MYSQL_DATABASE: buddystock_local
      MYSQL_ROOT_PASSWORD: root
      TZ: "Asia/Seoul"  # 시간대 설정 추가
    ulimits:
      nofile:
        soft: 65536
        hard: 65536

  #redis config
  redis-server:
    hostname: redis
    image: 'redis:5.0.6'
    ports:
      - "16379:6379"
    privileged: true

  # LocalStack config
  localstack:
    image: localstack/localstack
    ports:
      - "4566-4599:4566-4599"
      - "${LS_ELASTICSEARCH_HTTP_PORT:-9200}:9200"
    environment:
      - SERVICES=sqs
      - DEBUG=1
      - DATA_DIR=/tmp/localstack/data
      - PORT_WEB_UI=8080
      - LAMBDA_EXECUTOR=local
    volumes:
      - "${TMPDIR:-/tmp/localstack}:/tmp/localstack"
      - "/var/run/docker.sock:/var/run/docker.sock"
      - ./start-localstack.sh:/etc/localstack/init/ready.d/start-localstack.sh
  • 그 중에서 가장 까다로운 것은 SQS였다. 설정을 하려니 막막했는데 localstack 이라는 좋은 도구를 찾았다. localstack은 로컬에 AWS 제품을 구성하는데 사용하는 툴이다.

Test Stub이 없어서 API를 호출해볼 수가 없다.

  • 개발 서버의 더미데이터를 긁어서 로컬 디비에 집어넣는 식으로 해결을 했지만 굉장히 비효율적이라는 생각이 들었다.
  • 그래서 오픈소스 데이터베이스 마이그레이션 툴인 flyway를 도입했다.
    • flyway는 schema 버전을 관리하는 테이블 하나를 두고 여기서 버전을 관리한다.
    • 테이블의 변경점이 있으면 개발자가 직접 DDL sql 파일을 작성한다. 서버를 기동하면 flyway가 변경점을 읽어서 수정사항을 DB에 반영하고 버전 관리 테이블에 기록한다.
    • 이점을 응용하여 더미데이터를 insert하는 DML sql파일을 작성해서 서버 기동시에 더미데이터를 추가할 수 있었다.

마무리

flyway, docker compose를 적용하고 나니 로컬에서 git clone 받고 환경 변수만 넣으면 바로 서버가 뜨게 되었다. 생산성 향상을 위한 고민은 계속 될 것이고 다음은 환경변수도 형상관리를 할 수 있게 하는 것이 목표이다!

profile
게으른 개발자

0개의 댓글