ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TWIL #5 | Kpop Of The Day 작업 회고. 조금 비틀대지만 혼자만의 리듬을 찾는 중!
    📝 기록/매주의 기록 2022. 9. 24. 02:08

    원래 주간 회고는 항상 정해져 있는 템플릿에 작성을 했는데, 이번 주는 개인 프로젝트 회고가 위주이기에 프로젝트 내용을 정리하며 줄글 형식으로 작성해본다. 앞선 이번 주 TIL에도 말했지만 5주차는 개인 프로젝트 기간이었다. 4주 동안 배웠던 Java, 객체지향, Gradle, Swing UI, JUnit 테스트를 활용해서 하나의 프로젝트를 만드는 기간이었는데, 나는 Kpop of the day라는 플레이리스트 공유 서비스를 만들었다. 내가 처음 설계에 작성했던 시나리오와 유저 스토리, 클래스 다이어그램을 일부 캡쳐해왔다. (더 많은 내용은 내 깃허브에서 확인할 수 있다.)

    ⚠️ 초안이기에 달라진 부분이 많습니다.

    우선 요구사항 중에 도메인 모델을 최소 8개 이상 사용해야 한다가 있었기에 위와 같이 클래스 다이어그램을 설계했고, 크게는 로그인/회원가입, 추천 플레이리스트 확인, 플레이리스트 등록, 플레이리스트 보관 등의 기능을 구현하려는 계획이었다. 근데 리뷰로 기능이 너무 많기 때문에 MVP 구현을 위해서는 로그인/회원가입을 없애고 플레이리스트가 줄 수 있는 핵심 가치에 집중하라는 코멘트를 받았다.

    그래서 기획을 중간에 수정하여 로컬 디바이스 전용 앱으로 바꾸게 되었다. 근데 나의 기획이 약간 로그인을 해야지 보관 기능도 추가할 수 있고, 시간이 남는다면 댓글 기능도 추가하고 결국 로그인/회원가입이 있어야지 이것저것 할 수 있다 생각했던 기능들만 생각이 나는 바람에 기능을 뭘 추가할지에 대해서 꽤 오랜 시간 고민을 하였고.. 결국 최종적으로 일주일 동안 완성한 것은, 플레이리스트 등록, 조회, 방금 본 플레이리스트 조회 정도로 마무리하게 되었다.


    우선 완성한 기능을 정리해보자면 아래와 같다.

    1. 플레이리스트 조회

    좌) 메인 화면, 우) 플레이리스트 상세 화면

    프로그램을 맨 처음 실행하게 되면, 왼쪽 사진과 같은 메인 화면을 확인할 수 있다. 여기서 '보러 가기' 버튼을 클릭하면 오른쪽 화면의 상세 플레이리스트 화면을 확인할 수 있다.

    2. 플레이리스트 등록

    좌) 등록 화면, 우) 등록 후 메인 화면

    메인 화면 상단의 '플레이리스트 등록' 버튼을 클릭하면 위와 같이 등록 화면으로 이동한다. 여기서 플레이리스트 테마 제목, 태그, 제작자를 입력 후, 노래 제목과 가수 이름을 추가하면 바로 바로 하단의 리스트 패널에 추가가 되고 만약 삭제하고 싶다면 해당 노래 옆의 '삭제' 버튼을 클릭하여 리스트에서 삭제할 수 있다. 큐레이팅하고 싶은 노래를 모두 추가하였다면 '등록' 버튼을 눌러 최종 등록하게 되고, 화면은 메인 화면으로 전환되어 방금 추가한 리스트는 메인 화면에서 확인할 수 있다.

    3. 방금 본 플레이리스트

    좌) 히스토리가 없는 경우, 우) 있는 경우

    지금은 플레이리스트가 몇 개 없어서 상관없지만, 플레이리스트가 많아진 경우 방금 본 플레이리스트가 뭐였는지 알고 싶을 수 있다 생각하여 히스토리 기능도 추가하였다. 메인 화면에서 '보러 가기'를 클릭하는 경우 이벤트를 발생시켜, 해당 플레이리스트 객체를 히스토리 배열에 추가하고 해당 패널에서 방금 본 리스트들을 보여지게끔 작성하였다. 이때 똑같은 플레이리스트가 눌렸을 경우 중복되지 않게 한번만 리스트에 추가되도록 처리하였다.


    이렇게 해서 최종적으로 도메인 모델은 PlayList, Music, Tag 이렇게 3개를 만들었다. 요구사항이 최소 8개였는데 3개 밖에 못 만든 나의 패인은 그럼 무엇인지 생각해보았다.

    프로젝트의 목적 파악 미흡

    이 프로젝트의 목적을 파악하지 못했다. 이 프로젝트는 애초에 4주동안 배운 내용을 집약적으로 보여줄 수 있는 프로그램과 기능들을 구현해야 했다. 그래서 최소 8개 이상의 도메인 모델을 만들어 최대한 복잡한 애플리케이션을 만들라는 것이 이번 프로젝트의 학습 목표였던 것이다.

    근데 여기서 나는 기존에 내가 기획했던 것과 달라져버리니까 그럼 뭘 추가해야 하지? 하는 마음에 날린 시간이 너무 길었다. 이건 아무래도 내가 그동안 프로젝트를 참여할 때 항상 기획부터 설계, UI 디자인, 개발까지 모든 과정을 참여하는 식으로 일을 해왔기 때문에 그 버릇이 그대로 남아있어 이런 결과를 초래하게 된 것 같다. 기획을 제대로 하지 않으면 넘어가질 못하는 습성... 근데 이번 프로젝트에서는 기획이 중요한 게 아니라 얼마나 많은 도메인 모델을 사용했는지이다. 목적을 제대로 파악하지 못하여 중간중간 멈칫한 시간들이 많았고, 집중력도 그다지 좋지 못한 나는 막힐 때마다 멍 때리는 시간도 많았다. 그렇게 시간을 허비하였으니 당연히 이 정도의 작은 스케일은 예상된 결과였다.

    허슬링 결핍

    그렇게 이런저런 생각들에 가로막히니 당연히 몰입도 떨어지고, 금요일까지 MVP 구현을 어떻게든 해내겠다! 무조건 요구사항을 충족시켜야 돼! 하는 마음보다는 '에구... 뭐 어떻게든 되지 않을까...?' 하는 수동적인 마음이 더 컸던 거 같다. 그동안의 TIL에서 항상 프로처럼, 굳이?라는 마음을 의식적으로 훈련하자고 다짐해놓고도 이런 상황이 오면 항상 하던 대로 나이브하게 굴게 되는 것이다. 


    그렇다면 이런 문제들이 재발하지 않으려면 나는 어떻게 바뀌어야할까?

    근데 오늘 데모를 보면서 우지님의 작품을 보는데 그야말로 장관이었다. 요구사항을 모두 충족하면서 완벽한 퀄리티의 작품을 만드신 것이다. 어떻게 마감 기한을 지키면서도 요구사항까지 다 충족하셨냐고 주간회고하면서 물어봤는데, 애초에 요구사항을 충족할 수 있는 프로그램으로 설계를 해버렸다고 말씀하셨다. 여기서 나와 시작점이 달랐구나 싶었다. 당장에 집중해야 하는 것을 선택해서 집중하여야 하는데, 정말 정말 심각한 수준으로 생각이 많은 나는 이 모든 걸 다 아우르려다가 뭣이 중헌지를 계속 까먹어버리는 것이다. 

    그래서 이제부터는 과제를 받게 되면 우지님의 작업 방식을 옆에서 보고 배워야겠다. 서당개 삼 년이면 풍월을 읊는다는데 똑쟁이 옆 6개월이면 풍월까진 아니더라도 반 이상은 가지 않을까 싶다.


    Future Action Plan(미래의 행동 계획)

    그럼 이제 다음 주 액션 플랜을 정해보자.

    [지난주 FAP 유지]
    1.
    TIL은 그날 배웠던 키워드 중 가장 기억에 남는 것을 골라 나의 언어로 정리하자.
    2. 설계는 기능 단위로 20분에서 30분 이내로 끝내고 바로 구현에 돌입하자.
    3. 막히면 왜 막히는지에 대해 빠르게 생각을 정리하고 바로 질문하자. 동기분들 혹은 트레이너분들에게.
    4. 마지막으로 즐겁게 코딩하자. 언제나 유쾌함을 잃지 않는 것!(제일 중요✨)
    5. 코딩 도장 문제 풀이는 내장 함수 사용을 최대한 지양하자.
    6. 개념 노트 꼭 출퇴근 길에 읽기.

    [새롭게 추가된 FAP]
    1. 와카타임 100위 안에 들자.
    2. 유쾌하게 작업하면서도 어느 정도의 압박감은 가지자.
    3. 생각을 줄이고 가장 중요도 순으로 작업에 선택과 집중하자.

    1번의 경우, 일단 우리 동기 분들 중에 와카타임 시간이 낮은 사람 나밖에 없다.. OTL... 다들 100위권 심지어 50위권, 20위권, 5위권 안에 계시는 걸 보고 반성하게 되면서도 한편으로는 엄청 동기 부여되더라. 홀맨님이 전원 10위 안에 들면 맛있는 거 사주신다고 해서 다들 칼을 갈고 있는데 내가 민폐가 되면 안 되지! 그래도 처음부터 갑자기 훅 가려고 하지 말고, 일단은 다음 주 목표를 100위권 진입으로 잡겠다.

    9/23 기준 나의 순위
    9/24 기준 나의 순위

    2번의 경우, 나는 학습도 학습이지만 정신 건강이 건강한 게 제일 중요하다고 생각하는 사람으로서 항상 "유쾌하게 작업하기"가 목표이다. 근데 또 너~~무 유쾌하게 작업하니까 작업의 결과물이 만족스럽지 못해 어느 정도의 압박감은 있어야겠다는 생각이 들었다. 유쾌함을 잃지 않으면서도 주어진 과제들을 요구사항에 맞춰 시간 안에 마감할 수 있게 훈련해보자!

    3번의 경우, (물론 나는 생각 많은 내가 좋지만) 당면한 현재 문제는 대부분이 내가 생각이 너무 많다는 것에서 온다. 무슨 기능 하나, 기획 하나 바뀔 때마다 기능 구현 속도가 확 느려지고, 생각을 시작하게 되는데 TIL에서도 꾸준히 말해왔지만 제발 생각은 짧게 하고 바로 타이핑부터 시작하자. 그리고 바로 작업을 할 때는 중요도 순으로 선택과 집중해서 올바른 방향에 몰입하자는 것!!!


    이번 주 주간 회고는 너무 반성할 점만 와다다 늘어놓은 거 같아 그래도 금주에 칭찬하고 싶은 점을 하나 꼽아보자면 프로젝트 리드미 파일 작성을 잘했다는 것이다. 뭐 자화자찬이긴 하지만, 그래도 우리 동기님들이 내 리드미 파일 참고해서 작성하신 거 보면 그래도 꽤 잘했다는 거 아닐까? 내가 진짜 심각한 정리충이라 이런 거 하나는 자신 있다! 캬캬😆

    리드미 파일을 작성할 때 꿀팁은 리드미에는 정말 컴팩트하게 중요한 내용만 적어놓고, 그 밖에 더 구구절절 설명해야 하는 것들은 Wiki 페이지를 활용하는 것이다. 이번 프로젝트 리드미의 경우에는 리드미에는 대표적으로 보여져야 하는 화면 사진을 하나만 놓고 나머지는 Wiki에 작성하였다. 사실 이 Wiki 페이지는 정말 다양하게 활용할 수 있는데, 나는 대부분 프로젝트 문서와 스크린샷 용으로 사용하고 있다. 나중에 가서는 간단한 API 문서까지도 작성할 수 있을 거 같다.(Swagger 등을 활용하지 않는다면!)


    이번 주는 한 것도 많고, 생각도 많았어서 이것저것 적다 보니 엄청 길어졌다. 그래도 이렇게 기록을 남기면서 다시 정신을 가다듬을 수 있어 좋은 거 같고, 여기에 쓴 내용들을 의식하면서 잘 나아가 보자. Boni!!!! 넌 잘하고 있다고!!!💪🥹

    NCT 드림 - 오르골(Life is Still Going On) 가사 中