1년 회고

현 회사를 1년간 재직 하면서의 회고를 하려 함. 앞으로 성장/공부/이직을 어떤 목표와 방향, 자세로 해야 할지를 목표를 세우려 보니 3년간의 과거를 되돌아볼 필요를 느꼈고, 현재 재직 중인 회사부터 첫 회사까지의 회고를 해보기로 함. 보통 회고는 연말에 하거나 프로젝트가 끝나고 하던데, 지금 나의 시점에서는 재직 회사 1년 회고부터 과거를 되짚어 볼 필요가 있다고 생각했음. 사실 이직하지 않아야 할 사유를 찾는 중인데, 이직 해야 할 사유밖에는 보이지 않음...


이전 직장의 이직 사유

  • 올드한 스펙의 프로젝트 SM에 불만족(java 1.7, spring 3.대)
  • 복지는 괜찮은데, "회사에 다닌다"는 것보단 "프리랜서로 일을 쳐낸다"는 느낌이었음
  • 8개월 만에 협업이 뭔지 잊음
  • 처음엔 열정젹이었으나, 이전 프리랜서 개발자의 코드를 수정하면서 점점 "작동만 하면 돼!"하고 작업하는 모습에서 염증을 느낌

현 직장의 선택 사유

  • 규모가 크진 않아도 자사 서비스 운영업무를 함
  • 시스템의 크라우드 전환 예정
  • 유지보수를 한다고 해도 할 수 있는 일의 범위가 꽤 넒은 것
  • 기존 시스템은 올드하지만, 신규 프로젝트가 예정 중임
  • 유명 커머스 시니어들과 함께 입사 예정

회사의 업무 외적 장/단점

  • 직원 휴게실에서 커피 무료, 간식이 500원 미만
  • 직원 휴게실은 직원이 직접 청소해서 위생이 안 좋음
    • 사무실에서 쥐 나옴
  • 직원 할인
    • 준명품 의류 브랜드 50~70% 할인가 구매 가능
  • 성과금 200% 확정
    • ㅈ소기업 3년차 연봉 치고는 굉장히 많이 받는 편
  • 야근 수당, 택시비 지원 없음
  • 야근 식대 8천 원 -> 강남 물가로는 먹을 게 없음

이 회사에서 배운 것

  • Git, GitHub, Jenkins를 실무에서 사용하긴 처음
    • PR, 코드리뷰, Jenkins 설정 등 해봄
    • 코드리뷰를 받기 위해, 리뷰어의 시간을 절약해주는 방법도 나름대로 생각해 봄.
  • aws, ec2 클라우드 환경, 블루/그린 무중단 배포, auto scaling의 경험, 클라우드 환경의 얉은 경험.
  • 하드 코드/중복 코드 제거/구조화, 10년 전 기술
  • 기획/MD, CS 직군과의 협업, 많은 실제 사용자의 피드백
  • 티몬 출신 팀장님한테 배운것
    • 모듈화, 경제적으로 개발하기 위한 고민.
    • 고민이 길어지면 조언을 구할 것, 그리고 그 조언에서 배운 것들.
    • 아직 이해하진 못하지만 시스템 아키텍쳐 적인 것들
    • TC, 개발 산출물
  • nhn 출신 과장님한테 개발 외적으로 배운 게 좀 있음
    • TC, 회의록, 개발 철학 (아무래도 작은 규모의 SI, SM에서는 이런 문서와 효율성 좋은 코드보다는 작동하는 코드 결과만 만들면 되기 때문에 경험할 수 없었음)
    • 기본적이지만 작은 규모의 회사에선 배울 수 없는 사소한 것들, 근데 이제 안 계심
  • 절차지향 코드 작성
    • oop, class 사용법 다 까먹을 정도
    • (반어임)
  • 이전에 유지보수하던 외주 개발자들이 10년 차 이상이라 했는데, 소스 코드를 보니 아무리 연차가 쌓여도 개발을 잘하는 건 아니라는 것을 알게 되었다. 그리고 nhn 출신 과장님한테 성장을 잘하려면 개인의 노력도 중요하지만, 업무 환경도 중요하다는 가르침(?)을 받았다.
  • 일 잘하는 시니어가 되기 위해서는 개발도 잘 알아야 하지만 회사, 사업, 생태계, 흐름 이런 것에 관심도 갖고 알아야 한다는 걸 느꼈다.

1년동안 한 일

페이징 처리

