개발 팀이 편안한 환경에서 장기적인 성과를 낼 수 있도록 노력해왔습니다.
Development
- 가장 코드 양이 많은 JavaScript, Python을 중심으로 Convention 확립에 노력했습니다.
- JavaScript, TypeScript Node.js 프로젝트에 전역적으로 적용할 수 있는 ESLint Sharable Config 를 https://github.com/sehyun-hwang/eslint-config-nextlab 에서 오픈소스로 관리하고 있습니다.
- Python에서는 Type checking과 Linting을 동시에 구동하기 위해서 mypy를 Child process로 실행하는 pylint plugin을 제작한 적이 있으며, 최근에는 ruff linter와 black formatter를 사용하고 있습니다.
- 다양한 언어로 이루어진 Monorepo에 대한 Convention을 관리하기 위해서 MegaLinter 와 그것의 Github Action 을 도입했습니다.
Building
- 이미지 처리 등의 특수한 기능이 있는 컨테이너들에 대해서는 불필요한 컴파일러와 인터프리터를 제거하는 Multi-stage build 를 수행했습니다.
- alpine 기반의 컨테이너로 컨테이너의 이미지 크기를 줄여 빌드 시간 단축, 배포 속도 개선, 취약점 개선 등의 효과를 얻었습니다.
- 복수의 Dockerfile을 이용한 Container build, 빌드 캐시 관리 등 High-level build 기능을 구현해주는
buildx bake를 도입했습니다. - Makefile을 이용해 직접 별도로 컴파일해야 하는 C++ 프로젝트나 표준적이지 않은 프로젝트의 개발-빌드-테스트-배포 과정을 관리합니다.
- 빌드를 위한 인프라를 관리할 필요가 없고 동시에 작업을 병렬적으로 진행할 수 있는 Serverless CI를 추구합니다.
- AWS CodeBuild
- GitHub Action