부스트캠프2019 멤버십 WEEK8
저번 주차에 나에게 조금 위로의 말을 건내본 덕인가, 조금 편안하게 미션을 할 수 있었다. (그렇다고 완성도가 눈에 띄게 좋아진건 아니다ㅎ)
계획했던 기능을 모두 다 만든 것은 아니지만, 그래도 이번 프로젝트에서는 다 해내지 못했다는 스트레스에서는 조금 벗어날 수 있었다. 조금 손봐야하는 기능들이 몇몇 있지만, 그래도 핵심적으로 구현해보려고 했던 기능들은 완성해낼 수 있었기 때문이다.
지난 미션에서와는 달랐던 좋은 점
기억보다는 기록
이번 미션에서는 좀 더 확실히 알고써보자는 마음으로, 쓸 기능들에 대해서 먼저 문서로 정리하며 학습하는 시간을 가졌다. 이전에 주먹구구식으로 막 학습하다가 구현하는 것과, 미리 내용을 글로 정리한 뒤에 학습하는 것은 조금 느낌이 달랐다. 가장 큰 변화는 내가 구현한 코드에 애정? 자신감? 이 생겼다는 점이다.
[프로젝트를 하면서 Wiki에 정리한 내용]
거기다 이번 주차부터는 앞으로 팀 프로젝트를 같이 할 팀원들과의 코드리뷰 시간도 가졌는데, 누군가 이 글을 볼 것이라고 생각하니 더 자세하게 알아보게 되기도 하고 나중에 블로그에 한번 더 정리해야겠다는 생각을 가지니 좀 더 깊게 내용을 공부해볼 수 있었다.
이 과정이 구현 자체에 도움이 되었는지는 솔직히 크게 체감하진 못했다. 구현 과정은 이러나 저러나 하라는 대로 했기 때문이 별반 다르지 않았기 때문이다. 그래도 이 기술이 왜 사용되는지, 어떻게 동작하는지 파악할 수 있었고 누군가에게 설명할 수 있다는 것에서 큰 의미가 있다는 생각이 들었다.
프로젝트를 하던 당시의 나도 그렇게 생각했는지, 프로젝트에 조금 더 자신감을 가졌던 것 같다. 이전에는 내가 맞게 했을까? 에 대한 불안감이 있어서 좀처럼 속도가 나질 못했는데 이번에는 남들과의 비교를 줄일 수 있어서 모르는 것 때문에 속도가 더뎌진 적은 있어도 틀렸을지도 모른다는 불안감에 속도가 더뎌지진 않았던 것 같다.
한쪽에 집중해보자
이전에는 한쪽 프로젝트를 하면서 다른쪽도 같이 하는 경우가 많았다. 특히 백엔드 미션일 때가 가장 그랬다. 프론트엔드가 없다고 해서 기능이 동작하지 않는 것도 아닌데, 프론트를 좀 더 좋아해서 그런건지 자꾸 프론트에 집착하곤 했다.
이번에는 처음 해보는 React를 사용해야해서 프론트를 손대지 않은 것도 있었지만, 한쪽에 집중해보자는 마음으로 정말 프론트엔 아무것도 없이 백엔드만 작성했다. 정상 동작에 대한 확인은 Postman으로! 프론트엔드가 없어서 조금 아쉬운 점들은 있었지만, 그래도 확실히 한가지에만 집중할 수 있어서 그 분야에 더 깊게 파고들 수 있었던 것 같아서 좋았다.
이렇게 만든 백엔드에 맞춰 프론트엔드를 개발해본 뒤에 생각이 달라질 수는 있겠지만, 적어도 지금은 앞으로도 이리저리 왔다갔다 하기보단 하나의 기능에서 프론트든 백이든 한쪽을 완성한 뒤에 개발해보기로 마음먹었다.
그럼에도 아쉬운 점은 언제나
정말로 확실히 알고 있어?
코드리뷰 시간에, 내가 써본 기술을 쓰지 않은 다른 캠퍼가 동작 방식이 어떤지 한번 물어본 적이 있었다. 충분한 학습 시간을 가지고 이해한 뒤에 썼다고 생각했는데, 막상 남에게 설명을 하려니까 뒤죽박죽 잘 정리가 안됐다. 어렴풋이 아는 것과 확실하게 아는 것은 다르다는 것을 설명을 해보면서 느낄 수 있었다.
학습을 한 뒤에는, 이 기술에 대해 한번 요약해보는 시간을 가져보는 것도 좋다고 생각했다. 오늘 마스터 클래스 시간에 Closure
에 대해 한마디로 설명해보라 라는 질문을 듣고 좀 더 확신했다. 우리들 중 Closure를 쓸 줄 모르는 사람은 아마 없었을 것이다. 미션을 하면서 꽤나 자주 쓰는 기능이었는데도 한마디로 얘기해보기에는 조금 머뭇거릴 수 밖에 없었다. 때문에 앞으론 학습한 기술에 대해 누군가에게 설명을 하거나, 한마디로 요약해보는 습관을 가져보기로 했다.
과제가 아니라 서비스를 한다고 생각해보자
간단히 해보자는 마음가짐과 기능을 빨리 완성해보려는 생각을 했었는지 구현을 해가면서 처음 DB를 설계할 때 너무 간단하게만 생각하고 설계한 것 같다는 생각이 들었다.
숙소 예약 서비스를 만든다고 할 때, 하나의 숙소에는 여러개의 방이 있고, 각 방마다의 특성이 있을 것이다. 가능한 투숙객의 수, 보유하고 있는 침실의 개수 등 여러가지 정보들이 있을 텐데 이런 점을 고려하지 못하고 설계해버렸다.
그래서 이렇게 설계된 DB에는 결국 한 숙소에 똑같은 정보를 가진 방밖에 저장할 수 없게 되었다. 처음에 설계했을 당시에도 최대한 서비스를 한다고 생각하고 했던 것 같은데, 막상 서비스 api들을 만들다보니 허점이 한 두가지가 아니었다.
다음에 이런 설계를 또 하게 되면 useCase별로 DB를 조회한다고 생각하고 설계를 하는 방법도 나쁘지 않을 것 같다. 너무 세세한 useCase까지 하게되면 시간이 오래걸릴 것 같고, 최소한 메인페이지에 대한 큰 useCase 정도로만 나눈다면 이후 DB에 큰 변경점이 생기지 않을 것 같다.
이 프로젝트를 끝내고 나면
저번 세미나 시간에 GraphQL에 대해 발표해 준 캠퍼가 있었다. RESTful한 API에 대해 고민하는 시간을 줄일 수 있는 아주 좋은 방식으로 보였고, 그 방법을 활용해보고 싶었지만 RESTful한 URI도 사용해보지 않았기 때문에 보류해뒀던 기술이다. 게다가 초기 세팅 시간이 좀 걸린다고 해서 마감기한이 있을 때는 적합하지 않다고 판단해 다음으로 미뤄뒀었다.
그래서 이번 프로젝트를 완료하고 나면 똑같은 프로젝트를 GraphQL로 클론 코딩 해보고 싶다는 생각이 들었다. 그럼 RESTful API와 GraphQL의 차이를 좀 더 확실히 체감할 수 있지 않을까? 하는 생각!
이제 다음 주차가 학습 스프린트의 마지막 프로젝트, 프론트엔드 구현이다. 마지막 프로젝트인 만큼 새로운 프레임워크인 React에 대해 잘 학습하고 정리해서 다음 팀 프로젝트에 좋은 밑거름이 될 수 있도록 열심히 해야겠다 :)