Search
Duplicate

2021년 3월 2주차 회고록

부릉부릉 아는 후배의 이직준비와 면접일정을 들으면서 불타오르는 상반기.
작년 12월 말부터 계속된 번아웃상태도 꽤 많이 긴 휴식기를 지나 대략 1달반정도를 어영부영 보내고 요즘엔 다시 텐션올라가서 일정을 소화하고 있다. 3월 2주차는 내가 생각보다 스프링 기본기가 약하다는 생각에 스프링 인강정리부터 ATDD과정까지 진행했다.

Background Music

사실 몇년전에 공부할때나 출근길에 그냥 유튜브 인기곡, 혹은 멜론 인기곡으로 정렬해서 듣다가 가끔 들어봤던 노래였다. 그때 후렴구부분이 정말 좋다고 생각은했으나 원래 걸그룹 노래 듣는편이 아니라서 인기곡 플레이리스트에 나올때가 아니면 듣지도 않았기에 이 노래가 브레이브 걸스 노래인지도 몰랐고 나는 브레이브 걸스가 누군지 얼굴도 몰랐다.
그러다 갑자기 해당 노래가 역주행하면서 보게되었고 그뒤로 그냥 계속 틀어놓고 살았던것 같다. 물론 계속 이 노래를 틀지는 않았고 와이프가 보면 심기불편하실까봐 한번씩 시청기록도 지우고 그랬다가 친구와의 술자리에서 친구가 집에서 3시간동안 이노래만 틀어서 정신나가는줄 알았는데, 그뒤로는 나도 3시간씩 듣고 있다...
신곡도 있다고 해서 다른 노래도들어봤는데 사실 다른노래는 딱히 특이점이나 엄청 좋다고 느끼는건 아니라 이노래만 듣고 있고 있다. 이 기세면 사실 3주차 회고록의 Background Music도 이 노래가 되지 않을까싶다 ㅋㅋ
< > < > < > < > | | | | / \ / \ / \ / \
Rollin, Rollin, Rollin~

Spring 핵심 원리 강의 수강

사실 이 강의를 구매한건 나왔을 당시였으니 몇달쯤 된 것 같다. 그렇기에 이 강의를 듣기 시작한것도 구매가 아니라 이번에 김영한님이 새로 개설인 웹 MVC강의가 열렸기에 구매버튼을 누르면서 이렇게 쌓이면 답이 없겠다 생각하면서 시작하게 되었다.
분명, 이름 그대로 기본편은 맞다. 나오는 대다수의 키워드들도 많이 들어본것들이 많다. 내부 예제프로그램도 실무를 겪어본사람이나 공부를 좀 한사람들이라면 익숙하다. Domain, Model, Service, Repository 등등..
하지만, 이 스프링이 왜 자바진영의 대표 프레임워크이고 어떤 장점이 있는지 알고 쓰는사람은 그렇게 많지 않다
그냥 기능이 많고 대표적으로 취업잘되서 쓴다 이정도가 많지 않을까?
김영한님의 강의 장점인 친절한 디테일이 이런부분에서 잘 나오는데, 자바의 강점인 객체지향프로그래밍을 스프링과 엮어서 설명하고 이를 예제를 통해 수강생들이 직접 따라치면서 따라올 수 있도록 한다.
나는 현재 ATDD과정을 듣고 있기 때문에 해당 과정의 각 계층들을 최대한 ATDD 혹은 TDD를 이용해서 검증하는 과정을 추가하고 있다.
그러면서 느끼는게 내가 많이 부족하다는 점이였는데, 생각외로 내가 아무 생각없이 어떤원리인지 정확히 판단하지 않고 쓰는 어노테이션들이 있었고, 인터페이스의 강점에 대해서도 잊고있었던 것 같다. 이번 과정에서 설계부분에서 인터페이스를 설계하고 구현체로 유연성을 넓히면서 새삼 인터페이스와 객체지향의 아름다움에 취한다.
하지만, SOLID라는 원칙중 아직 OCP와 DIP가 어떤식으로 스프링을 통해 해결되는지 정확한 이해는 계속 과정을 진행하며 체감해야 할 것 같다.
현재는 챕터2까지 포스팅을 마쳤으며 블로그 혹은 git을 통해 확인 가능하다.

ATDD

