728x90
728x90
typeORM을 사용하면서 왜 N+1 문제를 마주하지 못했을까?
공부방2024. 8. 27. 17:37typeORM을 사용하면서 왜 N+1 문제를 마주하지 못했을까?

ORM을 사용하다보면 N + 1 문제를 마주하곤 하는데, 특히 ORM의 Default Fetch Type설정이 Lazy일 경우 더 그렇다. 이제 막 typeORM을 사용해보고 있다고 하시는 분과 커피챗을 할 기회가 생겼는데 typeORM에서는 N + 1을 어떻게 해결하냐는 얘기가 나왔었다. N + 1이 어떤 것인지는 알고 있었으나 나는 typeORM을 사용하면서 실제적으로 N + 1을 마주한 경험이 없다. 실제로 실무에서도 페이징을 위한 paginate 라이브러리 사용 시 Distinct로 클러스터 인덱스를 가져와서 리스트, 페이징에 총 세 번의 쿼리를 사용하는 경우를 제외하고는 본 적이 없다. 왜 그럴까 곰곰이 생각을 해봤다. 최근에 nest에서 graphQL을 사용하고자 했을 때에도 N + 1 문제를..

인프콘 2024 후기 - 회고? 일기? 사이의 어딘가
회고,후기2024. 8. 3. 00:58인프콘 2024 후기 - 회고? 일기? 사이의 어딘가

세션에 대한 구체적인 내용은 아쉽게도 없고 단순 주저리(?), 개인 성찰에 가까운 회고입니다.     여태 참석했던 컨퍼런스들에서는 현재 나에게 도움될만한 것들 위주로 세션을 골라서 들었다.실제로 DevFest에서 김연희 님의 주니어 개발자의 로그 관리 개선 세션을 듣고 사내에서도 필요하다고 판단되었고, 환경에 맞게 로그 관리를 개선하고 모니터링 도구의 도입을 통해 로그 관리를 유연하게 할 수 있게 되었던 경험이 있다. 인프콘에서도 별반 다르지 않게 세션들을 구성했었으나, 최근 인프랩이라는 회사에 대한 관심이 커지다보니 세션 선택을 전면 수정했다. 인프랩이라는 회사에 대해 더 깊게 알아보고 싶었다. 회사에 대한 호기심이 내가 가지지 못한 개발 환경과의 비교에서 오는 단순한 부러움이나 동경인지 같은 조직에..

복합 인덱스로 쿼리 튜닝하기
트러블슈팅2024. 7. 26. 16:30복합 인덱스로 쿼리 튜닝하기

[데이터베이스] 인덱스(index) 정리인덱스 목차, 색인, 책갈피와 같은 기능을 하는 인덱스는, 데이터베이스 분야에서는 어떤 데이터를 검색할 때 속도를 높여주는 자료 구조로메모리 영역에 생성되는 일종의 책갈피이다. mag1c.tistory.com 위 글의 복합 인덱스를 통한 튜닝 부분을 따로 옮긴 포스팅입니다. 분명 일정한 기준이 있을 텐데 왜 얘기들이 조금씩 다른 것일까? DB의 버전 때문일까 옵티마이저가 무조건적으로 100% 맞다는 보장이 없어서일까? 잘 모르겠다. 그래서 직접 쿼리 튜닝의 경험들을 복기하며 복합 인덱스를 생성할 때에는 어떤 순서로 인덱스를 구성해야 하는지 알아보았다. 서비스 내부에는 모든 유저의 장바구니(앞으로 견적함이라 부름)를 볼 수 있는 기능이 존재하는데 업종으로 필터링할 경..

인프런 퇴근길 밋업 - 테스트 코드 후기
회고,후기2024. 7. 26. 13:29인프런 퇴근길 밋업 - 테스트 코드 후기

[지금 무료] 판교 퇴근길 밋업 with 인프런 #05 백엔드 테스트코드 | 인프런 - 인프런인프런 | , [사진]   옆자리 동료와 함께 성장하는 시간🍀 판교 퇴근길 밋업 with 인프런 🍀 판교 퇴근길 밋업 with 인프런#05 백엔드 테스트코드 안녕하세요, 인프런 입니다.7월 퇴근길 밋업에서www.inflearn.com   인프런에서 종종 퇴근길 밋업을 진행하는데, 운이 좋게 원하는 주제에 참여할 수 있었다.후기가 아닌 것 같은 후기(주저리)를 좀 작성해서 고민과 기타 등등 생각을 좀 남겨놓아야겠다.     참여 신청 계기 현재 속한 조직의 서비스를 개발하면서, 테스트 코드가 전무한 환경에서 신규 개발과 중요 비즈니스 단위의 테스트 코드나 e2e를 작성해나가고 있었다. 현재의 조직은 테스트 코드..

