2022 Masters Course/Project Course

2022 마스터즈 코스(백엔드) 89일차 회고(2022. 5. 19.) - "시스템 속에서 살아가기"

ikjo 2022. 5. 19. 19:46

해당 글은 코드스쿼드 2022 마스터즈 코스 "Java 웹 백엔드" 과정을 수강하면서 학습한 내용 등에 대한 회고 글입니다. :)

 

수강 회고

벌써 내일이면 지난 2주간의 개인 학습 정리 주간이 모두 종료된다. 방학하기 전에는 방학이라는 1주일 시간과 개인 학습 정리주간이라는 2주일 시간 총 3주라는 시간 동안 개인 학습을 통해 그동안 부족하다고 생각했었던 부분들을 보충 학습하고 새로운 기술들에 대해서도 학습하는 등 나름 야심찬(?) 포부를 가지고 있었다. 그러나 현실은 그닥 녹록치 않았다. 처음 가졌었던 열정(?)은 방학 첫 주간부터 무너졌고 무료함을 달래기 위해(방학 전까지 고생했던 나를 위해?) 학습 외에 다른 것들에 손이 갔다.

 

이번 개인 학습 정리 주간에 위클리 스케줄을 작성한 것이 그래도 많은 도움이 되었다. 비록 해당 스케줄대로 완벽하게 지킨 것은 아니지만 어떤 정해진 시스템 안에서 학습을 하다보니 What's next? 다음에 학습해야할 것들이 정해져 있다보니 학습 외 다른 것들에 손이 가는 시간이 적었고 어떻게든 꾸역꾸역 하게 되는 것이다.

 

최근에 김영한님의 인프런 강의를 듣던 중 강의 말미에 무언가를 열정적으로 한다는 것은 좋지만 열정이라는 것은 언젠가 식기 마련이라는 말이 와닿았다. 열정적으로 하는 것보다 중요한 것은 시스템 속에서 살아가면서 "꾸준하게" 하는 것이라는 말이다. 기술이 빠르게 변하는 IT 업계에서 개발자는 새로운 것을 학습하는 등 꾸준하게 자기 개발을 해야하는 직업이라고 생각한다. 이러한 변혁 속에서 자기 자신을 가혹하게 다루며 학습을 지속하다가는 번아웃에 노출될 확률이 높다고 생각한다.

 

개발을 단기적으로 2년, 3년, 5년만 하고 그만 둘 것이 아니라면(평생 직업으로 생각한다면) 적어도 앞으로 10년, 20년, 30년을 내다봐야한다는 생각이 들었다. 물론, 최종 목표 지점이 저 멀리 있다고 하더라도 순간순간 여유 부릴 틈 없이 열정적으로 해야하는 경우도 많이 있을 것 같다. 하지만 기본적으로 우리에게 주어진 자원(시간, 열정, 건강 등)은 한정적이기 때문에 이를 잘 관리하면서 학습하는 것은 중요하다고 생각한다.

 

 

학습 정리

세컨더리 인덱스(=Non Clustering Index)

인덱스를 생성하게 되면(CREATE INDEX) 세컨더리 인덱스를 생성하게 되는데, 세컨더리 인덱스의 자료구조 역시 클러스터링 인덱스와 마찬가지로 B+Tree이다. 이때의 Key 값은 인덱스로 설정한 필드가 되고, Value 값은 RID 또는 PK가 된다.

 

Value 값이 RID라면 바로 레코드에 접근할 수 있으며, Value 값이 PK라면 클러스터링 인덱스를 통해서 레코드에 접근할 수 있다. 이때 Value 값이 RID라면 더 빠르고 좋을 것 같지만 실제로는 주로 PK로 한다고 한다. 왜냐하면 Value 값이 RID라면 해당 필드로 레코드들이 정렬이 되어있지 않으며 클러스터링 키 값이 변경되어 데이터 레코드의 주소가 변경될 때마다 해당 테이블의 모든 인덱스에 저장된 주솟값 역시 변경해야 하기 때문이다. 다만, 클러스터링 인덱스를 한번 더 거치기 때문에 랜덤 액세스가 더 많이 일어난다.

 

이러한 특성으로 세컨더리 인덱스를 만들 때마다 Insert 성능은 떨어지지만 (해당 인덱스로 조회 시) 범위 검색 성능이 향상되게 된다. 만일 인덱스가 없다면 정렬되어 있지도 않고 세컨더리 인덱스(B+Tree)가 없기 때문에 데이터 페이지 전체를 다 읽어야 하는 것이다.

 

인덱스를 사용하게 되면 우선 세컨더리 인덱스를 탐색하고 이후 프라이머리 인덱스 탐색한다. 그 다음 실제 데이터에 접근하게 되는데 이때 만약 원하는 데이터가 전체 테이블 레코드의 20~25%를 넘어서면 인덱스를 이용하지 않고 테이블을 모두 직접 읽어서 필요한 레코드만 가려내는(필터링) 방식으로 처리하는 것이 효율적이라고 한다. 이러한 경우 MySQL 옵티마이저는 알아서 인덱스를 이용하지 않고 직접 테이블을 처음부터 끝까지 읽어 처리한다.(하지만 옵티마이저가 항상 100% 올바르게 동작하는 것은 아님)

 

 

학습 참고자료

  • 위키북스 "Real MySQL 8.0 - 1"
  • 호눅스 마스터 클래스 강의

 

 

좋았던 점

  • 벌써 오늘이 목요일이네요.. 그래도 내일만 버티면 주말이니 기분이 좋습니다..ㅋㅋ 🤣

 

 

아쉬웠던 점

  • 한동안 속이 괜찮았다가 요근래 식단관리에 소홀했더니 다시 속 상태가 매우 안좋습니다. 컨디션 관리를 제대로 하지 못해 아쉽습니다. 💦

 

이전 보다 개선되었던 점

  • 작년에 독학했을 때는 별다른 스케줄 관리 없이 학습했었는데, 때문에 좋은 성과를 내지 못했었던 것 같습니다. 이번 개인 학습 정리 주간을 통해 스케줄을 작성하고 나름대로 스케줄대로 학습하려고 하다보니 어느정도 성과가 차곡차곡 쌓이는듯한 기분입니다. 👍