Search
Duplicate

2021년 5월 4주차 회고록 - 이펙티브 자바, 기술면접, JPA세미나

블랙커피 블로그스터디가 어느덧 6기를 시작했다.
1기때부터 이번에는 좀 쉴까... 하면서도 신청하던게 어느덧 6기까지 진행되면서 회고록과 포스팅들이 쌓여있는걸 보니 잘 버텼고 해냈구나 하는 생각이 든다.

4주차 포스팅 아카이브

4주차부터는 포스팅의 양이 많아졌다. 이직을 고려하기 시작하면서 다른 회사의 JD(Job Description)를 보고나니, 이것저것 부족한게 많다는생각에 일이 너무 많아졌다.
이펙티브 자바를 메인으로 학습하되, 하루에 기술면접 1~2개에 대해서 포스팅을 하고, 남는 시간에는 네트워크관련 학습을 시작했다.

이펙티브 자바

이펙티브 자바 아이템 12 ~ 아이템 18

기술면접 포스팅

네트워크 포스팅

Node.js 디자인 패턴 바이블

4월 말쯤에 출판사에서 연락이 왔었다. 내용은 새로나올 노드기반 디자인패턴 책 추천평 작성이 가능하냐는 것이였고, 고민하다가 이것도 경험이겠다 싶고, 책 욕심도 생겨서 수락을 했었다. 그러곤 잊고 있었는데, 몇일전 택배로 책을 받게 되었다.
책은 600페이지가 넘는 두꺼운 책이였으며 생각보다 너무 방대한 양이라서 놀랐다.
대략 2달내로는 책을 읽고 추천평을 작성을 해야하는데, 저질러놓고 진행중인게 많아서 가능할려나 싶긴한데, 이미 하기로 한 것을 안할수는 없으니 6월부터는 시간을 어떻게든 내봐야 할 것 같다.
목차를 보면 그래도 여러 패턴이라 하지만, 이미 사용하는 것들도 많고 자바와 중복되는 부분들도 많아서, 생각보다 부담이 크진 않을 것으로 보인다. 가령 예를들어 7장은 생성자 디자인패턴으로 팩토리, 공개 생성자(정적 팩토리 메서드), 빌더, 싱글턴 패턴에 대해 소개하고, 8~9장도 여러 GOF디자인패턴을 노드버전으로 소개하는 것 같으니, 2달 내로는 가능하지않을까 싶다.
다만, 이걸 다 포스팅을 같이 진행하면서 하려면 좀 빡빡할 것 같기도 한데, 그 부분은 일단 진행 하면서 생각할 문제같다.

자바의 정석 스터디 - 완료

자바의 정석 오프라인 스터디가 오늘 네트워킹 부분을 마지막으로 마무리되었다.
정말 오랜만에 하는 오프라인 스터디이기도 하고, 최근 주말에 집에서 마음을 다잡고 공부를 진행하질 못하기에 참가했던 스터디였는데, 리프레시가 많이 되었던 것 같다.
자바의정석을 오랜만에 다시 정독하면서, 내가 놓쳤던부분들을 많이 되새길수 있었고, 사실 업무를 진행하며 콜렉션 프레임워크는 거의 HashMap과 ArrayList로 퉁치고 있는상황에서 다른 콜렉션 클래스들을 다시 보고, 발표자료를 준비하면서 예제코드를 만들어야하니 사용을 하면서 이거 우리 프로젝트의 특정 부분에서 이 콜렉션을 쓰면 더 좋은거같은데? 라는 생각도 하면서, 기본기를 다시 다지는 기회였던 것 같다.
코로나때문에 4명이서 진행하던 스터디였는데, 오늘 스터디에 참가한 사람은 나를 포함해 두 명이였다. 한 분은 바쁘다고 이제 못나온다고 미리 말을 했고, 스터디장님은 체했다고 아프다고해서 불참하게되어서 둘이서 오붓하게 진행을 한 것 같다.
대략 2 달 가량 진행하며 매번 4시간중 1~1시간반정도 발표시간이 끝나면 남는시간동안 모각코를 하기엔 시간이 아까워서 매번 내가 주간에 공부했던 내용들을 발표를 했었다.
HTTP관련해서 실무관련 네트워크 발표, NextStep에서 진행했던 레이싱게임도 미션지를 공유해서 피드백도 해주고 라이브코딩도 진행을 했었다. 근데, 스터디원들이 JUnit도 써본적없고 뭔지도 잘 모르는 상황이라......얼마나 받아들였는지는 모르겠다...
그다음 오늘은 발표하신분이 이제 JPA를 공부한다 하셔서 JPA 기초부터 간단한 다중 관계매핑까지 발표를 진행했는데, 이렇게 발표하는건 어떻게보면 발표하는 내가 제일 공부가 많이 되는 것 같아서 발표를 더 자주하게 되는 것 같다.
6월은 인프라공방 과정에 참가해야하기때문에 힘들지만, 7월에는 다시 한번 오프라인 스터디를 모아봐야겠다.

