완벽함이란 더 이상 무엇인가를 더할 것이 없을때 이루어 지는 것이 아니라, 더 이상 무엇인가를 뺄 것이 없을 때 이루어진다. - 앙뜨완느 마리 로제 드 생떽쥐페리
by 미친병아리 이글루스 피플 2006 이글루스 TOP 100 2007 이글루스 TOP 100
포토로그
메뉴릿
주저리 주저리
라이프로그
DB 어플리케이션과 인덱스..
DB 어플리케이션이라고 하면 DBMS 프로그램과 연계되어 실행되는 프로그램을 말한다.. OODB가 오래전부터 이야기는 많이 되어 왔지만 아직까지도 확산은 더딘 상태다.. 아직까지는 RDBMS가 대세다.. DB 어플리케이션에서 중요한 것은 당연히 DB다.. 기본적인 관리법 및 SQL 이라 불리우는 데이터를 저장, 수정, 삭제, 조회 할 수 있는 방법을 제공하는 방법에 대해서 잘 알아야 한다.. SQL은 표준이 정해져 있지만, RDBMS의 구현사 마다 마음대로 확장한 문법들이 있다.. 개발자들은 이런 부분까지 신경을 써야한다..

요즘의 어플리케이션들은 DB 어플리케이션의 비중이 상당히 높다.. 웬만한 웹 어플리케이션들은 거의 대부분이 DB 어플리케이션이라고 봐도 된다.. 많은 양의 윈도우 데스크탑 어플리케이션들도 DB와 함께 실행된다..

그럼, DB에 관해 어떤 내용들을 알아야 할까? 아는 만큼 보인다고, 많이 알면 많이 알 수록 프로그래밍에 도움이 된다.. 하지만, 대부분의 사람들이 당장 뭘해야 하는데 모르면 안되는 것들을 먼저 학습을 하게 마련이고, 당장 눈앞에 문제를 해결하는데 도움이 안되는 것이라면 그다지 시간을 투자하지 않는 경향이 있다.. 그래서 그런지 DB 모델링, 쿼리문 작성에 대한 학습 및 실습은 꽤 많이 하는 편인데, 인덱스나 튜닝 등 성능에 관한 부분은 관심이 별로 없는 것 같다는 느낌을 많이 받는다..

쿼리문을 작성할때 조금만 더 신경을 쓰면 (사실 이 조금만 더 라는 표현이 상당히 애매하고 이견이 많은 표현이다..) 성능에 상당한 영향을 미치는 부분을 미연에 제거할 수 있다.. 인덱스는 데이터를 조회하고 검색하는데 성능향상을 시키기 위해 미리 정렬된 색인을 만들어 놓도록 지정하는 방법이다.. 따라서 모든 select 문을 작성할때 이 인덱스를 잘 활용하도록 작성을 해야 한다.. 만약 인덱스가 없다면 해당 쿼리의 특징에 맞게 인덱스를 구성할 필요가 있다..

그런데 개발자들 중에는 초기 개발에만 신경을 쓰고, 운영시나 향후 데이터가 많이 쌓이게 되었을때를 전혀 고려하지 않은 개발 당시 동작하는데만 집중해 개발을 진행하는 사람들이 간혹 있다.. 이런 사람들이 작성한 프로그램은 처음에 테스트 할때는 동작에 아무런 문제가 없다.. 하지만, 짧게는 3개월 정도 지나면 데이터들이 쌓이고 나서 서서히 느리게 동작하기 시작한다.. 나중에는 참아주기 힘들 정도로 느려진다..

