brunch

You can make anything
by writing

C.S.Lewis

by chan Dec 15. 2015

쿼리를 잘하고 싶어요!!???

가끔 나에게 쿼리를 잘하고 싶다고 물어볼때.. 나는 이렇게 말한다.

브런치 첫번째 글을 무엇으로 채울까.. 하던 고민을 하던 중..


아직 부족한 나에게 "쿼리를 잘하는 방법"에 대해서 가끔 물어오던 기억이 나서 간단하게 읊어본다.


"쿼리가 무엇인가요?" 라고 질문을 던진다면.. 흠... 일종의 외국어라고나 할까??

미쿡 사람과 얘기를 나누기 위해서는 영어가 필요하듯이, 컴퓨터와 나름의 커뮤니케이션을 하기 위해서는 별도의 정형화된 언어가 필요하다. 데이터베이스는 이러한 언어를 쿼리라고 하고.... (다 아는 얘기를 거창하게.. ㅎㅎ)


그렇다면 쿼리를 잘 하는 방법을 물어본다면?? 글쎄다. 사실 나도 잘 모른다. 

이런 질문을 내게 던지면.. 단지, 나는 역으로 이렇게 물어본다.


"무슨 쿼리를 짜고 싶은데요?"


외국어를 배울 때에 문법/단어/듣기 어느하나 중요하지 않은 것이 없다. 외우고 공부하고.. 오랜 시간이 필요한 것은 자명하다. 고급진 단어 하나로 열마디 장문을 한방에 끝낼 수도 있고, 문법에 멋드러진 문장을 읊으면 유식해 보이기도 한다. 


작년 이맘 때 즈음.. 아들(너무 어려서..)을 뺀 우리 가족이 세부로 여행을 간 적이 있는데.. 당시 가장 신이 났던 녀석은 다름아닌.. 딸 효주였다. 사실 나는 굉장히 소심한 성격에.. 낯을 많이 가리는지라.. 쉽사리 처음 본 사람에게 적극(?)적으로 말을 붙이지를 못하는데.. 그녀석은 지나가는 사람을 보며 자기가 하고 싶은 말을 바로바로 입 밖으로 꺼낸다. 물론 제대로 알지 못하는 영어로..


"헬로우~"

"국모닝!!"

"빠이빠이~~"

"헝구리.."


낯선 타지의 외국인들에게 거침없이 하고싶은 말을 던지는 모습을 보고.. 참으로 귀엽기도 하고.. 한편으로는 부럽기도 했다. 나는 늘.. "바른 언어", "문법에 맞는 글귀"를 머릿속에 오랜 연산 후 입밖으로 내뱉기 때문에.. 느리고, 효과적인 의사 전달이 안되는 경우가 일쑤였다.


쿼리도.. 언어다. 기계에게 전달하는 언어이기는 하지만..


쿼리를 작성하기 전에.. 무엇을 말하고 싶은지를.. "생각을 정리하자."

혹은 기 작성된 쿼리가 있다면.. 이 쿼리로 상대방이 무엇을 말하고 싶었는지를 이해를 해보자.


그리고 그 생각들을 하나하나 쿼리 문법에 담아보자.


SELECT [무엇을]

FROM [어디에서1]

WHERE [어떠한]

ORDER BY [어떤 순서로]



"직관적으로 표현하자"


"세상 사람들이 적어도 나의 신념으로서는 도저히 허용되지 못할 말을 할 지라도, 나는 결국에는 나의 목적에 맞게 하나하나 차근차근 계단식으로 밟아가다보면 언젠가는 새로운 내일을 맞이할 수 있는 그 날이 올 것을 절대로 믿어 의심치 않을 것이라고 굳게 다짐하겠습니다."


뭔말이니 이게.. -_-;; 머릿속에 하고 싶은 말을 꼬아서 저렇게 입밖으로 내뱉는다면.. 그 누가 이해할 수 있겠는가? 내가 하고싶은 말의 본질이 전달이나 될 수 있을까?


가끔 엄청난 쿼리를 마주치는데.. 이런 엄청난 장문의 쿼리를 살펴보면.. 너무도 많은 생각을 해서 복잡한 말로 풀어낸 경우가 대다수이다. 물론 그렇지 않은 경우도 있지만.. ^^


"누가 뭐라해도, 열심히 노력해서 멋진 내일을 맞이하겠습니다."  


직관적이지 않나?


"데이터를 상상하자"


이제 상상해보자. 데이터가 어떻게 흐르고 움직일지.. 초기 데이터가 위치한 디스크에서 메모리로, 최종적으로 사용자에게 네트워크 장치를 통하여 제공이 될 때까지의 일련의 단계를, 상상을 해보자.


"알고리즘"은 백만의 연산을 수만으로 줄여줄 수 있는 멋진 방안일 뿐이지, 백만 연산 그 자체의 시간을 줄여주는 마술이 아니다. 백만의 연산을 위해서는 DISK/CPU/NIC 등 무엇이 됐든.. 그 리소스가 반드시 필요하다. 백만 연산 자체를 줄인다는 것은 곧.. 장비 고도화.. CPU 클럭 수를 높이거나, 메모리 증설, SSD로 변경 등 과정을 의미한다. (물론.. 때로는 이것이 직빵으로 효과적이기도 하다.)


"최적화된 데이터 흐름을 구현하라"


데이터 흐름에 대한 상상을 해보았다면.. "데이터 네비게이터"가 되어보라.


앞서 말을 했던 것처럼.. 세상에 백만 연산의 단위 처리 속도를 줄여주는 마술은 존재하지 않는다. 네비게이션으로 서울-부산 길 안내를 할 때에도.. 아무리 네비게이션이 길 인도를 잘 한다고 하더라도 400km 이상이 되는 서울/부산 간의 물리 거리를 축소할 수 없다. 대신, 막히는 길을 콕콕 찝어서, 길을 우회하는 방안을 제시하여 시간을 단축할 수 있는 방향을 제시하는 것과 같은 이치이다.


때로는 풀스캔이 빠를 때도 있고.. 때로는 소팅으로 유도하는 것이 좋을 때도 있고.. 때로는 인덱스 스캔이 나을 때도 있고, 경우에 따라서는 현 반드시 필요한 조건 외에 부가 조건을 붙여주는 것이 효율적일 수도 있고..


데이터 흐름에 방해가 될만한 사항들을 제거하여 빠르게 데이터를 질의하는 것이 중요하다.


말하고 싶은 것이 무엇인지를 알고.. 직관적으로 표현 하며.. 데이터의 흐름을 머릿 속에 상상한 한 이후.. 최적의 데이터 흐름을 제어할 수 있다면, 이보다 멋진 쿼리가 나올 수 있을까?

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari