00년생 4년 차 개발자의 때 늦은 첫 회고

고등학교를 졸업하자마자 사회 초년생이 된 00년생 개발자의 이야기를 해보려고 합니다. 입사 직전부터 지금까지의 내용이 담겨 내용이 길 수 있습니다. 😪
2018 - 19살 막바지 고딩 시절
첫 입사 바로 전 이야기
기능대회
IT 특성화고를 다니며 기능대회를 준비하는 기능반에 속해 있었습니다. 다들 기능대회가 뭐냐고 되물으시는데...
기능경기대회
- 정식 명칭은 기능올림픽이다.
- 기능경기대회는 특성화고등학교의 수능이며 축제라고 할 수 있다.
- 지방대회 - 전국대회 - 국가대표 선발전 - 세계대회 등의 과정이 있다.
- 지방대회는 4월에 개최된다.
- 전국대회는 9월/10월 중에 개최된다.
- 세계대회는 2년에 한 번씩 개최된다. 세계대회 입상 혜택은 다음과 같다. 올림픽 입상 혜택과 동일하다고 보면 된다.
- 병역대체복무
- 신축 아파트 분양권 획득
- 대기업 연봉급 상금
- 대학 진학 시 학비 전액 지원
- 연금
- 자세한 내용은 마이스터넷 참고
학창 시절 가장 불탔고, 추억도 많고, 개발자로서 일을 할 수 있게 해준 대회였습니다.
제가 참가한 웹 개발 부문 대회 내용으로는 간단히 아래와 같습니다. 2018년도 과제 기준
A-Module(Design): 그래픽 응용프로그램(포토샵)을 사용하여 웹사이트 구조 및 구성요소를 디자인한다.B-Module(Publishing): 최신 HTML 및 CSS 코딩 기술을 사용하여 웹페이지를 퍼블리싱한다.- 애니메이션 효과 추가 - JavaScript 사용 x
C-Module(Client-side Development): JavaScript와 같은 클라이언트 측 코딩 기술을 사용하여 웹사이트의 상호작용 및 효과를 구현한다.- 회원 기능 구현 - Server 사용 x
- 이미지 드래그&드롭 업로드 + 슬라이드
- 스크롤 애니메이션
D-Module(Server-side Development): 데이터베이스를 설계 및 구축하고, 웹 서버 코딩 기술을 활용하여 웹서비스가 가능한 웹사이트를 구축한다- PHP + phpmyadmin + MySQL & DB 설계
- 물류 배송 시스템 기능 (관리자 POS, 물류 배송 신청, 물류 배송 추적, 지입차량주POS 등등…)
과제별로 3시간의 시간이 주어지며 총 12시간 동안 디자인, 퍼블리싱, 클라이언트 개발, 서버 개발을 모두 끝내야 하는 종목이었습니다. 심지어 검색도 못 하고 100% 하드코딩이었습니다… 양 미쳤어요 진짜;
어쨌든 9 to 9 으로 주말에도 학교에 나가고, 대회 직전에는 수업 시간도 빠지며 약 1년에 걸쳐 준비한 결과 나름 뿌듯한 성과를 거둘 수 있었습니다.
서울 지방기능경기대회 - 은메달
제53회 전국기능경기대회 - 은메달
- Client: Javascript - Vanilla JS, JQuery
- Server: PHP
- Publishing: HTML, CSS - 외주 경험 다수
당시 저의 기술 스택은 위와 같았습니다. 최신 기술에 비하면 상당히 오래전 유행했던 기술들의 조합이죠.
회의감이 들었었지만, 지금 와서는 덕분에 기초가 탄탄해질 수 있었습니다.
아무튼 2018년 10월 대회&수상식을 마친 저는 여수에서 돌아오자마자 첫 출근을 하게 됩니다. (!?)
첫 입사 그리고 C#…?
당시 저는 특성화고 병역특례업체 3자 협약을 통해 이미 취업이 확정된 상황이었고, 졸업을 하기 전 회사로 첫 출근을 하게 됩니다!!
취업이 확정될 당시에는 어느 팀에서 근무할지 정해지지 않았으며, 첫 출근 후에야 어느 한 팀에서 저를 데려가기로 결정이 되었죠.
그런데… 이 팀에서 사용하는 주 기술 스택은 제가 바랐던 기술 스택과는 약간 거리가 있었습니다.
입사 전 독학으로 React 와 Node.js 를 공부하며, JS 관련된 개발을 하길 원했는데 말이죠.
10년 전 개발된 솔루션으로, 그 당시 유행했던 기술 스택을 아직 사용 중
- Client: C#, 일부 웹 영역은 JQuery
- Server: PHP (4버전..)
그래도 아직 성인도 되지 않은 저에겐, 현장에서 배우며 일을 할 수 있는 기회 자체가 흔치 않다고 생각을 했기에 무작정 열심히 해보자!! 라는 마음을 먹게 됩니다. (어차피 산업기능요원이라 6개월 후에 이직이 가능합니다 😅)
2019 - 따끈따끈 20살 사회 초년생
입사 직후 1년간 이야기
C#, PHP 까짓거 한번 해보자
저희 팀은 특이하게 백엔드(Server), 프론트(Client) 이런 식으로 업무가 나뉘지 않으며, 저는 엔진이라는 영역을 담당하게 됩니다.
💡 엔진이란?
저희 회사 내에서만 사용하는 명칭으로, 사용자가 쇼핑몰에서 상품 등록, 주문 수집 등 상품 판매를 위해 취하는 일련의 행동들을 HTTP 통신을 통해 그대로 구현한 모듈입니다.
쇼핑몰의 기능을 HTTP 통신을 통해 그대로 구현하다 보니, 이미 연동한 쇼핑몰에서 사용하는 방식이 바뀌면 저희도 발맞춰 변경을 해줘야 했죠.
이는 저희 팀이 유지보수팀 으로 구성된 가장 큰 이유였습니다.
레거시 솔루션의 유지보수팀으로 일을 하다 보니, 팀원들은 업무를 달가워하지 않았고요.
- 잘 사용하지 않는 기술 스택 (커리어 문제)
- 좋지 못한 대우 (누구나 할 수 있다는 사내 인식)
그렇지만 저는 개인적으로 얻을 수 있는 것들도 많았다고 생각합니다.
- 개발 관련
- [API / 스크랩핑] 을 통한 Client - Server 간 다양한 통신 방법, 데이터 가공 경험
- 소스 분석력 - 수많은 개발자가 손댄 10년 넘은 솔루션
- 약 6,000개의 유료 업체를 위한 서비스 개발&유지보수
- 커뮤니케이션 관련
- API 제휴사 간 직접 메일을 통한 소통
- 기술지원팀과의 비 개발적인 언어 소통, 고객 대응
- E-Commerce에 대한 전반적인 이해
개발 언어의 특성보다는 모든 언어에 공통으로 해당하는 통신에 관련된 다양한 경험을 할 수 있었고, 많은 유료 사용자들을 위한 서비스를 직접 배포, 운영하다 보니 다양한 문제들과 이를 해결하는 경험 들도 많이 할 수 있었죠. 또 외부의 요인에도 문제가 없게끔 발생할 일들을 미리 생각하는 게 기본 베이스가 되었습니다.
커뮤니케이션 부분도 다양한 쇼핑몰의 API 담당자들과 소통을 경험할 수 있고, 개발적인 확인이 필요한 경우 기술지원팀과 소통도 수없이 하고, 설치 프로그램이기 때문에 사용자 PC에 따라 환경이 달라 유선 연결, 원격을 통해 고객 응대를 할 기회도 있었습니다.
다시 생각해 보면, 개발을 잘하는 방법 에서는 조금 뒤처졌을지 몰라도, 일을 잘 하는 방법에서는 얻을 수 있는게 매우 많았다고 생각합니다.
첫 풋살~
2020 - 벌써 왕고, 그리고 신규 개발
입사 후 1년이 지난 이야기
새로운 사람들
10명 초반대였던 우리 팀은… 많은 퇴사자와 신규 입사자를 통해 그 수를 유지하게 되는데요, 그렇게 왕고(?)가 된 저는 새로 입사한 팀원분들의 사수를 맡게 됩니다.
사수라고 특별한 건 없고, 그저 회사 생활과 업무에 적응할 수 있도록 도맡아 도와주게 되죠.
어쨌건 올해 저의 업무는 유지보수보다는 새로운 팀원분들의 관리와 새로운 개발 건들을 하나씩 맡아 개발할 기회를 얻게 됩니다.
React, Node.js 도입
개발은 주로 사내 관련된 기능들을 먼저 개발하게 되었고, 기존 PHP, JQuery 조합의 웹 기술 스택에서 React, Node.js 의 조합으로 개발하게 됩니다.
이 기술 스택을 선택한 이유는...
- Client: React
- 사람 뽑기 어려우니 가장 대중적인 프레임워크
- JQuery 또 안쓸 거니까…
- Server: Node.js
- Client 영역과 동일한 언어
- 무거운 처리가 없는 서비스라 이벤트 기반 싱글 스레드인 Node.js 적합
- JS 개발 생태계
- 팀원들의 니즈
여러 이유 중 사실 팀원들의 니즈가 영향이 가장 큰 것 같습니다. (저의 니즈도… 하하)
그렇게 저희팀은 React 와 Node.js 를 적극적으로 도입하기 시작했습니다.
쿠팡 상품 이전 웹 서비스 (!?)
새로운 기술 스택을 통해 사내 개발을 하던 도중, 팀장님께선 좋은 경험이 될 거라며 새로운 서비스를 직접 구조부터 모두 개발해보라고 기회를 주셨습니다.
그런데 이게 웬걸… 그 서비스는 쿠팡팀과의 협업을 통해 개발한 후 우리측에서 운영하는 서비스를 쿠팡에 제공하는 형태였습니다. (ㄴㅇㄱ)
개발 규모가 큰 건 아니였지만, 우리 회사를 대표한다는 점과 그 고객이 쿠팡이라는 점, 또 사용자를 대상으로 하는 신규 개발을 처음 한다는 점에서 중압감이 상당했죠…
💡 쿠팡 상품 이전 웹 서비스란?
타 마켓에서 판매 중인 상품을 쿠팡 Wing 에 간편하게 이전할 수 있는 서비스입니다.
주 타겟 셀러는 스마트스토어(국내 최다 판매자 보유 자사몰)에서 상품을 팔고 있는 소상공인들이며, 쿠팡 입점에 대한 진입장벽을 낮추는 데 중점을 두고 있습니다.
쿠팡 Wing 캡처
관련 검색
그래서 이 프로젝트를 진행할 당시 저의 중점은 이러했습니다.
- 개발 일정을 반드시 맞출 것
- 서비스 장애가 발생하지 않도록, 발생해도 문제가 없도록 고가용성이 유지될 것
- 쿠팡팀과 커뮤니케이션을 잘할 것
일정은 나와 팀의 이미지, 외부와의 일정이라면 회사의 이미지기 때문에 가장 중요했고, 서비스가 고가용성을 유지하는 것은 당연한 일이었습니다.
(계약금을 먼저 받았기 때문에, 장애 발생 시간 별로 환불을 해줘야 했거든요…)
또 메일과 화상미팅, 비상 연락망 모두 담당했기 때문에 커뮤니케이션 또한 당연히 잘 챙겼어야 했습니다.
고가용성 아키텍처 - 메시징 시스템을 이용한 비동기 요청
이 부분은 정말 고민이 많았습니다. 타 마켓에 있는 정보를 수집, 가공한 뒤 쿠팡에 전달하는 과정은 간단하지만 시간이 오래 걸렸기 때문이죠.
그래서 저희는 사용자가 기다리지 않도록 비동기 통신으로 작업이 진행 돼야 했고, 가장 시간이 오래 걸리는 영역에서 오류가 발생해도 장애가 전파되면 안 되었죠. 또 갑자기 트래픽이 몰렸을 경우도 생각해야 했습니다. (쿠팡이니까.. 예상이 전혀 되지 않았습니다..)
고민 끝에 서비스를 분리하고, 메시징 시스템을 이용해 통신을 하도록 구조를 설계하게 됩니다. 위에서 말했던 고민을 모두 해결할 수 있었거든요.
- 비동기 처리
- 분리된 서비스 간 장애 격리
- 데이터 유실 방지
- 동시 실행 작업 제한
AWS SQS 를 통해서 처리할 작업을 쌓아두고, 이 큐를 처리하는 서비스는 자신이 수행할 수 있는 만큼만 가져가 실행하는 방식이었어요. 이러면 트래픽이 몰려도 시간이 조금 걸릴 뿐 순차적으로 처리가 가능하며, 장애가 발생하더라도 큐를 쌓는 서비스는 실행 중이니 사용자는 장애가 발생한지 알 수가 없었죠.
(물론 설계 했던 대로 딱딱 되진 않고, 여러 가지 시행착오가 많았습니다…)
커뮤니케이션
아키텍처를 설계하는 것도 엄청난 경험이었지만, 쿠팡 팀과의 커뮤니케이션도 엄청난 경험이었습니다.
쿠팡팀은 한국어를 할 줄 아시는 PO 분과 외국인 개발자 여럿이서 이 서비스를 담당했었는데요, 화상 미팅 시 영어로 대화하고... 그걸 실시간으로 통역사분이 통역해주시는… 그런 식으로 진행이 됐습니다.
메일도 전송하면 통역사분들이 번역하여 재전달하는 식으로 진행되었는데요, 그래서 번역이 좀 잘 될 만한 쉬운 한국말들, 그리고 요점을 정확히 하려고 노력했던 것 같습니다.
후에 생각이 들었을 땐, 쿠팡팀은 정말 서비스를 사용하는 셀러 입장에서 생각을 정말 많이 하고, 또 이 서비스를 성공시키기 위해 여러 방면에서 다양하게 생각한다는 점을 직접 느꼈던 것 같습니다. (Respect…)

