학과 동아리방 서버 구축 및 설계
포스트
취소

학과 동아리방 서버 구축 및 설계

개요

동아리방에 있는 서버 컴퓨터를 관리 및 담당하게 되었고, 어디에 사용하면 좋을 지 생각을 많이 하게 되었다. 그래서 서버 컴퓨터를 하나로 묶고, 클러스터화 해서 AWS 처럼 클라우드 컴퓨팅 시스템을 구축 하고자 했다. 그래서 k8s와 sub-domain, cloudflare를 함께 이용 해서 동아리 방 서버를 어떻게 설계, 디자인을 할 지 설명한다. 추가적으로는 미래에 학과 동아리 서버를 새롭게 관리 하는 사람이 나왔을 때 설명을 하기 위한 문서이기도 하다.

간단한 Workflow

학교 동아리방에는 총 4개의 인터넷 선이 들어오고 있으며, 학과 동아리 컴퓨터, Wifi를 위해서 인터넷 2개가 할당이 되어 있고, 서버 쪽에 2개의 선이 할당을 하였다. 그리고 인터넷은 회선 하나 당 1Gbps가 들어오고 있지만 동아리방의 L3 스위치가 100Mbps 밖에 지원을 하지 않으므로 내부적인 스위치 수정이 필요하다. 그렇지만 서버 컴퓨터 쪽은 스위치 보다는 직접 선으로 받고, Teaming을 하거나, DNS 로드 밸런싱을 이용하는 쪽으로 고려 중이다.

Server
[Workflow]

위의 서버 동작을 간단하게 말로 표현을 한다면 아래와 같다.

  1. 사용자가 도메인을 입력 한다.
  2. 도메인에서 IP주소를 알기 위해서 DNS 서버에 접속 한다.
  3. DNS 서버에서 IP와 Port를 반환하는 SRV 레코드를 돌려 준다.
  4. 사용자는 SRV 레코드를 활용 해서 서버에 요청 한다.
  5. HAProxy나, Nginx와 같은 L4 로드 밸런싱 한다.
  6. 내부 서버 리소스를 활용이 가능하다.

그래서 실제 서버를 구축 하기 위해서 필요한 프로그램을 비교 분석을 하였고, 선택하게 된 이유를 설명한다.

Domain Name System (DNS) 서버

우선 간단하게 이야기를 하자면 DNS는 도메인을 IP주소로 변환을 해주는 시스템이다. 다양한 곳에서 서비스를 해주고 있으며, 특히 Cloudflare이나, 네이버 클라우드 DNS, 구글 DNS와 같이 다양한 곳에서 서비스를 해주고 있다. 학과 서버에 적용 하기 위해서 다양한 서비스를 고려 했었는데

  1. 직접 구축 할 것인가?
  2. Cloudflare 를 사용 할 것인가?
  3. NCloud의 DNS 서버를 사용 할 것 인가?
  4. 다른 외부 DNS 서버를 이용 할 것인가?

직접 구축은 한다면 쉽게 될 것이고, 유연성이 최고로 좋겠지만 가장 큰 문제가 하나 있다. 보안성, API 개발, 유지 보수, 관리 플랫폼 개발 등 다양한 문제가 있다. 비록 현재는 개발이 가능하고, 유지보수가 가능하겠지만, 미래에 새로운 사람이 서버 관리자를 맡게 된다면 엄청나게 많은 학습량과, 진입 장벽을 느낄지도 모른다.

가장 큰 문제는 학교에서 DNS 서버를 구축 하기 위해서 UDP 53번 포트와, ICMP 를 열어주지 않는다… 우선적으로 서버를 구축 한 뒤에 요청 하는 쪽으로 해야 하기 때문 이다.
젠장.. 학교가 외부망에서 내부망 통신은 TCP만 열어놓았어요 ㅠㅠ

그래서 추가적인 유지 보수에 편하고, API 개발도 따로 필요 없으며, 대쉬보드를 통해서 현재 서버의 상태 체크가 가능한 Cloudflare로 하게 되었다. 다른 제품군은 대부분 DNS 서버를 제공 하는 것 자체가 유료 서비스 이였던 문제가 있다. Cloudflare에서 느꼇던 단점 이라면 Load-Balancing을 할려면 한달에 5달러를 내야 한다는 부분이긴 하겠지만 굳이 DNS 로드 밸런싱이 아니라 L2, L3단에서 로드 밸런싱을 하는것도 가능하니 큰 문제는 아니였다. 실제로 서버를 운용하면서 2Gbps 이상의 대역폭을 필요로 하는 경우는 없겠지만 말이다.

DNS 서버에서 SRV 레코드로 제공

DNS 서버를 선택 하였다면 어떻게 L4 스위칭을 할 것인지 계획을 해야 했다. 가장 큰 가능성이 높은건 SRV 레코드로 서버에 접속 해서 포트 포워딩을 해주는 것이다. SRV 레코드에 대해서는 자세히 다루지는 않겠지만 tcp인지, udp인지 정보와 ip주소, port정보를 가지고 있는 전형적인 L3(IP 주소), L4(TCP, UDP, Port 정보) 정보 가지고 있다. 그래서 HAProxy나 Nginx를 활용 해서 포트 포워딩을 통할 수 있도록 제공 하면 된다. 해당 부분은 DNS 서버와 함께 자동화 기능을 제공 해야 한다.

아직 현재 까지는 HAProxy, Nginx, Apache, MQTT 등 다양한 로드밸런서가 존재 하지만 아직 어떤것을 사용하는것이 좋을지 고려 하고 있다. 아마 모니터링을 지원하고, 쉬운 API 형식으로 제공 하는 것으로 택하지 않을까 싶다.

내부 자원 리소스 관리

현재 결정한 내용으로는 kubernetes를 활용 해서 도커를 파일을 관리하는 것으로 목표로 두고 있다. 만약 리눅스가 필요 하다고 하면 리눅스 도커를 하나 올리고 돌려주는 형식으로 제공할 예정이다. 만약 레플리카가 필요하다고 하면 저장 공간을 같은 곳을 바라 보게 만들고 컴퓨팅 리소스를 추가 하는 형식으로 하는 방식으로 제공 한다. (AWS에서 S3와 EC2를 함께 사용 하듯이) 요약 하자면 결국엔 쿠버네티스를 활용 해서 자원 리소스를 관리 하고, 데이터를 모니터링, 관리, 상시 동작 하도록 할 것이다.

실제 데이터 흐름 요약

  1. 사용자가 userid.dongui-server.com 를 입력 하여 접속
  2. DNS 서버에서 userid.dongui-server.com 분석 한 뒤 SRV 레코드로 반환 함.
  3. 서버에서 SRV 레코드를 읽은 뒤 L4 로드밸런싱을 통해 실제 서버 리소스에 접근 하도록 함. (포트 포워딩)
  4. 포트 포워딩으로 서버에 접속

미래에 설치 및 이전 계획을 가지고 있는 프로젝트

  1. Git 서버
  2. http://ascode.org/
  3. 모니터링 도구
  4. https://play.google.com/store/apps/details?id=com.maptest.gomjae.maptest 서버
  5. 그 외 대회나 캡스톤 디자인으로 개발할 때 필요한 서버
  6. 만약 필요하다면 존재 할 CI/CD (테스팅 도구들)
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

DNS 서버의 SRV를 활용한 AWS-Like 서버 구축

동의대학교 봉사활동 안드로이드 어플 런칭