https://anythingis.tistory.com/74
22년 회고 이후 오랜만에 써봅니다.
자바와 스프링을 이제 막 접했던 2년전과 지금 큰 차이는 없는 것 같지만 ... 나중에 보고 얼마나 성장했는가를 위해 작성해봅니다.
싸피 수료
1학기의 주요 프로젝트인 2인 1조 프로젝트에서 전 백엔드 개발자를 지망했는데 운좋게 프론트엔드 지망하시는 분과 조가 되었습니다. 이전까진 백엔드를 혼자 맡게되면 ERD 설계는 어떻게 하지 하는 고민이 있었는데 기본 게시판 ERD에서 살을 붙여 나가며 지역, 관광지, 유저와 리뷰같은 기능들을 추가했고 기술적으로 더 넣어보고 싶어 백기선님의 스프링부트 프로젝트에서 배운 알림기능을 SSE를 활용해 실시간으로 받아볼 수 있게까지 해볼 수 있었습니다. 또, JPA만 활용하다가 Mybatis를 활용해보니 특정 지역을 팔로우한 사람들에게 알림을 추가하거나 특정 유저의 읽지 않은 알림들을 전체 읽음처리하는 등의 상대적으로 복잡한 SQL문을 구현하기 오히려 쉬운걸 느꼈습니다.
https://github.com/JaegeonYu/yesterday-s-Trip
2학기 때는... 스토리 작가를 위한 작품 시각화 서비스, 내가 뽑은 국회의원의 공약 이행현황을 보여주는 서비스, 프로젝트를 진행하며 디자인, 설계와 개발까지의 긴밀한 협업과 기여도 관리 서비스 등을 진행했습니다. 기술적으로 백엔드 개발과 더불어 인프라 관리를 맡으며 프론트엔드 빌드와 백엔드 빌드과정을 이해하고 배포에 필요한 것들만 최적화로 서버로 이동시켜 배포하고 과정을 자동화 하는 것, 서버로 들어오는 요청을 컨트롤하는 부분을 맡았습니다.
주로 서비스를 위한 기술보다는 서비스를 배포하기 위한 기술들을 익히면서 나름 재미도 있었지만 돌이켜서 생각해보면 1학기만큼 열정적이고 많이 성장했는가엔 의문이 듭니다. 또 모두 흥미로운 주제였지만 그 주제를 위한 무한 브레인스토밍 기간이 괴롭고 아까웠습니다.(전체 기간이 6~7주라면 아이디어만 2주 이상 생각)
싸피를 갔던 가장 큰 이유인 '프로젝트 협업 경험'을 채울 수 있었지만 이를 위한 6개월간의 준비과정이 꽤나 깁니다. 협업경험을 인터넷상에서 모임을 구하다가 중간고사 준비한다고, 취업했다고 없어지는 팀원들을 겪으면서 싸피에서 팀경험을 쌓고 싶었지만 준비과정이 매우 길기 때문에 빠르게 취업을 원하시는 분은 생각해보셔야 할 듯합니다.
싸피를 다닐 때는 다시 대학생으로 돌아간 것 같은 느낌(?)과 함께 취업에 대한 생각보다는 눈앞의 개발만을 바라보고 살면서 아쉬웠던 점은 어떤 어려운 문제를 만났고 내가 주도적으로 어떻게 해결했는가에 대해 프로젝트하면서 꼼꼼히 기록을 안한 것입니다. 기록을 했어도 면접에서 요구하는 것은 어떤 문제가 생겨서 어떤 서비스를 활용하는가에서 끝나는게 아니라 내가 주도적으로 해결하는것에 초점이 맞춰있어 준비하기 힘든부분이기도 합니다.
(ex1. s3 활용중인데 클라이언트단에서 받아보는 속도가 느림 -> cdn 기능 까지 제공하는 cloudfront를 쓴다 (X), 내가 캐싱을 구현...(O))
(ex2. 한국어로 번역을 해야하는데 aws 번역은 속도가 느리다 -> naver clover를 쓰면 한국어 최적화(X), 내가 무언가 ..(O))
문제를 의도적으로 만들고 접근하는 건 모두가 비슷한 문제를 카피하기에 좋지 않은 접근법이라 생각했지만 취업(자소서 + 면접)을 위해서라면 일정 부분이 필요할 수 있겠다.. 라는 생각이 들었습니다. 물론 자신만의 문제를 만나고 주도적으로 해결하는게 제일 좋겠습니다.
MSA 맛보기
상반기의 쓴맛과 함께..
싸피를 수료하고 요즘 개발자라면 한번쯤 들어본 MSA.. 도대체 어떤 놈이길래 이리도 핫이슈일까 하며 공부했습니다. 도메인별로 서비스를 분할하고 기술스택도 모두 다르게 쓸 수 있지만 Spring Cloud 기반의 강의를 들으며 경험을 해봤습니다.
https://github.com/JaegeonYu/MSA
간단한 서비스를 분할해보면서 궁금한점들을 해소할 수 있었습니다.
Q1. 도메인별로(유저, 글, 댓글) 서비스를 분할하면 DB도 분할될텐데 글-댓글, 유저-글 등의 외래키 관리는 어떻게 하는가?
DB가 분리되어있기 때문에 외래키 제약을 통한 정합성은 포기하거나 정합성이 필요한 단위만큼 도메인을 분할
Q2. 서비스끼리의 연동은 어떻게 ?
동기처리가 필요할땐 직접 다른 서비스 API 콜을 하거나, 큐잉 시스템에 발행 및 처리될 때까지 펜딩처리
비동기처리가 필요할 땐 큐잉 시스템을 활용
Q3. 이중화된 서버의 DB 부하 및 싱크 처리는?
싱크 처리(https://anythingis.tistory.com/193#Kafka%20Connect%20%EC%8B%A4%ED%96%89-1)
서버의 DB 부하를 줄이기 위한 Kafka로 위임 (https://anythingis.tistory.com/195)
MSA가 필요할만큼 서버의 부하를 받아본 경험이 있는 건 아니긴 하지만, 도메인을 분할하는 설계와 서버끼리의 통신(로직에 따라 동기, 비동기 처리)에 대해 강의를 통해 간접적으로 체험해보고 개념적인 부분과 기술적인 부분을 배워볼 수 있었습니다.
취업
개판 오분전으로 쓴 삼성 SDI 자소서가 통과하고 코테도 붙으면서 인생 첫 면접을 삼성에서 보는 불상사가 발생했습니다. 굉장히 준비를 잘못했구나와 함께 다른 회사면접에도 경험할 수 있을까라는 기대를 했지만 ... 취업시장의 추위는 온몸으로 느낄 수 있었습니다. 그러다 구매 솔루션을 하는 기업인 엠로에 취업하게 됐고 3개월이 지난 현재 정규직 전환을 앞두고 있습니다.
돌이켜 생각해보면 상반기 시장에선 기업에 대해 알아보지도 않고 우다다 자소서 난사를 하다가 상반기가 잠잠해지고 오히려 시간이 있는 상태에서 기업을 조사하며 매력을 느끼고 내가 남들과 다르게 기여할 수 있는 점을 고민해본게 자소서에도 면접에서도 많은 차이가 있던 것 같습니다.
기업을 위한 다양한 시스템 중 전사적 자원관리 시스템인 ERP는 국제적으로 SAP, 나라별로도 SAP를 제외하고 꽉 잡고있는 기업(국내는 더존)들이 있고 성장을 시작한지도 오래된 개념의 기술이기에 실제 업무에 맞게 최적화와 정형화 되어있는 분야라고 생각합니다. 하지만 SRM, CRM은 기업별로 분업의 역할이 더욱 강해지면서 성장하기 시작한게 비교적 최근이고 감당하는 범위도 더 넓어 제가 최적화를 위해 기여할 수 있는 부분이 많다고 생각하는 부분과 기초적인 개발지식과 클라우드 환경에서 서버 인프라를 구축해본 경험을 어필했습니다.
취업준비하시는 분들 모두 자기와 맞는 회사를 곰곰히 고민해보시면 좋을 결과가 있을거라고 생각합니다.
앞으로의 목표
요즈음은 웹 서비스의 3 티어 아키텍처 중 DB와 애플리케이션 사이에 대해 관심이 있습니다.
실제 운영하는 서비스를 처음 접해보면서 지금까지 프로젝트에서 Long 타입의 Auto Increment 옵션의 PK만 활용하던 것이 꽤나 괴리가 있다는 걸 느꼈습니다. 친절한 SQL 튜닝 책을 읽으면서 개발자로서 OLTP 환경에서 인덱스의 중요성을 깨닫고 SQL이 인덱스를 타는지 안타는지를 넘어, 인덱스 스캔의 범위나 필터링의 범위, 옵티마이저가 어떤 조인을 고려하는지까지 배울 수 있었습니다. 꾸준히 공부하면서 25년 SQLP를 목표로 할 것 같습니다. 딸 수 있겠죠 ..?
앞으로도 성장을 멈추지 않는 사람이 되기를 바라봅니다.