배움 __IL 149

스프링과 싱글톤: 효율성과 안정성의 조화

I. 들어가며스프링은 스프링 컨테이너에 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록한다(유일하게 하나만 등록해서 공유한다) 따라서 같은 스프링 빈이면 모두 같은 인스턴스다. 설정으로 싱글톤이 아니게 설정할 수 있지만, 특별한 경우를 제외하면 대부분 싱글톤을 사용한다.  스프링 기본기를 공부하던 중 다음 문장을 보고 왜 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록하는지 의문이 있었다. 스프링과 싱글톤의 관계를 탐색하고, 웹 어플리케이션 관점에서 특히 싱글톤이 왜 필요한지 그리고 싱글톤 패턴 그 자체와 주의사항에 대해서 알아보겠다. 아울러 시작 전 질문을 한다. 웹 애플리케이션은 수많은 요청을 처리하기 위해 다수의 객체를 필요로 한다. 하지만 매 요청마다 객체를 새로이 생성한다면 어떤 문제가 발생..

N+1 문제와 Fetch 전략을 모르면 JPA를 잘못 쓰고 있을수도...

I. 들어가며JPA 를 이용하기 위해서는 기존에 사용하는 mybatis 이용보다 이점이 필요하다. JPA는 객체 중심 설계와 데이터베이스의 매핑을 손쉽게 처리하는 기능을 제공한다. 하지만 잘못된 설정이나 사용으로 예상치 못한 문제가 발생할 가능성이 상존한다. 이러한 문제를 사전에 이해하고 대비하기 위해 준비하게 되었다.JPA에서 중요한 성능 최적화 이슈인 Fetch전략과 N + 1 문제를 중심으로 살펴보고 이를 해결하는 방법을 살펴보겠다II. 성능 저하를 일으키는 3대 문제와 최적화 방법1. Fetch 전략1) Fetch 전략이란Entity의 연관 데이터를 Eager Loading할지, Lazy Loading할지 결정하는 방식이다.Eager Loading 은 항상 즉시 load해서 연관 데이터가 항상 필..

DFS / BFS 종합정리

DFS & BFSBFS와 DFS 정리BFS (너비 우선 탐색)탐색 순서만 구할 때목적: 그래프의 모든 노드를 방문하거나, 특정 노드를 찾고자 할 때.특징: 시작 노드에서 가까운 노드부터 차례대로 방문합니다. 큐(Queue)를 사용하여 구현하며, 레벨별로 탐색합니다.구현:from collections import dequedef bfs(graph, start): visited = set() queue = deque([start]) visited.add(start) while queue: vertex = queue.popleft() print(vertex, end=' ') for neighbor in graph[vertex]: i..

Hash Table 정리

Hash Table 탄생 배경 Direct Access Table 인 배열인덱스 방식으로, key-value쌍을 가져올 때 시간효율은 O(1)이므로 빠르다. 하지만 사용하지 않는 index에 대한 공간낭비가 상존함 1. 해시 함수의 조건 (1) 의의 특정 값을 원하는 범위의 자연수로 바꿔주는 함수 (2) 조건 1) 한 해시테이블의 해시 함수는 결정론적이어야 한다 같은 key 는 같은 결과가 나와야함 2) 결과 해시값이 치우치지 않고 고르게 나온다 각 리턴 값이 나올 확률이 비슷해야한다 3) 빠르게 계산 할 수있어야한다. 해시테이블은 연산할 때 마다 해시함수 사용함. 본 함수가 비효율적이면 해시테이블도 비효율적임 2. 해시함수 만들기 (1) 나누기 방법 자연수 key를 해시테이블의 크기로 나눈 나머지를 리..

알고리즘 3줄 정리 [DP : Memoization, ]

Dynamic Programming - Memoization 정리 핵심개념 피보나치 수열의 동적 프로그래밍과 메모이제이션 방식의 핵심은 중복 계산을 방지하기 위해 캐시를 사용하여 이미 계산된 값을 저장하고 재사용함으로써, 재귀 호출의 효율성을 높이고 시간 복잡도를 지수적인 O(2^n) 에서 선형적인 O(n)으로 줄이는 데에 있습니다. 기저 사례를 적절히 처리하여 재귀 호출의 종료 조건을 제공하며, 이를 통해 계산 속도를 크게 향상시킵니다.

알고리즘 3줄 정리 [합병정렬, 퀵정렬]

Divid and Conquer 의 형제 합병정렬 정리 핵심개념: 리스트를 반으로 나누고, 각 부분을 재귀적으로 정렬한 다음, 두 부분을 합병합니다. 시간복잡도: 최선, 평균, 최악 모두 O(nlogn) → + : 일관된 시간복잡도 공간복잡도: O(n) (추가 배열을 사용하기 때문에) → - : 추가 메모리 필요 퀵정렬 정리 핵심개념: 피벗을 선택하여 이보다 작은 요소와 큰 요소를 분할한 후(파티션), 각 부분을 재귀적으로 정렬합니다. 시간복잡도: 평균 O(nlogn), 최악 O(n2) (피벗 선택에 따라 달라짐) → + 평균적으로 빠름, 최악 크게 증가 공간복잡도: 평균 O(logn) (재귀의 깊이), 최악의 경우 O(n) (피벗 선택이 최악일 때) → + 추가 메모리 적게 소모 이름이 퀵정렬인 이유 ..

NginX의 필요성과 속성

I. 들어가며1)Nginx를 공부하는 이유는 저마다 다양하다. 나에게 Nginx는 지난 몇달간 나에게 해결하지못한 숙제이다.Nginx를 피하는 것은 내 회사생활을 해태한다고 간주될 정도로 회사에서 쓰임이 자주있었고, 이는 곧 퇴근 후 공부하게끔 추동했다. 구체적으로 어떻게 쓰임이 있었냐하면... 현재 재직중인 회사 입사 시험은 Nginx & clojure 이고, 입사 후 맡아서 완료한 회사 홈페이지 리뉴얼 업무를 할 때에도 Nginx를 쓰였고, 내가 맡은 핀테크 서비스도 마찬가지로 NginX가 쓰이고 있다. 2)이렇게 쓰이지만 나는 여전히 Nginx를 쓰는 이유를 공감하지 못하고 있었고, 그 방법도 모른채 Nginx 사용을 피하는 나자신을 조우했다. 가볍게 시작했고, 나와 같은 사람을 위해서 가볍게 정리..

TIL 1기를 끝내며...

I. 들어가며 지난 11월 29일부터 106개(비공개글 포함)의 TIL 을 쓴 TIL 1기를 마무리한다. 106개의 글은 뉴*처 선생님의 국비교육과정에서 해주신 강의를 기억하고자는 취지로 기록했다. 나의경우 교육과정을 마치기 전 취업했고, 과정 수료 후 몇일 뒤부터 출근했다. 출근한지 오늘부로 딱 2주가 되었다. 과정을 마무리하며 무엇을 느끼고, 취업을 해서 개발자로서 첫발을 내딛는데 내 마음가짐에 대해서 가볍게 남긴다. II. 국비교육과정의 시작과 끝 1. 시작 : 시작은 2022년 11월 23일이었다 1) 시험 불합격 발표와 포기 2019년 ~ 2022년 동안 공인노무사 시험 수험생이었다.(헌유예 불합격) 전문직 라이센스를 얻고싶었던 나는 20대 후반을 모두 받쳤지만 결국에 불합격의 고배를 마셨다. ..