2021 - 유지보수와 리팩토링
쿠팡 상품 이전 웹서비스를 개발하고 이제 막 오픈 한 다음의 이야기
개발만 하면 되는게 아니었다
어찌저찌 개발을 완료한 저희는 내부 테스트를 통해 수많은 오류를 잡아내고... 드디어 쿠팡 Wing의 특정 사용자들만 베타 오픈을 하게 되었습니다.
그런데 시작부터 난관에 부닥쳤습니다. 어떤 셀러가 언제, 그리고 어떤 상품을 이전 했는지 고객 문의를 응대하는 부서에선 알 방법이 없었죠… (개발자들만 DB 조회로 알 수 있었습니다)
이는 쿠팡팀 또한 마찬가지였습니다. 쿠팡 Wing 에서 해당 기능을 제공하기 때문에, 고객 문의는 저희 측과 쿠팡 골고루 인입되었거든요.
그렇게 고객들의 문의 사항을 직접 확인하여 처리하고… 쿠팡 슬랙 채널에 들어가 고객 응대 부서와 소통을 직접 하는… 최악의 상황이 와버립니다.
한시라도 빨리 이 상황을 탈출하기 위해서는 고객 응대 부서에서 사용할 수 있는 어드민을 개발해야 했습니다.
무사히 탈출 후 쿠팡 슬랙 채널은 더 이상 들어가지 않게 되었습니다.
새로운 제휴사
그렇게 부랴부랴 어드민 개발 후 유지보수를 하며 서비스가 안정화될 때쯤, 다른 쇼핑몰들도 똑같은 모델로 서비스 개발 요청이 들어오게 되었습니다.
이 서비스는 쿠팡 전용이라고 생각했기에, 다른 제휴사에도 제공을 할려면 공수가 많이 필요한 상황인데요, 이 기회에 불편했던 개발환경도 개선하기 위해 공통화를 진행하게 됩니다.
상품 이전 웹 서비스 공통화 & 리팩토링
저희가 계획한 공통화 & 리팩토링 작업은 다음과 같습니다.
- TypeScript 도입
- Node.js → NestJS 도입
- TypeORM 도입
- 비즈니스 로직 공통화
첫 개발 당시 익숙하지 않다는 핑계로 TypeScript 를 도입하지 않았고, 이후 유지보수 할 때 가장 먼저 생각이 났습니다.
NestJS는 사내 스터디를 통해 계속 공부하고 있었고, 여러 사내 서비스에 도입한 뒤 굉장히 만족하여 리팩토링에 포함하였습니다. 주니어 개발자로 가득한 우리는 자유로운 개발 구조보다 규격화된 구조를 가지는 프레임워크가 절실한 상황이었거든요.
ORM 은 고민이 많았습니다. 객체와 DB 를 연결해주기 때문에 개발적인 부분에선 장점을 가져올 수 있지만, 서비스 측면에서는 성능 문제가 있다는 얘기가 많았거든요.
그래도 이 서비스는 복잡한 쿼리가 딱히 없고, DB 관련된 작업이 그렇게 많지는 않기 때문에, 저희는 직접 한번 경험해 보자는 결단을 내리게 되었습니다.
그렇게 공통화 & 리팩토링 후 위메프, 11번가 대상으로 서비스를 제공하게 되었습니다.
크로스핏
저만 그런지 모르겠지만 갑자기 유튜브 알고리즘으로 크로스핏이 눈에 띄기 시작했습니다. 이 시기에 크로스핏으로 활동하는 유튜버 혹은 체험 영상들이 많이 올라오기도 했고요. 아님말구
나름 맨몸 운동(푸쉬업, 풀업)을 어느 정도 할 줄 알기 때문에 한 번 해보자! 라는 마인드로 자신만만하게 다니기 시작했습니다.
그런데... 전 지금까지 운동을 한게 아니었나 봅니다… 갈 수만 있다면 일주일 내내 갈 수 있지만, 온몸에 근육통으로 시달린 저는 일주일에 2번..? 많으면 3번이 최대였습니다…
그래도 2021년도에 시작한 크로스핏은 아직도 꾸준히 다니고 있습니다. 사실 요즘 제 삶의 낙 중 하나인 것 같아요. 지금은 크로스핏을 가기 위해 컨디션을 조절하고 있네요. 하하…
밴드지만.. 이젠 머슬업도 가능..!
2022 - 익숙해진 환경
회사 생활은 익숙해져 버렸고, 취미 생활은 늘어만 가는데…
AWS 자격증
신규 개발, 리팩토링 등을 어느 정도 마무리한 후 해당 서비스의 유지보수를 주 업무로 지내고 있었습니다. 그러던 중 AWS 자격증 취득을 팀원에게 권유받게 되었는데요
자격증 종류는 전반적인 AWS 의 기능들을 골고루 사용하며, 가장 대중적으로 인기가 많은 AWS Certified Solutions Architect - Associate 자격증이었습니다.
저희 회사도 온프레미스 환경에서 클라우드 환경으로 많이 이전되었기 때문에, 대부분의 서비스는 AWS 를 활용한 클라우드 기반으로 제공하고 있었고요.
그렇게 새로운 목표에 자극을 받고 AWS 자격증을 준비하여 상반기에 자격증을 취득하게 됩니다.