[알고리즘] 위상 정렬(Topology Sort)
CS/알고리즘2024. 7. 22. 22:42[알고리즘] 위상 정렬(Topology Sort)

위상 정렬(Topology Sort)  위의 위키피디아 문서를 참조하면, 위상 정렬이란 정점의 선형 순서 지정을 통해 모든 방향 간선 uv에 대해 정점 u가 v보다 앞에 올 수 있게 정렬하기 위해 사용되는 알고리즘으로, 방향성 비순환 그래프 - DAG(Directed Acyclic Graph)에만 적용할 수 있다고 한다.     쉽게 말하자면 순서가 정해져 있는 작업을 차례로 수행해야할 때 순서를 결정해주는 알고리즘이고,더 쉽게 말하자면, 순서를 찾아주는 알고리즘이다.  특징나열한 정렬 순서만 두 가지 경우가 존재하고 추가로 여러 개의 답이 더 존재할 수 있다. 이처럼 위상 정렬은 여러 개의 답이 존재할 수 있다는 특징이 있다. 순회하는 방법이 한 가지보다 많을 수 있기 때문이다. 또한, 위에서 DAG에..

[백준 17472번] 다리 만들기 2 - 그래프 탐색, 최소 신장 트리
코딩테스트/백준2024. 7. 20. 17:31[백준 17472번] 다리 만들기 2 - 그래프 탐색, 최소 신장 트리

문제 난이도GOLD I (링크)   문제 풀이각각의 독립된 섬들을 최단 거리로 연결하고 싶을 때, 놓을 수 있는 다리의 총 길이의 최소값을 구하는 문제.역시나 최소 신장 트리를 응용한 문제가 되겠다. 이번에는 각 간선을 구하는 것과 더불어, 이 섬이 어느 정점인지를 구하는 것도 필요하다. 결국엔 두 정점 사이의 간선을 구해서 문제를 풀어야하기 때문이다.  위의 그림처럼 문제에서 요한 3가지 올바르지 않은 방법과 함께, 추가로 두 가지만 주의한다면 쉽게 풀 수 있다. 처음 다른 섬을 만났을 때 만족하지 않는 조건이라면 바로 빠져나올 것.부끄럽게도 처음 코드를 완성시켰을 때,  다른 섬을 만났을 때, 종료 조건을 부족하게 작성하여 아래 그림처럼 더이상 탐색하지 못함에도 불구하고 탐색을 시켰다.   Union..

[백준 1774번, 백준 4386번] 우주선, 별자리 만들기 - 최소 신장 트리(MST)
코딩테스트/백준2024. 7. 19. 21:10[백준 1774번, 백준 4386번] 우주선, 별자리 만들기 - 최소 신장 트리(MST)

문제 난이도GOLD III   1774번 풀이간선의 가중치가 주어지지 않아 간선의 가중치를 구하는 로직만 추가해준다면 쉽게 문제를 해결할 수 있다. 이 문제에서 간선의 가중치는 2차원에 있는 신들의 위치 사이의 거리를 구하는 것으로, 아래 공식처럼 유클리드 거리 계산 방법을 이용하면 쉽게 가중치를 구할 수 있다.   위 공식을 코드로 나타낸다면 아래와 같다. private static double calCost(int x1, int x2, int y1, int y2) {    return Math.sqrt(Math.pow(x1 - y1, 2) + Math.pow(x2 - y2, 2));}       크루스칼(Kruskal) 알고리즘 (with. 백준 1197번 최소 스패닝 트리)크루스칼 알고리즘 (Kru..

크루스칼(Kruskal) 알고리즘 (with. 백준 1197번 최소 스패닝 트리)
CS/알고리즘2024. 7. 16. 16:15크루스칼(Kruskal) 알고리즘 (with. 백준 1197번 최소 스패닝 트리)

크루스칼 알고리즘 (Kruskal Algorithm)크루스칼 알고리즘(Kruskal Algorithm)이란 최소 신장 트리(Minimum Spanning Tree)를 찾기 위해 사용되는 알고리즘이다. 신장 트리(Spanning Tree)그래프 내의 모든 정점을 포함하는 트리 최소 신장 트리(Minimum Spanning Tree)신장 트리 중에서 사용된 간선들의 가중치 합이 최소인 트리   최소 신장 트리를 찾기 위해 모든 간선을 가중치에 따라 오름차순으로 정렬하는 아이디어를 사용하여 효과적으로 MST를 구할 수 있게 된다.세부적인 구현 방법은 다음과 같다. 1. 모든 간선을 가중치에 따라 오름차순 정렬한다.2. 간선을 하나씩 선택하여 사이클이 생기지 않을 때 연결하여 모든 노드가 연결될 때 까지 반복한..

728x90
728x90
image