어느덧 nextStep의 ATDD 과정을 시작한지 2주차다.
현재는 2주차 3번째 미션을 제출한 상태이며 리뷰를 기다리고 있다.
TDD과정을 수강하고 수료할때까지 정말 많은 테스트 케이스를 작성하고 리뷰를 받으면서 학습할때도 TDD가 중요하다는 점은 알고 있었지만, 이걸 실무에서 어떻게 적용해야할까라는 막연한 생각과 정말 많은 연관관계들로 복잡한 DB들을 어떻게 테스트해야하지 하는 막연한 생각으로 실무에서는 아직 TDD를 제대로 도입하지 못하고 있는 상태였다.
그런데, 이번 과정에서는 이런 상황에서 어떻게 테스트를 진행하는지와 ATDD의 방식 그리고 리뷰어분의 리뷰를 통해 알게 된 BDD방식과 유사하지만 좀 더 테스트를 세밀하게 보이게 하는 계층형 행위방식 테스트를 사용해보면서 대략적으로나마 이렇게 인수테스트를 진행해야겠구나 라는 느낌을 받고 있다.
그리고 정말 생각보다 많은 테스트 도구들이 있었는데 예를들어 더미데이터들을 준비해주는 stubbing도 Mock부터 시작해서 SpringStubbing까지 다양한 방식이 있다는걸 알게되고 리뷰어분을통해 FakeObject도 도입하면서 참 많은 방식을 시도해보고 있다.
그리고 도메인테스트, 서비스테스트, 인수테스트에 대해서 그냥 적당히 하나로 퉁쳐서 적당히 테스트를 했을때와다르게 이제는 도메인, 서비스, 인수테스트를 각각 다르게 테스트 하게된 것 같다.
이러한 테스트는 통합(Sociable)단위인지 고립(Solitary)단위인지 고려해야 한다.
나는 지금까지 주로 통합단위로 테스트를 진행하는지라 매번 많은 DB세팅을 기다리면서 작업해야하는지라 시간이 상당히 걸렸었다. 그러다 이번에 고립 테스트를 알게되어 진행하면서 많은 시간적 이득을 얻은 것 같다.
물론 이런 고립테스트를 하기위해서는 Test Double이라는 테스트 목적으로 실제 객체대신 사용되는 것들에 대해 학습해야 한다. 흔히 들었을 Mock이라는 키워드로 시작해서 더미객체, Test Stub, Test Spy, Fake Object등 많은 종류가 있다.
나는 이 중에서 MockitoExtension, Spring을 활용한 Stubbing, 그리고 FakeObject를 사용해서 테스트를 진행했다.
이러한 가짜 객체를 사용하면 테스트 대상을 검증할 때 외부로부터 격리시킬수 있어서 고립테스트를 하기 좋다.
하지만, 매번 테스트를 작성할때 협력 객체들의 상세 로직들을 파악하고 제공해줘야하는 Test Double을 하나하나 구현해줘야 하다보니 번거로운 부분도 상당히 존재했다.
리뷰어분은 그래서 초기에 Fake Object를 만들어서 inMemory로 구현을 한다고해서 따라해보고 테스트도 성공을해보니 나쁘지 않은방법같다. 하지만 초반에 기존 실제 협력객체와 동일한 동작을 제공하도록 따로 다 만들어줘야하다보니 비용소비가 이 역시 꽤나 있기에 간단하게 라이브러리를 이용한 Test Double이 가능한 상황에서는 이를 사용하는것도 좋아보인다.

ETC

그밖에 ATDD, 스프링 공부를 하며 추가적으로 모르는 부분들을 따로 포스팅하면서 공부를 했는데, 사실 너무 기초적인걸 내가 제대로 모르고 있었다는 생각이 들었다.
테스트에서 통합과 고립이라는 키워드로 공부를 하다보니 블랙박스테스트와 화이트박스테스트라는 키워드를 마주하게되었는데, 이건 분명 학부생때 들었던건데도 가물가물해서 따로 또 포스팅을 했다.
그리고 객체지향 프로그래밍에서 지켜야할 원칙 5가지 SOLID에 대해서도 매번 익숙하고 아는데도, 설명하려면 가물가물한 어설픈 지식이기에 다시 한 번 정리했다.

지인의 이직준비를 듣는 입장

취업도 비슷한 시기에 했던 아는 동생이 슬슬 이직을 준비하고 있다.
나랑 비슷한 시기에 개발자로써 커리어를 시작한 동생이기에 이런 소식은 한 번 더 내게 이직에 대한 생각을 하게 만들었다.
공부는 나름 어느정도 하고 있으나 내가 커리어를 늦게 시작하게 한 이유와 비슷하게 이직도 미루고 있는 실정이다.
겁이 많은편이라 욕먹기가 싫으니 좀 더 열심히 해서 많이 아는상태로 가야한다는 생각으로 새로운 도전이나 이직을 시도조차 안하고 있었는데, 지인은 이직을 준비하며 이미 작지 않은 회사 두곳과 면접까지 진행을 했다.
회사명을 들은 나는 잡플래닛에 검색을 해보니 둘 다 평가도 좋고 연봉도 높은 회사였다.
역시 이직만이 답인가? 싶지만, 아직 나는 준비가 부족하다는 생각만 들고 있어 쉽사리 도전을 할 자신이 없다.
그리고 자신이 생길만하면 모르는 키워드들과 모르는 기술들을 듣게된다.
그리고 공부했던 분야에 대해서도 시간이지나면서 가물가물해서 입으로 조리있게 설명을 할 수가 없으니 더욱더 그런 것 같다. 일단, 올해까지는 열심히 준비하면서 하반기부터는 이력서도 내볼까 하는 생각을 가지고 3년차가 될쯔음 이직이 완료되는걸 베스트 케이스로 보고 있으나 앞으로 일정은 어떻게 될 지 모르는 것이니 일단은 꾸준함을 무기로 공부를 이어나가야 할 것 같다.