도커에 대한 공부와 K 해커톤 대회 개발 환경 구축
포스트
취소

도커에 대한 공부와 K 해커톤 대회 개발 환경 구축

개요

2021년 K - Hackathon 대회를 진행 하게 되면서 나는 백엔드를 맡게 되었다. 처음에 인원 구성이 기획자, 디자이너, 프론트, 백엔드 개발자로 총 4개로 나눠 개발을 진행 한다고 생각 하여, Django를 이용해서 만들고, Redis를 이용하여 데이터 캐시 서버를 만들고, Mysql로 데이터 저장 서버로 공부를 해볼 생각 이였다. 그렇지만 팀장이 프론트 개발 하는 사람도 백엔드를 공부하는게 좋을것 같다고 하여 학교 교육 과정에 있는 Apache - Php - MariaDB 로 하기로 하였다. 여기서 docker APM 을 이용하여 웹 서버를 구축 하고, docker - VS Code Server 를 이용하여 개인별 작업이 가능한 환경을 구축 하도록 한다.

도커란

도커의 개념 자체는 아주 간단하다고 생각한다. Python을 할 때 pyvenv나, Visual Studio에 있는 솔루션 파일이 대표적인 예로 도커와 유사한 개념이라고 생각을 한다. pyvenv 같은 경우에는 가상 환경별 설치가 되어있는 라이브러리를 다르게 할 수 있고, Visual Studio 솔루션 파일 경우에는 솔루션 파일 안에 LINK 정보나 LIB 정보를 담아서 빌드 설정 및 프로젝트 별로 환경을 개별로 구성이 가능 하기 때문이다.

이 처럼 도커는 개념적으로 본다면 컴퓨터에 운영체제를 설치하고 특정 프로그램을 실행 하기 위해서 필요한 라이브러리나 프레임워크를 설치를 자동적으로 하는 프로그램이다. 즉 기존 시스템에 아무것도 설치가 되어 있지 않는 새로운 환경을 만들어주는 프로그램 이다.

Virtual Machine 과 Docker 차이 [상세]

도커와 가상 머신의 차이 좌 : Docker, 우 : Virutal Machine

도커 컨테이너와 가상 머신의 가장 큰 차이점이라 생각이 되는 부분은 바로 리소스 할당 정책이다. 도커는 전체의 시스템에서 자원을 공유하지만 가상 머신은 미리 시스템에서 자원을 할당 받은 뒤 사용 하는 것이 가장 큰 차이점 이고, 이 부분 때문에 도커를 사용한다고 해도 무방 하다.

예를 들어서 시스템이 16GB 메모리가 있다고 했을 때 Redis 와 같은 캐시 서버를 만들어서 구동 한다고 하자.

  • VM 경우
    1. 하나의 데이터 베이스 마다 4GB 의 가상 머신을 만든 뒤 Redis 서버 구축
    2. 총 4개의 데이터 베이스를 만들 수 있음.
    3. 하나의 가상 머신이 6GB 메모리가 필요 하다면 가상 메모리를 만들어 동작하게 됨.
  • Docker 경우
    1. 모든 자원은 공유를 함.
    2. 4개의 데이터 베이스를 만들었지만 즉시 16GB 를 사용 하는것이 아님.
    3. 하나의 데이터 베이스가 6GB 메모리를 사용 하고 있더라도 다른 시스템이 메모리를 적게 사용 한다면 가능 함.

즉 VM 의 경우 완전히 다른 컴퓨터를 만드는 것 이지만 Docker는 프로세서가 동작할 가상 환경을 만드는 것이다.

작업 분배

K 해커톤을 진행 하면서 프론트와 백엔드에 대하여 팀원 교육이 필요하여 개인별 아파치 웹 서버와 웹 페이지를 개발 할 공간이 필요하게 되었다. 그래서 Docker APM 과 VS Code Server 를 이용하여 하나의 개발 환경을 만들게 되었다. 이 때 Docker APM 으로 만들어진 dockerfile과 VS Code Server의 dockerfile을 합쳐 하나의 docker-compose 로 만들어 편리하게 사용 할 수 있게 하였다. 추가적으로 enviroment 파일을 만들어 container-name이 중복이 되면 안되므로 변경이 편리하게 하였다. 이렇게 하여 도커 작업을 모두 자동화 하였다.

작년 K 해커톤에서는 1개의 아파치 서버와 n개의 VS Code Server를 올려 여러명이 동시에 코드를 라이브로 편집을 하여 개발을 했었다. 그랬지만 동시에 코드를 편집을 하면서 코드를 수정과 삭제가 빈번히 일어나던 파일에서 항상 문제가 발생 하게 되면서 이번에는 개인용 서버를 1인당 1개씩 지급 하도록 한 뒤 깃으로 푸시를 하였을 때 라이브 서버에 적용이 되도록 하여 서버를 구축 할 예정이다. CI(Continuous Integration)를 통해 백엔드와 프론트단 유닛 테스트와 문법 검사를 진행 하고 CD(Continuous Delivery)를 통해 라이브 서버에 배포를 하는 형식으로 진행 하여 작년에 문제가 있었던 동시 편집에 대한 문제를 해결 할 예정이다.

시스템 구성

빌드 시스템 구성 예상

예상. 빌드 시스템 구성

개발자가 깃 서버에 푸시를 하게 되면 푸시 트리거(Web Hook)을 통해 쿠버네티스에 이벤트가 발생 하게 되고, 라이브 서버에 배포를 할 생각이다.

정리

이번 주에 쿠버네티스와 젠킨스에 대해서 공부를 추가적으로 해서 쿠버네티스와 젠킨스의 차이점과 어디서 쓰는지를 공부 해볼 생각이다. 얼핏 주워들은 내용으로는 젠킨스는 CI에 주로 이용이 되며, 쿠버네티스는 CD에 주로 이용이 된다고 들었으며, 쿠버네티스 안에서 젠킨스를 관리도 가능 하다고 들었다. 아직 까지는 도커에 대한 개념을 알고 마인크래프트 서버를 구축 할 때, 서버 파일을 도커로 만들어 PC에서 구동 하던것은 시놀로지에서 쉽게 돌려본 기억이 있다.(그렇지만 시놀로지 성능이 매우 느려 렉만 걸렸다…) 이번 대회에서 다양한 데이터 베이스 최적화 방법이나, CI/CD 쪽을 공부를 해볼 생각이다. 대회에서 백엔드 코드 작업은 PHP로 할 가능성이 매우 크지만 코드 작성 하는 부분과 완전 별개인 시스템 환경 구성은 자유롭게 해도 괜찮을 것이라 생각하기 때문이다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

Minimax 알고리즘 공부 및 내용 점검

Amazon Web Service에 대해 공부하다 알게 된 Cloud Service별 가상화 단계