수영
팀원 중 친한 형과 함께 수영을 시작하게 되었습니다. 사실 2020년에도 수영 강습을 받았었는데요, 다닌 지 일주일도 안돼서 코로나가 발생한 바람에 강제로 다니지 못하게 되었었죠… 다행히 올해는 코로나가 많이 잠잠해져서 무사히 다닐 수 있게 되었습니다.
작년부터 크로스핏을 다니고 있기에 병행을 했는데요, 크로스핏으로 뭉친 근육을 풀어줄 정도로만 무리하지 않게 하니 재활하는 느낌으로 재밌게 다닌 것 같습니다. (초보 강습으로 자유형, 평형까지 배웠습니다)
테니스
수영 강습이 끝나갈 때 쯤 같이 강습을 들은 형과 함께 테니스에 발을 댔는데요, 이게 또 기가 막히게 재미난 거 있죠…
테니스는 1개월 강습받고 현재는 저희끼리 코트만 빌려서 시간이 될 때 계속 치고 있습니다. 아직 테린이지만 조금씩 느는 게 눈에 보여서 더 재밌는 것 같습니다.
확김에 테니스채까지..
새로운 팀 구성
취미 생활밖에 적질 않아 일을 하지 않은 게 아닌가 의심이 갈 정도네요… 적지만 않았을 뿐 일은 꾸준히 하고 있었습니다. 위에서 개발했던 상품 이전 웹서비스가 생각보다 많이 잘돼 사용자와 유지보수가 꽤 있었고,
이에 따라 저희는 위 서비스를 주로 관리하되, 개발인력이 필요할 경우 용병처럼 개발을 해주는 그런 새로운 팀으로 구성되게 됩니다.
팀 이름은 체스의 말 중 하나인 폰이며, 아래와 같은 의미를 지니고 있습니다.
폰은 체스판의 반대편 끝에 도달하는 동시에 폰과 킹을 제외한 기물 중에 하나로 승격 할 수 있다. 별에 별 일을 다 맡아서 하지만… 그 끝에 당신은 능력자가 되어 있을 것이다.
기존 솔루션 일부 서비스 분리 및 리팩토링
올해 가장 메인이었던 개발은 10년간 유지해온 솔루션의 일부 영역을 새로 분리하는 작업이었습니다.
- Client: C# → React
- Server: PHP → NestJS (Node.js)
.exe 설치프로그램이다 보니 실시간 배포에 어려움이 있었고, 속도 이슈로 사용자들의 불만이 자주 인입되는 영역이었죠. 그래서 저희는 C# 기반의 설치프로그램 위에 웹 환경을 올려 두 영역을 분리하는 작업을 진행하게 되었습니다.
그렇게 사용자 입장에서는 속도 개선이 이루어졌고, 개발자 입장에서는 개발환경과 상시 배포 가능으로 편의성과 문제 발생 시 조금 더 유연한 대처가 가능해졌습니다.
여러가지 생각들

