나에게 뜻깊은 기회가 생겨 한달동안 인턴을 하게 되었다.
백엔드 개발자라는 포지션만 정하고 해본게 node.js밖에 없어서 노드로만 개발을 하던 나에게 스프링을 배울 수 있는 기회와 실무 프로젝트 경험을 가지게 되었다.
이 회고는 마지막 프로젝트 발표를 하면서 함께 발표했던 회고이다.
기록하는 걸 좋아하면서 왜 인턴 생활 하면서 기록하지 않았는지... 내 자신이 실망스럽지만 한 번 적은 일기에 많은 것이 담겨 있으니 그거에 만족하기로 했다.
첫 문단은 감사한 마음과 한국인의 정신을 담아 인사로 시작했는데 프로젝트 시연 후 회고하는 거라 인사가 뜬금없단 사실을 발표 후에 알았다. 🥺
실습 흔적!
2022年 1月 회고
만나 뵙게 되어 반갑습니다. 먼저 저에게 인턴의 기회를 주셔서 감사합니다. 이번 인턴을 통하여 소중하고 갚진 경험을 얻게 되었습니다.
모든 게 나에겐 처음
저는 이번 인턴을 통하여 많은 것을 처음 해보았습니다. 백엔드와 프론트엔드를 나누어 팀 프로젝트를 진행한 것도 처음이었고 요구사항에 맞추어 기획과 디자인 및 개발하는 것도 처음이었으며 초면인 사람들과의 팀 프로젝트, 그리고 제일 초면인 스프링으로 개발을 진행한 것을 포함하여 많은 것을 접할 수 있는 기회였습니다.
저는 백엔드 개발자를 꿈꾸고 있으며 node js 서버 개발자를 목표로 하고 있습니다. 저는 단순히 처음 접한 것이 node js여서 계속해서 node js로만 개발을 했습니다. 그래서 아직 배워본 적 없는, 접해본 적 없는 스프링으로 개발을 한다는 건 저에게 굉장히 부담스러운 일이었습니다. 자바를 배우긴 했으나 @를 붙여 서버를 구현한다는 게 매우 생소했기 때문입니다. 그래도 한 번도 접해본 게 아니라고 해서 낙담하지 않고 잘하고 싶은 마음에 인프런에서 스프링 강의를 들어 기초를 잡았습니다. 확실하게 잡은 것은 아니지만 스프링을 어느 정도 이해할 수 있는 단계가 되었습니다.
+) 블로그에 작성하면서 생각한 내용
매사에 자신있게 행동하는 게 저의 모티브인데 자신있게 마주할 수 없다는 점에서 이번 일이 부담스러웠습니다. 하지만 하면 한다는 게 '나'이고 하나를 배우면 열을 이해하도록 노력하는게 '나'이기에 기죽지 않았습니다. 그렇지만 함께 개발하는 친구들이 너무나 높은 실력을 가지고 있었습니다. 제가 감히 따라갈 수 있는 정도가 아니었고, 스프링 관련하여 저에게 물어보면 알지 못하는 지식 분야라 대답하지 못할 때면 자신감이 사라졌습니다.
내가 스프링으로 프로젝트를 한다고 ??!
프로젝트 기능은 단순하게 보면 CRUD를 구현하는 것이었습니다. 저는 이 중에서 계정 조회와 삭제를 맡았습니다. 계정을 생성하거나 수정할 때는 해당 계정이 로그인이 되는지 체크해야되는데, 그 로직이 저에겐 감이 잡히지 않아서 그 부분을 피하는 조회와 삭제를 선택하게 되었습니다. 그런데 계정을 조회하는 부분에서 예상과는 다르게 많은 시간을 소요하게 되었습니다. 계정 조회 및 필터링을 하는 기능에게 주어진 시간은 4시간이었지만 저는 3일을 소요하여 기능을 구현하게 되었습니다.
먼저 3일이나 소요하게 되었던 저의 첫 번째 행동은 플랫폼과 환경으로 필터링한 계정을 조회하는 로직을 번거롭게 작성한 것입니다. 조회 api에서는 전체 조회와 플랫폼만 조회, 플랫폼과 환경을 함께 조회하는 3가지 기능을 수행할 수 있습니다. 한 메소드안에서 3가지 기능을 수행하게 할 수 있는지 감이 잡히지 않아 이 세가지 기능을 파라미터 별로 메소드를 작성했었습니다.
그리고 두 번째 행동은 시간 복잡도에 상관없이 findBy 메소드를 사용하여 로직을 구현했습니다. 모든 것이 처음이다 보니 쿼리문을 작성하지 않고 메소드를 사용하여 값을 찾는 게 신기했습니다. 그래서 사용해보고 싶었다는 단순한 이유를 가지고 기능을 구현했었습니다. 그리고 프로젝트에서 쿼리문은 어디에 작성해야하는 지 잘 몰라서 메소드를 사용하여 코드를 작성하게 되었습니다.
지금 생각해도 그 때의 저는 많은 고민을 통해 코드를 작성했었지만 많이 번잡하고 더러운 코드를 작성했던 거 같습니다. 그래서 멘토님의 도움으로 QueryDSL를 접하게 되었고 QueryDSL을 통하여 쿼리문을 작성하여 한 메소드 안에서 필터링하여 계정을 조회할 수 있게 되었습니다.
제가 개발을 좋아하는 이유 중 하나인 요구하는 값을 프로그래밍을 통해 얻었을 때가 대부분을 차지합니다. 그 중에서도 db에서 쿼리문을 작성하고 요구한 레코드들이 나올 때가 제일 기쁩니다. 그래서 QueryDSL을 통하여 db를 조회하여 제가 요구한 값이 한 번에 나오게 되어 3일 동안의 고민이 모두 해결되었습니다.
협업을 배워가는 과정
친구들끼리 프로젝트를 진행하더라도 최대 2 명이서 개발한 경험밖에 없습니다. 그래서 누군가 제 코드를 피드백 해준다는 기회 조차 가지지 않아 제멋대로 짠 경우가 대부분입니다. 그래서 프로젝트를 진행하다 보면 효율적인 코드보다는 일단은 돌아가게 짜자라는 생각을 가지고 짜게된 경우가 많습니다.
그런데 저는 기능 별 이슈를 생성하고 이슈에 대한 브랜치를 파서 작업을 한 뒤 풀 리퀘스트를 올리고 approved될 때까지 기다린 적은 처음이었습니다. 그래서 프로젝트를 통해 누군가 제 코드를 피드백하여 코드가 효율적이게 바뀌는 게 협업에 필요한 부분이라는 걸 알게 되었습니다. 자신이 맡은 기능은 자신만이 로직을 알게 되는데 코드 리뷰를 통하여 상대방의 코드를 볼 수 있고 그 코드에 대해 자신의 의견을 덧붙여 코드가 더 효율적으로 바뀔 수 있게 되니 말입니다. 물론 저는 프로젝트를 진행하면서 코드 리뷰를 해보지 않았지만 코드 리뷰를 받는 것이 좋았습니다.
그래도 하나는 하고 가야지
저는 이슈 산정을 하고 역할 분담을 할 때 배포를 선택한 게 아니라 이전부터 배포는 내가 맡아야겠다고 생각했습니다.
스프링에서 한 건을 할 수 없다면 적어도 경험해본 적 있는 배포라도 해야겠다고 생각했습니다. 물론 스프링을 배포한 적 없지만 aws를 사용하여 배포하는 것은 동일하니 배포에 대한 욕심이 생겼습니다.
배포를 하면서 처음 접한 것과 경험해 본 것을 처리하는 시간은 꽤 차이가 났습니다. java 관련된 모듈을 다운 받고 깃 클론을 받는 등 기초 작업은 경험해 본 적이 있어서 수월하게 진행되었습니다. 그런데 빌드 후 구동하는 작업에서 꽤 지체되었습니다. 처음 시도는 우분투에서 빌드 후 .jar 파일을 실행 시키는 것이었는데, 빌드 과정에서 ec2가 멈추는 변수가 발생해서 다른 방법으로 시도를 했어야 했습니다. 인터넷에 검색해 본 결과 다른 개발자들도 로컬에서 빌드 후 그 파일을 업로드하는 방식으로 진행한다는 것을 알게 되어 로컬에서 빌드 후 .jar 파일을 풀 받는 방식으로 실행하게 되었습니다.
스프링으로 기능 개발을 했던 2차 스프린트 때는 조금 많이.. 힘들었지만 배포를 하는 3차 스프린트 때는 모든 것이 수월하게 진행되는 기분이었습니다.
부족한 게, 모르는 게 자랑은 아니지만
기능 개발을 할 때 조회 기능을 주어진 시간보다 초과되어 구현하였습니다. 이 때 저는 아직 스프링에 대해 잘 모르니깐 시간이 더 소요되는 건 당연한 거겠지 라는 생각으로 계속해서 한 기능만 부여잡고 있었습니다. 하지만 제가 기능 구현을 하는 건 팀 프로젝트의 일부인데 팀원들에게 시간 내에 개발을 하지 못해 더 시간이 필요하다는 말 없이 개발에 임했었습니다. 이 행동이 팀 활동을 하는데 있어 지장이 생기는 행동이란 걸 알게 되었습니다. 앞으로의 팀과의 협업 과정에서 시간 내 해결하지 못한다면 어떤 문제가 있어서 시간 내에 하지 못하였고 얼마의 시간이 더 필요한지 얘기해야겠다고 생각하게 되었습니다.
그리고 인턴을 하면서 저는 아직 취업하기에는 많이 모자란 걸 깨닫게 되었습니다. 저는 이번 프로젝트를 하면서 깃허브를 제대로 사용하게 되었고 선배들이 왜 깃허브를 사용해보란 걸 알게 된 계기이기도 합니다. 저는 커밋만 열심히 해보았지 이슈를 생성해서 작업해 본 경험은 없었기 때문입니다.
또 저는 낯을 많이 가리는 편인데 말주변도 없어서 단체 생활을 하게 될 경우에는 모두와 어울려 지내기 위해선 말솜씨가 필요한 것을 느끼게 되었습니다. 그래서 만약 제가 능력을 한 개 가질 수 있게 된다면 모든 것을 궁금해하는 능력을 가지고 싶어졌습니다. 모든 걸 그냥 받아들이고 이해하려 하는 습성 때문에 상대방에 대해 궁금한 점을 질문하고 싶어도 할 말이 없기 때문입니다. 아마 궁금한 게 많아진다면 많은 사람들과 빠르게 친해질 수 있지 않을까 생각됩니다.
그래서 인턴 경험 없이, 제대로 된 팀 프로젝트 경험 없이 취업을 하게 되었다면 모자란 저를 많이 자책했을 거로 생각됩니다. 흔히 선생님들께서 취업하면 모두 다 서툴러서 결국엔 자책으로 돌리게 된다는데 제발 그러지 말라고 말씀하셨던 적이 있습니다. 저는 자만심이 가득해서 그래도 회사 들어가서도 잘 하지 않을 거란 반박된 생각을 가지고 있었지만 준비되지 않은 나는 결국엔 자책으로 되돌아 온다는 걸 느끼게 되었습니다.
이번 인턴을 통해서 저는 성장할 수 있었고 미래의 내가 더 성장할 수 있는 밑바탕이 되는 값진 경험을 쌓을 수 있게 되었습니다.
감사합니다
모든 게 처음이었던 저는 누구보다 더 많은 경험을 쌓을 수 있는 기회가 되었다고 생각합니다. 이번 인턴을 통해 프로젝트 진행 방식을 알 수 있게 되었습니다. 기획을 구체적으로 작성한 후에 개발하는 것부터 시작하여 소통의 중요성을 알게 되었습니다. 보여지는 소통은 많이 없었으나 프로젝트에 관한 이야기는 나눌 수 있을 만큼 충분히 나누고 의견을 수렴하여 진행했습니다.
그리고 개발 프로젝트 진행 방식을 알 수 있게 되었습니다. 저는 프로젝트를 진행하더라도 제멋대로 커밋하고 개발을 했었는데, 이번 기회를 통하여 git flow를 접하게 되고 이슈 생성, 풀 리퀘스트, 코드 리뷰를 접할 수 있게 되었습니다. 경험이 없어 몰랐던 저를 이끌고 나아가 주셔서 감사합니다.
멘토님을 통해, 친구들을 통해 스프링을 배울 수 있게 되었습니다. 저는 모르는 게 있다면 질문을 하기 보다는 직접 찾아서 해결하는 편입니다. 그래서 업무 시간은 동일한데 친구에게 물어볼 경우 그 친구의 시간을 뻈는 거 같아 처음에는 질문을 주저했지만, 검색하는 것보다 친구에게 물어보는 게 훨씬 빨리 진행될 거라 생각했고 친구도 충분히 아는 내용이었기에 마다하지 않고 알려줄 수 있을 거라는 생각 하에 질문을 주저하지 않게 되었습니다. 그리고 제 코드를 더 나은 방향으로 나아갈 수 있도록 멘토님의 코드 리뷰를 통하여 스프링의 코드 구현 방식을 접할 수 있게 되었습니다.
다시 글을 정리하려고 했는데 넘 길게 써서 읽다가 포기했다.
이거 언제 쓰고 발표했니...??
제 발표를 들어주셔서 감사합니다. ㅠㅠ
댓글