우아한테크코스 레벨2(7~8월)가 끝났다. 기념으로 회고를 작성하기로 했다.

지난 두 달간 배운 것들

레벨1 때는 자바, 클린코드, TDD, 페어프로그래밍을 위주로 배웠다면, 레벨2에서는 스프링을 위주로JPA, 배포, AJAX를5주간 배운 뒤에3주간 미니 프로젝트를 했다.

  • 스프링은 사용하면서 경험해보는 목적으로 스프링부트로 진행했다. 스프링을 처음 배우는 사람도 있고 이미 경험해 본 사람들도 있어서 간단한 미션을 주고 원하는 사람만 진행하는 추가 미션이 있었다. 사실 스프링을 조금 알고 있었는데도 막상 해보니 아주 간단하지도 않았다. 특히 이번에 처음으로ControllerAdvice, Interceptor, ArgumentResolvor도 처음 사용하면서 많이 배울 수 있었다.

  • JPA는 원리와 관계매핑을 배웠다.

  • 배포는EC2에 올리고 쉘스크립트를 작성했다.

  • AJAX는 기본 개념과 바닐라 자바스크립트로 진행했다.

  • 미션은 5명의 팀원들과 진행했다. 유튜브, 페이스북, 인스타그램 중에서 하나를 선택해서 3주간 따라 만들었다. 협업에 대해서 배울 수 있었던 경험.

반성

적당히

레벨2가 끝나고 현재 방학을 보내는 중이다. <소프트웨어 장인>이라는 책을 읽고 있는데, 나를 반성하게 하는 문구 두 개를 발견했다.

일을 하는 것도 중요하지만 그에 못지않게, 일을 어떻게 하느냐도 중요하다.
훈련할 때는 작성 가능한 최선의 코드를 만드는데 집중해야 한다.

레벨2에서는 레벨1 때와 달리 미션에 최선까지는 다하지 않았다. 현재 코드가 잘못되었고 더 나은 해결책을 알고있는 상황에도

음, 이걸 리팩토링하려면 수정할 부분이 많아지네? 알았으면 됐지. 뭐, 다음에 적용하자. 이 시간에 차라리 다른 거 공부하자.

적당-히, 적당히 했던 감이 있다.

이 책에서 말하듯이, 훈련할 때는 완벽을 추구하는 습관을 길러야 한다. 이게 몸에 배이면, 실제 업무 상황에서도 자연스럽게 적용된다고. 공감할 수밖에 없었다. 돌이켜보니 어떤 날은 같은 실수를 반복하기도 했고, 옳다고 믿었던 해결책은 막상 해보니까 틀렸다는 게 증명되기도 했다. 내가 직접 해보기 전까지는 백퍼센트 확신할 수 없다.

앞으로는 모든 미션에 최선을 다하자.

질주 후 퍼짐

마치 100m를 전력질주하고 팍 지치는 것처럼, 나도 무언가를 할 때 전력을 다하고 마지막에 가서 퍼지는 경향이 있다는 사실을 최근에 깨달았다. 지쳐서 그런가 생각해보면, 사실 체력은 충분했다. 아마도 목표를 이루고 나면 허무해지는 증상과 비슷한 게 아닐까 싶다. 미션을 빨리 끝내고 시간 여유가 있으면 리팩토링이나 다른 공부를 하면서 시간을 생산적으로 보내야 했다. 흘려보낸 시간이 다소 아깝다. 앞으로는 마지막까지도 열심히 해야겠다. 그게 안 되면 목표를 더 높게 잡든지...

잘한 일

도전에 대한 두려움이 사라졌다

예전부터 검색 서비스에 대해서 관심도, 궁금한 점도 많았다. '초성만 입력했는데, 잘못 입력했는데 어떻게 추천 검색을 해주는 걸까?' 이런 것들. 이 문제를 해결해주는 방식 중에서 ‘엘라스틱서치’라는 검색엔진이 있다는 사실을 알게 되었지만, ‘지금은 할 때가 아니다’ 또는 ‘너무 어려울 거 같다’는 생각으로 항상 미루었다.