최근 인프콘을 통해 여러 개발자의 이야기를 듣고, 저의 연차를 보면서 많은 생각이 들었습니다. (인프랩에 다니는 여자친구 덕분에 10:1의 경쟁율에도 불구하고 초대권을 받아 참석할 수 있었습니다. 👍)
- 내가 과연 4년차 개발자만큼의 실력을 갖추었나?
- 이 회사에서 나는 필요한 사람이 되었지만, 과연 다른 회사에서도 그럴까?
- 편하게 다니면서 취미 생활하는 것도 너무 좋은데..?
나름 큰 규모의 서비스를 개발부터 런칭까지 모두 겪어봤고, 웬만한 개발은 모두 할 수 있다는 자신감을 가지고 있었습니다. 사실 제가 잘한다기보다 남들보다 먼저 경험을 해본 것이고, 또 누구에겐 별거 아닐 수 있는데 말이죠.
또 익숙한 환경에서 빠르게 업무를 처리하고, 나의 시간을 가지는 것도 물론 좋지만, 이 익숙함이 내 실력을 착각하게 만들 수도 있겠다고 생각했습니다.
그래서 지금은 새로운 경험과 자극이 저에게 필요할 때라고 생각되어 이직을 준비하고 있습니다.
지난 시간동안 함께 달려온 팀원들에게 감사하고, 나이가 어림에도 편견없는 시선과 많은 기회를 주셔서 감사했습니다.
지금 만났던 팀원들을 나중에 또 만나게 된다면 지금보다 더 성장한 모습을 보여주고 싶네요.
마치며
많은 일들이 더 있었지만 모두 적을 수는 없었고, 다음부터 회고는 최소 1년마다 작성해 봐야겠습니다.
아직 많이 방황하고 있지만, 열심히, 무작정 열심히 보단 잘 해보겠습니다.