티스토리 뷰
1주 차 발제 과제 : 동시성제어 & TDD기반 개발
이전의 회사에서 테스트 코드를 작성해 본 경험이 없었고, TDD에 대한 개념도 이번기회에 정확하게 알게 되었다.
TDD 개발을 시작하는 방법에 대해 듣고
TDD로 개발을 해야지!! 생각했지만, 원래 개발하던 습관이 아니라 쉽지 않았다.
앞으로 TDD개발이 습관화 될 수 있도록 연습해야겠다고 생각했다
혼자 과제해결을 위해 하루를 보내고
팀원들과 멘토링을 듣게 되었고, 과제를 하면서 궁금했던 사항들과 과제 해결 방향에 대해서 제안을 많이 해주셨다.
그냥 구글링을 해서 알아보는 것보다 확실히 방향을 알고 알아보니 어떻게 개발을 해야 할지 길이 잡히는 느낌이었다.
과제를 해결하고 회고를 하면서 또 한 번 중요하게 느끼게 된 것은
내가 아는것과 모르는 것을 명확하게 구분할 줄 아는 것
그리고 내가 알고 있는 것을 글로 정리할 줄 아는 것
또, QNA 시간을 통해서 제안해 주신 TDD 개발에 좋은 순서
(! 내가 개발할 때 참고하기 위해 해둔 노트!)
1. MockAPI 를 만든다. > 성공케이스에 대한 E2E/통합 테스트를 짜둔다.
2. 서비스(도메인 레이어)를 짠다.
3. 각 서비스 단위테스트를 작성한다.
4. 레파지토리(인프라 레이어)를 짠다.
5. 각 레파지토리 기능들은 통합테스트를 작성한다.
6. 컨트롤러에서 서비스를 호출하게 한다.
> 1번에서 작성한 E2E 테스트는 정상적으로 통과할 수 있어야 한다.
과제를 진행하면서 어려웠던점
1. 테스트 코드를 작성하는법 > 어떤 객체를 mocking 해야 할까?
2024.12.19 - [분류 전체 보기] - [TDD개발] Mocking 기준
2. 동시성 제어란?
3. 동시성 제어를 하는 방법들은 어떤 것이 있는지? 어떻게 동시성 제어를 구현할 수 있을까?
2024.12.19 - [분류 전체 보기] - 동시성제어 "synchronized" 성능이 저하될 수 있는 이유
4. PR(pull request) 생성하는 법
첫 번째 과제의 리뷰
STEP01 요구사항 구현 (PASS)
* 완료된 lock에 대한 클린업까지 잘 진행해 주셨는데요, 동일한 사용자에 대한 요청이 잦을 경우 매번 lock을 생성/클린 업하는데 비용도 생각해 보면 좋을 것 같습니다. * concurrentOtherUser 테스트가 매번 다른 결과를 리턴합니다.
STEP02 동시성 분석 보고서 작성 (FAIL)
* ConcurrentHashMap이나 ReentrantLock에 대한 특성을 조금 더 자세히 정리해 주시면 좋을 것 같습니다.
* ConcurrentHashMap의 computeIfAbsent이 갖는 특성이 어떤 것일까요? 단순히 값이 존재하지 않는 경우에 생성하는 것만 있지는 않을 것 같습니다.
결론
리뷰 주신 부분에 대해서 조금 더 생각해 보고, 내가 했던 과제를 수정해 봐야겠다고 생각했다.
2주 차 발제를 받기 전 다른 분들의 과제도 함께 보면서 리뷰를 하고 나서는 내가 많이 부족했구나 또 알게 되었다.
확실히 전반적인 리뷰를 받고 잘 한 분들의 코드를 비교해 보면서 많이 배울 수 있는 시간이 구나 생각한다.
조금 더 항해 플러스를 알차게 즐기고 싶다.
- Total
- Today
- Yesterday
- Grammarly
- spring.io.start
- css
- commit convetion
- tdd개발
- postgresql 다운로드
- 개발자
- 티스토리챌린지
- html
- API
- 웹개발
- 풀스택
- 더현대 크리스마스 웨이팅
- 항해후기
- 더현대 크리스마스 현장대기
- Java
- JavaScript
- 백엔드개발
- mock사용법
- 더현대 크리스마스 사전예약
- google commit convention
- Springboot jpa
- 더현대 예약
- ChatGPT
- 오블완
- mock해야하는대상과아닌것
- postgresql brew
- java test 개발
- 프로그래밍
- synchronized 단점
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |