목차
오랜만의 회고록
블로그 스터디를 시작으로 작성했던 회고록을 스터디 종료 후 자연스럽게 바쁘다는 핑계로 작성하지 않게 되었고, 점차 블로그의 글 자체를 쓰는 빈도수가 줄어들게 되었는데, 어째설까?
여러 이유가 있겠지만, 귀찮음이 절반이고, 회고록을 씀으로써 얻을 수 있는 메리트를 크게 느끼지 못했다는게 절반이였던 것 같다.
그래도 다시 써달라는 지인들의 요청과, 다시 조금씩 공부나 포스팅에도 탄력이 붙어 사이클이 도는 만큼 이 템포를 멈추지 말고 회고록까지 같이 해보면 좋을 것 같아서 써보려고 한다.
더해서 지인들이나 톡방에 얘기하면 자랑 같거나 칭얼거림으로 들리는 이야기도 여기에 적어두고 일상에 더 집중하면 되지 않을까 하는 기대도 가져본다.
귀찮….
마지막 회고록 이후의 모든 일들을 나열하면 별거 없는 것 같지만 너무 많기에 최근 두 달 정도에 대한 회고만 해보려 한다.
DDIA 스터디 종료!
작년 하반기에 시작했던 데이터 중심 애플리케이션 설계(Designing-data-intensive-application, DDIA) 스터디가 약 반 년 만에 무사히 끝났다.
결코, 쉽지 않은 내용이고 나오는 키워드의 태반이 이해하지 못할 데이터 베이스의 기능들이나 개념들에 대한 소개도 아닌 응용 부분과 설계 부분이라 너무 힘들었던 것 같다.
나중엔 GPT를 결제해서 궁금한 내용들도 계속 질문하면서 정리했던 것 같다.
이 때 공부한 내용들이 차후 회사에서 발생하는 VOC에서도 나오고, 면접관으로 들어갔던 상황에서도 사용되었기에 참 많은 도움이 된 것 같고, 특히나 이번 스터디에서 모든 스터디원들이 끝까지 포기하지 않고 참가해줘서 놀랍고 또 고마웠다.
국비 학원을 다닐 때 부터 약 4년이상 스터디에 참가해서 리딩을 하는 입장으로써 10명을 모으면 그 중 9명~10명은 제대로 참여를 안 하거나 탈주 하는게 현실이였다. 심지어 벌금이 3만원씩 되도 탈주가 빈번했는데 이번 스터디는 가장 어려운 스터디였음에도 모두 참가해서 끝까지 발표도 성공적으로 다 되어서 너무 뿌듯했고, 그 때문에 이번 스터디 단톡방은 없애지도 않고 다음 스터디에서도 꼭 같이 했으면 좋겠다는 생각이다.
당장 나만 해도 회사일에 치이거나 귀찮거나 일정이 생기면 미뤄두다가 2일전부터 밤새면서 정리하고 공부해서 발표 자료 만들면서 정말 고생 많이 했던 것 같은데, 고생 한 만큼 아는 척 할 꺼리가 생겨서 좋은 것 같기도 하다
•
내가 정리한 DDIA 포스팅
Search
드디어 구축 완료 Spring-batch
현재 다니는 회사에서 우리 팀이 맡고 있는 채용 솔루션 서비스는 현재 약 8~9년이상 된 레거시 스프링 프로젝트이다. 웹 개발자 출신이 구축한 서비스가 아니다보니 대용량 트래픽을 고려하지 못한 설계들도 많다.
가장 큰 문제는 대용량의 지원자 처리(엑셀, PDF, Email 발송 등) 가 비동기가 아닌 동기구조라서 수백명의 지원자에 대한 처리도 버거워하고, 수천명이상일 경우 사실상 지원하지 않는다.
하지만, 이런 인원 제한을 걸어두는 기획도 없기 때문에 VoC로 넘어올 때 대응하기 불가능에 가깝다는 문제가 있다.
심지어, 지원자 한명의 지원서를 만들기 위한 DB조회가 수십번 이상이 필요한데 이는 지원서의 많은 항목들이 정규화 되어 있고 이 각각의 항목들을 조회해서 아이템을 구성해야 하기 때문인데, 이게 지원자 수백, 수천명 이상일 경우 치명적인 문제가 된다.
그래서 1차적으로는 비동기로 바꾸고, 2차적으로는 로직을 수정해서 성능 개선을 해야겠다는 계획을 잡았다.
그래서 Spring-batch를 이용해 서버를 구축한 뒤 Kafka로 대용량 파일 처리 요청을 받아 S3에 업로드한 뒤 메인 서버에서 다운로드 받게 하는 구조를 생각했다.
batch 서버 구축 개념도
년초에 내가 생각한 이상은 거창했다.
이제 수천이 아닌 수만 수십만의 대용량 지원자에 대한 엑셀 및 PDF도 초 단위로 완성시키는 성능 개선을 하겠다!
하지만, 현실은 냉혹한 법이였고, 나는 레거시 프로젝트의 호환성을 무시했던 대가를 크게 치르게 되었다.
1.
배치에서 chunked로 나눈 뒤 parallel stream logic 으로 지원자 동시 처리를 하겠다는 꿈
: 엑셀 모듈에서 병렬을 고려 한 게 아니고, 나름 자동화를 위해 만들어둔 Poi 관련 기능들이 다 얽혀있어서 chunked로 나누는 것 자체가 불가능한 상황. 모듈까지 모두 개선하기에는 남은 시간이 없었다. 그래서 배치 서버에서 하나의 잡(Job)에서 실행하는 tasklet은 chunked가 아닌 전체 처리하는 기존의 방식 그대로 갈 수 밖에 없었다.
2.
지원자 하나 하나가 지원서 항목 수십개를 각각 조회하는 행 기반 조회 방식을 열 기반 조회 방식으로 튜닝 하겠다는 꿈
: 기존 방식은 지원자가 100명일 경우 100번의 순회가 돌고 그 안에서 각 지원자마다 필요한 지원서 항목들을 (수십개 이상의 DB 테이블) 각각 조회하다보니 만약 80개의 테이블 조회가 필요하다면 x 지원자 수가 되어 엄청난 부하가 생길 수 밖에 없었다.
그래서 행 기반에서 열 기반 조회 방식으로 바꾸어 80번의 테이블 조회로 모든 지원자에 대한 항목 조회를 끝낼 수 있게 만들고 싶었지만, 이 역시 가장 큰 문제인 남은 일정의 한계와 레거시 코드의 복잡성으로 인해 롤백 될 수 밖에 없었다.
각각의 항목이 모두 같은 depth가 아닌 학교-초/중/고/대학교/대학원 - 전공까지 들어가기 때문에 고려되는 항목들이 많고 코드가 보수되는 과정에서 각각 다른 사람들이 다른 스타일로 코드를 작성했기에 모두 테스트 코드가 없는 환경에서 수정하기는 요원했다.
여기에 우리는 레거시 프로젝트의 호환성을 무시했던 대가를 크게 치르게 되었는데, 배치 서버에서 의존 해야 하는 우리 회사의 모듈의 버전이 사용하는 Spring-core 모듈은 5.0.8인데 배치 서버는 최신 버전으로 작성했더니 6.0.8 이였고, 그 덕에 많은 부분들에서 호환성 문제로 동작을 하지 않았고, 이 문제를 해결 하기 위해 모듈의 버전을 올리기엔 이 모듈을 물고 있는 두 자릿수 이상의 서비스가 모두 반영이 같이 되어야 하는데 이는 사실상 남은 시간 내에 해결할 수 있는 일이 아니였다.
그래서 배치서버의 버전을 다운그레이드 하게 되었는데, 그러면서 배치의 잡 컨텍스트나 스텝 컨텍스트 저장 테이블 스키마 구조도 다시 변경해야하고, 잡 생성 로직들도 과거버전으로 맞춰줘야 했는데, 이 역시 참 피곤한 과정이였던 것 같다.
그 외에도 여러 이야기가 있지만, 이런 과정들을 거치고 만든 배치서버는 다행히 잘 동작을 해 주었고, 바로 얼마 뒤에 있었던 고객사의 대용량 엑셀 다운로드에서도 어찌되었던 정상적으로 동작하며 조금만 반영이 더 늦었으면 또 VoC의 파도에 물결 하나가 추가되어 우릴 고되게 했으리라는 짐작을 할 수 있었다.
이제 남은 과업은 테스트 코드 작성, 코틀린으로 언어 변경, 지원자 조회 로직 리팩토링, chunked 방식으로 리팩토링등이 있다. 그런데 이제 신규서버 구축이라는 새로운 업무가 시작되어 과연 언제 가능할지 모르겠다. 올해 안에는 할 수 있을 것인가..?
Kotlin으로의 여정 시작
작년부터 해야겠다고 마음만 먹고 있던 코틀린을 드디어 시작하게 되었다.
이제 이직한 직장 동료가 계속 좋다고 말은 했지만, 내 기준 자바로도 충분히 기능 개발이 가능하고, 아직 먼저 공부할 내용들이 너무 많아서 미루고 있었는데, 6월 초 NextStep에서 코틀린 과정을 시작한다는 얘기를 듣고, 지인과 반 쯤은 술김에 충동 구매로 시작을 하게 되었다.
나는 늘 이런 유료 과정을 들을 때는 조기 수료, 우수 수료를 개인 목표로 삼고 시작한다.
그런데 이번 과정은 코틀린을 할 줄도 모르는 상태에서 시작하는거라 불안감이 너무 컸다. 금액도 적지 않은데…..
그래도 과정에서 다루는 내용중 TDD, 클린 코드에 대해서는 현재 리뷰어로 활동하고 있는 짬이 1년이 넘어가는 상황에서 자신이 있었기에 불안감 반 기대감 반으로 인프런에서 코틀린 강의 한편을 보고 시작하게 되었다.
그럿데 첫 OT날…..
약 64명의 수강생 중 약 70~80%이상이 현업에서 코틀린을 쓰고 있다는 것 아닌가?
그리고 10~20명은 카카오에서 지원받아 듣는 카카오 직원들, 또 다른 10~20명은 SK에서 지원받아 듣는다는 것 아닌가? 속으로 이거 x된 것 같다는 생각이 들기 시작했다.
그래서, 재택하는 날은 출퇴근 시간을 아낀 만큼 그 시간대에 미션을 진행했고, 점심시간 등 짬짬히 시간이 날 때마다 미션을 하고 퇴근 이후로는 풀타임 미션에만 집중을 했던 것 같다.
그러면서 새삼, 내가 리뷰어 할 때 모습도 떠올리며 앞으로는 리뷰를 더 빨리빨리 해주도록 노력해야겠다는 반성을 했다.
여하튼, 그렇게 6월 한 달 간 코틀린에 전심전력하여 미션을 진행했고, 그 결과 1등은 못했지만, 2등으로 조기 수료 할 수 있게 되었고, 바로 이어서 ATDD 과정 리뷰어와 겹치지 않아 리뷰어 활동에 지장이 가지 않게 되었다.
그리고, 지금은 바로 우리 회사 신규서버 구축에서 코틀린을 쓰자고 설득 하고, 개발자들과 해당 미션을들 토대로 내가 리뷰어로 코틀린 스터디를 리딩하게 되었다.
나도 아직 초보이지만, 다른 사람들의 코드를 보면서 나도 배우고, 질문에 대해 답변하거나 피드백하기 위해 찾아보면서 인사이트를 많이 얻고 있는 것 같다.
만약 다음 코틀린 과정에서 리뷰어를 제의받는다면 이런 활동도 내게 큰 도움이 되지 않을까 생각한다.
Happy Midas Day
코로나로 인해 진행하지 못 했다고 하던 해피 마이다스 데이(이하 해마데) 쉽게 말해 회사 MT인데, 나로써는 첫 경험이였고, 목,금 일정으로 속초 롯데 리조트에서 진행하게 되어 참가하게 되었다.
약 600명 이상의 전사 구성원 중 약 70~80%이상이 참가하고, 풍문에 의하면 약 5억 이상의 돈이 사용 되었다는 말도 들었다. ㅎㄷㄷ 그래서 인지 리조트 그랜드블룸쪽 공간 전체를 대여한 것 같았다.
나같은 아싸에게는 쉽지 않은 일정이였다. 다행히 개발자들은 대부분 자리 배치도 뒤에 되어있어서 리액션은 앞쪽의 영업및 사업부팀들이 해줘서 지루하긴 해도 엄청나게 힘들지는 않았던 것 같다.
생각보다 해외에서 우리 회사의 프로그램이 정말 잘 팔리고 있고, 성과도 좋다는 걸 알게 되어 새삼 신기했던 것 같다. 해외의 각 법인에서도 모두 참가를 했는데, 동시 통역을 위해 이어폰도 제공해준걸 보고 해마데에 정말 진심이구나 느끼기도 했다. 그리고 역시 USA쪽이 텐션이 정말 하이텐션이구나…..를 느꼈다
일정은 정말 오후 10시 이후까지 진행되었는데, 내 저질 체력으로는 끝에쯤 되니까 지쳐서 너무 힘들었다. 그래서인지 출장 뷔페 음식도 먹는둥 마는둥 했고, 맥주 한 두 잔을 먹었더니 더 피곤했던 것 같다. 그래서 11시 이후 야식으로 준 닭강정도 한입도 못 먹고, 개발 셀들이 모여있는 방에서도 구경만 하다가 와이프의 전화를 핑계로 나와서 씻고 그냥 잠들었다.
아 맞다. 회사의 신사옥에 대한 얘기도 드디어 공개되었는데, 정자역에 짓기로한 신사옥은 이제 모든 허가를 다 받았고 이제 진짜 짓기 시작한다는 것 같다.
하지만, 완공 및 입주까지는 약 3년 반정도가 남은 것 같다. 2026년 12월쯤 입주 예정이라고 하니..
내가 그 때까지 이 회사를 계속 다니고 있을진 모르겠다 ㅋㅋㅋ
나이가 나이인지라 이제 밍기적거리면서 여유부렸다간 이직할 기회를 놓칠 것 같아서 고민이다.
그런 미래 고민보다는 당장 레거시 프로젝트 개선 및 신규프로젝트 구축이나 잘 하기위해 공부를 더 해야겠다!!
책 집필 제안
정말 뜬금없는데 책 집필 제안이 왔다.
지금의 마음은 고마운 마음 한 스푼과 걱정 아홉 스푼을 컵에 담아 마시는 느낌이다.
만약에 집필을 하게 된다면 확실히 내 이력에는 큰 도움이 될 것이고, 차후 강사쪽으로 진로를 정하거나 이직을 하더라도 모두 도움이 될 만한 커리어는 맞다.
하지만, 내 블로그의 스프링 시큐리티는 인프런의 시큐리티 강의를 토대로 작성되었기에 대부분 내가 직접 창작 한 게 아닌 정리 노트라고 볼 수 있다.
그리고 기존 회사 업무와 부업으로 하고 있는 코드 리뷰어 활동에도 분명 영향을 줄 것이다.
모두 수입과 직결되어 있고, 회사에서 근태가 안 좋거나 성과가 안 좋으면 내년 기술급 대상에서 떨어질 확률도 높기에 집필이라는 선택은 사실 쉬운 선택지가 아니다.
이 부분은 좀 더 생각해봐야 할 것 같다.
ATDD 코드 리뷰어
ATDD 7기 과정 리뷰어도 시작하게 되었다.
4기부터 리뷰어로 활동한게 엇그제같은데 벌써 7기 리뷰어다.
같은 과정 리뷰어를 계속 반복하면 그냥 돈 말고는 얻는게 없을 꺼라 생각하기 쉽지만, 늘 새로운 걸 여러 리뷰이를 통해 얻게 되는 것 같다. 내가 너무 당연하게 생각하는 부분들이 사실은 당연하게 아니라는 것과, 내가 막연히 알고 있는것에 대해서 설명하기 위해서 공부를 해야하는 것들이 있다는 점에서 많은 인사이트를 얻는다.
이렇게 알게 된 리뷰이들도 결국 다 내 잠재적인 지인이 될 수 있는 것이고, 활동비로 받는 돈도 와이프에게 피자라도 한 판 사줄 수 있기에 내게는 이익이 많은 활동이라 할 수 있다.
그리고, 돈을 받으면 받는 값은 해야 한다고 생각하기 때문에 계속해서 공부한 내용들을 더 공유하고 피드백하려고 노력하다보면 남의 코드를 보는 시야 도 갈수록 넓어지는 것 같기에 win-win 인 것 같다.
앞으로도 쭈욱 리뷰어 활동을 하면서 인사이트를 얻고 또 인사이트를 주고 싶다.
남은 7월을 어떻게 보낼까?
사실 할 건 많다. 요즘 다시 공부 사이클이 돌면서 벌려놓은게
•
인프런 카프카 강의 구매
•
이펙티브 코틀린 스터디
•
클린코드 코틀린 스터디 리딩(리뷰어)
•
실무에서 사용되는 SQL 튜닝 책 학습
•
SQL성능 최적화 책 학습
이 것만 해도 올해는 끝날 것 같기도 하다.
회고록을 매 주 작성하는건 힘들 수 있지만 매 달 작성하는 것은 다시 노력해보려고 한다.
블로그를 첫 시작한게 첫 직장에서 빠르지 않은 오히려 늦은 나이에 웹개발자로 최저연봉을 받으며 시작한 내 커리어를 조금이라도 채워보고자, 그리고 좀처럼 머리에 남지않는 여러 지식들을 블로그에다가 나만의 사전을 만들어서 복습하고자 하는 마음에서 인프런의 JPA 강의 포스팅으로 시작했는데, 어느덧 3년 가까히 흘러왔다.
그 동안 이 블로그를 통해 많은 채용 제의, 취업 상담, 집필 제안, 사업 제안까지 받아본 것 같다.
원래는 그저 나이들고 게임으로 꽤 많은 시간을 허비한 유사 개발자였지만, 늦게라도 꾸준히 하니 뭐라도 성과가 나타나는 것 같다.
앞으로도 엄청난 목표를 가지기보단 매일매일 꾸준하게 포스팅하고 공부해야겠다.
그리고 3년 뒤 어떤 것들이 이뤄졌는지 궁금하다.