데이터베이스 쿼리 성능 차이를 이해하기 위한 실험

today 2017-02-11 face Posted by appkr turned_in Work & Play forum 0

많은 양의 데이터를 체계적으로 저장하기 위해 데이터베이스를 사용합니다. 필요할 때마다 빠르게 꺼내 보거나, 수정하고, 불필요해지면 삭제하기도 합니다. 이처럼 데이터베이스는 수 많은 레코드셋에서 원하는 레코드만 빠르게 추출해 낼 수 있는데, 내부에서 어떻게 작동하는 지는 완전 블랙박스죠?

가령 ‘인덱스를 걸면 빠르다’, ‘조인은 느리다’처럼 일반적으로 알려진 상식이 있고, 이런 상식에 따라 모델링을 하면 대체적으로 잘 돌아가지만…

최근 회사에서 관련된 일도 있었고 해서, 스물스물 호기심이 발동하기 시작했습니다.

MySQL은 소스코드가 깃허브에 완전 공개되어있어 블랙박스라 할 수는 없지만, 죽을 때까지 코드를 까볼 생각은 없습니다. 대신 간단한 배열을 이용해서 데이터베이스를 흉내내고, 기본 키(Primary Key), 문자열 컬럼에 대한 풀 스캔, 바이너리 스캔, 인덱스, 조인 등에서 성능 차이가 발생하는 이유를 추측해보기로 했습니다.

이 실험을 위한 소스코드는 이곳에서 다운로드 받을 수 있습니다.

존칭형으로 블로그 쓰기

today 2017-02-11 face Posted by appkr turned_in Learn & Think forum 0

이 블로그는 직업인으로서의 일상과 생각을 정리하여 기록하기 위해 2008년부터 쓰기 시작했습니다. 당시에는 모바일 반도체를 개발하는 회사에서 제품을 기획하는 일을 하고 있었지요. 블로그 플랫폼도 네이버로 시작했던 걸로 기억합니다. 일기처럼 쓰는 글이었으므로 당연히 평서형(반말)을 썼습니다.

네이버에서 텍스타일로, 텍스타일에서 티스토리로, 다시 워드프레스로 이전하며 블로깅을 하다가 2011년 반도체 회사를 떠나면서 더 이상 글을 쓰지 않았습니다. 개발자의 삶을 살기로 마음먹은 2015년 중반부터 개발자스럽게 블로그 플랫폼을 Jekyll로 옮겨 개발자로서 배운 내용을 하나씩 남기기 시작했습니다.

깃허브에 라라벨 프레임워크에 대한 온라인 강의를 연재하고, 책을 집필하고, 오프라인 강의를 하면서, 블로그는 지난 세월 기획자로 살던 저를 개발자 appkr로 세상에 알리는 든든한 지원군 역할을 해 왔습니다. 덕분에 성공적으로 경력 전환도 할 수 있었습니다.

블로그 방문자 추이

그림처럼 꽤 많은 분들이 찾아 주셨고, 이제 이 블로그는 혼자만의 일상을 기록하기보다는 다른 개발자들과 소통하는 공간으로 성격이 변모되었습니다. 해서 앞으로는 존칭형(존댓말)으로 글을 쓰려고 합니다. 사실 존칭형으로 글 쓰는 것이 더 쉽기도하고요~

PHP의 예외 클래스 이해하기 2부

today 2017-01-15 face Posted by appkr turned_in Work & Play forum 0

지난 1부에서는 예외의 기본적인 개념과 사용법, 그리고 프레임워크 없이 PHP 프로젝트를 할 때 사용할 수 있는 몇 가지 테크닉을 살펴봤다.

이번 포스트에서는 라라벨로 만든 예제 프로젝트를 통해 사용자 정의 예외 클래스를 선언하고 사용하는 코드를 구현해 볼 것이다. PHP/라라벨 만의 특수한 내용은 일부에 불과하며, 다른 언어나 프레임워크에서도 사용할 수 있는 일반적인 내용이라 생각한다.

PHP의 예외 클래스 이해하기

today 2017-01-07 face Posted by appkr turned_in Work & Play forum 0

국어 사전에서는 ‘일반적인 규칙이나 정례에서 벗어나는 일’을 예외라고 정의하고 있다.

컴퓨터에서 예외란 ‘프로그램을 실행하는 중에 발생하는 비정상적인 상황’으로 프로그램의 일반적인 실행 흐름을 바꾼다. 예를 들어 함수에 허용하지 않는 인자가 전달되었다거나, 디스크에서 무언가를 읽거나 써야 하는데 디스크에 접근할 수 없다거나, 메모리 공간이 부족해서 변수 값을 저장할 수 없는 경우 등을 들 수 있다.

개발자는 프로그래밍을 할 때 발생할 수 있는 예외 상황을 미리 식별하고, 앞서 말한 상황이 발생하면 예외를 던지고(Throw 또는 Raise), 잡은 예외를 개발자 자신만의 방식으로 핸들링할 수 있다(Catch 또는 Rescue). 개발자가 예상치 못한 예외라면 런타임(PHP의 경우라면 PHP 엔진)이 프로그램의 실행을 멈추고 오류 메시지를 출력하는 등의 일을 할 것이다.

위 그림은 Objective-C 쪽 얘긴데, 사실 PHP에서 완전 반대다. 어쨌든 PHP 7부터는 try {...} catch {...} 구문에서 예외(Exception) 뿐만 아니라, 오류(Error)도 캐치할 수 있도록 지원하고 있다.

이 포스트에서는 PHP의 예외 클래스(Exception Class)를 사용하는 기본적인 방법을 설명한다.

모바일 푸쉬 메시지(FCM)를 위한 PHP 서버 구현 2부

today 2016-12-24 face Posted by appkr turned_in Work & Play forum 0

이 포스트는 2016년 12월 24일 첫 포스트 이후, 2017년 1월 24일에 코드 리팩토링 내용을 반영하여 변경되었습니다.

FCM(Firebase Cloud Message)은 Android, iOS, Web 등의 클라이언트에 푸쉬 메시지를 보내기 위한 서비스다. 과거 GCM(Google Cloud Message)이 진화한 것이다.

Firebase Logo

지난 1부에서는 푸쉬 메시지를 받을 모바일 단말 애플리케이션이 구글 FCM 서버로 부터 받은 고유 식별 토큰을 애플리케이션 서버로 전달해 등록하는 과정을 구현했다. 이번 포스트에서는 등록한 토큰으로 푸쉬 메시지를 쏘는 기능을 구현한다.

keyboard_arrow_up