데이터 인사이트

데이터 전문가 칼럼
데이터 전문가가 전하는 데이터 노하우

이병국의 개발자를 위한 DB 이야기: 마지막회 : ‘개발자를 위한 DB 이야기’ 연재를 마치며

작성자
관리자
작성일
2020-08-28 18:03
조회
88

이병국의 개발자를 위한 DB 이야기: 마지막회


‘개발자를 위한 DB 이야기’ 연재를 마치며

 

이병국 andongcn@dreamwiz.com

프리랜서 DB 엔지니어. 동아제약 전산실에서 SW 개발 업무를 시작으로 프리랜서 개발자로 독립해 활동하던 중 우연한 기회에 DB와 인연을 맺게 됐다. 삼성생명 전산 운영팀에서 쿼리 성능을 개선하는 DB 튜닝과 IOA 업무를 거쳐 공공데이터를 활용한 부동산 정보 제공 비즈니스를 시작했다.

개발자 출신의 DB 엔지니어로 활동하면서 개발자에게 DB 관련 지식이 꼭 필요함을 절감했다. ‘정보의 불균형이 시장 왜곡을 가져온다’는 ‘레몬시장이론’은 중고차 거래에서 흔히 나타나기 쉽다. 좋은 차와 나쁜차를 아는 중개인과 모르는 구매자 사이에는 정보의 비대칭때문에 구매자가 손해를 볼 수 있다. 구매자도 차에 대해 기본적인 지식을 알고 있어야, 정보의 균형이 맞으므로 서로 손해를 보지 않고 합리적인 가격에 차를 거래할 수 있다. 마찬가지로 개발자들도 DB에 대해 기본적인 지식을 습득해 정보의 균형을 맞추면, DB 엔지니어와 협업이 더 쉬워지고 한단계 더 발전한 자신의 모습을 발견할 것이다.
 

성공과 실패의 경험을 나누자, 용기와 희망을 나누자

개발업무를 시작으로 IT계에 입문했던 필자가 10년 가까이 DB엔지니어로서 활동하면서 얻은 경험과 지식을 나누고자 한다. DB를 자주 접하는 SW 개발자뿐 아니라, DB 전문가를 꿈꾸는 대학생에서DB 분야에 입문한지 1~2년 된 기입문자가 쉽게 이해할 수 있도록 비유를 통해 쉽게 접근해볼 계획이다. 물론 전문가들이라도 다시 한번 개념을 정립하는 의미에서 필요한 내용이 될 수 있다.

전체적으로 DB의 기본 원리와 개념을 이해하고 테이블, 인덱스, 쿼리, 튜닝, 플랜 등 개발자들이 알아야 하는 DB 전분야에 대해 쉽게 이해하도록 설명하겠다. DB 기술서적이나 번역서보다는 조금 더 부드럽게 접근할 계획이다 . 그렇다고 흔히 서점에서 만날 수 있는 개발자 위주의 SQL 소개서도 아니다. 이 연재는 시리즈로 나갈 것이다. 연재를 끝까지 읽는 독자라면 준전문가 수준의 DB 원리를 아는 것을 목표로 한다.
 

2014년 여름, 우연한 기회로 DBGuide.net에 연재를 시작한 지 벌써 3년이란 시간이 지났습니다. ‘개발자를 위한 DB 이야기’란 주제로 시작한 연재의 모토는 ‘성공과 실패의 경험을 나누자, 용기와 희망을 나누자’였는데 돌이켜 보면 그 목표가 제대로 이루어지지 않은 것 같아 죄송한 마음이 먼저 듭니다.

개발 업무를 시작으로 IT계에 입문했던 필자가 10년 가까이 DBA로 활동하면서 얻은 경험과 지식을 나누고자 한 처음의 목표에는 도달하지 못하였으나, 전반적으로 DB의 기본 원리와 개념을 이해하고 테이블·인덱스·쿼리·튜닝·플랜 등 개발자들이 알아야 하는 DB의 여러 분야에 대해 쉽게 이해하도록 소개했다고 스스로를 위로해 봅니다.

