티스토리 뷰

반응형

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 기준

 

[TDD개발] Mocking 기준

테스트 코드를 작성할 때, 특히 단위테스트에서 주요 목표는 작업단위 (테스트 중인 메서드 또는 클래스)를 해당 종속성에서 분리하여 테스트가 테스트 중인 단위의 동작에만 초점을 맞추도록

programmer.emmawebsite.com

 

2. 동시성 제어란? 

3. 동시성 제어를 하는 방법들은 어떤 것이 있는지? 어떻게 동시성 제어를 구현할 수 있을까? 

2024.12.19 - [분류 전체 보기] - 동시성제어 "synchronized" 성능이 저하될 수 있는 이유

 

동시성제어 "synchronized" 성능이 저하될 수 있는 이유

Java 21 에서는, virtual threads (introduced in Project Loom) 를 완벽하게 지원하므로 "synchronized" 와 같은 기존 동시성 기본 요소를 사용하면 애플리케이션의 성능과 확장성에 부정적인 영향을 미칠 수 있습

programmer.emmawebsite.com

4. PR(pull request) 생성하는 법 

 

 

첫 번째 과제의 리뷰

 STEP01 요구사항 구현 (PASS) 

* 완료된 lock에 대한 클린업까지 잘 진행해 주셨는데요, 동일한 사용자에 대한 요청이 잦을 경우 매번 lock을 생성/클린 업하는데 비용도 생각해 보면 좋을 것 같습니다. * concurrentOtherUser 테스트가 매번 다른 결과를 리턴합니다.

STEP02 동시성 분석 보고서 작성 (FAIL) 

* ConcurrentHashMap이나 ReentrantLock에 대한 특성을 조금 더 자세히 정리해 주시면 좋을 것 같습니다.

* ConcurrentHashMap의 computeIfAbsent이 갖는 특성이 어떤 것일까요? 단순히 값이 존재하지 않는 경우에 생성하는 것만 있지는 않을 것 같습니다.

 

결론

리뷰 주신 부분에 대해서 조금 더 생각해 보고, 내가 했던 과제를 수정해 봐야겠다고 생각했다. 

2주 차 발제를 받기 전 다른 분들의 과제도 함께 보면서 리뷰를 하고 나서는 내가 많이 부족했구나 또 알게 되었다. 

확실히 전반적인 리뷰를 받고 잘 한 분들의 코드를 비교해 보면서 많이 배울 수 있는 시간이 구나 생각한다.

조금 더 항해 플러스를 알차게 즐기고 싶다.

반응형