처음 코드 및 쿼리를 작성할 때 부터 이 테이블에서 가져오는 데이터는 주로 어떤 식으로 조회가 자주 되며, 조회되는 방식이 다르더라도 속도를 위해 미리 정렬해두면 좋을 것 같은 엔티티를 식별해 두고 필요시 DBA에게 인덱스를 걸어달라고 요청을 해야 한다.. 아울러 쿼리문의 where 절에 조건을 걸때도 인덱스의 순서에 맞춰 가장 범위를 좁힐 수 있어 인덱스의 효과가 높게 작성을 해야 한다.. 이런 과정이 사실은 그리 시간을 많이 소요되는 것은 아니다.. 처음에는 고민을 해야할 필요도 있을 것이고, 경우에 따라서는 복잡한 조인 등으로 인해 고민해야 할 시간이 많이 필요하게 되는 경우도 있을 수 있다.. 그렇다고 해도 대부분의 경우는 그리 많은 시간이 필요하지는 않으며, 이는 연습을 통해 짧아질 수 있다.. 하지만, 이런 부분에 대한 중요성을 인식하고, 이런 훈련을 평소에 해두지 않으면 인덱스는 고려치 않는 나쁜 버릇으로 발전하게 된다.. 평소에 귀찮고 힘들더라도 이런 부분은 고려하면서 코드를 작성할 수 있는 훈련을 하자.. 나중에 성능향상을 위해 대충 만들어져 곳곳에 숨어 있는 쿼리문들을 모두 발췌해 내는 작업은 아주 귀찮은 작업이다..

이 글과 관련있는 글을 자동검색한 결과입니다 [?]

by 미친병아리 | 2008/02/15 23:55 | ▣ 컴터야그 ▣ | 트랙백 | 덧글(10)
트랙백 주소 : http://madchick.egloos.com/tb/1713400
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 스팟 at 2008/02/16 21:05
DBMS에 대한 기초지식이 없던 때는 무조건 프로그램에서 처리하려고 했었는데 시간이 좀 지나고 나서는 되도록 DBMS에서 처리하는게 좋다는 생각입니다.
Commented by 미친병아리 at 2008/02/16 22:55
스팟님 : 맞습니다.. 최대한 DBMS가 처리해주도록 하는 것이 훨씬 빠릅니다.. 그렇다고 무덕대고 쿼리 날리는 횟수를 줄일 수 있는 방법이 있는데도, 쿼리를 왕창 날리는건 바람직하지 않겠지만 말입니다..
Commented by 하늘처럼™ at 2008/02/16 23:17
ㅎㅎ 몇달이 지난 후에 DB가 느려진 것을 되려 묻는 분들이 간혹 있지요..
참으로 난감하지요..
Commented by opnc at 2008/02/17 01:30
초기 개발에만 신경쓰는 개발자들.. 그렇지 않으면.. 작업시간이 길어지고.. 눈치주는 관리자.. 실력이 없어서 빨리빨리 못한다.. 뭐라 그러고..
Commented by KONA at 2008/02/17 23:26
새삼 당연하지만, 미쳐 못 느끼고 그냥 넘어가는 부분이 아닌가 싶습니다. OJT때 WHERE절을 쓸때 주의사항 같은걸 배운적이 있는데... DB에 따라서 조금씩 특성이 다르다보니 가끔은 제가 아는게 맞는게 잇기도 하고, 틀린게 잇기도 하더군염... 근래에는 인사쪽 근태데이터에 인덱스를 다시 걸어줬더니 프로그램 속도가 확연하게 개선된걸 본적도 있구요...
Commented by 쩌비 at 2008/02/18 09:39
맞습니다. 역시 초기에 유지보수를 생각해서 좀 더 신경을 쓴다면 좋을 텐데요.
Commented by 윌리 at 2008/02/18 09:59
예전에 제가 국내 기술영업이사로 일할 때 모 회사 (나름 중견기업) 전살실장이 시스템이 느려서 교체해야 한다고 사장회의에 보고를 할 당시 우리 팀(후배들과 급조한 몇명) 이 가서 인덱스 몇개 바꿔서 그간 처리속도보다 100배 이상 빠르게 해주었던 적이 있습니다.