• 지난 연재의 기억들

[1회] 물탱크 구조로 알아본 오라클의 블록 옵션 ‘PCTFREE와 PCTUSED’
지금도 기억이 생생하다. PCTFREE와 PCTUSED를 물탱크의 구조와 비교해서 설명했는데, 첫 연재물로서 두려움 반 설렘 반으로 작성한 글이었다. 이 때 글의 패턴이 이후 모든 연재에 영향을 미쳤다.

[2회] 이산가족찾기 생방송을 통해 배우는 DB 원리
분류의 중요성에 대해 소개했다. 분류를 하는 목적은 빨리 찾기 위함이고, 빨리 찾는다는 것은 비용 절감과 직결된다.

[3회] 개발자에게 맞는 DB 공부방법 찾기: 물리적 분류와 논리적 분류 그리고 인덱스
개인적으로 가장 많은 시간을 투입한 글이었다. 이 연재를 위해 ‘분류의 역사’란 책을 사서 읽기도 하였다. ‘인류의 역사는 분류의 역사이고 인덱스도 분류’라고 강조했던 기억이 난다.

[4회] 데이터베이스 인덱스의 오해와 진실
[5회] 쉬운것이 올바른 것이다. ‘인덱스 끝장리뷰’(상)
[6회] 쉬운것이 올바른 것이다. ‘인덱스 끝장리뷰’(하)
DB에서 가장 중요하게 생각되는 인덱스에 관한 연재였다. 그 중요성을 말하지 않아도 누구나 알지만, 쉽게 생각하고 지나치기 쉽다. 가장 기본이 되는 연재이므로 몇 번을 읽어도 지나치지 않는다.

[7회] 누구도 알려주지 않았던 ‘오라클 인덱스 생성도’의 비밀
[8회] 누구도 알려주지 않았던 ‘오라클 쿼리 작성의 비법’
[9회] 퀴리 최적화 및 튜닝을 위한 오라클 공정쿼리 작성법
전체 연재물에서 필자가 가장 많이 읽히기를 원하는 연재들이다. 인덱스 생성도는 복잡한 쿼리를 단순하게 도식화할 수 있고, 인덱스 생성 포인트에 대해 정확하게 이해할 수 있는 좋은 방법이라고 강조했다. 공정쿼리는 무엇을(What) 어떻게(How) 조회할지에 대한 내용을 담고 있어야 하고, 공정쿼리 그 자체만으로 인덱스 생성 위치와 플랜을 알 수 있다고 주장했다. 다시 한번 강조하지만 위 세 편의 연재는 꼭 읽었으면 좋겠다.

[10회] 만능쿼리와 한방쿼리
나쁜 쿼리의 유혹에 대해 설명한 연재였다.

[11회] 오라클옵티마이저 ‘CBO와 RBO’이해하기
옵티마이저와 통계정보, 그리고 실행계획에 대한 내용이다. 초급 개발자가 아니라면 반드시 알고 있어야 하는 내용이다.

[12회] 재미있는 DB 이야기 ‘60갑자와 쿼리’
개인적으로 애착이 가는 글이다. 이때가 가장 마음 편하게 글을 썼던 시기다. 비록 DB에 대한 내용은 일부지만 많은 분들이 재미있게 읽었으면 좋겠다고 생각했다.

[13회] 그림으로 배우는 ‘오라클 조인의 방식’ 이야기
[14회] 반드시 알아야 하는 오라클힌트절 7가지
[15회] 오라클 플랜을 보는 법
[16회] 개발자들의 영원한 숙제 ‘NULL 이야기’
[17회] 알면 유용한 오라클 기능 ‘GATHER_PLAN_STATISTICS’
[18회] 알면 유용한 오라클 기능들
오라클의 여러 조인 방식과 중요하고 빈번하게 사용하는 힌트절에 대해 이야기하였다. 또한 플랜을 보는 방법을 숙지하고 오라클에 종속되지 않고 스스로 플랜을 예측해 나가야 한다고 강조했다. 기타 여러 오라클의 중요한 기능에 대해 소개한 글들이다.