이펙티브 자바

어느덧 아이템 18까지 포스팅을 완료했다.
이펙티브자바를 해야한다는 생각은 2년전부터 했지만, 이제서야 시작을 하게되었는데 많은 사람들이 가장 인사이트가 컸던 책을 말하라고 할 때 이펙티브 자바를 말하면 사실 이해도 안되었고, 뭐 책 한권에 그렇게까지 인사이트가 될까? 이런 의문을 가지고 있었다.
디자인 패턴책을 다 끝낼때까지도 그냥 이런방식이 있다. 너무 대단하다! 라는 생각보단 그냥 그렇군.. 이런 정도였기에 더 무덤덤했던 것 같기도하다.
그런데 지금은 나도 인사이트가 정말 큰 책 중 하나로 꼽을 수 있을 것 같다.
우리는 클린코드, 클린아키텍처, 객체지향 생활체조원칙등 다양한 방식으로 좋은 코드를 작성하려 한다. 나도 그래서 indent가 2lv 이상 되지 않도록, SOLID를 지키도록, 메서드의 길이가 10~15라인을 넘지않도록하고 그 외에도 여러 규칙들을 지키려 노력을한다.
하지만, 꽤나 상당수는 그냥 권위있는 책, 권위있는 사람이 좋다고하고 그래야 한다고하니까 한다고 해도 너무 큰 과장은 아니였다. 가독성부분에서 조금 읽기 좋아졌다는것을 체감하지만, 그외에는 크게 체감을 하지 못했다고 해야하나.......
그런데 지금 이펙티브 자바에서 아이템들을 읽고 포스팅을하며 정리를 하면서 느끼는게, 내가 이미 하고있는 것들 중에서 이유도 모르고 무심결에 사용했던 방식들이 실제로 왜 그렇게 사용되는지,
IDE를 통해 습관적으로 재정의하던 equals and hashCode가 왜 재정의를 하는지 무심결에하거나 놓치고있는 것들에 대해서 '어째서' 이런 방식을 사용해야하는지에 대해 상세히 설명을 해준다.
내가 개발을 하면서 자주 느끼던 딜레마가 이렇게 뭔지도 모르고 그냥 좋다고 하니까 쓰던 방식들에 대해서 그 이유를 알려주는 부분들이 내게도 큰 인사이트를 주는 것 같다.
그리고 최소한 기본서와 디자인패턴은 끝내고 시작한게 정말 잘 했다고 생각한다.
너무나도 당연하게 여러 디자인패턴이나 문법, 원리를 안다는 것을 가정하고 글이 작성되었기 때문인데, 내가 한 1년전에 이 책을 봤으면 멘탈만 흔들렸을 것 같다.

구글타이머(비주얼 타이머) 공부

요근래 들어 더 그랬지만, 따로 게임에 빠지지 않는 대부분의 시간에는 할게 없으니 공부를 시도하지만, 제대로 집중을 못하고 계속 웹서핑, 유튜브, 메신저를 들락날락 거린다. 그래서 심할때는 1시간의 학습시간중 진짜 학습을 한건 20분이 안될때도 있다.
그렇다고, 놀기를 제대로 하는것도 아니다. 노는것도 피곤하고, 게임을 하는것도 아니고 그저 소파에 누워서 소설책이나 좀 보거나 멍때리면서 핸드폰으로 웹서핑하다가 시간이 너무 아까워서 다시 공부하러갔다가 이런 악순환이 반복된다. 공부도, 노는것도 다 애매하게 되버리니까 이를 어떻게 해야하지? 하는 고민들에 쌓여있었다.
그냥 열심히하자! 라는 마음을 먹고 다른짓 하지말자! 라고 생각해도 어느새 다른짓을 하고있는 나를 발견한다.
그러다가 금요일에 너무 피곤하기도 하고 토요일에 장모님이 방문할 예정이기에 청소도 할 겸 연차를 썼다.
청소와 개인 용건들을 다 마치니 1시쯤이 되었고, 위와 같은 상황으로 공부를 해야겠다고 생각해 책상에 앉았다.
오늘은 또 어떻게 잘 버틸까 생각하다가 예전에 스쳐지나가듯이 봤던 구글타이머가 떠올랐다.
마침 내게는 구글타이머가 실물로는 없었지만, 앱 중에서 비주얼타이머라고 구글타이머와 비슷한 디자인에 기능을 제공하는 애플리케이션이 있었다. 예전에 설치는 했지만 따로 써보진 않았었는데 이번 기회에 써보자고 생각해서 기본적으로 40분 공부시간 20분 쉬는시간정도로 루즈하게 시간을 잡고 시작했다.
그렇게 3시간뒤 느낀점은 어 대박인데? 였다.
진짜 별거아니고 컴퓨터 모니터 밑에 두고 공부를 시작햇는데, 공부하다가 슬쩍슬쩍 아래를 보게되면 정확히 남은시간이 보이진 않았지만 대충 빨간게 남아있다는건 인지가 되었고 그러다보니 집중을 깨트리지 않게 되었다. 그래서 3시간뒤부터는 45분 / 15분으로 설정해서 학습을 시작했는데, 여전히 집중도는 유지가 되었고, 온전히 집중을 할 수 있었기에
쉬는시간에도 마음 편하게 쉴 수 있고, 각각의 시간을 온전히 집중할 수 있었다.
그 결과 1시에 시작한 자습은 새벽 1시가량까지 유지를 할 수 있었고, 참으로 오랜만에 온전히 학습에 집중할 수 있어서 다음날인 토요일에 친구와 만나서 놀면서도 별다른 걱정없이 편하게 쉴 수 있었다.