결론은 전살실장은 똑똑해야 한다는..은 아니고 동감되는 글이군요. ^^
Commented by wowhoon™ at 2008/02/20 10:54
아주 가끔 컨설팅을 나가거나 하면 어떤 곳은 장비 납품하는 곳에서 이를 잘이용해서 영업을 하더군요, 기존 장비 보다는 몇배 빠른 장비가 나왔으니 지르시죠 라는 뉘양스의, 조금만 신경을 기울이면 엄청난 비용을 줄일 수 있는데 말이죠.
Commented by 미친병아리 at 2008/02/24 03:59
하늘처럼™ 님 : ㅋㅋㅋ 뭐, 별 수 있나여.. 원인 찾아서 해결해야죠..

opnc님 : 이런 부분들까지 신경을 쓰면서도 일정이 늦어지지 않도록 하나 하나 준비하고 점검해 나가는 것들을 쌓아 나가야죠.. 그렇지 않으면 경력이 쌓인 개발자인데도 신입과 비슷한 결과물 내면서 시간 없다고만 하고 있겠죠..

KONA님 : 초기에 인덱스에 전혀 신경을 쓰지 못한 경우엔 인덱스만 제대로 걸어줘도 정말 놀라운 성능 향상을 경험하게 되지요..

쩌비님 : 유지보수에 대해 생각하며 개발하는 것은 아무리 간단한 것이라도 평소에 연습과 준비를 해두지 않으면 발전이 없게됩니다..

윌리님 : 정말 그렇습니다.. 초기에 인덱스를 하나도 고려치 않고 개발한 경우라면..

wowhoon™님 : 제가 영업을 한다면 일단 그런 부분은 인덱스를 걸어줘 해결해주고, 나중에 제대로 팔아볼 것 같은데.. 장비구매 없이도 성능향상을 할 수 있었다는 것을 알게되면 고객이 뭐라 생각할까요? 또한 주변에 인덱스만으로도 해결 방법이 있다는 것을 아는 사람들에게는 거짓말임이 들통난 셈인데, 그렇게 영업을 하고 싶을까 하는 생각이 듭니다.. 거짓말은 언젠가 들통나고 진실은 언젠가는 통하죠..
Commented by 이재학 at 2009/02/14 11:17
튜닝의 기본은 모델링이죠. 모델링에서 근본적인 잘못이 있으면 튜닝을 아무리 해도 소용없습니다.튜닝은 익덱스와 힌트로 보면 되겠는데, 구현에만 중점을 두지 말고 튜닝을 염두에 두면서 쿼리를 만들면 좋을 듯.. 그런데, 그러면 개발 시간이 되나요..? 암튼, DB 설계시 튜닝을 염두에 두어야 하니까, 설계사의 업무가 정말 중요하겠네요.

:         :

:

비공개 덧글

Creative Commons License

< 이전페이지 다음페이지 >