[19회] 오라클 DICTIONARY를 활용한 DB툴 프로그램 ‘FreeSQL’
[20회] 이제는 말할 수 있다: 주식 자동매매 프로그램(상)
[21회] 이제는 말할 수 있다: 주식 자동매매 프로그램(하)
개인적으로 만든 DB 쿼리툴에 대해 소개하면서 오라클 디셔너리의 중요성과 활용성에 대해 이야기하였다. 개발자로서의 열정이 식을 무렵 잠시 외도한 시기에 개발한 주식 자동매매 프로그램에 대한 내용을 담고 있다.

[22회] 개발자들이 자주 접하는 오라클 에러 메시지
개발자들이 개발 과정에서 가장 빈번하게 접하는 오라클 에러 메시지에 대한 내용을 요약하였다.

[23회] 재미있는 DB 이야기 ‘사라진 날짜를 찾아라’
많은 시간과 노력이 들어간 글이었다. 개인적으로 애착이 많이 가는 글이다. 달력의 역사와 그레고리력에 대해 설명했고, 오라클 함수를 개발한 엔지니어에게 존경심을 갖게 된 계기가 된 연재였다.

[24회] 오라클 랜덤 함수와 사용자 정의 함수
오라클의 랜덤 함수와 사용자 정의 함수에 대해 설명하였다.

[25회] 그림으로 배우는 ‘공정쿼리와 인덱스 생성도’
공정쿼리는 무엇을(What) 어떻게(How) 조회 할지에 대한 내용을 담고 있어야 하며, 공정쿼리 그 자체만으로 인덱스 생성 위치와 플랜을 알 수 있다고 소개했다. 인덱스 생성도는 복잡한 쿼리를 단순하게 도식화할 수 있고, 인덱스 생성 포인트에 대해 정확하게 이해할 수 있는 좋은 방법이라고 강조했다. 이 연재는 많은 분들이 읽었으면 좋겠다고 생각해서 앞서 소개했던 내용을 다시 한번 요약 정리한 글이었다.

[26회] 디폴트 세팅의 함정과 오라클 파라메터
디폴트 세팅의 함정에 대해 이야기하였다. ‘설정 당할 것인가, 설정할 것인가?’에 대한 고민에 대해도 이야기하였다.

[27회] 재미있는 DB 이야기 ‘놀라운 마방진의 세계’
개인적으로 애착이 많이 가는 연재물 중 하나다. 4차 마방진 결과를 구하기 위해 작성한 쿼리의 수행 시간이 15시간 이상 소요되었다. ㅠㅠ

[28회] 오라클 운반 최소 단위 BLOCK
오라클의 최소 운반 단위인 블록에 대해 설명하였다.

[29회] 이세돌과 알파고의 세기의 대결
신석기 시대의 종말은 돌이 없어서가 아니었 듯이, 기술의 발전은 우리의 필요나 의지와는 무관하게 진행되기도 한다. 인간의 뇌를 닮은 딥러닝이 사람만이 가진 마음과 사회성까지 대체하는 날은 오지 않을까? 보고 듣고 말하고 생각하고 움직이는 본격적인 기계의 시대는 오지 않을까? 인간의 능력을 훨씬 뛰어 넘는 기계가 출현하지 않을까? 스스로 학습하는 기계, 스스로 판단하는 기계, 그 날이 오고 있음을 우리는 안다. 이세돌 9단의 패배 충격은 시작일 뿐이다. 앞으로 더 큰 충격이 다가 올 것이다. 비록 DB와는 주제가 멀지만 재미있게 쓴 글이다.