JPA 세미나

내가 이 노션을 통한 블로그를 시작한 계기가 JPA였다.
공부를 하고 뭔가 기록을 해서 남겨야겠다고 생각만하면서 원노트, 티스토리, 깃블로그 등등 계속 시도를 하다가 뭔가 부가적인 것에 시간을 더 쓰거나 집중을 제대로 못하던 상황에서 김영한님의 JPA 강의를 듣게 되면서 시작은 가벼운 마음으로 스터디카페를 정기결제해서 퇴근 후 3시간씩 포스팅을 시작했었다.
그러다 보니 회사에서 이사님도 이 사실을 알고 로드맵 전체 교육비 지원해줄테니 2달뒤에 교육 세미나를 진행하라고 하셔서, JPA 로드맵을 시작했었다.
그렇게 올 초에는 약 1달반정도 매주 1회 JPA 세미나를 진행했었고, 그 결과덕인지 회사내부 분위기는 마이바티스(MyBatis)로 충분한데 이걸 왜해야하지? 라는 분위기에서 괜찮네 라는 분위기로 일변하고 지금은 queryDSL 라이브러리까지 사용해서 거의 모든 프로젝트에 사용되고 있다.
무튼, 이번에 신입사원이 들어오면서 JPA 교육을 해주라는 오더가 내려와서 약간은 가벼운마음으로 약 2시간 가량 세미나를 진행하면서, JPA가 기존의 헤게모니였던 RDB와 OOP간에 어떻게 끼어들어서 둘의 사상충돌을 완화시켜주고 어떻게 편의성을 제공하는지, 그리고 이 JPA라는 프레임워크가 마냥 장점만 있는것은 아니고 어떤 문제가 있고 이를 해결하기 위한 해결책에 대해서 교육을 하는데, 생각외로 나도 까먹거나 이해를 못하고 넘어갔던 부분이 많았다는걸 다시 깨달았다.
가령 예를들어 양방향 연관관계간에 mappedBy를 어디서 가져야하는가, 관계의 주인(owner)가 가져야한다면 그 주인은 어디였는가? 등등 말로 표현하려니 헷갈리는 부분들이 많았다.
면접 질문에 자주 나온다는 순환참조, N+1 에대해서만 종종 봤었지 이런 기초부분은 놓치면서 또 잊어가고 있었다는 사실을 깨달았다.
자바의 정석 스터디 마지막날에 참가한 유일한 참가자 역시 최근 JPA를 시작했다 하여, 역시 2시간 가량 세미나를 진행했었는데, 교육을 듣는 상대방보다 발표를 하는 내가 더 많은 것을 얻는다는 생각을 했다.
몇년전까지만 하더라도, 많던 적던 사람들 앞에서 발표하는것에 대한 부담을 많이 느꼈기에 좋아하진 않았고, 발표로 인해 얻는게 많다는것은 알지만, 머리로만 아는 상황이였는데 이런 발표들을 계속해서 진행하다보니 이제는 발표를 듣는사람보다 하는사람이 얻는게 많다는 사실을 몸으로 깨달아가면서 발표를 꾸준히 하려고 하고 있다.
7월에는 모두가 발표를 하고 준비를 하는 스터디를 진행해볼 예정이다.