[TIL] 기초_뉴스피드 만들기 (2) _발표 전날의 회고록

J쭈디·2024년 12월 26일
0

Sparta_프로젝트

목록 보기
4/35

요 몇 주 사이에 나는 TIL을 많이 놓쳤다. 스스로에게 변명해보자면 시간이 정말 부족했다. Spring Boot 숙련 주차부터는 할 일이 너무 많아졌고, 기초 프로젝트를 시작하면서는 정말 페어코딩으로 하루 10시간을 넘게 보냈기 때문이다. 아무튼 그러한 핑계가 있었다

그리고 내일, 우리는 드디어 최종 발표를 앞두고 있다.

1. 프로젝트의 진행상황

1-1. 프로젝트 파트 분배 예상과 실제

1. 프로젝트 시작 전, 파트 분배

2인 1조로 구성하여 총 4명이서 프로젝트를 진행하였다. 나를 포함한 조를 A팀이라고 했을 때 아래와 같이 파트 분배를 진행하였다.

A팀

  • 필수 기능 부분
    • 회원 초기 프로젝트 구성
    • 와이어프레임 작성
    • 회원 CRUD 작성
    • 로그인 필터 구현

B팀

  • 필수 기능 부분
    • 데이터 베이스 구현
    • ERD 작성
    • API 명세서 작성
    • 뉴스피드 CRUD 작성
    • 친구추가 기능 구현

필수 구현 부분은 위와 같이 정해두고 진행하기로 하였고 도전기능 부분은 우리가 프로젝트를 완성하는 시간과 개개인의 진행 속도에 따라 융통성 있게 진행할 수 있도록 파트분배를 진행하였다.

2. 프로젝트의 실제 파트 분배

A팀

  • 필수 기능 부분

    • 회원 초기 프로젝트 구성
    • 와이어 프레임 작성
    • 회원 CRUD 작성
    • 로그인 필터 구현 (password 인코더 적용)
  • 도전 기능 부분

    • 댓글 CRUD 1차 작성
    • 댓글 CRUD 기본 페이징 구현

B팀

  • 필수 기능 부분

    • 데이터 베이스 구현
    • ERD 작성
    • API 명세서 작성
    • 뉴스피트 CRUD 작성
    • 친구추가 기능 구현 (피벗 테이블 구현)
  • 도전 기능 부분

    • 댓글 CRUD 2차 작성 (페이징 부분의 정렬을 위한 리팩토링)
    • 최신 순 정렬 작성 및 기간별 검색 기능 구현
    • 좋아요 기능 구현

대충 정리해보자면 이러한 파트분배로 실제 구현을 진행하였다. B팀에 너무 잘 하시는 분이 계셔서 속도가 달랐기도 하고, 대신 귀찮은 걸(현재 진행 중인 트러블 슈팅 기록 등) 내가 하고 있다. 그리고 개인적으로 했던 역할은 팀장역할(알람시계) 정도 인 것 같다.
아무튼 나도 열심히 했다는 얘기

1-2. 프로젝트 진행의 예상과 실제

처음 프로젝트를 시작했을 때는 솔직히 필수 구현도 제대로 빨리 할 수 있을까? 하는 고민이 약간 있었다. 왜냐하면 우리에게 주어진 시간이 약 일주일 정도 밖에 없었기 때문이다.

그런데 팀원 분들을 잘 만난 덕분에 현재는 도전 기능도 거의 다 완성해가고 있다. 필수 구현 과제는 예외처리 부분 말고는 생각보다 정말 빨리 끝났고, 도전부분은 A팀의 열심러 분과 B팀의 코딩 존잘러 분께서 많이 도움을 주셨다. 사실 도전 기능에 대해 나는 말을 얹은 거 밖에 안 한 것 같기도 하고.... 그리고 오늘 트러블슈팅을 작성하면서 다른 분들의 의견을 들어보니 의외로 나와는 다른 문제들을 힘들어 하셨다는 걸 알게 되었다.

서로 다른 코드를 가지고, 서로 다른 실력의 4명이 모여서 같은 깃허브에 업로드를 하다 보니 그것을 머지하는 동안 컨플릭트가 정말 많이 났기 때문이다. 그래서 컨플릭트 머지에 도움을 많이 주신 팀원 분은 코드를 합치는 과정 자체가 힘들었다고 하셨다.

또 다른 분은 같은 조원 분이 너무 잘하셔서 같이 코드를 작성하면서 진도를 따라가기 조금 힘들었다는 분도 계셨고, 다른 사람과 함께하니 자습보다 집중이 깨져서 힘들어하시는 분도 계셨다. 그리고 나는 며칠 전에 적었듯이 의견 충돌 자체가 제일 힘들었던 것 같다.

1-3. 프로젝트를 하며 마주한 Error

