상세 컨텐츠

본문 제목

[직무소개] 개발의 중심, 서버팀에 대해 소개합니다!

hand - Story

by 핸드스튜디오 2019. 9. 19. 17:19

본문

이번에는 핸드스튜디오 개발팀의 중심인 서버팀에서 하는 일에 대해 소개해드립니다!



핸드스튜디오 입사를 고민하는 분들이나, 핸드스튜디오에 대해 궁금하신 분들에게 도움이 되길 바랍니다. :)




핸드스튜디오 서버팀



안녕하세요,

핸드스튜디오 서버팀의 팀장을 맡고 있는 정진동입니다.

저희들이 하고 있는 일에 대해 소개하도록 하겠습니다.



Q. 서버팀에 대한 간략한 소개 부탁드립니다.


서버팀은 핸드스튜디오의 프로젝트 중, 서버가 필요한 모든 일을 진행합니다. 작게는 핸드스튜디오 봇 서버부터 모바일 앱의 백엔드, 웹 어플리케이션의 백엔드 등, 서버가 필요한 곳이면 어디든지 출동합니다! 


또, 개발팀 내의 DevOps 업무도 담당하고 있고요, 무언가 기술적인 삽질(?)이 필요한 것들에도 도움을 드리고 있습니다.


서버팀은 현재 총원 3명인 작은 팀인데요, 작은 팀인 만큼 회의는 언제 어디서나 비정기적으로 열립니다. 사무실에서 일하다가 의자를 돌리면 바로 회의 시작이예요. 빠른 회의와 빠른 의사결정이 장점이라고 생각합니다.


서버팀에서는 모든 경우에 가능한 것은 아니지만 언제나 새로운 기술을 프로젝트에 도입하려고 노력합니다. 외부 고객사 업무 외에도 사내에 다양한 토이 프로젝트를 진행하여 새로운 기술을 익힌 후, 외부 고객사 프로젝트에 적용하는 방식을 사용하고 있습니다.



Q. 업무 프로세스가 궁금합니다. 


“요구사항 추출 - 데이터 모델링 - 구현 - 배포" 크게 4단계로 정리 할 수 있을 것 같습니다.


단, 핸드스튜디오 개발팀은 Agile 개발 방법론을 지향하기 때문에 반드시 한 단계가 종료되어야 다음 단계로 이행하기 보다는 전 단계가 완료되지 않더라도 선행 연구 등으로 다음 단계를 진행하는 경우가 많습니다.


요구사항 추출 단계는 프로젝트의 비즈니스 로직을 기능 단위로 정의하는 단계입니다. 이 단계에서 기획팀과 논의하여 가능, 불가능한 기능을 따져보고 특별히 신경써야 할 (예를 들어 많은 부하가 예상되는 등..) 기능도 정리합니다.


데이터 모델링 단계에서는 기능들을 수행하는 데이터들을 모델로 만들고 모델들의 관계를 정의합니다. 이 단계에서 서버의 데이터를 받아야하는 웹페이지나 모바일 쪽과 논의하여 서버가 보내줄 데이터들이 어떤 것들이 와야 할지에 대해 결정합니다.


구현 단계에서는 앞서 정의한 기능과 데이터 모델을 가지고 사용할 데이터베이스들을 결정하고, 개발언어, 프레임워크, 라이브러리를 결정 한 후 실제 개발을 수행합니다. 요구사항은 변동 될 수 있으므로 기능들을 큰 단위로 추상화하여 세부 구현은 쉽게 바뀔수 있음을 상정하고 개발하려 노력합니다.


배포 단계에서는 개발환경/운영환경 등 타겟 서버들에 배포하고 필요한 경우 자동 배포 설정, 문제가 생겼을 때의 에러 리포팅 등의 인프라를 설정하여 서버가 안정적인 서비스를 가능하게 하고, 문제 발생시에 빠른 대처가 가능하도록 합니다.



Q. 서버팀의 개발환경이 궁금합니다.


IDE 제한은 없는 관계로 각자 선호하는 IDE를 쓰고 있습니다. 하지만 왠지 VS Code로 대동단결하는 분위기이긴 하네요.. (역시 갓-MS)


개발 언어는 javascript/node.js, java/spring framework, php 등 다양한 개발 언어와 프레임워크를 사용합니다. 딱히 가리는 언어는 없는것 같지만 최근 2년동안은 주력으로 node.js를 사용하고 있습니다. javascript는 역시 쓰면 쓸 수록 재미있는 언어라고 생각해요. 매력이 넘칩니다.


개발팀의 다른 팀과 마찬가지로 git과 bitbucket으로 형상관리를 하고 있습니다. 배포는 jenkins를 이용해 타겟 AWS EC2 인스턴스에 배포하는 방법을 사용하였는데, 최근에는 bitbucket pipelines를 사용해 빌드하고 Kubernetes cluster에 배포하는 방법으로 바꾸고 있습니다.





Q. 핸드스튜디오 서버 개발자로 힘든 점 & 보람찬 점


한마디로 프로젝트의 시작 부터 종료, 운영시까지 고민해야 할 것들이 많다는 것이라고 할 수 있겠습니다.


프로젝트 성격에 따라 다르겠지만, 예를들어 결제나 현금성 데이터를 다루는 경우를 생각해본다면, 비즈니스 로직이 정확해야 할 것이고, 장애가 발생하면 빠르게 인지할 수 있어야 하며, 장애가 발생하더라도 쉽게 데이터의 복구도 가능한 구조를 설계해야 할 것입니다. 거기다 서버 어플리케이션의 특성상 작성한 비즈니스 로직에 대해 많은 요청이 발생 할 수 있음을 고려해야 합니다.


결국 한정된 개발 시간 내에 적절한 선택과 타협으로 정확한 비즈니스 로직을 수행하면서도 좋은 성능을 뽑아내야 하며, 운영 이슈도 적게 발생하도록 개발해야 한다는 점이 쉽지 않은 점이라고 생각합니다.


하지만, 프로젝트 종료 후 운영 단계에서 좋은 결과가 나왔을 때는 그만큼 보람찬 일이기도 합니다.

오래 전에 개발했던 서버가 최근에 확인해 보니 별 문제없이 잘 돌아갈 때가 가장 뿌듯합니다.


Q. 업무에 필요한 전공이나 역량, 자질은 무엇인가요?


반드시 컴퓨터공학 계열 전공이실 필요는 없습니다. 하지만, 컴퓨터공학 관련 기본 지식이 있으면 정말 큰 도움이 될 것입니다. 컴퓨터공학에 대한 기본 지식이 있으면 경험해 보지 못한 상황에서도 직관으로 좋은 선택을 하는데 도움이 되기 때문입니다. 저는 아직도 학부 시절에 지나치듯 들었던 기본 지식들이 이렇게 활용된다는 것에 놀랄 때가 많습니다.


결국 서버개발자에게 요구되는 자질은 "요구사항에 대한 논리적인 데이터 구조와 물리적인 컴퓨팅의 한계, 사용할 수 있는 여러 방법들의 비용 및 장/단점을 을 연결지어 좋은 판단을 내릴수 있는 것” 이라고 생각합니다.


하지만 무엇보다도, 개발을 좋아하시는 분이라면 앞서 이야기한 난관을 잘 헤쳐나갈 수 있으리라 생각합니다. :)


관련글 더보기

댓글 영역