[F-lab] 멘토링 13주차 회고

devdo·2022년 5월 30일
0

회고록

목록 보기
12/23
post-thumbnail

📌 12주차 이후 질문 및 정리

1) readme.MD 잘못된 표현들 정리

  • 클린코드와 성능 최적화에 대한 이야기와 분리
  • 베포기술 색션과 중복된 부분이 있다. -> 서버구조도 와 배포 구조로 분리
  • 엔티티 다이어그램 도 중복! -> 아예 뺌
  • 프로젝트 중요 목표 정함

2) ERD 설계

  • 카테고리, point, 2인실 필드 등 지우는 게 낫다.
    핵심 빼고는 안하는 게 나음(협의)

  • StudyGroup-Room 관계 다대다인지 일대일인지?
    결론 : 연관관계가 없는 걸로 따로따로, 중간에 Reservation이 있기 때문에.

3) API 명세서 가이드 확인

  • StudyGroup getAll 에서 개별 room에 대한 엔티티 포함해야
  • room/{roomId}reservation/{reservationId} : @PathVariable 엔티티 식별자로 앞에 있어야 함

4) 스케쥴러

  • spring batch -> 리얼타임이 보장되어야 하는지 : 비동기적 jobLauncher SimpleAsyncTaskExecutor() 방식 찾음
  • 관련 블로그 : https://devfunny.tistory.com/688

5) 더블 부킹

@Lock(LockModeType.PESSIMISTIC_WRITE)
@Query("select r from Romm r where r.id = :roomId")

or Update시 Lock

SELECT FOR ~ UPDATE 쿼리

: 동시성 제어를 위해 특정row에 배타적 LOCK을 거는 행위
“데이터 수정하려고 찾은 것이니, 다른분들은 건드리지 마세요!” 뜻임!


📌 전주 개인 공부한 내용들

1) 알고리즘 공부

2) JPA Data 레포지토리 EntityManager, 쿼리메서드, @Query 등 정리

5) 프로젝트(피드백한 내용 정리)

  • readme.md 정리

  • 서버 구조도, 배포 구조도 업데이트 중

  • push vs pull - 뉴스피드 생성 GET 방식의 방법들임.

    push : 쓰기 시점에 미리 팬아웃 하는 모델. 읽을 때 나오는 게 빠르다/ 자원낭비가 있다.
    pull : 읽기 시점에만 팬아웃 하는 모델. 자원낭비가 거의없다. / 읽는데 시간이 걸린다. => 요청이 올때만 그때 한다 // 비동기가 아니다.

  • 정리 : 자원낭비가 거의 없는 pull 방식으로 뉴스피드 방식을 써야 되지 않을까 싶다.

  • 관련 블로그 : https://os94.tistory.com/186 중 pull vs push PART

4) 책

  • <Mysql 8.0> index -> B-tree 정렬 자료구조로 되어 장점 파악
  • <가상 면접 사례로 배우는 대규모 시스템 설계 기초> -> push vs pull 방식, 전반적인 대규모 시스템 설계 방식 파악

📌 멘토링

1) 알고리즘 시간복잡도에 대한 중요성 다시 언급

2) user , studyGroup 테이블의 매핑 테이블로 user_group 착안
reservation안에 위 3개 테이블의 pk들을 외래키로 사용

3) 더블 부킹 내용은 Reservation DB pk를 String으로 놓고 atomic을 보장케 하는 방향으로.

  • 예를 들어, 100||2022041210(2022년 4월 12일 10시 룸 100) 방식으로.
  • DB에서 락을 거는 의미가 없다고 하심. 이미 id(pk)로 원자성이 보장돼기 때문에

4) 15분 간격 + 30분 간격 겹치는 건 어떻게 해결?
: 4개의 로우를 만들어 겹치지 않게 코드로 구현

5) 책 <가상 면접 사례로 배우는 대규모 시스템 설계 기초> 내용 언급 - 인터뷰용으로 아주 좋다고 추천


📌 느낀점

멘토님과 <ward-study 프로젝트> 기술면접식으로 질문과 답변이 오갔다. 예상대로 역시나 빡셌다.. 4주차

  • DB Reservation 설계가 너무 어렵게 느껴진다. 양방향 매핑이 들어가니.. 매핑테이블의 존재를 몰랐으면 어렵게 설계할 뻔 했다.

  • DB로 더블부킹을 막는 방법에서 내가 생각한 방법 또 반려. DB pk가 이미 Atomic이 default였다니 처음 알게되었다.

  • 스프링 배치보단 일단 DB 설계에 집중해야겠다. 사실 직접 설계를 한다면 좀더 파악이 쉬울 거란 생각도 든다. 만들어보지 않은 채 얘기만 하니 너무 힘들다... 다음 멘토링 전에는 내 애로사항을 얘기해 봐야겠다.


📌 해야 할 것

  • 코딩 테스트 , 자료구조 알고리즘 - github에 정리 + DFS , binary Tree 스터디모임 때 정리 + Dynamic 정리까지.
  • 멘토님께서 질문하셨던 내용들 블로그 정리
  • 김영한 JPA Data 강의 - fecth join으로 성능 최적화 공부
  • <가상 면접 사례로 배우는 대규모 시스템 설계 기초> 다시 읽기
  • 운동 PT - 헬스장 2번 + 벤치머신 + 숄더프레스(어깨가 많이 약함) + 렛풀 다운으로 마무리.
profile
배운 것을 기록합니다.

0개의 댓글