그러다가 이번 페이스북을 따라 만드는 프로젝트에 참여해 검색을 개발했다. MYSQL의 LIKE로만 검색하니까 너무 아쉽다는 생각이 들어서 엘라스틱서치 적용에 도전했다. 처음에는 가볍게 생각했다. 인터넷에서 소스를 가져다가 적용해서 인사이트만 얻자는 계산이었다. 하지만 막상 해보니까 달랐다. 엘라스틱 자체는 많이 어렵지 않았지만, 버전마다 변화되는 부분이 많아서 꽤 삽질을 했다. 과정이 길어졌지만 어쨌든 결국 해냈고, 어느정도 이해도 하게 됐다. 뿌듯했다.

작년까지만 해도 어렵고 새로운 문제에 직면하면 이걸 내가 할 수 있을까, 라는 두려움이 있었다. 현재는 뭐든지 할 수 있다는 자신감이 생겼다. 적지 않은 수확이다.

프론트

나는 프론트를 정말 싫어했다. 필요할 때마다 인터넷에서 소스를 찾아서 변경하는 식으로 했더니 방법도 원리도 제대로 몰랐다. 그래서 레벨1 때도 다른 사람들은 Javascript를 쓸 때 나는 HTML만 사용했었다.

그런데 이번 과정에는 프론트 교육이 조금 있어서 바닐라 자바스크립트를 배웠다. 그전에는 항상JQuery를 썼는데 순수 자바스크립트만 사용하다 보니 어느 정도 원리가 이해되기 시작했다. 하지만 여전히 재미는 없었다. 그러다가 미니 프로젝트로 페이스북을 따라 만들면서 댓글을 담당했는데, 이때 프로그래밍하면서 처음으로 벽을 만났다.

그동안 내가 작업해본 게시판은 글목록에서 [상세보기]로 들어가야 댓글이 보였는데, 페이스북은 한 번에 여러 개의 글과 댓글을 보여준다.

  • 응..? 어떻게 댓글을 보여주지? 댓글을 클릭하면 어떤 글인지 식별은 어떻게 하지?
    (data-id 사용)

  • 내가 아는 건document.getElementById()랑document.getElementByName() 밖에 없는데..
    (closest, querySelector 사용)

  • 이벤트는 글마다 다 등록해야 하나? 전체를 해야 하나?
    (전체를 등록 후 event.target으로 해결)

  • 대댓글은..?

정말 고민 많이 했다. 어떻게 해야 할지 감이 안 왔으니까. 엄청난 삽질 덕분에 결국에는 해결했다.

<div class="card widget-feed padding-15" data-id="${post.id}">    

    ...

const getComments = (event) => {
const postCard = event.target.closest('.card')
const postId = postCard.dataset.id
const commentsContainer = postCard.querySelector('.comment-list')
            ...

코드가 썩 만족스럽진 않았지만, 해결했다는 사실 자체가 너무 기뻤다. 그리고 대댓글까지 구현하면서 어느 순간부터 이해가 조금씩 되기 시작했다. 특히 DOM에 대해서 조금은 알게 되니까 어지간한 건 해결할 수 있다는 자신감도 생기고 재미있어졌다. 그래서 현재는 하루에 30분씩 자바스크립트를 공부하고 있다ㅎㅎ

블로그

지난 두 달간 8개의 글을 썼다. 글또 모임 덕분이지만 꾸준히 글을 쓰게 되었다는 점이 정말 자랑스럽다. 여전히 글 하나 쓰는데 오래 걸리고 부족한 부분이 많지만, 앞으로 더 좋아지겠지.

드디어 회고 작성을 끝냈는데, 또 다시 느낀다. 여전히 글 쓰는 건 정말 어렵다!

남은 올해도 마지막까지 최선을 다해서, 더 나은 모습으로 발전할 수 있길. 조금 더 발전한 내 모습을 만족스럽게 기록하는 날이 오길.파이팅.