처음 소스 받고 한 일은 이벤트 페이지의 하단의 상품 목록 페이징 처리하는 업무였다. 세상에 상품 목록을 가져오는데 페이징 처리가 안 돼 있다니.. 이때 삽질을 많이 했는데 원인은 당연히 페이징 처리가 어려운 게 아니라, 처음 보는 프로젝트 구조였다. 도메인별로 MVC 패턴의 구조화를 해두는 게 정석이라면, 이 회사의 소스는 기능별로 비지니스 로직이 FE, controller, service, SQL, db function에 파편화되어있었다. ORM을 MyBatis를 사용하는데, DAO를 한곳에서 query id, hash map으로 받아 사용하는 방식은 처음 봤는데, DAO에서 반환하는 객체는 쿼리 결과가 single row인지 multi row인지 단일 컬럼인지 구분도 안 되었다. 따로 변환하는 메소드가 있었고, 심지어 DB insert 후 PK를 가져오는 것도 불가능했다. 2 ~ 3일이면 가능해야 할 페이징 처리하는데 구조 문제로 7일 정도 걸렸던 것 같다. 아 물론 소스 파악할 시간도 없이 작업을 했으니 공수가 오래 걸릴 수밖에 없기도 했지만.

불필요한 로그

나는 과거의 내 자신이 로그 성애자인 줄 알았음. 근데 여기 소스를 보고 그 생각이 달라짐. FE에서 console.log 수십 줄은 물론이고 BE에서 System.out으로 생성한 로그는 페이지 한번 이동하는데 300~500줄씩 됐었음. File IO로 리소스를 잡아먹는 구구절절한 로그는 성능 저하의 원인이었고, 트래픽이 몰리는 시간이면 서버 응답이 15초 이상 걸리는 기능도 있었다. 이런 상태를 보기 힘들어서 log4j를 적극 활용, 지금은 로컬이나 개발 서버에서 필요한 로그만 남기고 운영 서버에선 결제 관련 통신 로그를 제외하고는 아무것도 출력되지 않는다. 그리고 지금은 디버거 모드를 적극 활용중.

그 외

쓰다보니 시간이 너무 오래 걸린다, 아래 기능들도 기억이 흐려지기 전에, 시간 나면 상세하게 서술 해 보자.

  • 이벤트 기능 구조화
  • AWS 전환
    • redis session
    • 파일 시스템의 S3 API 전환
  • 수기 업무 기능 추가
    • 월 정산
    • 고객 데이터 추출
  • SVN -> GIT 전환
  • 마켓팅 설문조사 기능
  • 오프라인 매장 방문 고객 온라인 가입시 혜택 지급 기능
  • 택배사 전환
    • 기존에 CJ 택배로 하드코딩된 배송 시스템을 롯데 택배로 전환하면서 추후 다른 타 택배사 배송 기능도 추가 가능하도록 구조화
  • 추가구성상품
  • CJ 풀필먼트

 


놀랄 노에 노할 노, 충격 적인 코드 퀄리티

하드코딩이 심각한 소스는 MVC 구조를 무시하고 있었다. FE에서 데이터를 처리, 외부 시스템 API 요청을 하거나, Service/DAO/ mapper 계층을 무시하고 비지니스 로직이 controller나 SQL, DB function으로 처리하는 로직이 많았다.
심지어 jsp안에서 jstl이나 el 문법을 사용하지 않고 절차지향으로 짜인 java 코드는 간단한 UI를 수정하는 데 걸림돌이 되어 공수가 배가 되는 경우도 있었다.
그리고 OOP를 전혀 사용하지 않는 소스는 controller에서 request parameter를 String Array로 받고, SQL 결과를 Map으로 받아서 처리하는 방식이였다. 처리 못 할 것은 없지만, 작업하는데 신경써야 할 것도 많고 소요 시간이 물리적으로 오래 걸리 수밖에 없는 구조였다. 일부 기능은 class를 쓰도록 수정을 했지만 10년 가까이 이런 방식으로 유지보수 된 소스는 OOP로의 수정이 무색했고, 이런 낮은 퀄리티의 소스는 시간이 지나 익숙해지기는커녕 마주하면 피가 거꾸로 솟는 게 뭔지 실제로 경험하게 해줬다.
그 외에도 사용하지 않거나 중복되는 쿼리/메소드/클래스/jsp, 메소드 명이나 주석과 실제 기능이 다른 경우도 많았다. 이런 중복 되는 코드는 또 에디터로 일괄 수정을 할 수 없도록 변수명이 다르거나 일부 조건만 다른, 사람이 손으로 수정할 수밖에 없는 소스다. 정말 고난이도 고난이라고 느꼈음.

