본문 바로가기

분류 전체보기

(36)
[RealMySQL 8.0] 8. 인덱스 - 디스크 읽기 방식 / 인덱스란? 8. 인덱스인덱스는 데이터베이스 쿼리의 성능을 언급하면서 빼놓을 수 없는 부분이다.각 인덱스의 특성과 차이는 상당히 중요하며, 물리 수준의 모델링을 할 때도 중요한 요소가 될 것이다. MySQL 서버의 옵티마이저가 발전하고 성능이 개선됐다고 해도 여전히 관리자의 역할은 매우 중요하다. 그래서 인덱스에 대한 기본 지식은 지금도 앞으로도 개발자나 관리자에게 매우 중요한 부분이며, 쿼리 튜닝의 기본이 될 것이다. 8.1 디스크 읽기 방식이번 장에서는 "랜덤(Random) I/O", "순차(Sequential) I/O"와 같은 디스크 읽기 방식을 먼저 간단히 알아보고 인덱스를 살펴보자. 컴퓨터의 CPU나 메모리처럼 전기적 특성을 띤 장치의 성능은 짧은 시간 동안 매우 빠른 속도로 발전했지만 디스크 같은 기계식 ..
[RealMySQL 8.0] 5. 트랜잭션과 잠금 - MySQL의 격리 수준 5.4 MySQL의 격리 수준트랜잭션의 격리 수준(isolation level)이란 여러 트랜잭션이 동시에 처리될 때 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 말지를 결정하는 것이다. 격리 수준은 크게 "READ UNCOMMITED", "READ COMMITED", "REPEATABLE READ", "SERIALIZABLE"의 4가지로 나뉜다. "DIRTY READ"라고도 하는 READ UNCOMMITED는 일반적인 데이터베이스에서는 거의 사용하지 않고, SERIALIZABLE 또한 동시성이 중요한 데이터베이스에서는 거의 사용되지 않는다. 4개의 격리 수준에서 순서대로 뒤로 갈수록 각 트랜잭션 간의 데이터 격리 정도가 높아지며, 동시 처리 성능도 떨어지는 것이 ..
쉽게 알아보는 클린 아키텍처 (Clean Architecture) 지금까지의 프로젝트에서는 전통적인 MVC 패턴을 사용했다. 구조가 간단해 러닝 커브도 없고 신경 써야 할 부분이 상대적으로 적다는 장점 때문에 MVC 패턴을 선호해왔지만, 삐삐 서비스를 1년간 운영하면서 MVC 패턴의 단점을 점차 느끼고 있다. 그 중 가장 큰 문제는 기능이 추가되면서 Controller가 비대해진다는 점이다. 한 도메인에 대한 API 요청/응답 처리가 컨트롤러에 몰려 있어 코드를 파악하기 어렵고 유지보수성과 확장성이 떨어진다는 단점이 있다. 이것이 바로 MVC 패턴의 한계이다. 우리는 이러한 MVC 패턴의 한계를 인식하고, 현재 천천히 Clean Architecture로 리팩토링을 진행하고 있다. 이 글에서는 클린 아키텍처의 목적과 장점을 설명하고자 한다. 1. 아키텍처란아키텍처란 앱..
[RealMySQL 8.0] 5. 트랜잭션과 잠금 - InnoDB 스토리지 엔진 잠금 5.3 InnoDB 스토리지 엔진 잠금InnoDB 스토리지 엔진은 MySQL에서 제공하는 잠금과는 별개로 스토리지 엔진 내부에서 레코드 기반의 잠금 방식을 탑재하고 있다.InnoDB는 레코드 기반의 잠금 방식 때문에 MyISAM보다는 훨씬 뛰어난 동시성 처리를 제공하지만 이원화된 잠금 처리 탓에 MySQL 명령을 이용해 잠금에 대한 정보에 접근하기가 상당히 까다롭다. 하지만 최근 버전에서는 InnoDB의 트랜잭션과 잠금, 그리고 잠금 대기 중인 트랜잭션의 목록을 조회할 수 있는 방법이 도입됐다. 그리고 조금씩 업그레이드되면서 InnoDB의 중요도가 높아졌고, InnoDB의 잠금에 대한 모니터링도 더 강화되면서 Performace Schema를 이용해 InnoDB 스토리지 엔진의 내부 잠금(세마포어)에 대..
[RealMySQL 8.0] 5. 트랜잭션과 잠금 - 트랜잭션 / MySQL 엔진의 잠금 5. 트랜잭션과 잠금트랜잭션은 작업의 완전성을 보장해준다.즉, 논리적인 작업 셋을 모두 완벽하게 처리하거나, 처리하지 못할 경우에는 원 상태로 복구해 이상현상이 발생하지 않게 만들어주는 기능이다. 잠금과 트랜잭션은 비슷한 개념 같지만 잠금은 동시성을 제어하기 위한, 트랜잭션은 데이터의 정합성을 보장하기 위한 기능이다.잠금은 여러 커넥션에서 동시에 동일한 자원을 요청할 경우 순서대로 한 시점에는 하나의 커넥션만 변경할 수 있게 해주는 역할을 한다.  5.1 트랜잭션5.1.1 MySQL에서의 트랜잭션트랜잭션은 하나의 논리적인 작업 셋에 하나의 쿼리가 있든 두 개의 쿼리가 있든 논리적인 작업 셋 자체가 100% 적용되거나 아무것도 적용되지 않아야 함을 보장해주는 것이다.  간단한 예제로 트랜잭션 관점에서 In..
[🏝️ 구름톤] 구름톤 in Jeju 10기 3-4일차 참가 후기 (우수상🏅) 1-2일차 후기는 위 링크에서 볼 수 있다. 1. 3일차1) 본격적인 개발 시작전 날 새벽 4시에 자고 8시쯤에 다시 해커톤 장소로 돌아와 본격적인 개발을 시작했다. 우리가 진행하는 프로젝트는 플로깅 서비스로 필요한 서버에서 개발해야 하는 API는 총 5개였고 그중 주요 API는 다음과 같다.사용자의 플로깅 기록 등록 API플로깅 기록 조회 API쓰레기가 존재하는 가까운 바다 조회 API특히 사용자의 플로깅 기록을 등록할 때, 위도와 경도 정보뿐만 아니라 쓰레기를 주운 위치도 따로 구분을 해줘야 했기에 어떻게 개발을 하는 게 서버가 안 터지고 잘 동작할 수 있을지를 고민했다.  결론적으로는 위와 같은 ERD가 나왔고 아쉽지만 시간 상의 문제로 프론트에서 사용자가 플로깅을 마친 시점에 전체 좌표 정보들을 ..
[🏝️ 구름톤] 구름톤 in Jeju 10기 1-2일차 참가 후기 (우수상🏅) 지원 및 선발 후기는 위 링크에서 볼 수 있다. 구름톤은 5/21~5/24에 진행되었으며, 첫 날 오전에 구름스퀘어에 모여야 해서 전 날 미리 제주에 도착했다.첫 날에 과제도 주어지기 때문에 차라리 급박하게 당일에 도착하는 것보다는 전 날 미리 도착해서 참여하는 걸 추천한다. 👍 구름톤 10기의 전체 일정은 아래 타임테이블과 같다.  1. 1일차1) 아이스브레이킹 & SELF PR 첫 날은 구름스퀘어에 모여서 1간단한 자기소개를 하는 시간과 크램폴린 IDE 실습/GDS 강의 및 실습 시간, 강의를 듣는 시간을 가졌다.  입장하자마자 이름표와 티셔츠를 포함한 카카오 굿즈를 받았다. 귀여운 하르방이 그려진 티셔츠는 2일차부터 입으면 된다. 굿즈로는 카카오 선풍기를 받았는데 나중에 안 거지만 쿨링 기능이 있..
[🏝️ 구름톤] 구름톤 in Jeju 10기 지원 및 선발 후기 1. 구름톤이란 구름톤은 카카오와 구름 기업에서 진행하는 해커톤으로 제주에서 3박4일 간 몰입해서 결과물을 만들어내는 해커톤이다.자세한 내용은 이 사이트에서 확인할 수 있다. 구름톤은 총 30명이 선발되며, 각 팀은 디자이너 1명, 기획 1명, 프론트 2명, 백엔드 1명으로 구성된다.사실 구름톤을 3기 정도때부터 알고있었지만 만약에 구름톤에 선발되면 2박 3일 간, 혼자 API 개발 + 배포까지 다 수행해야했기에 자신이 없어 지원을 미루다가 이제 지금쯤이면 가능하지 않을까 싶어 지원을 했다. 굳이 제주도까지 가서 해커톤에 참여하나라는 생각이 들 수도 있고, 실제로 이번 10기에 선발되면서 그런 소리를 듣기도 했다. 하지만, 기업에서 주관하는 해커톤인만큼, 그곳에서 제공하는 교육(특히 크램폴린 배포)과 체..