본문 바로가기
반응형

전체글621

[PostgreSQL] Nested Loop Join을 HashJoin으로 개선하기 RDBMS를 사용하다보면 Nested Loop Join 으로 인해 성능 저하를 겪는 경우가 많다.일부 RDBMS는 특정 버전에 따라 Nested Loop Join만 지원되는 경우도 있다.다만, 요즘의 RDBMS는 대부분 Hash Join등 여러 Join 형태를 지원하고 있고 이를 통해 성능 개선이 가능하다.MySQL도 8.0.18 부터 Hash Join을 지원한다.실제 사례로 성능 개선을 진행해보자.1. 문제 쿼리아래와 같이 여러 Join을 진행하는 실제 쿼리가 있다.SELECT i.id, i.titles[?] AS title, i.icon_url FROM institutions i INNER JOIN interested_corporations ic ON i.id = ic.institution_i.. 2024. 5. 29.
HTTP API 디자인 - URI편 마틴 파울러의 블로그를 가보면 Leonard Richardson이 제안한 HTTP API 성숙도 모델 (Richardson Maturity Model - RMM)을 소개한다.여기서는 다음과 같이 4단계를 설명한다.레벨 0: 하나의 URI를 정의하고 모든 작업은 이 URI에 대한 POST 요청레벨 1: 개별 리소스에 대해 별도의 URI를 만든다.레벨 2: HTTP 메서드를 사용하여 리소스에 대한 작업을 정의레벨 3: 하이퍼미디어(HATEOAS 등)를 사용Roy Fielding 의 정의에 따르면 레벨 3이 진정한 RESTful API에 해당한다.대부분의 RESTful API는 진짜 RESTful API는 아니며 보통 레벨2 부근에 해당한다.아래는 마틴 파울러 블로그에 나와있는 성숙도 레벨이 무엇을 의미하는지.. 2024. 5. 21.
어느 축구 선수의 은퇴와 선물 최근에 많은 분들을 뵙고 이야기 나누다가 빠르게 승진 중이신 분의 커리어 고민에 대해 이야기할 기회가 있었다.굉장히 큰 회사에서 나이나 연차에 비해 빠르게 승진과 리더십 기회를 얻은 분이셨다.최상위 리더의 평가만 좋은게 아니라, 같이 일하시는 주변 분들의 평가도 대단히 좋은 분이라서 "어떻게 하면 그 위치의 역할을 잘 할 수 있을까" 에 대해 고민 하시는 줄 알았지만, 그게 아니였다.오히려 너무 빠른 승진과 기회로 인해 비슷한 연차, 비슷한 나이대의 동료들과 거리가 멀어지고 있는 것에 대한 고민이였다.권한 혹은 리더십이 높아질수록 점점 조직의 사정을 더 알게 되기도 하고, 개인의 성과 보다는 팀의 성과, 팀원들의 성과, 조직에 더 도움이 되는 결정 등에 대해 고민하다보니 매일 하는 업무, 고민, 생각 등.. 2024. 5. 9.
어떤 감독이 될 것인가? 소라의 날개 25 ~ 27권을 보면 남녀 농구부의 방학 합숙 훈련 이야기가 나온다.새로 부임한 감독님은 농구부원들의 목표가 전국대회 진출임을 알고, 전국대회 진출을 위한 훈련을 준비한다.전국대회 진출팀이 되기 위한 훈련은 당연히 높은 훈련 강도를 필요로 하고, 훈련 메뉴를 본 매니저 등은 높은 강도로 인해 우려를 표한다.우리팀은 이 정도의 훈련을 처음 경험하니 낙오자가 너무 많고 효과가 적지 않겠냐고.이때 감독님의 이야기가 와닿았는데,이 훈련을 통과하고 못하고 보다 더 중요한 것은 처음 만나는 벽을 만났을때 어떤 마음가짐들을 하느냐가 훨씬 중요하다는 것이다."무리를 해도 불가능한 일이라면, 처음부터 주문도 강요도 하지 않아.솔직히 말하면 이 합숙의 메뉴도 상당히 무리하게 짜놨어.한 명도 빠짐없이 전원 해.. 2024. 5. 2.
의미에 매몰되지 않기 학생 시절에 좋아하던 이성이 있었다.좋아하니깐 더 잘해주고 싶었고, 내가 하는 행동의 순위에서 항상 최우선이였다.근데 고백을 하면 계속 거절했다.진심과는 별개로 인연은 아니였다.친구로서 계속 지내다가 어느날 그 친구에게서 아프다는 연락을 받았다.보통 같았으면 연락을 받자마자 걱정하고 달려갔을텐데, 그날은 그 연락을 받고 "근데 내가 약 들고 간다고 사귀게 되는 것도 아니잖아? 그럼 의미가 있나?" 라는 생각이 들었다.이런 생각을 했다는 것에 소스라치게 놀랐다.그 친구가 좋아서 해온 모든 행동을 나 스스로 의미가 없는 행동으로 만들어버린 것이기 때문이다.좋아서 무엇이든 해주고 싶었던 순수한 진심이 오염된 것 같았다.사귀는게 확실할때만 내가 해온 노력이 모두 의미가 있는 것이고, 사귀지 않을때는 어떤 .. 2024. 4. 24.
Public API의 CDN 캐시 API의 캐시 중에는 모든 사용자 (로그인/비로그인 관계없이) 동일한 응답값을 줘야하는 것들이 있다. 로그인/비로그인에 관계없이 항상 일정한 데이터가 사용자 UI에 필요한 경우이다. 이를테면 인프런 서비스의 상단 헤더에 노출되는 강의 카테고리 (1 depth, 2depth, 3depth) 같은 경우. 이 캐시 데이터는 서비스의 모든 페이지에서 호출하고 있다보니 페이지 조회수 만큼 캐시 API를 호출하게 된다. Redis 캐시 -> 로컬 캐시 등으로 캐싱처리를 해도 결국 서버로 가는 조회 요쳥수가 개선되는 것은 아니고, 서비스 전체에서 가장 많이 호출되는 API 영역이 개선된 것이 아니다. SSR을 CDN으로 캐시 해도, SSG로 정적 페이지를 만들어도 헤더 영역은 사용자별 로그인 구분을 위해 CSR로 구.. 2024. 4. 14.

728x90
반응형