1. 친구추가 기능이 뭐죠? 먹는건가요?

  • 배경 : 필수적으로 구현해야 할 과제 중에 친구 추가 기능 필요

    • 우리는 처음 모여서 필수 구현 기능에 대한 회의를 진행하였다.
    • 유저와 뉴스피드에 대한 이야기를 하던 중 여러가지 의견을 논의하였다.
  • 발단 : 프로젝트 시작 전 회의 중 해당 기능을 어떻게 추가할 지에 대한 문제 발견

    • 과연 유저와 뉴스피드 테이블이 있는데 친구 테이블을 추가하는 것이 맞는가?
    • 친구 테이블이 별도로 존재한다면 유저 테이블과 함께 사용하면 될까?
  • 전개 : 테이블을 추가할 지 안 할지에 대한 이야기가 진행됨

    • 그래서 테이블을 추가한다면 어떠한 형태로 구현해야 하는가?
    • 즉시 친구에게 보여준다면 친구가 수락하는 걸 언제 사용자는 알 수 있는가?
  • 위기 : 어떻게 구현을 해야할 지 여러가지 의견은 나왔지만 결론이 나지 않음

  • 절정 : 우리의 최종 목표 선정에 문제가 있다는 것을 발견하여 논의 끝에 해결

    • 우리의 목표가 최종적으로 친구에게 실시간 알림을 보여주는 기능인가를 따졌을 때 너무 어렵고 시간 상 제약이 있다.
    • 단순히 추가된 친구를 확인하는 조회 기능을 추가하는 것으로 하는 것이 좋다.
  • 결말 : 피벗 테이블로 친구 추가 기능을 구현

    • 피벗 테이블을 이용하면 위의 기능을 쉽게 구현이 가능하다.

2. 좋아요 기능을 정렬하는 문제

  • 배경 : 도전 기능 중 좋아요 순 정렬 기능 구현 시도

    • 좋아요 기능은 테이블을 별도로 구성해야 하는가?
  • 발단 : 좋아요의 구현을 간단하게 할 방법 모색

    • 피벗 테이블로 좋아요를 구현하는 것까지는 쉽게 성공하였다
    • 페이지네이션을 확인하면서 최근 순으로 정렬을 마치고 좋아요 순으로 정렬을 추가하기로 하였다.
  • 전개 : 피벗 테이블과 연결된 newsfeed와 기존 페이지네이션을 사용해 정렬을 시도

    • newsfeed와 기존 페이지네이션을 사용하여 정렬을 시도하였으나 반환 타입이 달라서 제대로 입력되지 않았다.
    • 타입을 통일하여 재시도 하려고 했으나 이번에는 결괏값이 적절히 나오지 않고 에러가 발생하였다.
  • 위기 : entity에 접근해서 정렬하는 것이기 때문에 단순 피벗테이블로는 정렬이 불가하다는 문제를 발견

    • 아무리 entity를 통해 값을 반환하고 싶어도 피벗 테이블에 대한 값으로 정렬을 해야하는 것이기 때문에 제대로 된 정렬이 불가하였다.
  • 절정 : entity와 피벗테이블을 함께 사용하여 문제 해결을 시도

    • 피벗 테이블을 유지하면서 entity로 좋아요 값을 저장한 후 정렬하는 방법으로 정렬을 시도하였다.
    • entity로 값을 저장한 것으로 기존 페이지네이션을 활용하여 정렬 할 수 있었다.
  • 결말 : 100% 정답이라고 할 수는 없지만 시간적 제약과 타협할 수 있는 범위 내로 문제 해결

    • 피벗 테이블만으로 구현하는 방법은 아니지만 시간 관계상 빠르게 해결되는 방법으로 선택하여 해결하였다.

1-4. 프로젝트 발표준비에 대한 이야기

프로젝트 발표는 내일 여러 조 중에 후반부에 진행 될 예정이다. 발표는 B팀의 잘하시는 분이 마침 사다리타기에 걸려서 그 분을 중심으로 진행 될 것이고, 오늘 발표 자료를 만들 것이라고 한다.

발표 준비보다 더 중요한 것이 프로젝트에 대한 피드백이기 때문에 마지막으로 튜터님에게 가서 최종 피드백을 받아오고 그 이후로 발표 준비를 할 것으로 예상 된다.

2. 프로젝트 외의 이야기들

2-1. 프로젝트를 하면서 배운 점

결론적으로 이 프로젝트는 각자에게 다른 체험을 주면서도 부족했던 부분이나 몰랐던 부분을 성장시켜 주는 좋은 경험이 아니었을까 하는 생각이 든다. 물론 다른 분들도 그렇게 생각하실 지 나는 알 수 없다. 나는 쩌리라서 어쩔 수 없다.

솔직히 이 프로젝트에서 내가 한 게 많지는 않기 때문에 다음 개인 프로젝트 시간에는 조금 더 스스로 정진하는 태도로 공부량을 늘려야겠다는 생각이 들었다.

2-2. 프로젝트를 다시 하면 더 잘할 것 같은 것들과 더 잘하고 싶은 것들

  1. 이번에 깃허브 조작이나 컨플릭트 문제가 많이 발생했고, 그것을 해결하는 모습을 많이 봤기 때문에 그 부분을 조금 더 잘 할 수 있을 것 같다.

  2. 팀원들과의 소통이 중요하다는 걸 깨닫는 순간이 많았기 때문에 다음 프로젝트에서는 더 원활하게 소통하면서 진행할 수 있을 것 같다.

  3. 이번에 생각보다 많은 걸 배웠기 때문에 다음에는 이번에 몰라서 헤맸던 부분을 조금 더 원활하게 작성할 수 있지 않을까 생각한다. 특히 B팀 분들은 쿼리dsl을 활용한 부분이 인상깊었기 때문에 다음에는 데이터 베이스 적용을 할 때 그 부분을 조금 더 공부 해서 적용해보려고 한다.

profile
언제 어느 위치에 있더라도 그 자리의 최선을 다 하는 사람이 되고 싶습니다.

0개의 댓글