이건 내 사정이고요

사실 낮은 퀄리티에서 오는 기술 부채는 개발팀이 감당해야 할 일이고, 협업 관계의 기획, MD, 마케팅 직무의 사람들은 알바가 아니였다. 당장 매출을 올려야 하는 이 사람들은 우선순위를 무시하고 급하게 요청하는 일이 많았고, 당장 퇴근 직전에 데이터를 뽑아 달라고 한다든지, 배포 직전에 기능이나 문구를 수정해 달라는 등의 요청은 작업의 흐름을 끊었고 어디까지 작업했는지 잊는 일도 비일비재했다. 이런 사정 속에서 MD 팀장은 개발팀에서 나오는 실수나 기술 부채를 해결하느라 늦어지는 일정을 정말 좋아했는데, 그 이유는 나도 모르겠다. 아니, 알고 싶지도 않다.

 


이직 결심

이유는 여러 가지가 있지만 가장 큰 이유는 성장에 대한 욕심이 크다. 그렇다면 성장할 수 없다고 느낀 이유를 고민해봤다.

middle, senior의 부재

개발팀의 인원은 총 4명으로 CTO 역할을 하는 팀장님, 프리랜서로 기존 시스템을 유지보수하다 정규직 입사하게 된 차장님, 신규 프로젝트의 빌드를 목적으로 이직한 과장님, 그리고 나 이렇게 구성됐었다. 신규 프로젝트는 엎어지다시피 해서 과장님은 저번달 말에 이직했고, 팀장님은 이번달 말에 퇴사 의사를 표했다. 차장님께도 분명 배울 건 있지만, 사실상 로직 적이나 아키텍쳐적인 도움보다는 SQL적 도움을 받을 수 있는 분이다. 같이 고민해주거나 조언을 구할 사람이 한 명 밖에 없다는 건 내가 잘못된 방향으로 가더라도 잡아줄 수 없는 환경이라고 생각했다.

퀄리티

프로젝트를 구성하는 파일 중 아무거나 열어도 3~4000줄은 기본이였다. 10년 가까이 SI/SM으로 개발된 소스는 퀄리티를 전혀 신경 쓰지 않고 개발되었다. 당연하게도 외주 개발자들은 퀄리티보다 기능 구현이 최우선이였고, JAVA 코드를 적극적으로 사용한 JSP 파일은 물론이고, MVC 패턴이 무색하게 비지니스 로직은 JSP, Controller, SQL에 퍼져있었다. Java를 쓰면서 OOP를 무시한 소스는 소스 파악이 힘들고 유지보수도 쉽지 않았다. 심지어 SQL로 처리하는 로직이 많아 동시 접속자 수가 많아지면 DB 서버의 CPU 점유율이 90%를 쳤고, 언제 터질지 모르는 시한폭탄은 java 소스로 변환하기도 쉽지 않았다. 레거시 개선이 실력 향상에 도움이 된다고 하지만, 혼자 작업 해야 할 범위가 너무 많고, 개편 하기 전에 신규 프로젝트가 인수인계가 더 빠를 것이기 때분에 의미가 없어 보임.

깊이와 효율성

내가 할 일의 범위가 넓은 것이 장점일 줄 알았지만, 상품, 결제, 이벤트, 정산, 회원의 도메인들과 UX, UI, 자사의 비즈니스에 대한 이해보다는 간단한 수정이지만, 반복된 소스로 간단한 노가다만 하는 경우가 많았다. 물론 이런 문제도 보이는 데로 어느 정도 구조화를 했지만 워낙 중복 소스가 많다 보니 깊이 없는 개선 작업의 끝은 보이지 않았다.
그리고 소스의 퀄리티가 낮다 보니 파악도 쉽지 않고 퀄리티를 높이기도 쉽지 않았다. 간단한 기능 하나를 수정하려 해도 FE, controller, service, SQL, db function까지 수정해야 하는게 천지. 멘틀까지 구조를 바꿔야 하는 소스는 오히려 내가 버그를 더 만드는 게 아닌가 싶은 생각밖에는 안들었고, 반복되는 소스가 10개가 넘어가게 되면 내가 뭘 수정하고 있었는지도 헷갈려서 작업 효율성 또한 많이 떨어졌다. 소스의 효율성과 개발적 깊이를 올리기에 쉽지 않을뿐더러 내 시간을 투자해서(야근, 주말 특근) 퀄리티를 올린다고 해서 겨우 3년 차가 혼자 고민한 게 과연 나이스한 방법일지, 내 성장에 도움이 될지 모르겠다.

