728x90
반응형

웹 뒤적거리다가 원티드에서 백엔드 챌린지로 MYSQL에 대해 다루는 것을 보고 관심이 갔고 신청하게 됐는데, 이유는 두 가지다.

첫 번째 이유는,

올해 4월이면 2년차 백엔드 개발자가 되고 여태까지 수천개의 질의를 쏴본거같은데 내 실력이 궁금했다.

내가 지금 DB를 얼마나 알고 있는지, 얼마나 모르고 있는지, 나쁜질의가 뭔지 내가 쓰고있는건 아닌지! 검증하고 좀더 개선하고싶어서 참가 신청했다.

특히 최근에 DB 조회할때 SELECT를 먼저 쓰지 말라는 아티클을 봤는데, 이게 챌린지에 참여한 큰 이유가 되었다. 내용은 "데이터를 가져오는 순서대로" SQL문을 작성하라는 것이다.

  1. 어느 테이블에서 (FROM or JOIN)
  2. 어떤 조건으로 (WHERE)
  3. 어떻게 그룹을 지어서 (GROUP BY)
  4. 어떤 컬럼을 (SELECT)
  5. 어느 순서로 (ORDER BY)

위 순서로 SQL를 작성하면 SQL 실행기가 쿼리를 실행하는 방식과 비슷해서 구문 오류의 확률도 줄고 효율적이라는 것이다. 공감이 갔던건 전체 * 조회같이 짧은 질의말고, 특정 컬럼을 SELECT하는 질의를 작성할 때, 특히 JOIN이 길어지면 길어질수록 FROM, JOIN에서 질의를 작성한 경험이 많다. 나는 DBeaver라는 툴을 사용하는데 DB툴은 FROM, JOIN이 작성되면 SELECT과 WHERE할 때 자동완성을 제공해서 그런 이유도 있고, 내가 어떤 테이블에서 어떤 조건으로 조회할건지 미리 작성하고 SELECT을 작성하면 논리적으로도 잘 써진다. 암튼 이 아티클을 보고 sql을 다루는 효율적인 방법을 더 알아보고 싶었고, 내가 지금 DB를 잘 사용하고 있는지 검증하고 싶은 계기가 되었다.

꽤 설득되는 아티클이었어서 한번 읽어보는 것도 좋을 거같다. 

https://towardsdatascience.com/dont-start-your-sql-queries-with-select-clause-d30fa1b701f6

 

Don’t Start Your SQL Queries with the ‘Select’ Statement

Follow this right approach to write your SQL queries

towardsdatascience.com

 

두 번째 이유는,

쿼리 개선 방법을 알고싶어서다. 현재 우리회사에서 쓰고 있는 DB는 MYSQL로 관계형데이터베이스인데, 데이터가 수천만건으로 많이 쌓이다 보니까 고객들이 웹사이트에서 조회할 때 부하가 많이 생긴다. 우리회사에서 제일 많이 질의하는 테이블인데 제일 느리다. 결과가 안나오는 프로세스가 몇건씩 쌓이면 DB사용률이 90퍼가 넘을 정도의 상황이 종종 발생한다. 모든 전반적인 시스템에 박혀있는 테이블이고, 조회도 1초에 수십번씩 일어나다 보니까 구조 개선이 쉽지 않다. 그래서 검색엔진을 붙이든 여러 방법으로 해결하고자 하는데 여러 이슈들과 일정때문에 당장 적용할 수 없는 상황이라, 부하를 많이 일으키는 이 아주 복잡한 쿼리를 먼저 개선함으로써 부하를 낮추고싶은데, 쿼리는 많이 작성해봤지만, 쿼리 개선은 잘 모르겠다. 내가 생각했을 땐 개선될거같은데 이게 부하 낮추는데 어느정도 영향을 미치고, 또 어떤 문제가 있을지 검증이 안되서 섣불리 적용하기 두렵기도 하다 .. 그래서 이 챌린지를 학습하며 이 고민에 대한 해답을 얻어보고 싶다!


챌린지 시작전에 사전과제로 DB과 관련한 질문에 답을 작성하는 사전과제를 수행했는데 내 답변은 아래 링크와 같다 .. 대학생때는 트랜젝션이 뭔지 도저히 모르겠고 강의들으면서 JOIN 종류끼리 이해하려고 강의를 여러번 돌려봤는데,,이젠 질문에 답변할 수 있는 정도가 됐다. 해봤자 사전과제지만 그래도 학생때보단 조금이라도 더 아는거같다. 

다음주에 챌린지 시작하고 이주동안 퇴근하고 강의를 들을텐데 끝나고 소감 또 쓰러와야겠다.

https://github.com/ssowon/wanted-pre-onboarding-challenge-be-task-February/blob/main/answer.md

 

GitHub - ssowon/wanted-pre-onboarding-challenge-be-task-February: [사전 과제] 원티드 백엔드 프리 온보딩 백엔드

[사전 과제] 원티드 백엔드 프리 온보딩 백엔드 챌린지 2월. Contribute to ssowon/wanted-pre-onboarding-challenge-be-task-February development by creating an account on GitHub.

github.com

 

728x90
반응형

'IT > 고민' 카테고리의 다른 글

VS code 설정  (0) 2022.06.11
[for-sign] 형태소분석 오류잡기1  (0) 2021.01.27
Django vs Node JS  (0) 2021.01.27

+ 최근 게시글