이 회사에 일한지도 벌써 6년. 처음 회사에 일을 시작했을때를 생각해보면 꽤 많은 기술적 변화가 있었다.
소스 관리
처음엔 SVN(Subversion)을 사용하고 있었는데 작은 팀내에서 사용하는데 큰 문제는 없었지만 빈번한 머지와 다양한 Feature 브랜치가 동시에 만들어지는 환경에는 적합하지 못했던 듯 하다. 얼마 지난지 않아 Git으로 모든 코드를 이전했고 BitBucket을 저장소로 사용했다. 현재는 클라우드로 이전하면서 모든 코드를 Azure DevOps repository로 이전했다. 확실히 Git을 사용하면서 Flexibility가 올라갔고 새로운 기능은 Feature branch에서 만들어져서 Dev 브랜치로 머지되고, 나중에 master로 옮긴후 Staging 과 Production 환경으로 배포되는 구성으로 운영중이다.
프로그램 배포
처음 팀에 합류했을때 배포는 Maunal방식이었는데 빌드된 파일을 Beyond Compare라는 파일 비교툴을 사용해서 서버에 카피하고 DB 는 SQL Data Compare 툴을 이용해서 변경된 것들만 추려서 따로 배포하는 방식이었다. 파일을 카피할때 누락되는 경우라든지 config 파일을 수작업을 업데이트 해야하는 부분이나 DB 배포시에도 배포할 항목을 빼먹지 않기위해 노력해야했다. 이미 이전 회사에서 젠킨스를 이용한 CI/CD 를 적용하고 있던터라 수작업 배포가 가장 불편했다. 이후에 직접 젠킨스를 설치하고 빌드서버를 갖춘후 One-Click 배포가 가능한 배포환경을 구축했다. 일단 변경된 코드가 master branch로 머지되고 나면 원클릭으로 각 환경에 배포할 수 있다는 점이 무엇보다는 좋았다. 배포관련 오류가능성을 대폭 줄여줄 뿐 아니라 배포가 쉬워졌다. 최근에는 Azure DevOps를 이용해서 CI/CD 환경을 재구축해 나가고 있다.
자체 서버에 젠킨스를 자체운영하는 경우에 구성에 따라서 flexibility가 떨어지기도 하고 보안 업데이트라든지 백업이라든지 빌드서버 관리가 부담스럽기도했다.
데이터베이스 배포
Database 변경배포는 가장 어려운 부분이었는데 중간에 자동화를 이룬 방식은 모든 DB 변경사항을 SQL query 로 만들어 코드리뷰와 소스코드관리를 거치도록하고 배포시에는 전체 SQL query를 실행시키는 방식으로 진행했다. 쿼리수가 점점 늘어났지만 배포시간으 그다시 많이 늘어나지는 않았다.
최근에는 메인 프로젝에서는 Entity Framework Code-First를 채택한 덕분에 데이터베이스 변경 배포시에는 Code-First의 DB Migration을 Console 앱으로 실행시켜서 진행한다. 이부분도 Azure DevOps에 추가되어 있어서 실제 배포시에는 원클릭으로 배포를 진행하고 있다.
개발툴 / 프레임웍
기본적으로 .Net 기반의 개발환경으로 초반에는 .Net Framework과 Ext.Js 를 이용한 앱. 그리고 ASP.Net MVC 5와 jQuery, Kendo UI를 활용한 앱이 있었다.
추후에 ASP.Net Core Web API앱이 추가되었고, Vue가 처음으로 채택되어 주력 Front-End 개발 프레임웍으로 이용되고 있다.
프로젝트 관리
처음부터 Jira와 Confluence를 이용해서 업무와 팀내 지식관리를 하고 있었지만 그 활용도가 다소 낮았는데 최근에는 Ticket Based 업무진행로 많이 변화되어 업무생성, 활당, 진행사항 관리, 타팀과와 회의에 적극적으로 활용되고 있다.
서버운용
초기에는 모든 앱들이 Data Center에서 운용되고 있었는데 점차 하나둘씩 앱들을 Azure Cloud에 올리고 있다. 최근 Vue + ASP.Net Web API 앱을 클라우드로 올렸고 올연말까지 나머지 앱을 클라우드로 옮겨서 사내 주요앱은 모두 클라우드에 올라가게 될 것이다.
초기 클라우드 이전시 비용최적화와 관련해서 많은 Tip들을 배워가고 있는 중이다. App Service와 Database Service를 주로 이용하고 있는데 의외로 모아보니 전체비용이 상당하다.
비용효율적인 Storage, Cosmos DB 등을 좀더 활용할 아이디어를 찾아볼 계획이다.
노코드, 로코드
빠른 기능구현을 위해 Nintex의 K2 Workflow를 도입해서 10여개의 중/소 규모 앱을 구현했다. 노코드라지만 의외로 러닝커브가 있고 결국 DB Access는 Stored Procedure를 통해서 이뤄지는 경우가 많아 시간이 지날수록 전체 시스템이 복잡해지는 것을 피하기기 어려웠다.
표준화된 UI와 드래그앤 드랍 workflow덕분에 빠른 구현이 가능한 것은 사실이지만 요구사항이 너무 복잡하지 않은 경우에 주로 사용하는 편이 맞는 것 같다.