본문 바로가기

부트캠프 일지

부트캠프 53일차 후기

오늘 CodeKata는 1문제를 풀었다. 2번째 문제를 풀 시간은 있었지만, 지금까지 연휴였기에, 풀 기력이 되지 않아서, 그냥 1문제를 푸는 것으로 만족했다. 

 

그리고 kotest를 한 번 시험해 보았다. 이전에는 DescribeSpec을 사용했었는데, 이번엔 BehaviorSpec을 사용했다.

 

그리고 이전 일지에도 적은 내용이지만, DescribeSpec은 describe-context-it를 활용하는데 반해, BehaviorSpec은 Given-When-Then을 사용한다. 그리고 놀랍게도, 테스트 만들고 실행을 했었을 때, 버그를 발견했다. 내가 테스트한 것은 QueryDSL로 만든 검색 기능이다. 이 기능은 DTO로 Keyword를 받아서, 검색을 하는 것인데, keyword 중 하나 즉, 제목이나 작성자를 검색했을 경우, 제목이 Null이거나, 작성자가 Null이면 Exception이 발생했었다.

 

SearchKeywordDTO::class.memberProperties.forEach(){
        search -> whereClause.or((keywordMap[search.name] as StringExpression)
    ?.contains(search.get(it).toString()))}
// 문제가 발생한 코드

이것은 keywordMap[search.name]가 Null이여서 StringExpression으로 변환할 수 없어서 문제가 발생했던 것이다.

 

이것을 해결하려면 as를 as?로 바꾸면 된다. as는 반드시 바꿀 수 있는 것이 확정적일 때 사용하고, as?는 변환이 불가하면 null로 변환해서 사용한다. 그렇게 바꾸니 정상적으로 작동하는 것을 확인했다. 이러한 문제를 해결하고, 테스트가 이렇게 중요하구나를 깨닫게 되었다. 

 

오늘은 Spring Event에 관한 강의를 듣게 되었는데, 내가 Spring Event를 처음 알게 되어서 모든 것을 이해하진 못했지만, Event의 특성에 대해 알게 되었다.

 

EDA는 Event Driven Architecture의 준말로, 서비스 간의 결합도를 낮추기 위해 사용하다. 이 EDA에서는 Event를 중심으로 작동하는데, 이 때, 중요하게 생각해야하는 것은 2가지이다.

1. Event는 중복으로 발행/구독 될 수 있다.

2. Event의 순서는 바뀔 수 있다.

이 두 가지 관점에서 중요한 키워드가 부상하는데, 그것은 "멱등성"이다. 멱등성은 여러번 연산을 하더라도, 동일한 결과를 얻는다는 성질을 의미한다. 즉, 1, 2이기 때문에 Event가 멱등성을 만족해야 정상적으로 작동한다.

 

트랜잭션의 경우 Event를 비동기적으로 사용하기 위해서 Requires_New를 사용해야한다. 그것과 별개로 TransactionalEventListener란 Annotation이 존재한다.

 

이 Spring Event는 더 구글링을 통해 공부를 해봐야겠다. 그리고 내일부터 다시 팀 프로젝트에 돌입한다. 적극적으로 참여해보도록 하자.

'부트캠프 일지' 카테고리의 다른 글

부트캠프 55일차 후기  (0) 2024.02.15
부트캠프 54일차 후기  (0) 2024.02.14
부트캠프 52일차 후기  (0) 2024.02.08
부트캠프 51일차 후기  (2) 2024.02.07
부트캠프 50일차 일지  (1) 2024.02.06