- 팀원들은 각자 혼자서 아래의 사항에 해당하는 내용을 회고에 활용하기로 한 온라인 툴에 조용히 적으세요.
Liked
: 이번 프로젝트(스프린트)에서 팀원들과 함께 작업하며 좋았던 점Learned
: 이번 프로젝트(스프린트)에서 팀원들과 함께 작업하며 배운 점Laked
: 이번 프로젝트(스프린트)에서 팀원들과 함께 작업하며 아쉬웠던 점Longed for
: 이번 프로젝트(스프린트)에서 팀원들과 함께 작업할 때 “이랬으면 참 좋았겠다.” 싶은 점
- 각자가 적은 걸 한 곳에 모아놓고 살펴보면서 각자 적은 걸 서로에게 이야기하고, 서로의 이야기를 듣고 든 생각이나 감정을 다시 또 서로에게 해주세요.
기획 단계
- 채택된 아이디어
- 네이버 헤어샵 → 카카오 헤어샵
- 이유
- 헤어샵이란 도메인을 집중 할 수 있는 점이 가장 큰 메리트
- 협업툴
- JIRA → 스프린트 진행용
- NOTION → 협업 문서 정리용
- Slack → 커뮤니케이션 및 긴급이슈 알림용
설계 단계
- 엔티티 구성 ( CRUD )
- 사용자
- 헤어샵
- 디자이너
- 메뉴
- 예약
- 스트레스 부하 테스트
- 예약 조회 → 예약 조회에서 가장 부하가 걸릴 것으로 예상
개발 단계
기술 Trouble Shooting
- JPA
- 영속성 컨텍스트의 이해
- 양방향 연관관계 편의 메서드
- N+1 문제 ⇒ fetch Join을 통해 해결
- database
@GeneratedValue(strategy = GenerationType.AUTO)
선언시 DeadLock 발생- Hibernate의 MySQL의 기본전략 이해 (Table)
- auto Increment에 대한 이해
- Indexing을 통해서 성능 개선
- H2 예약어 문제
- user → users
- 깃 충돌 해결
- 각각 브랜치를 판 다음 머지하는 과정에서 충돌이 발생
- 충돌난 부분을 해결하는 과정에서 기존 코드가 날아가는 일이 발생…
- 다행히 다른 브랜치에 해당 코드가 남아 있어서 복구
- Test
- 인증이 필요한 controller 테스트에서 매번 토큰발급을 함께 하기에 복잡
@WithUserDetails
로 해결- Test 합치는 과정에서 각 도메인의 테스트들이 영향을 줌
- 각 테스트들이 끝나면 DB정리하고, PK에 의존적이지 않은 코드짜기
테스트 단계
- Jmeter ( 개선전 )
- 정적 예약 조회
- 예상대로면 예약이 50%이상된 상황에선 동적보다 빨라야 했지만 더 느렸다.
- 리팩토링 진행(인덱싱을 이용)
- 동적 예약 조회
- 타임테이블에서 예약 비율이 높아질 수록 퍼포먼스가 낮아짐.
- 예약 100% 채우는 과정에서 실제로 중복예약 경험
- validation코드가 있으나 거기까지도 모두 동시에 들어가서 통과해버릴 것이라는 우려가 현실화
- Jmeter ( 개선후 )
- 정적 예약 조회
- ?
- 중복예약
- Unique Key로 해결
성과
4Ls
Liked
- 패키지 구조 전략을 세우고 시작하여 패키지 작성에 어려움이 없었다.
- 사용할 기술 스택을 미리 생각한 뒤 정하고 시작하여 효율적이었다.
- Notion을 사용하여 팀원들과 문서를 공유하면서 효율적으로 협업할 수 있었다.
- 도메인 단위로 역할을 분담하여 효율적으로 협업할 수 있었던 것 같다.
- 모든 팀원들이 각자의 역할을 열심히 수행했다.😁
- 프로젝트 시작전에 기술적 이슈나 방향을 정하고 들어가서 의미있게 진행할 수 있었다. 👍
Learned
- SpringSecurity의 인증로직을 직접 경험하고 배울 수 있었다.
- Test에서 Mocking을 사용하는 법을 배웠다.
- Test에서 인증부분을 간편하게 구현할 수 있는 @WithUserDetails에 대해 배울 수 있었다.
- N+1 문제 발생 했을 때 fetch Join을 통해 해결하는 방법을 배웠다.
- @GeneratedValue(strategy = GenerationType.AUTO) 선언시 DeadLock 발생하였다.
- MySQL의 기본전략을 이해 (Table)하고 auto Increment로 수정을 통해 해결하였다.
- Column들의 Indexing을 통해서 조회 성능을 개선하는 방법을 배웠다.
- Jmeter를 사용하여 서로 다른 로직으로 구현한 방법들의 성능을 테스트하는 방법을 배웠다.
- AsciiDoc을 사용하여 컨트롤러 테스트를 작성하면서 자동적으로 API 문서를 빌드하는 방법을 배웠다.
Laked
- 엔터티를 작성하고 시작하지 않았기 때문에 도메인 별로 파트를 나눈 협업 방식에 어려움이 있었다. 😅
- 코드 컨벤션을 자세히 정하지 않아 마지막에 의논 후 수정하는 어려움이 있었다.
- GitHub로 팀 단위 형상 관리를 하면서 협업 중 필요한 파일이 삭제되는 등의 이슈가 발생하였다.
- Jira를 사용하여 스프린트를 진행하고 Notion으로 문서 관리를 하기로 했지만, 압도적으로 Notion의 활용 비중이 높았고 Jira를 효율적으로 사용하지 못한 것 같다.
Longed for
- 엔터티를 함께 혹은 팀원이 역할을 맡아 작성하고 프로젝트를 시작하면 좋을 것 같다.
- git의 rebase를 활용하여 upstream과 싱크를 맞추고 PR하면 PR을 merge할 때 충돌을 잡는 방법보다 효율적일 것 같다.
- 코드 컨벤션을 자세하게 정하고 프로젝트를 시작하면 더 정돈된 프로젝트가 될 수 있을 것 같다.
- github에 issue를 잘 사용해봤다면 프로젝트 진행과정을 잘 남길 수 있었을 것 같다.