[30회] 가볍게 읽는 세상 이야기
연재의 성격과는 동떨어진 이야기만 개인적으론 좋았다.

[31회] 개발자를 위한 튜닝 실전(1편)
[32회] 개발자를 위한 튜닝 실전(2편)
[33회] 개발자를 위한 튜닝 실전(3편)
[34회] 개발자를 위한 튜닝 실전(4편)
[35회] 개발자를 위한 튜닝 실전(5편)
필자가 현장에서 경험한 튜닝에 관한 내용이다. 튜닝 실전 1편에서는 대용량 데이터를 처리하는 배치 쿼리에 있어서 인덱스를 사용하지 말아야 하는 경우에 대해 중요하게 설명하였고, 튜닝실전 2편에서는 소규모 데이터를 처리하는 온라인 쿼리에 있어서 인덱스를 정확히 사용해야 하는 경우에 대해 주로 설명하였다. 튜닝실전 3편에서는 공정쿼리 작성에 따른 튜닝의 선제적이고 예방적인 효과에 대해 설명하였다. 튜닝실전 4·5편에서는 필자가 필드에서 경험한 내용을 바탕으로 구체적이고 실무적인 튜닝 방법에 대해 설명하였다.

[36회] 페이징 처리에 대한 이해
페이징에 관한 내용이다. 일반적인 게시판에 대한 내용이지만 잘못된 페이징 기법을 사용 한다면 시스템은 큰 부하를 일으키게 된다. 페이징 처리 튜닝은 실무에서 가장 기본적이면서도 중요한 튜닝 기법이다.

[37회] 보기 좋은 떡이 먹기도 좋다. 좋은 쿼리 좋은 성능
좋은 쿼리에 관한 내용이다. 보기 좋은 떡이 먹기도 좋다는 말처럼 좋은 쿼리가 좋은 성능을 낸다. SQL 구문에서 문법적 오류가 없고, 정확한 결과가 나온다고 좋은 쿼리가 되는 것은 아니다. 좋은 쿼리에 대한 개념을 새롭게 가져야 한다.

[38회] 테이블의 수직분할과 수평분할에 대한 이해
테이블의 수직분할과 수평분할에 관한 내용이다. 합치는 것 보다는 나누는 것이 어렵다는 말이 있듯이 테이블의 분할에는 많은 어려움이 뒤따른다. 테이블 분할에 따른 성능 개선에 관한 내용으로서 테이블의 수직분할은 컬럼을 기준으로 하고, 테이블의 수평분할은 Row를 기준으로 한다는 것이 핵심 내용이다.

[39회] 채번에 대한 이해와 채번 방식의 장단점 비교
연재의 내용은 채번에 대한 이해와 채번 방식들, 그리고 각 장단점에 대한 것이다. 각각의 장단점을 고려하여 상황에 맞는 가장 적합한 방식을 선택해 사용하면 된다.

[40회] ‘개발자를 위한 DB 이야기’ 연재를 마치며
3년간의 연재를 마치면서 기존 연재에 대한 내용을 다시 한번 되돌아 보는 계기를 가졌고, 소회를 적어 보았다.

 

새로운 출발점에 서서

필자는 지금까지 오랫동안 다니던 회사를 그만 두면서 DB와는 직접적 관계가 적은 다른 일을 시작하게 되었습니다. 현재 공공데이터를 활용한 부동산 정보 제공 사이트를 만들고 있습니다. 혼자서 개발·구축하려다 보니 시간도 부족하고 연재를 이어갈 수 없는 상황이 되었습니다. 그동안 부족한 제 글을 읽어주시고 응원해 주신 모든 분들께 감사 인사를 드립니다. 2018년 무술년 황금 개띠 해를 맞이하여 여러분께서 이루고자 하는 모든 일이 이루어지기를 바랍니다. 감사합니다. (끝)

 

출처 : 한국데이터진흥원

제공 : 데이터 전문가 지식포털 데이터온에어(dataonair.or.kr)