Django API를 Go로 리팩토링하여 성능과 비용 절감!
by DD
8년 전
조회수 8
Django 기반 서비스의 Allocation API를 Go로 재구현하여 성능 향상을 시도함
Gin, go-redis, Gorm 등 Go 언어 기반의 다양한 라이브러리를 활용하여 서버 환경을 구축함
CPU 사용률 1/3 감소, 서버 인스턴스 비용 1/2.5 감소라는 긍정적인 결과를 얻음
Go 서버 아키텍처 설계
Go 언어는 패키지 레벨 순환 종속성을 허용하지 않아, 보다 명확한 구조 설계를 가능하게 한다. 구체적으로, Controller는 Service를 참조하고, Model은 Controller/Service/DTO를 참조하지 않도록 강제했다. 따라서, 코드 가독성과 유지보수성을 향상시켰다.
성능 개선을 위한 기술 선택
성능 향상을 위해 Gin 웹 서버, go-redis 캐시, Gorm ORM을 선택했다. Gin은 네트워크 성능, go-redis는 캐싱 성능, Gorm은 다양한 데이터베이스 지원을 고려했다. 반면, DynamoDB는 guregu/dynamo 라이브러리를 사용하여 코드 양을 줄이고 개발 편의성을 높였다.
Docker와 Nginx를 활용한 배포 전략
Go 서버와 Django 서버를 Docker 컨테이너로 묶어 관리하고, Nginx를 프록시로 활용하여 요청을 라우팅했다. 구체적으로, Nginx는 path를 기반으로 Go 서버 또는 Django 서버로 요청을 전달한다. 따라서, 서버 관리 비용 절감과 유연한 확장성을 확보했다.