Just Do IT!

[SODA] 프로젝트 6주차 회고 본문

프로젝트/SODA 프로젝트

[SODA] 프로젝트 6주차 회고

MOON달 2025. 4. 27. 23:48
728x90
반응형

이번주도 정신없이 빙글빙글 돌아가는 일주일이였다.

그냥 정신없다는 의미 = 해야할게 많다는 의미

그래도 30일 이슈 테스트 전까지 얼추 기능은 완성이 될것 같아서 다행이다.

 

 

 

 

 

 

 

새로운 기능 구현

 

멘토링에서 일단 feature issue를 모두 만들어 놓고 진행하라는 조언을 들었다.

어차피 나중에 가면갈수록 더 생길 수 있으니까 생각나는대로 잘게 쪼개서 이슈를 만들어놓고 작업하는 게 훨씬 편할 수 있다고.

근데 그게 맞는 말이었다. 처음에는 이슈가 너무 많아서 언제 다하지, 했는데 빠르게 작업하다보니 그래도 얼추 끝났다.

 

그리고 월요일부터 내가 맡았던 기능은 게시글의 옵션 기능인 투표 기능.

 

사실 투표 기능이라고 하기엔 조금 애매한데, 카카오톡 게시판 투표하기 기능을 모티브로 구현한 기능이니까 투표라고 했다.

투표 기능을 구현하면서 총 4개의 엔티티가 더 생겼다...ㅋㅋ

 

  1. Vote
    • 투표 기본 정보
    • 제목 / 다중선택 여부 / 텍스트 입력 여부 / 마감기한(옵션)
  2.  VoteItem
    • 하나의 투표(Vote)의 항목들(사용자가 선택 가능)을 저장하는 엔티티
    • 여러 VoteItem이 Vote에 속하는 형식으로, Vote와 N:1 관계
  3. VoteAnswer
    • 특정 사용자(Member)가 특정 투표(Vote)에 대해 제출한 전체 응답을 저장하는 엔티티
    • 사용자가 투표에 대한 응답을 한 번만 할 수 있도록 제한
  4. VoteAnswerItem
    • 투표 항목들(VoteItem)과 사용자의 응답(VoteAnswer)의 중간 테이블 (두 엔티티가 M:N 관계)
    • 하나의 VoteAnswer는 여러 개의 VoteAnswerItem을 가질 수 있음 (예: 복수 선택 투표)
    • 하나의 VoteItem은 여러 VoteAnswerItem에 의해 참조될 수 있음 (여러 사용자가 동일 항목 선택)

 

이렇게 투표 관련 엔티티를 먼저 세팅하고 투표 관련 기능들을 하나씩 구현했다.

사실 이게 게시글의 옵션 기능이고, 초반에는 이 기능에 대한 이해가 잘 되지 않아서 중간 발표 이후로 미뤘는데 미루길 잘했다는 생각이 든다. 왜냐면 생각보다 복잡하기도 했고 이렇게 고민할 시간이 중간 발표 이전에는 없었을 거 같아서.

월요일부터 수요일까지는 투표 관련 기능을 전부 구현하는 걸 목표로 삼았고, 다행히 다 구현할 수 있었다.

 

 

 

 

 

 

 

 

기타 FE 구현

 

투표 기능 만들고 바로 연동하려고 FE 파일 구현했다. (나 말고 cursor가 ㅋㅋ)

사실 프론트 파일들 보면 안쓰는 파일들도 많고 안쓰는 코드들도 많은데 내가 만든게 아니라서 함부로 지우기가 너무 어렵다.

그렇다고 프롬포트로 시키면 이상한 것들만 지우길래 걍 포기했다. 나중에 시간 되면 하던지 아니면 말고... ㅋㅋㅋㅋ

 

아무튼.

투표 API 전부 연동하고, 추가로 만들었던 프로젝트/게시글 검색 기능도 만들어서 연동했다.

 

검색창 구현하면서 갑자기 다른 파일들이 수정되면서 생기는 오류들도 해결하고.

이해가 안가는 건, 도대체 왜 A를 하라고 했는데 B도 같이 수정되고 오류가 생기는지 모르겠다. 아직 한계인걸까....

최대한 다른 팀원들한테 물어보면서 화면이 좋은지 나쁜지 아직도 수정중이긴 하다.

 

그리고 구현 안하고 더미 데이터로만 있던 부분도 수정했다.

처음에는 develop 브랜치에만 계속 머지하고 어제(토요일)에 메인으로 머지하면서 배포한 페이지에서도 적용될 것이다 지금은.

 

 

 

 

 

 

 

스프링 배치 공부 중

 

더미 데이터로 표현된 것들 중 내가 맡은 부분이 딱 하나 남았다.

3개월 간 프로젝트 생성 추이.

 

 

이 부분인데,

관리자가 원하는대로 주간/월간/일간 등 기간을 정해서 조회 가능하도록 만들고 싶었다.

 

이거 말고 회사 생성 추이도 있는데, 다른 팀원이 구현하는 기능이라 내가 구현한건 아니고 코드를 참고했다.

회사 생성 통계는 실시간 DB 조회 및 집계로 구현했었는데, 프로젝트는 그거랑 좀 다르다고 생각했따.

 

우리 프로젝트 메인이 프로젝트 생성하고 관리하는 건데, 당연히 이게 실제로 사용된다면 프로젝트가 생성되는 건 회사 추가하는 거보다 더 많을 거라고 생각해서, 이건 하루에 한번 일괄 처리를 하기 위해 주말에는 스프링 배치를 좀 공부해봤다.

 

프로젝트를 생성할때마다 카운트하지 않고 하루에 한번, 새벽 1시로 설정한 시간에 한꺼번에 카운트 수를 계산하는 것이다.

매일 새벽 1시에 배치 Job이 정상적으로 실행되면, 그 전날의 프로젝트 생성 건수가 project_daily_stats 테이블에 자동으로 추가된다.

 

테스트해보려면 내일이 지나야 하기 때문에 아직 커밋하지 않았지만 정상 동작이 확인되면 바로 PR 올릴 예정이다.

통계 테이블을 따로 만드는게 좋을 것 같아서 ProjectDailyStats 테이블을 생성해주었다.

 

{
  "startDate": "2025-04-01",
  "endDate": "2025-04-30",
  "timeUnit": "MONTH"
}

 

이런 식으로 원하는 시간과 MONTH(월간) 타입을 설정해주어 조회할 수 있다.

관리자가 원하는 대로 보여주기 위해서 저것들을 @ModelAttribute로 받아서 처리하는 파일을 만들었다.

 

이전 프로젝트에서는 스프링 배치를 적용한 적이 없어서 구글링도 하고 ai한테 물어보기도 하고 주말 내내 고민했다.

이게 맞는지는 모르겠다만, 내일 한번 테스트 해보고...제발 되면 좋겠다.

 

이것만 하고 FE 연동까지 하면 그래도 나름 괜찮은 페이지를 만드는 것 같아서 좀 뿌듯하다.

 

 

 

 

 

 

 


리팩토링을 하기 위해서는 일단 돌아가는 코드를 만들어야 하는데...프론트를 같이 하려니까 영쉽지 않다.

시간이 많은 것도 아닌데 중간 발표 이후에 근 2주간 꽤나 바쁘게 돌아가는 주간이었다.

다음주도 뭐...30일 이후에 이슈 테스트도 한다니까 더더욱 많은 피드백을 받고 고쳐나가겠지 ㅋㅋㅋ

짧은 기간에 꽤나 많은 걸 배워가서 재밌지만 정신없는 하루를 보내는 중이다...ㅋㅋㅋㅋㅋㅋ

728x90