오픈소스 개발 스터디 모임 시작
20대 시절 해킹대회 운영 솔루션 개발을 진행하면서 늘 마음속에 품고 있었던 오픈소스 프로젝트를 드디어 시작하였습니다.
당시에도 오픈소스 사이트를 구성해서 배포 준비까지 마쳤지만, 군 입대 등으로 결국 진행하지 못했는데 늦었지만 이번에는 제대로 시작해 보고자 합니다.
오픈소스라는 것이 혼자만 해서는 의미가 없고 마음 맞는 분들과 함께하는 것이 의미가 있기 때문에 함께 개발할 분들도 모셨습니다.
주제는 '라라벨 기반 이커머스 솔루션' 입니다.
무료로 사용할 수 있는 이커머스 솔루션은 영카트, 고도몰 등 이미 시장에 많이 나와 있습니다. 하지만 대부분 낡은 레거시 코드에 기반하고 있습니다.
창업 초창기에는 이런 솔루션이 운영에 큰 도움이 되지만, 비즈니스가 성장하며 새로운 기능을 추가하고 인프라도 확장해야 할 때 기술부채가 발목을 잡는 경우가 많습니다.
PHP 오픈소스라는 장점을 살리면서도 기술부채가 적은 솔루션이 있으면 좋지 않을까라는 고민 끝에 시작한 프로젝트입니다.
라라벨은 아시다시피 PHP 생태계에서 가장 모던한 프레임워크입니다.
의존성 주입, IoC 컨테이너, MVC 패러다임 등 최신 개발 기법과 기능이 두루 적용되어 있기 때문에 이런 기능과 설계원칙을 잘 활용하여 개발을 진행한다면 확장성있는 솔루션을 개발하는데 큰 도움이 될 것입니다.
사족이지만, 얼마전에 새로운 회사로 이직을 하게 되었습니다.
새로운 회사는 5시에 업무가 끝나고 연차 사용이 자유롭기 때문에 업무 외 자기계발을 하기 좋은 환경이 되었습니다.
남은 시간 활용을 잘 하여 프로젝트를 성공적으로 마무리할 수 있기를 기대합니다.
회사생활을 마무리하며.
조만간 현 직장에서 퇴직을 할 예정입니다.
퇴직은 작년 말부터 계획하고 있었는데, 인수인계나 여러가지 마무리 할 부분들이 있어서 최종 퇴직까지는 꽤 많은 시간이 걸렸던것 같네요.
2019년 2월 현 직장에서 개발자로 채용이 되어 현재까지 4년이 넘는 기간 동안 근무하였습니다.
제가 갑작스럽게 회사를 떠나게 되면, 서비스 장애가 생기지는 않을까... 이런 저런 부분에서 펑크가 나지는 않을까...
여러모로 걱정이 되었지만, 회사가 사람 한 두명 없다고 안 굴러가는 것도 아니고 처음 입사할 당시보다 개발과 운영 프로세스를 개선하며 여러 부분에서 체질 개선이 이루어졌기 때문에 큰 문제는 없을 것이라고 생각합니다.
(벌려 놓은 일이 많다 보니 퇴사 하고 나서도 한 동안은 연락을 받아야 할 것 같습니다)
처음 입사할 당시가 생각나네요.
당시 회사에는 제대로 된 개발 프로세스와 운영 시스템이 전혀 갖추어지지 않았습니다.
모든 서비스가 운영환경만 있는 상태에서 레거시 코드를 분석하며 각종 오류수정과 장애대응, 기능개발을 동시에 수행해야 하는 구조였습니다.
당시 충분한 역량이 없었던 저에게는 굉장히 어려운 일이 될 것이라는 생각이 들었고, '이대로 추노할까?' 라는 고민도 잠시 했었습니다.
그럼에도 회사의 서비스는 지속적으로 성장 중이었고 이용자와 트래픽도 제법 높은 편이었기 때문에 나름대로 현 상황을 이겨내면 좋은 경험이 될 것이라고 생각했습니다.
처음에는 회사의 시스템을 이해하려고 노력했습니다. 자랑은 아니지만 야근도 많이 했었고 주말에도 일을 했었습니다.
레거시 구조에서 발생하는 다양한 오류를 찾아서 수정하며 장애모니터링 시스템의 필요성을 절감하였고, 각종 시스템 오류나 지표의 변동이 있을 때마다 이를 개발자가 인지할 수 있는 시스템이 있으면 좋겠다는 생각이 들었습니다.
하여, 시스템 오류나 서비스 부하가 있을 때마다 이를 메신저로 알려주는 시스템을 추가하였습니다.
또한, 시스템에서 발생하는 모든 이벤트에 로깅 시스템을 구성하여 이벤트 발생 이력을 남기고 추적할 수 있는 기능을 만들었습니다.
(예를 들면 판매자가 배송비 정책을 변경하거나 고객이 회원정보를 변경하는 등의 행위)
서비스 이용자들이 본인이 잘못해놓고 서비스 장애가 있다고 주장하는 경우가 왕왕 있었는데요, 누가, 언제 어떤 이벤트를 발생시켰는지 명확하게 추적이 되기 때문에 서비스 운영에도 큰 도움이 되었습니다.
위기도 한 차례 찾아왔었는데요, 실수로 서비스 장애를 일으켰던 사건입니다.
창을 여러개 띄워놓고 테스트용 테이블을 생성하여 기능개발을 진행하고 있던 와중에, 개발용 테이블과 실제 테이블을 헷갈려 실제 테이블을 삭제해 버린 것이었습니다.
장애를 일으킬 당시에 큰 패닉을 겪었지만 정신을 차리고 대표님께 보고드린 후 전체 서비스를 내려서 데이터 정합성이 깨지지 않도록 조치하였습니다.
이전에 엑스플랜트 개발을 담당하셨던 분께 신속하게 연락을 드렸고, 그 분은 직전 백업에서 삭제된 테이블을 추출하여 복구하는 작업을,
저는 mysql binary log에서 백업 이후에 유입된 데이터들을 추출하여 복구하는 작업을 맡았습니다.
어찌어찌 해서 수습이 마무리 되었고, 이후 재발방지를 위해 개발환경과 운영환경을 완전히 분리하고, 모든 개발작업은 개발 환경에서만 이루어 질 수 있도록 시스템과 프로세스를 갖추었습니다.
개발자가 이용하는 SQL 클라이언트도 auto commit 설정을 수동으로 변경하고, 연결별 색상을 달리하는 등의 조치를 하여 더 이상 실수가 발생하지 않도록 설정하였습니다.
작업 후 소스를 배포하는 방식도 수동 배포 방식이었는데요, 이 부분도 Jenkins를 통해 자동으로 배포될 수 있도록 시스템을 갖추었습니다.
Jenkins 설정이 까다로워서 애를 먹었지만 열심히 구글링을 하며 하나씩 셋팅하였고, 팀내 배포 프로세스로 안착시키는데 성공하였습니다.
개발자는 더 이상 배포로 스트레스 받지 않고 개발 업무에 집중할 수 있게 되었습니다.
회사에서 이룬 가장 큰 성과는 라라벨 프레임워크를 도입하여 좀 더 모던한 형태로 서비스 개발이 가능해졌다는 부분입니다.
이미 회사의 서비스는 레거시로 운영이 되고 있었기 때문에 모든 부분을 모던 프레임워크로 변경하기는 어려운 상황이었습니다.
레거시를 유지하면서 모던 프레임워크를 연동하여 양쪽 모두 운영이 가능한 방법을 찾아야만 했었고, 레거시 인증(세션)과 라라벨 인증을 연동하는 드라이버와 서비스 프로바이더를 구성하였습니다.
기존에 이미 추가되어 있던 스키마도 라라벨 엘로퀀트 기반으로 엑세스가 가능하도록 모델도 추가하였고,
노력 끝에 모던 프레임워크를 개발 할 수 있는 환경도 갖추게 되었습니다.
회사의 보안과 관련된 부분이라 어떤 기능이 라라벨로 개발되었는지 상세히 밝힐 수는 없지만, 라라벨의 설계 원칙과 다양한 기능을 활용한 개발이 가능해졌기에 개발자는 회사 업무를 통해 성장을 도모할 수 있고, 이용자들에게도 품질 높은 서비스를 제공할 수 있게 되었습니다.
이렇게 개선한 프로세스와 개발환경에서 개발이 이루어질 수 있도록 새로 합류하신 분께도 인수인계를 해드렸는데요,
다행히 제가 구성한 프로세스와 환경을 정확히 이해하고 따라주셔서 그 분께도 감사하게 생각하고 있습니다.
회사에서 이룬 여러가지 성과들이 아쉽긴 하지만 퇴사를 결정하게 된 이유는 아래와 같습니다.
ChatGPT의 등장으로 AI 시대가 도래하였고, 점차 개개인이 가진 능력은 퇴색될 것입니다.
이제 AI가 직원 대신 사업계획서나 제안서를 쓰고, 서비스 개발도 대신할 날이 올 것입니다. 결국 모두가 1인 기업가가 되어야 하고, 그렇지 못하면 살아남기 어려울 것인데 개발자에게 요구되는 능력은 기획력입니다.
자신만의 사업을 구상하고 서비스를 기획하여 성공시키기 위해서는 다양한 경험을 통해 인사이트를 축적하는 것이 필요합니다.
한 살이라도 어릴 때 많은 경험을 축적하는 것이 절실하다고 생각하고, 현실에 안주하기 보다는 새로운 도전이 필요할 때라고 생각합니다.
2022년 회고
오랜만에 블로그에 포스팅을 하는것 같네요.
매월 납부하는 AWS 비용이 아까워서라도 글을 쓰고자 마음먹었습니다.
서비스 고도화
2022년에도 회사 서비스의 많은 부분 개선이 있었습니다.
기존 영카트로 운영되고 있던 낡은 상품관리자를 라라벨로 완전히 교체하였습니다.
가장 눈에 띄는 부분은 서비스에 '큐(Queue)' 시스템을 도입했다는 것인데요,
큐란, 특정 작업을 원하는 타이밍에 백그라운드로 처리할 수 있는 기능입니다.
기존 레거시 시스템에서는 비동기 작업을 처리할 때 크론탭이라는 원시적인 방법을 사용하여 대기열에 작업이 쌓이면 처리 속도가 늦어지거나, 작업이 끝날 때 까지 애플리케이션 작동이 멈추는 치명적인 단점이 있었는데요,
이번 큐 도입으로 인해 사용자에게 보다 빠른 서비스를 제공할 수 있게 되었습니다.
특히, 상품등록 시 업로드한 이미지와 동영상을 처리하는 부분에 큐를 적용함으로서 입점사 사장님들께서 보다 빠르게 상품을 등록하고 본연의 업무에 집중할 수 있게 되었습니다.
이외에도 해외수출을 위한 해외배송비 정책 설정기능과 본인인증시스템을 라라벨로 개발하였고, Event & Listener도 도입하여 기능간의 결합도를 낮추는 작업도 함께 진행하였습니다.
(보안상 밝히기는 어렵지만, 그 외에도 많은 부분이 모던하게 바뀌었습니다.)
이렇게 환경을 갖추어 둔 덕분인지 작년 말에 팀에 새로 합류한 주니어분도 자연스럽게 라라벨 기반에서 기능개발을 진행하고 계시답니다. (뿌듯)
배포자동화 시스템 도입
기존에는 작업한 코드를 실 서비스에 배포할 때 FTP 업로드 방식을 사용하였습니다. (매우 낡은 방식)
이렇게 배포하다보니 배포 도중 실수가 발생하기도 하고, 배포가 제대로 되었는지도 확실하지 않고, 불필요한 파일들이 정리되지 않는 등 여러가지 이슈가 발생하였습니다.
개발자가 배포하는데 귀한 시간을 낭비하여 (개발자 시급이 얼만데!) 기능 개발에 집중하지 못해 업무 효율성이 떨어지는 문제도 발생했습니다.
이를 개선하고자 코드 배포시 Jenkins라는 CI/CD 툴을 도입하였고, Git에 merge만 되면 이를 Jenkins가 감지하여 자동으로 변경된 부분만을 서버에 반영하도록 구성하였습니다.
이제 저희팀 개발자는 더 이상 코드 배포에 스트레스 받지 않고 온전히 본연의 기능 구현에만 집중할 수 있게 되었습니다.
간편결제시스템 도입
드디어 회사 서비스에도 카카오페이, 네이버페이, 페이팔 결제를 지원하게 되었습니다.
간편결제가 시장에 활성화된지 꽤 오랜시간이 지났지만 뒤늦게나마 간편결제를 지원하게 되어 다행이라고 생각합니다.
또한, 해외 고객에게도 기존의 불편한 신용카드 결제 방식이 아닌 페이팔 결제를 지원하게 됨으로서, 해외 매출 향상에도 큰 기여를 할 수 있게 되었습니다. (페이팔 결제연동은 저희팀 주니어분이 고생해주셨습니다)
뿐만 아니라, 타사에서 지원하는 '브랜드페이'를 지원하게 되었다는 점인데요,
쿠팡이나 배달의민족 앱에서 카드를 등록하기만 하면 클릭 한번에 자동결제가 이루어지는 것처럼,
회사 서비스에도 자체 페이를 지원하게 되었습니다.
(이부분도 저희팀 에이스인 주니어님이 멋지게 연동해주셨습니다)
이외에도 많은 기능을 개발하고, 개선하였습니다.
2023년 올해에도 파이팅 넘치는 한해가 되기를 소망합니다.
Recent Comments