스타트업 인턴

스타트업 한 달치 밀린 회고

지미닝 2024. 3. 18. 21:06

그간 기술 블로그 관리를 많이 못했다. 단순히 하루하루 돌아가는 코드를 만들기 위해서 노력했던 것 같다.

스프링 공부를 실질적으로 많이 해보지 않은 채로, (스프링 기초 MVC패턴공부만 하고 갔다) 정말 DTO와 Entity의 구분조차 못한 채로 시작된 인턴이, 이제는 간단한 도메인 분석, 도메인 설계, 프록시에 관한 것들도 이해하기 시작했다.

이번 글은 정말 대략적인 회고, 했던 것들에 대한 정말 간단한 기록들이다.
기록하지 않으면 휘발된다. 정말 그간 남들에 비해 뒤쳐져있다는 생각으로 달리기만 해서 기록할 시간이 많이 없었다. 그렇게 달리던 과정속에서 기록을 했으면 좋았을 텐데 조금은 아쉽지만, 지금이라도 흐르는 물을 담아보자는 마음으로 써본다.

1. 비용계산기 코딩

처음 들어가고 1~2주간 회사에 존재하는 비지니스 로직이 거의 없는 간단한 비용 계산기를 코딩했었다. 당시에 @OneToMany과 같은 연관관계에 대해서 하나도 몰랐고, 트럭 정보와 같은 order안에 Embedded한 것들을 처리할 때 @Embedded 어노테이션만 달면 해결된다는 것도 잘 몰라서 이상한 짓들을 마구 했던 기억이 난다...

인턴하면서 가장 절망적인 순간이었다. 동료로 들어온 백엔드 선배님이 말씀하시는 것에 대해서 이해를 거의 못했고, 사수분에게 코드리뷰를 받을 때도 너무 창피했다.

2. 오더 폼 코딩

여기서부터는 조금 비지니스적인 요소들이 많이 들어갔었다.
백엔드가 두명이라 각자 맡을 파트를 정하고 개발을 했다. 나는 이전 과제에서 DTO, 도메인 분석이 절실하다고 느껴 전반적인 오더 폼 엔티티 개발, 엔티티에 관련된 API 개발, 테스트코드를 작성했고, 비지니스적인 요소를 Service계층에 맡아두어 비지니스적인 테스트도 실행하였다.

당시에 테스트코드에 관한 관심이 생겨서, KotestMockk를 사용해서 테스트코드를 작성했다. 이때 단위테스트와 통합테스트에 대해서도 고민해보게 되었다. 이것에 관한 글은 조금 더 심오해진다면 글을 남겨보겠다.

동료 백엔드 개발자는 외부 API(회사 자체 API, ML과 공유하는 API)를 맡아주셨고, 나는 이 경험덕분에 도메인 설계에 대해서는 조금 여유가 생긴 것 같다.

이때 코드리뷰 받을 때 사수한테 칭찬 받았던 기억이 난다. 정말 많이 성장했다고, 코드도 좋다고 하셨다.

3. 실시간 운송관리 페이지

현재 진행중인 일이다. OpenSearchWebsocket+Stomp를 사용해서 개발하고 있다.

현재 운송중인 기사님의 위치를 OpenSearch로 받아와, 소켓을 사용해서 프론트를 통해 지도로 1초간격으로 실시간 위치를 업데이트해주고 ML서버에서 실시간 위치를 기반으로 현재 운송이 어느 상태인지 (상차지 도착/이탈, 하차지 도착/이탈,하차중,상차중) 분석해서 운송이 끝나면 추적 테이블에서 내리고, 운송중이거나 2시간 후에 상차 예정일 경우 추적테이블에 올린다.

나는 남에게 피해주는 것을 싫어하고 서로에게 좋은 기회가 된다면 힘들더라도 힘들게 가야한다고 생각했다. OpenSearchWebsocket 두 개 모두 경험해보고 싶다는 백엔드 선배님의 말씀에 따로 해보자고 했고, 덕분에 지금 opensearch와 websocket에 대해서 노션에 정리하면서 공부하면서 거의 개발이 끝나는 과정에 있다.

그리고 websocket에 대한 친절한 자료가 많이 없다고 느꼈다. 그래서 조만간(이번달 안에) 웹소캣에 대해서 조금 친절하게 글을 남겨볼까 싶다.

아! 그리고 이번 프로젝트를 하면서 특히 커다란 데이터를 다루는게 즐거웠다. Hibernate 에서 JPQLSelect문을 날리면 쿼리문이 날아가는데 가끔 생각없이 코드를 짜놓으면 N+1문제도 생기고 그런다.
그럴 때마다 수정해서 최적화하고, 김영한선생님의 JPA2강의를 들으면서 최적화하면 API속도도 빨라진다.

나는 이런 데이터를 다루는 부분이 특히나 재밌었다.

한 달 간의 후기

대학에 입학하고 2학년 전까지는 개발자를 하고 싶다는 생각을 많이 안해봤던 것 같다. 남들이 좋아하는 컴퓨터 비전분야라던가, 보안을 하고 싶다는 생각은 몇번 해봤었다.

그러나, Python FastAPI+MongoDB 로 백엔드를 처음 해보고, React로 해커톤/동아리 홈페이지 개발을 하다가 Java+Spring으로 공부를 하고 회사에서는 Kotlin+Spring으로 개발을 하다보니 드디어 내게 적성에 맞는게 뭔지 찾은 것 같다.

아직 남들에 비해서 뛰어나지는 못하지만, 한 달간 내가 선택한 분야를 만족하면서 더 실력을 키워나갔다는 점에서 내 삶에서 정말 유익했던 한 달 이라고 생각한다.

인턴 경쟁률도 꽤 높았는데, 아직 2학년이고 백엔드 프로젝트도 한개밖에 없었던 내게 기회를 주신 회사에게도 감사하고, 함께 프로젝트 하면서 내게 맞춰주신 동료 인턴 ML개발자, 프론트엔드 개발자님들에게도 감사하다.

무엇보다 내게 옆에서 공부해야할 것들을 알려주시고 내 코드를 보완하기 위한 좋은 방법들을 제시해주신 동료 백엔드 인턴 선배님에게도 정말 빚이 많은 것 같다.

앞으로 더 열심히 노력해서 나도 누군가에게 든든하고 함께 프로젝트 하고싶은 사람으로 남고싶다.


내 생각

팀 프로젝트의 목표이자 가치는 "가장 좋은 것을 만드는 것"이 아니라고 생각한다. (물론 좋은 것을 만들어야하는 것은 틀린 말은 아니다. 회사에서는 얼추 그럴지도 모른다.)

특히나 학창시절에 하는 팀 프로젝트에서 내 자신이 가장 성장할 수 있는 방법이자 개발자로서 학창지절에 팀 프로젝트를 강조하는 이유는, 동료와 소통하며 발맞추어 서로가 성장할 수 있는 기회를 찾고 그 기회를 잘 활용했느냐가 중요하기 때문인 것 같다.

프로젝트는 기술적으로 향상을 이루는 것도 당연하지만 적어도 팀 프로젝트에서는 테크니컬한 성장 이외에도 얻어갈 게 참 많다고 생각한다. 같은 시간을 보내더라도, 이러한 가치를 알고 도전하고 노력하는 사람들은 더 많은 것을 얻어가리라 생각하며 나도 항상 바른 마음가짐으로 같이 프로젝트 하고 싶은 사람, 같이 일하고 싶은 사람이 되리다.