인터뷰 1편 'SQL 대표강사의 비밀노트에 적힌 꿀팁은?_이경오 님 (1/2)'에서 이어집니다.
Q. 쿼리를 꾸준히 공부해야 하는데 부담이 되요. 어떻게 해야 쿼리에 재미를 느낄 수 있나요? 작가님은 지금까지 커리어를 쌓으면서 가장 힘든 슬럼프가 있었는지, 또 어떻게 그것을 넘어왔는지 궁금해요. (Young Kim 님)
쿼리를 꾸준히 공부하는 방법은 자신이 유지보수 혹은 개발을 하는 IT 시스템내에서 SQL문을 이용하여 좀더 의미 있는 정보를 도출할 수 있는지 고민하면서 그 고민들을 직접 SQL로 작성하여 결과를 확인하면 재미도 있고 꾸준히 공부 할 수 있습니다. 또한 그러한 과정 속에서 회사에 기여 할 수 있는 부분도 분명 생기게 됩니다.
저는 지금까지 IT 분야에서 커리어를 쌓으면서 단 한번도 마음 편히 지내 본적이 없었던 거 같습니다. 언제나 치열한 프로젝트 현장에서 갖은 고생을 하며 지금까지 온 것 같네요. 당연히 슬럼프는 언제나 있었으며 그걸 극복하는 방법은 취득하고 하는 자격증을 목표로 공부하고 그 자격증을 취득 했을 때 보람과 자신감으로 슬럼프를 극복해 왔다고 생각합니다.
Q. 데이터베이스 설계시의 오라클과 다른 디비의 차이점은 어떤것이 있을까요? (정진교 님)
데이터베이스 설계라면 데이터 모델 설계를 말씀 하시는 걸로 판단됩니다. 데이터 모델 설계에서 가장 중요한 것은 구현하고자 하는 비즈니스(업무)를 만족해야 하는 것입니다.
즉 비즈니스에 따라 데이터 모델 설계가 달라지게 됩니다. (EX. 예약 시스템인지, 통계분석 시스템인지에 따라 데이터 모델 설계의 방식이 달라집니다.)
데이터 모델 설계가 완료되면 해당 비즈니스가 어떤 DBMS 제품을 써야할지를 결정해야 합니다. (OLTP 혹은 DW) 이보다 더 자세히 말씀드릴수도 있지만 너무나 광범위한 분야이므로 이정도로 답변을 마무리 하겠습니다.
Q. 보통 오라클은 큰 규모의 서비스에 적합하다고 많이 알려져 있는데 작은 규모의 서비스에 적용할 때의 이점 같은 것들이 있을까요? 혹은 작은 규모의 서비스(데일리 접속자 만명 이하)에 적용해보신 경험이 있으실까요? 있다면 어떤 부분이 쉽고 어려웠는지 알려주시면 좋을 것 같아요! (Aron Kim 님)
개인적인 생각으로 오라클 DBMS 제품이라고 해서 반드시 큰 시스템에만 사용되는 것은 아니라고 생각합니다. 업무 특성상 트랜잭션 처리가 중요하고 DBMS 엔진의 안정성, 수없이 많은 레퍼런스, 오라클 DBMS가 제공하는 다양한 기능, 기술지원을 받기가 용이하고 개발자 및 엔지니어를 구하기가 수월한 점, 서드 파티(Third Party) 작업 도구가 다양한 점 등등 오라클 DBMS를 사용함으로써 얻게 되는 이익은 매우 많습니다.
오라클 DBMS를 구축 할 때 작은 규모의 시스템이라도 그 시스템이 장애가 났을 경우의 파급효과가 매우 크다면 고 가용성 및 DBMS 엔진의 안정성을 고민해야 합니다.
Q. 인덱스를 타는 구조와 인덱스를 타지않는 구조의 차이점이.. 어떻게하면 빠른 쿼리를 작성할수있을까요..(Hyunwook Seo 님)
우선 가장 중요한 점은 인덱스 스캔은 SELECT문에서 WHERE절에 들어오는 조건의 변별력이 좋아야 한다는 것입니다. 변별력이 좋다는 것은 주민등록번호, 주문번호와 같이 대량의 집합 내에서 소량의 건(혹은 1건)만 나오는 것을 의미합니다. 이러한 상황에서는 적극적으로 인덱스 스캔을 해야(유도) 합니다.
반대로 SELECT문에서 WHERE절에 들어오는 조건의 변별력이 좋지 않다면 테이블 풀 스캔이 유리하게 됩니다. 예를 들면 500만건이 저장되어 있는 회원 테이블에서 성별코드 값이 조회 조건으로 들어온다면 남자로 조회하든 여자로 조회하든 대략적으로 250만건 정도의 데이터가 조회될 것입니다. 이러한 경우에는 인덱스 스캔을 하는 것보다 테이블 풀 스캔이 훨씬 유리합니다. (테이블 풀 스캔 시 단 한번의 I/O CALL로 여러 개의 데이터 블록을 가져오게 됩니다.)
즉 SQL 성능 분야 입문자의 관점에서 가장 중요시하게 생각해야 할 것은 인덱스 스캔이 테이블 풀 스캔에 비해서 반드시 유리한 것은 아니며 변별력이 좋지 않은 조건은 테이블 풀 스캔이 훨씬 유리할 수도 있다는 것을 항상 염두 해 두고 개발을 해야 합니다.
Q. 지금 하고 있는 프로젝트에서 계층형 쿼리 짜는게 너무 어렵네요. 어떻게해야 생각한것처럼 나올까요. 마무리 못하고 끝내서 아직까지 머리에서 맴돌고 있어요 ㅋㅋ (Hyunwook Seo 님)
계층형 쿼리를 작성시 가장 중요한 것은 테이블 구조를 정확하게 파악하는 것입니다.
만약 사원 테이블이 있고 사원번호가 기본키(PK)이고 상위사원번호가 있을 때, 상위사원번호는 외래키(FK)가 됩니다. 즉 사원번호는 PK, 상위사원번호는 FK가 됩니다.
이 상태에서 위에서 아래로 가는 하향식(순방향)이 될지 아래에서 위로 가는 상향식(역방향)이 될지를 결정해서 SQL문을 작성합니다. 즉 계층형 구조의 데이터를 출력할 수 있는 SQL문을 우선 작성한 후 필요한 요구조건을 만족시키는 SQL문으로 발전 시켜 나가는 것이 중요합니다. 자세한 내용은 이 책의 Chapter6. SQL 활용에서 6.3 계층형 질의와 셀프조인에서 확인하시면 됩니다.
Q. 내부 구조에는 물론 차이가 있겠지만 Oracle과 MySQL 쿼리의 꽤 많은 부분이 호환 가능하다고 들었는데 그 까닭과 어느정도 호환 가능한지 알고 싶습니다 (Dan Lee 님)
ANSI SQL을 이용한다면 거의 대부분의 SQL문이 모두 호환됩니다. ANSI SQL이란 DBMS(오라클, SQL Server, MySQL 등) 제품마다 각기 다른 SQL 언어를 사용하기 때문에 미국 표준 협회에서 이를 표준화하여 제정해 놓은 표준 SQL 문입니다.
ANSI 표준 SQL 문은 대부분의 DBMS에서 상호 호환이 되기 때문에 현재 ANSI 표준 SQL 방식으로 널리 사용되고 있습니다.
즉 오라클 혹은 MySQL 시스템에서 구동되는 SQL문이 해당 DBMS 제품에만 유효한 SQL문 방식을 많이 썼다면 호환성이 떨어질 것이고 ANSI 표준 SQL을 준수했다면 호환성은 높아질 것입니다.
Q. SQL Developer 과 DBeaver 중 어떤 것이 사용성이 더 좋았나요? 저자님이 현재 주로 사용하시는 툴은 무엇인가요? (빛과소금 님)
저는 주로 DBeaver를 사용합니다. SQL Developer가 훨씬 더 많은 기능을 가지고 있긴 하지만 사용성이나 프로그램의 가벼움으로 인해 DBeaver를 사용합니다. DBeaver은 오라클 뿐만 아니라 다른 DBMS도 접속이 가능하고 지속적으로 기능이 추가되고 안정화되는 버전으로 업그레이드 되고 있습니다. SQLD 자격증 시험을 준비하신다면 DBeaver를 이용한 SQL 실습을 하시는 것을 적극 추천 드립니다.
Q. 대용량 데이터를 사용하는데 있어서 옵티마이저를 이용해 성능을 개선하는게 중요한거 같습니다. 그런데 성능 개선을 어떻게 하는게 제일 바람직한지 시행착오를 줄이면서도 효율적인 방법을 구상해내는 방법이 제일 궁금합니다. (김창범 님)
IT 시스템에서 구동되는 모든 SQL문의 성능을 최적화 하는 것은 무리라고 생각합니다. 해당 DBMS 시스템을 분석하여 빈번하게 수행되면서 많은 Block I/O를 발생 시키고 응답시간도 긴 TOP SQL문을 추출하여 해당 SQL문들에 대한 집중적인 튜닝을 하는 것이 중요하다고 생각합니다. 그럼 들인 시간 대비 많은 효율을 볼 수가 있을 것입니다.
Q. 성능 향상 기법 활용중에 '실행 계획' 관련 내용은 없나요? 테이블 참조 수가 적은걸로 간단하게 확인하는데, 실질적 사용 방법은 검색을 통해서도 많이 나오질 않네요...! 성능 향상 기법에 실행 속도를 확인하는 방법도 있는지 궁금합니다! 또, 통계 sql을 구할 때 가장 많이 사용되는 집계함수와 group by에 대해 확실하게 이렇게 해야한다! 라고 정의해놓은게 있을지 궁금하네요... 오라클 mysql 마다 사용법이 다르고 조금씩 다른걸 보니 이게 맞는건가 싶을때가 많아서요! (하진욱 님)
Chapter7. SQL최적화 기본원리에서 실행 계획에 대한 내용을 학습할 수 있습니다. 하지만 해당 서적은 SQL 성능 분야에 대해서는 기본적인 내용만 담고 있습니다.
집계함수 및 GROUP BY에 대한 내용은 자세하게 설명하고 있습니다. Chapter5. SQL기본 및 Chapter6. SQL 활용을 참고하시면 됩니다.
Q. ERD 잘 그리는 방법은 없나요? ㅎㅎㅎ sql을 잘 사용하는것도 고민이지만 erd를 잘 그리는 방법도 들어있을지 궁금하네용...! (하진욱 님)
ERD를 잘 그리는 것은 우선 구현하고자 하는 비즈니스(업무)에 대한 깊은 이해가 있어야 하고 현업 업무 담당자와의 소통이 매우 중요하다고 생각합니다. 그 다음 데이터 모델링 지식을 가미하여 ERD를 그린다면 좋은 ERD가 나올 것으로 판단됩니다. 이 책에서 설명하고 있는 데이터 모델링에 대한 기본 지식과 정규화에 대해 확실하게 이해한다면 복잡도가 매우 높지 않은 업무가 아니라면 충분히 효율적이면서도 비즈니스를 완전히 만족하는 좋은 데이터 모델 설계 (ERD)가 가능할 것입니다.
Q. 현재 관심있는 기술이나 산업 분야는 어디인지?
최근 들어 AWS에서 DBMS를 사용할 수 있게 제공하는 RDS 및 서버 리스 서비스에 대해서 관심이 있으며 개인적인 학습 및 이와 관련된 업무를 진행하고 있습니다.
Q. 추후 한빛미디어에서 내고 싶은 집필서/번역서가 있다면?
AWS내에 RDS를 이용하여 DBMS엔진을 구축 및 파라미터 설정하고 해당 엔진을 유지보수/성능관리하는 분야에 대한 책을 집필한다면 향후 시장성이 있을 거라고 봅니다.
Q. 책을 집필하고 싶은 개발자분들에게 이야기해주시고 싶은 게 있으신가요?
책을 집필하는 기간 동안 게으름이란 것은 내 인생에 없다는 것, 게으름 없는 인생을 사는 경험을 해보는 것, 집필이 완료되고 출판 했을 때의 기쁨 성취감 보람 등은 오로지 책을 집필한 경험이 있는 저자 들만이 느낄 수 있는 감정이라고 생각합니다.
Q. 마지막으로 최근에 재미있게 읽은 책을 한 권 추천해주세요.
이 책은 정말 재미있게 읽은 책입니다. 어떻게 하면 나와 내 자녀가 부자가 될 수 있을까에 대한 해답을 제시해 주는 책이 아닐까 생각합니다. 어린 자녀에게 성장 과정에서 주식이나 펀드를 선물로 주어 어릴 때부터 부를 축적하게 합니다. 또한 자녀에게 자본주의 세상을 살아가면서 투자라는 활동이 얼마나 중요한것인지 교육을 시킵니다. 가장 중요한 것은 자녀가 금융 문맹이 되지 않게 하는 것이라고 합니다.
이 책은 자본주의 사회에서 투자의 중요성을 다루고 있는 책이며 꼭 한번 읽어 볼 것을 추천 드립니다.
<시험장에 몰래 가져갈 이경오의 SQL+SQLD 비밀노트>의
더 많은 정보는 여기에서 확인하실 수 있습니다.
최신 콘텐츠