티몬에서 서버 개발 인턴으로 지내보기 - 개발 2주차

2019. 7. 28. 22:57Spring

티몬에서 개발 인턴을 하면서 정말 많은 것을 배우고 느끼고 있다. 

 

 

개발을 시작하기 앞서..

본격적인 개발을 시작하기 전, 함께 서버 사이드를 개발해 나갈 서버 동기(이하 백동기)와 본인의 공부 과정, 방식 등을 공유하는 시간을 가졌다.

 

백동기는 친구들과 스터디를 진행하며 각자 짠 코드에 대한 리뷰를 해오는 공부를 했다고 하였다. 실제 깃허브에 올라와 있는 동기의 repository에는 어느 정도의 컨벤션을 갖춘 코드에 객체 지향적 설계를 하고자 했던 흔적들이 곳곳에 보였다.

 

그 모습을 보며

하드 코딩을 남발하며 짧은 기간 내에 기능을 구현하기에만 급급했던 나의 프로젝트 경험들이 부끄럽다는 생각이 들었다.

하지만 배운 점도 분명 있었기에-  여하튼, '멋있다'고 생각했다.

 

이번 프로젝트에서 정말 많은 것을 배울 수 있을 것 같다는 기대감이 커졌다 !

(그리고 정말 배우기만 한 것 같은 개발 2주를 보냅니다...)

 

 

낯선 환경과 기대감

본격적인 기능 구현을 앞두고 선택한 기술 스택에도 나의 기대감이 표현되었다. 

(아주 짧은) 나의 코딩 경력에서 스프링부트 + JPA + MySql는 (더불어 intelliJ까지) 한 번도 경험해보지 않은 스택이었다. 

참고로 단 한 번뿐이었던 나의 스프링 개발 경험은 스프링 + MyBatis + Oracle (Eclipse)였다. 

 

'생산성을 높이자'는 이유가 해당 스택들을 선택한 이유의 첫 번째였지만,

'익숙하지 않음'이 내 마음속 첫 번째 선택 이유였다...

 

결국, 이러한 선택은 1주 차의 나를 굉장히 어렵게 만들었고,

2주 차의 나에게는 어느 정도의 편안함을,

3주 차의 나에게는 당혹감을 주고 있다.

(많이 배우고 있다는 이야기입니다..;)

 

 

공유와 리뷰

개발 2주 동안,

백동기와 설계한 기능을 나눠 구현을 진행하였는데 각자의 기능을 어느 정도 완성할 때마다 공유의 시간을 가졌다. 

기능을 구현하면서 본인이 새롭게 알게 된 내용과 작성한 코드를 설명하고 개선점을 이야기하는 시간이다.

 

나는 주로 피드백을 받고 백동기의 로직을 이해하기 바빴지만

백동기는 나에게 항상 조금 더 납득이 되는 혹은 효율적인 방법을 제시해주었다. 

3주, 4주 차 때는 나도 백동기에게 피드백이 될 수 있는 한 마디라도 할 수 있지 않을까 생각해본다.

 

개발 첫째 주 금요일에는 멘토님과의 코드 리뷰를 통해 내가 작성한 코드에 대한 리팩토링을 진행하였다.

현직 개발자님(?!)에게 처음 받는 코드 리뷰였기 때문에 긴장도 되고 어려웠지만 유용하고 스스로 돌아보는 시간이 되었다. 

기능에 복잡한 로직이 별로 없었던 터라.. 기본적이면서도 내가 놓치고 있던 부분들을 콕 집어주셨다.

 

2주 차 때도 코드 리뷰를 진행할 예정이었지만 

기능 구현에 바쁜 우리를 위해 멘토님께서 30분 정도의 짧은 시간 동안 코드 리팩토링을 도와주셨다. 

(멘토님께서는 이외에도 더 많은 도움을 주신다 ! 든든 )

 

 

백동기와 멘토님과의 리뷰 및 리팩토링의 시간은 

아래 내용에서 언급할 중요한 3가지를 확인하는 기회가 된다. 

 

이유 없는 이유

인턴 생활하면서의 개발 과정에는

아래 3가지가 필수였다.

 

 

방금 작성한 code 한 줄에 대해

1. 무엇을 하려 작성했는지

2. 어떻게 작동하는지 (흐름과 원리)

3. 장.단점이 무엇인지 -> 필요성

 

멘토님들의 질문 또한 1번부터 3번까지 흘러간다.

1. 왜 사용했나?

2. 어떻게 작동하나?

3. 이러한 경우에는 어떻게 하나? 더 좋은 방법은 없는가?

 

 

따라서 위 3가지 중 하나라도 대충 넘기면 어물쩡 대답을 못하는 상황이 발생할 뿐만 아니라 

본인이 작성한 코드에 대한 자신감과 설득력을 잃어버린다.

그리고 이는 결국 빈틈 많은 로직을 짜버린 개발자가 되는 길이다.

 

정신없이 새로운 것을 공부하고 배우고 작성하는 와중에 