이글루 파인더
카테고리
태그
최근 등록된 덧글
한동안 이 앺을 잘 썼는데..
by 수학의정석 at 01/06
gw031511@naver.com ..
by gw031511 at 01/05
최고입니다!
by 아리스 at 12/28
귀환 축하드립니다~ㅎㅎ
by 라디오키즈 at 12/23
ftp이동시 한글/중국어/..
by 흐흠... at 12/17
YOIU MAD CHICK YOU.
by my name at 12/17
YOU MAD CHICK YOU.
by my name at 12/17
Solution for Error code:..
by C광 at 12/14
저도내복사야하는디....
by 미친감자 at 12/09
하하^^ 저도 요즘 뜸하..
by 김정수 at 11/27
잘 봤습니다. UML에 대..
by ohyecloudy at 11/21
잘 지내시죠? 여전히 일로..
by hehua at 11/20
월동준비없이 간만에 오..
by 쩌비 at 11/20
블로그가 업데이트 되어..
by Funny at 11/19
간만의 포스팅 반갑습니..
by 135th at 11/19
오랜만이세요.. 어케 ..
by zoops at 11/19
오래간만 입니다. :)
by 마음으로 찍는 사진 at 11/19
오랜만에 돌아오셨네요~..
by jely at 11/19
좋은평가 감사드립니다. ..
by ilsooni at 11/16
참 오래간만이시네요.^^..
by gonny at 11/03
최근 등록된 트랙백
[펌] UTF-8 인코딩과..
by 돈버는 기계로 살것인가?..
크리스마스 영어 표현들
by 영어와 가제트 이야기 [..
데꾸벅의 생각
by techbug's me2DAY
UML, 실전에서는 이것..
by Ohyecloudy's Progr..
데드라인 - 소설로 재미..
by Ohyecloudy's S3
실전적 문장비법 글쓰기..
by 블로거1.0의 WEB2.0 도전기
우분투 리눅스 8.10 하루..
by joogunking
마이클잭슨 사망 소식들..
by Bluesky
후아유(2002) : 2000년대 ..
by 생활의 발견
知的人의 생각
by peter_c's me2DAY
톰캣!!
by 나두미키님의 이글루
정규 표현식 완전 해부와..
by 김재호의 디지털보단 아..
HTML 소스 제대로 보자,..
by [부동산]개발.정비구역
내 손안의 PC - 자바가 ..
by 上善若水
Stringbuilder OutOfMe..
by Pinch of Smack for D..
웹 오피스 정리
by Web N Bizr
네이버 블로그 검색 - ..
by InformationRedesign
에반게리온: 서 - 사운드..
by LG전자 XCANVAS홈..
블로그에서 수익은 기대..
by IT, 모바일, 엔터테..
"다음으로 지원한 이메일..
by 민노씨.네
이글루링크
EBC (Egloos Broad..
erehwon.LAB
About willy
Living Loving and L..
修身齊家萬事成
【 이름쟁이™의 눈으로 】
개 풀 뜯어먹는 소리
觀鷄者의 망상 공간
Oz in Wonderland
김명신의 즐거운 하루
함께.. 늘 그렇게..
荷花(hehua)
소스코드위를 걷다.....
네러티브 오프로드
zoops 이야기
까모의 룰루랄라~
▒ 제닉스의 사고뭉치 ▒
河伊兒의 고물상
가로수들은 여전히 제자..
餘分D: physics and fun
극한추리 hansang\'s w..
길고양이 이야기
어쨌건간에 흘러가는 者
선인장 일지
~★~ 우하하!!~ 프로..
without coffee
Lady Nariel's Golde..
검색엔진 루씬 Lucene..
fire, walk with me
디지털을 말한다 by oojoo
♠후리지아 향기처럼♠
일상 생활 속의 파편들
뽐뿌 inside
책읽는 엄마의 보석창고
Mono log
blogger jely
반복되는 일상속의 비정..
골룸의 골방
질풍 17주의 머브러브 라..
maniacs
AURA's Showcase
ozzyz review 허지웅..
디제의 애니와 영화 이야기
ANTIEGOIST : GyuHo..
미달이의 육아일기
All about IT Trends
Suicide Solution
얼음집
Trouble n Travel
모기불통신
Trip
찬별은 초식동물
숲 속 작은 섬
snowcat blog
전도서에 바치는 장미
한글이 꿈틀
이우진의 UCC 제작실 ..
INVENT
위로..위로..위로..
woody's film review
Show me the money
전자음악 알아보기
sunny's store
이규영 연예영화 블로그
◀ M.HOUSE - Masade..
Urban Living
쉽니다.
roadster
무디의 무책임한 세상
이제 다시... 바라보다.
random life
Beyond Web
ricordati di me
Jania's Blog
Gaious 功房 네오베..
애자일 이야기
- Last Paromix -
T9T9 Research Center
양군 블로그
소프트웨어 이야기
식사일보 food daily
Software Engineering..
티오
고재관의 블로그
mocca
yundream의 프로그래..
통TON
lalou
생각이 없는 블로그
이전블로그
rss

skin by 이글루스