본문 바로가기
캠프/항해 플러스 4기

[8주차] WIL

by 핏차 2024. 5. 15.

”한 번의 실수는 배움이, 두 번의 실수는 실력이 된다.” 

 → 개선 사항 추적과 리마인드를 통해 동일한 문제나 같은 실수를 반복하는 결과를 만들지 않습니다.

”경험이 없다면 창조도 없다.”

→ 경험한 것을 기록해두면 더 잘 활용하기 위한 방법으로 연결시킬 수 있습니다.

“I may be wrong.”

→ 끊임없는 회고를 통해 자기객관화를 달성하고, 자신의 실수와 잘못을 인정할 줄 아는 용기 있는 사람이 됩니다.


 

8주차를 돌아보자.

이번 주차의 주제는 적은 부하로 트래픽 처리하기였다.

일단, 제일 먼저 퍼지는 건 DB라지?

DB는 쿼리, 인덱스, 분산 등에 따라 I/O 부하가 천차만별이다. 쿼리 하나 잘못 짜놓으면 쉽게 터질 수도 있고, 쿼리 하나 적절하게 바꾸면 성능이 몇 배가 좋아지기도 한다.

 

이번 시간에는 우선 DB Query를 최적화하는 방법 중 Index를 이용한 방법에 대해서 학습하였고, 캐싱의 목적과 활용, 그리고 트래픽을 나눠 부하를 줄일 수 있는 방법인 대기열 구현에 대해서 학습하였다.

 

부끄럽게도 DB에 대해서 제대로 공부한 적이 없기 때문에, Index = 목차(.. 그래 목차겠지)라는 생각만 있었지 백엔드 개발하며 DB와 쿼리를 다루면서도 Index가 무엇인지 정확히 모르고 있었다.

이번 기회에 인덱스에 대해서 공부할 수 있어서 너무 유의미한 주차였고, 또 회사에서 활용하고 있는 통계 쿼리에 대한 배치 프로세스 대해서도 좀 더 개념을 잡고, 대기열 구현도 설계에 의해서 차근차근 구현해볼 수 있어서 좋았다.

 

인덱스

1. 인덱스를 잘 사용한다 → 굉장히 큰 효과를 얻을 수 있음
인덱스를 잘 사용 못한다 → 윽

그렇다면 인덱스를 잘 사용한다는 것이 어떤 것일까?

이 질문에 대해서 단순히 기본적인 사용 개념들(어떤 상황에 사용해라, 카디널리티에 따라서 사용해라)에 따라서 허공만 휘젓고 있다가 멘토링 이후에 인덱스 사용 시 고려해야 할 것들에 대하여 감을 잡을 수 있었다.

(데이터의 생명주기, 중복 사용 관점, 데이터의 분포도, 우선 정렬 등...)

 

2. 내 쿼리에 대해서 인덱스 사용/미사용에 따라 어느 범위의 탐색을 하는지, 성능이 어떻게 달라지는 지 수치로 볼 수 있었다. DB 인덱스 사용, 눈으로 보기

 

대기열

1. 발제 때 석범 코치님께서 대기열 구현 방향성을 잡는 설계 예시를 보여주셨는데, 그 과정을 하나씩 따라해보며 (거의 비슷하지만) 나의 설계 방향성을 글로 적어본 것이 많은 도움이 되었다.

설계 방향성을 문서로 작성한 후 구현을 시작하니 훨씬 편했다. 이것이 문서의 중요성..!

 

2. 대기열 코드는 회사에서 만들었던 서비스의 코드를 많이 참고했다. 개인적으로 처음 커밋했을 때는 구멍이 많이 있었는데, 로직을 계속 확인하며 리팩토링하니 구멍을 찾고 메우며 다듬는 과정이 좋았다.

 

동시성 처리

1. 지난 주 동시성 처리를 레디스로 구현한 과제에 구멍이 몇 가지 존재했는데, 코치님께서 힌트를 주셔서 깨닫고 해결할 수 있었다. 감사합니다!

락 잡는 걸 AOP 방식으로 어노테이션으로 달았더니 생겼던 문제들..

  • 기능+유저 별로, 또는 기능+좌석 별로 락을 잡아야 하는데 락 키 값에 파라미터를 어찌 넣는지 몰라서 일단 기능별로 락을 잡아둔 것
  • @Transactional 보다 큰 범위로 락을 잡아야 해서 트랜잭션을 새로 생성하는 방식을 쓴 것 → 본인이나 타 개발자가 로직에서 생각한 트랜잭션과 달라질 수 있는 문제가 생기기 쉽다.

해결 방법

  • spEL 적용
  • @Order(Ordered.HIGHEST_PRECEDENCE)

 

 

Keep

1. 인덱스에 대해서 학습하며 인덱스의 중요성, 사용법을 깨달을 수 있었다.

2. 구현 전 설계 문서 작성의 중요성!

3. 내 코드는 미완성이니 계속 들여다보면서 리팩토링, 수정하는 과정이 좋았다.

 

 

Problem

1. 보완할 점들이 아직 많다.

2. 사실 인덱스 모르는게 문제 아닌가ㅎㅎㅎ

 

 

Try

1. 처음부터 어떻게 잘해요. 이렇게 보완해가며 발전하는 거지. 꾸준히 하면 다 된다!

2. 항해 과정 끝나면 한 숨 돌리고 기본 개념과 지식들을 학습해야지.

 

 

8주차도 끝! 이번 주도 열심히 했다!

728x90