위 3가지를 잡으며 진행하는 게 쉽지는 않았다. 지금도 어렵다.

하지만 첫 번째만 고려하던 과거와는 다르게 조금은 더 설득력 있는 코딩을 하고 있는 기분이다.

 

 

테스트 코드

위 3가지를 결정짓게 도와주는 것이 바로 테스트 코드라고 한다.

테스트 코드를 작성하다 보면 '특정 상황에 특정한 값이 나오는 기능을 만들어야지!' 라는 생각이 든다고 한다. (TDD*)

 

하지만 안타깝게도

나는 아직까지 테스트 코드의 중요성을 직접적으로 느껴보지 못하고 있는 상황이다.

간단한 로직의 API에 대한 목 테스트를 작성해보았지만 해당 목 테스트 또한 제대로 작성한 건지 감이 안 잡히는 상황이다.

 

따라서 3주 차에는 

단위 테스트, 통합 테스트. 그리고 예외처리에 좀 더 신경을 써 볼 예정이다.

멘토님의 말씀처럼 테스트 코드 작성 경험이 내가 경험하고 있는 인턴 기간 중 얻게 될 가장 귀한 경험 중 하나가 될 것 같다.

 

(실제로 3주 차 때는 2주 차와는 다른 경험을 하고 있습니다.)

 

 

그런 의미에서 우아한 테크 코스 과정을 밟고 있는 한 개발자 분의 블로그를 참고하며

작성해보자..

https://pjh3749.tistory.com/241

 

[AssertJ] JUnit과 같이 쓰기 좋은 AssertJ 필수 부분 정리

AssertJ가 core document를 새로운 github.io로 이전했네요 :) . 본 글은 AssertJ 공식 문서를 핵심 챕터를 선정하여 번역하며 정리한 글 입니다. http://joel-costigliola.github.io/assertj/assertj-core.html A..

pjh3749.tistory.com

 

새롭게 배운 점?

기술 멘토님께서 개발 2주 차를 보내면서 느꼈던 점을 남겨보라고 코멘트하셔서 오랜만에 공개 블로그를 작성해본다. 

멘토님께서 블로그 내용으로 제시했던 것 중 하나는 새롭게 배운 점이다.

 

 

2주 개발하면서 새롭게 배운 점을 이야기하자면 사실 열 손가락 안으로 셀 수가 없다.

 

스프링 팀에서 권장하고 있는 의존성 주입 방식,

multipartFile 객체를 활용해 이미지를 받고 서버단에 저장하는 방식,

Lombok 어노테이션,

JWT와 같은 토큰 인증방식,

Advice와 interceptor의 차이점 등등...

 

곧 구현하게 될 웹 소켓 또한 새롭게 배우는 내용이 될 것이다.

안 그래도 몇몇 내용은 이제부터 틈틈이 해당 블로그에 정리를 해봐야겠다는 생각이 든다.

 

 

첫 번째 글은 

이미 이전에 슬쩍 올려둔 의존성 주입 방식에 대한 글이다.

100%로 이해했다고는 아직은 장담할 수 없기에(눈물) 다른 분의 글을 참고하며 작성한 부분이 많은 글이다. 

https://heedipro.tistory.com/276

 

스프링 의존성 주입 방식

프로젝트를 진행하던 중 멘토님께서 요즘 스프링에서는 의존성을 주입할 때 @Autowired 를 사용하는 대신 final, 생성자 주입 방식을 추천한다고 말하셨다. 스프링 사용 경력이 한 번 밖에 안되는 나는 @Autowired..

heedipro.tistory.com

따라서 추후에 나만의 표현 방식으로 다시 정리할 필요가 있는 글이지만..

 

 

그 외로

처음 접하는 기술 및 스택으로 이것저것 구현하며 개발 방법론을 정립해나가고 있지만, 그 외로

앞으로 개발자로서, 신입 사회인으로서 느끼는 부분도 많다.

 

오늘은 지나가다 보셨는지 

다른 랩실의 선배님께서 인사를 잘해서 준다며 한 권의 책을 건네주고 가셨다. 

이는 더 열심히 인사를 하는 계기가 되었다.... ;^)

 

Rest Api를 개발을 해보고 싶다는 생각을 가진 지 대략 4~5개월 만에

티몬에서, 이커머스 기업에서 (비록 과제지만) 웹 개발을 하고 있다는 생각에 새삼 놀라웠다. 

길다면 긴 시간이지만 나름 짧은 시간이 지나고 하고 싶은 일을 하게 되어 더 열정이 솟아나는 것 같다. 

나와 같이 열정적이고 친절한 동기들과 예리하고 스윗하신 선배 개발자분들 속에서 

그 어느 때보다 새롭게 배우는 것이 많은 2주였다. (개발 공부를 하며 새롭지 않았던 순간은 없지만) 

 

 

 

3주 차 때는 더 기본에 충실하고, 방향을 잃지 않고, 재밌게 진행할 수 있도록 해야겠다.