부트캠프/항해+99 백엔드

태태개발일지 - WIL

태태코 2024. 8. 10. 16:51
반응형

1. 문제  - 과제, 프로젝트를 진행하면서 부딪혔던 기술적인 문제

이번 주 차는 index를 통해 성능 개선과 트랜잭션에 관해서 event를 사용하거나 

msa 설계방식으로 바뀌었을 때 트랜잭션 처리에 관한 내용이였다.

msa설계방식에서 보상트랜잭션에 대한 사가패턴 등 새로운 부분이 생소해서 어려웠고,

효율적인 인덱스 생성에 대해 어려웠던 부분들이 있었다.

2. 시도 - 문제를 해결하기 위해 어떤 시도를 하셨나요?

1. 관련 서적들이나 읽기

2. 현업자 멘토링분에게 코칭받기

3. 시간이걸리지만 하나하나 생각해가면서 직접 짜보기

3. 해결 - 문제를 어떻게 해결하셨나요?

 많은 고민들을 하고있고, 더 성장해 나갈 것이다.

4. 알게된 것 - 문제를 해결하기 위해 시도하며 새롭게 알게된 것은 무엇인가요? 

index는 주로 카디널리티를 고려하여 인덱스 설계를 한다.

그리고 테이블 설계 단계시 인덱스를 모두 완벽하게 설계하는 것은 불가능하다.

만약 복합인덱스로 (A,B)가 있으면 단일 인덱스로 A는 필요가없다.

하지만 B는 필요하다. 그 이유는 A로 먼저 정렬되고, B로 정렬되기 때문. -> 카디널리티를 신경쓰는 부분이 여기다.

인덱스를 사용하면 CU 부분에서 부하가 발생되게 되는데 -> 사실상 R의 비율이 훨씬 많고, 인덱스가 있는 게 훨씬 성능상 이득이라는 것.

좋은 인덱스를 설계하려면 데이터의 양도 중요하지만, 데이터의 분포가 중요하다는 것.

 

이벤트에 관해서는 트랜잭션에서 부가기능을 이벤트로 분리하게 된다면, 메인기능에 영향을 미치지 않고, 트랜잭션에서 분리해 낼 수 있다.

그냥 eventListner와 TranscationlEventListener가 있는데 전자는 트랜잭션에 독립적이고 후자는 트랜잭션의 상황에 따라 실행되는 이벤트 리스터이다.

Async 스레드에서 실행되면 예외가 skip 되기 때문에 AsyncConfigurerSupport 를 빈으로 등록해서 Global 한 Async Thread Exception 핸들러로 로깅을 하면 추적 가능해집니다.

msa 방식으로 도메인들을 분리시켰을 때의 보상방안에 대해서는 더욱 더 공부를 해봐야 할 것 같다.

----------------------------------------------------------------------------------

 - 현재 만족하고 계속 유지할 부분 -

 아침운동을 하는 습관,

퇴근 후 하고싶은 공부를 하는 습관.

모르는 부분에 대해서 끊임없이 찾아보고 해결하려고 하는 습관.

그리고 이제  교육이 끝난 후에도 어떤 공부에 대해서 해야할 지 이해를 한 부분에 대해서 만족하고 유지해야할 부분이라고 생각한다.


 - 개선이 필요하다고 생각하는 문제점-

  이번에는 끝까지 요구사항을 파악했고, 개선이 필요했던 부분은 없었던 것 같다.

 

이제 앞으로 두번의 과제만 남았다.

끝까지 화이팅

반응형