기술 스택

신규 프로젝트를 기대하고 이직해 왔지만 1년 동안이 지나면서 바뀐 상황을 보니 신규 프로젝트에 내가 개발자로 기여하지 않게 될 것으로 사실상 확정이다. 신규 프로젝트는 외주 개발이 확정되었고, 개발팀의 역할은 사실상 현 시스템 유지보수, 신규 프로젝트 완성 시 인수인계 및 유지보수 전환의 방향으로 된 것. 거버넌스를 나눠 내부 개발을 하기엔 개발팀에 사람도 없고, 채용공고를 내도 지원하는 사람이 없다.
그리고 신규 프로젝트 개발이 외주로 완성돼서 인수인계하는 시기를 예상하면 적어도 1년, 사실 그 이상을 예상하는데, 그동안 java 1.7에 spring 3.1, mybatis 프로젝트를 유지보수하면 5년 차가 되도록 트렌디한 기술은 접할 수 없을 것이고 빅테크까진 아니더라고 더 큰 기업으로의 이직의 하는데 필요한 경험은 못 할 것이라고 생각된다.
다양한 기술 스택을 원하는 요즘 공고는 물론 모든 기술을 원하는 것은 아니겠지만 jpa, redis, spring boot, java 1.8 이상 정도는 경험해야한다고 생각한다. 지금 프로젝트 스펙으로는 아무것도 경험할 수 없고, 개인 프로젝트를 진행해서 공부한다고 해도 회사에서 요구하는 것은 실무 경험이기 때문에 도태되고 있다는 느낌이 강하다.

오히려 내가 해볼 수 있는게 많으니 성장의 기회다??

오히려 문제가 많고, 고칠 게 많은데다 혼자 손대야 할 도메인이 많기 때문에 내 성장에 도움이 된다는 의견이 있는데 짧은 식견과 현실적 상황을 보면 동의가 잘 안된다. 어차피 신규 프로젝트를 하는데 굳이 내가 시스템을 구조를 파악하고, 개선한다? 이미 많은 기능이 비효율적으로 개발되었는데 하나하나 개선한다고 그 노력이 UX와 매출에 긍정적 영향을 미친다? 신규 프로젝트 끝나기 전에 그 성과가 크게 눈에 띌지 의문이다.


 

남은 한해 계획

암튼 잘하는 사람들이랑 일하는 회사로 이직하고 싶다 보니 나도 잘해야 하는데, 암튼 쉽지 않음. 당장 큰 기업으로 이직은 어려울 것 같으니 꾸준히 공부해야 함. 꾸준한 공부는 실패하지 않을 것이라 믿고 있음. 욕심이 많으면 해야지 어쩌겠어?
근 몇 개월간 공부해야 할 것들이 정~~말 많다고 느꼈다. 프로그래밍 언어나 프레임웤(당장 실무에서 쓰는), 웹 관련 기술, CS, 인프라, 포트폴리오 등등.. 하나의 주제를 파기보다는 여러 분야를 두루두루 기반을 쌓아야겠다 싶음. 특별한 일정의 변수가 없다면, 야근 + 출퇴근 이동시간 하면 하루에 3시간 정도의 공부할 시간이 확보되는 데 어쨌든 시간을 잘 쪼개서 이직 + 기반 공부를 하겠다고 다짐했다. 중고등학교, 편입해서 방통대 다닐 때보다 더 공부 많이 하는 듯...

  • 자소서 재정리 (9월 말 예상)
  • 10월까지 프로그래머스 코테 레벨 2 풀기
    • 11월부터 레벨 3 시작
  • 12월 까지 jpa 학습 -> 포폴 준비
  • CS -> 간간히 블롣그 올리며 얉게라도 공부하기
  • 3개월에 한번 회고하기
  • 다 중요하지만 건강은 꼭 챙겨야 함. 주에 3일 런닝 꼭 하기..!
 
728x90
반응형

'커리어 디버깅' 카테고리의 다른 글

[면접 회고] C사  (0) 2023.02.27
2022년 회고 및 2023년 목표 설정  (0) 2023.01.03
[코테 회고] 2022 10 01  (0) 2022.10.01
[채용 과제 회고] 2022 09 22 P사  (0) 2022.09.22
2022 07 13 채찍  (0) 2022.07.13

+ Recent posts