메가테라 4주차 과제 회고
테스트코드
- 테스트 코드의 장점을 느꼈다
- 테스트 코드 작성의 비용
- 반복적인 일을 하고 기능 구현이 아니다보니 지루함을 금새 느꼈다
부족한 부분
- 동시성 이슈 (AtomicLong & ConcurrentMap)
- 동시성을 잘 신경쓰고 싶어서 PostId 와 CommentId 를 AtomicLong 으로 하고 repository 의 store 객체를 ConcurrentMap 클래스 객체를 사용했지만 아직 얼마만큼의 실효성이 있고 어떤 부분의 약점이 있는지 내가 설명하기 어렵다. 좀 더 어떤 부분에서 thread safe 가 어떻게 되는지, 어떤 상황 시나리오에서 막아지는지 설명할 수 있는 정도가 되어야겠다
- 객체지향
- 객체지향 설계의 부족함을 느꼈다. PostId 와 CommentId 으로 AtomicLong 을 사용했다. ID 값들을 Post, Comment 객체에서 따로 객체로 분리했다. 그리고 String 에서 Long 으로의 parsing 같은 책임을 할당했다. 하지만 결과적으로 만약 정책이 UUID 로 변경된다면 깔끔하게 객체를 갈아끼우는게 가능할까? 결합도는 어떻게 되는지 스스로 잘 설명하기 어렵다
- JPA
- JPA 의 연관관계처럼 Post 와 Comment 이 포함관계를 객체 간에도 표현하고 싶었다. 하지만 repository 가 따로 있고 Post 객체가 소속 Comment 객체들을 포함하는게 중복되고 또 다시 관리해주어야해서 쉽지 않았다. JPA 는 어떻게 구현되었는지 궁금해졌다. 사실 가장 시간을 많이 쓰고 고민했던 부분인데 답을 찾지 못했다