[Real MySQL 8.0 1권] 서론

유혁·2026년 1월 29일

Real MySQL 8.0

목록 보기
1/22
post-thumbnail

본 포스트는 Real MySQL 8.0 1권을 읽은 뒤 정리하는 글입니다.


블로그에 글을 작성하며 가장 먼저 선택한 CS 도서이다.
기존에 CS 관련 지식에 큰 관심을 두고 있지 않았는데, 해당 도서를 읽게 된 이유는 아래와 같다.

1. 왜 MySQL을 사용하였는지 설명할 수 없다.

이전에 진행했던 두 개의 프로젝트 모두 MySQL을 사용한 경험이 있다.

그럼에도 불구하고 "Oracle RDBMS, PostgreSQL와 같은 DBMS이 아닌 MySQL을 사용한 이유를 설명해보세요" 혹은 "MySQL 8.0 버전을 사용했는데, 이유를 설명해보세요" 와 같은 질문을 받게 된다면 "처음에 배울 때 사용해서", "대부분 사용하길래"와 같은 속이 비어있는 답변밖에 생각나지 않았다.

개발자로서 자신이 사용하고 있는 기술 스택을 왜 사용하고 있는지, 다른 DBMS에 비해 어떤 장점이 있는지 인지하고 있는 것이 당연하다고 여겨져 공부의 필요성을 느끼게 되었다.

2. 인덱스를 활용해보고 싶다.

전공 시간에 인덱스의 개념과 동작 원리 정도를 가볍게 공부한 경험이 있다.
그러나 "이 쿼리에서 인덱스가 필요한가?", "어떤 컬럼에 인덱스를 설정해야 할까?" 와 같은 인덱스를 설계하며 생각해야 할 질문들에 스스로 명확한 기준이 없어 결정을 내리기에 어려움이 있었다.

    @Query("""
            SELECT s
            FROM Study s
            JOIN UserStudy us ON us.studyId = s.id
            WHERE us.userId = :userId
            ORDER BY us.createdAt ASC
            """)
    List<Study> findAllByUserIdOrderByCreatedAtAsc(Long userId);

위 쿼리는 현재 프로젝트에서 사용 중인 쿼리 중 하나로,userStudy라는 중간 테이블이 studyuser의 id 값을 함께 가지고 있는 구조이다.
userIdstudyId의 조합은 비즈니스적으로 중복되면 안 되며, 대부분의 조회 또한 이 두 id 값을 기준으로 이루어지고 있다.

이러한 특성만 놓고 보면 userId와 studyId를 기준으로 인덱스를 설정하면 되겠다 생각했으나, 인덱스를 설정하는 명확한 기준을 알지 못한 채 “그럴 것 같다”는 판단만으로 적용해도 되는지 확신이 있지 않았다.

이처럼 실제 프로젝트 단계에서 인덱스를 판단하고 적용하기에는 아직 부족하다고 느꼈고, 인덱스에 대해 더 깊이 있게 공부할 필요성을 느끼게 되었다.

3. 쿼리 성능을 개선하고 싶다.

프로젝트를 진행하며 지금까지는 쿼리가 어떤 결과를 반환하는지, 즉 행위와 기능 구현에만 초점을 두고 작성해왔고, 조회 성능이나 실행 비용에 대해서는 크게 고려하지 않았다.

하지만 서비스 규모가 커지고 데이터가 많아질수록 쿼리 성능은 곧 사용자 경험과 직결되는 요소가 될 수밖에 없다고 생각하게 되었다.

추후에는 단순히 동작하는 쿼리를 넘어서, 대규모 데이터를 대상으로 한 조회 쿼리에서 성능을 개선하는 경험을 해보고 싶다는 목표가 생겼다.


위와 같은 이유들로 Real MySQL 8.0을 읽으며 MySQL에 대해 심도있게 공부해보기로 결정했다.
이 책을 통해 단순히 기능을 아는 수준을 넘어서, 내가 사용하고 있는 DBMS가 무엇인지, 그리고 어떤 상황에서 어떻게 활용할 수 있는지 스스로 판단할 수 있는 단계에 도달하는 것을 목표로 하고 있다.

profile
백엔드 개발자

0개의 댓글