[Java] 제네릭 (Generic) 완전 정복 T와 와일드 카드
·
Java
컬렉션 쓸 때 항상 보이는 List, Map. 그냥 외워서 쓰다 보면 어느 순간 , , 같은 게 나왔을 때 알아도 멈칫하는 순간이 오더라. 그래서 이번 기회에 그냥 글로 적어보고 싶어서 주제삼아 작성했다. 제네릭은 클래스나 메서드를 만들 때 다룰 데이터 타입을 미리 정해두지 않고, 실제로 쓰는 시점에 타입을 끼워 넣을 수 있게 해주는 기능이다. List 에서 T 가 바로 그 자리다. 사용할 때 String이 들어가면 String을 다루는 리스트가 되고, Integer가 들어가면 Integer를 다루는 리스트가 된다. 같은 코드인데 타입만 바꿔서 여러 군데 쓸 수 있는 셈이다.제네릭을 왜 쓰는걸까제네릭 없이 코드를 짜면 두 가지 문제가 생긴다.첫째, 캐스팅(타입 변환, 예를 들어 Object 로 저장해둔..
[Spring] HikariCP, Redis Lettuce Pool 운영 병목 분석
·
Spring boot
회사에서 이번에 맡은 프로젝트 배포 중 운영서버 배포 후 대시보드 화면을 반복해서 새로고침하면 페이지 전체가 잠깐 응답하지 않는 현상이 생겼다. DB가 죽은 것도 아니고, 애플리케이션이 다운된 것도 아니었는데 무슨 문제일까 천천히 찾아보다가 원인으로 추정되는 문제들을 하나씩 뜯어봤고 원인이 하나가 아닌걸 알아버렸다... 그리고 이런 저런 방법들을 사용해보고 결국 해결했는데 겸사겸사 느낀점이나 관련 정보들을 정리하려고 글을 작성한다.새로고침 한 번이 요청 하나가 아니다브라우저에서 새로고침을 누르면 HTML 파일 하나만 다시 받을 것 같지만, 실제로는 다르다.새로고침-> HTML-> CSS 파일들-> JS 파일들-> 이미지/아이콘-> 로그인 알림 API-> 대시보드 데이터 API (여러 개)한 번의 새로고..
[Spring] Spring IoC 와 DI 개념정리
·
Spring boot
Spring을 쓰다 보면 IoC, DI라는 말을 한번쯤은 듣게 된다. 근데 막상 "IoC가 뭐예요?"라고 물어보면 "제어의 역전이라던데요?"라고 답하고 끝나는 경우가 많다. 그게 왜 필요한지, 어떤 문제를 해결하는지까지 이어지지 않으면 쓸 때마다 그냥 Spring이 해주는 거겠지 하고 넘어가게 된다. 다들 들어는 봤을테고 대충 알고도 있지만 조금 더 자세하게 정리하기 위해 글을 작성해본다! 객체는 혼자 동작하지 않는다코드를 짜다 보면 하나의 클래스가 다른 클래스의 기능을 쓰는 일이 생긴다. 주문 서비스가 결제 모듈을 써야 하거나, 알림 서비스가 이메일 발송 모듈을 써야 하는 식으로.public class OrderService { public void order(String item, int pri..
[Java] HashMap 은 뭐고 어떻게 동작 하는 걸까?
·
Java
HashMap은 Java를 쓰다 보면 자연스럽게 자주 마주치는 자료구조다. 회사 프로젝트 진행 중에 WebSocket 프록시 서버를 구현할 일이 있었는데, 브라우저 클라이언트 세션과 외부 CCTV 스트리밍 서버 쪽 세션을 1:1로 매핑해서 보관해야 하는 상황이었다.처음에는 HashMap을 쓰려고 했는데, WebSocket 특성상 여러 클라이언트가 동시에 연결되고 끊기는 일이 발생하다 보니 멀티스레드 환경에서 HashMap을 그냥 쓰면 안 된다는 걸 알게 됐다. 결국 ConcurrentHashMap을 썼는데, 정작 HashMap 자체를 제대로 정리한 적이 없다는 생각이 들어서 이번 기회에 HashMap부터 차근차근 정리해보려 한다.HashMap을 쓰는 이유단순하다. 조회가 빠르다.리스트에서 원하는 값을 찾..
[DB] 데이터베이스 - 인덱스(index) 정리
·
DB
쿼리가 갑자기 느려지거나, 데이터가 쌓일수록 조회가 버벅인다는 느낌이 든다면 십중팔구 인덱스 얘기가 나온다. 인덱스를 그냥 "빠르게 해주는 것"으로만 알고 쓰면 나중에 반드시 막히는 순간이 온다. 왜 빠른지, 어떤 상황에서 빠른지, 잘못 쓰면 오히려 느려지는 이유까지 같이 정리해두려고 한다.인덱스가 없으면 어떻게 될까테이블에 데이터가 100만 건 있다고 해보자. 여기서 특정 사용자를 찾으려면 DB는 어떻게 할까.인덱스가 없다면 첫 번째 행부터 마지막 행까지 전부 다 훑는다. 이걸 Full Table Scan이라고 한다. 100만 건을 다 뒤지는 거다. 운 좋으면 앞에서 찾겠지만, 최악의 경우 100만 번째에 있을 수도 있다.데이터가 적을 때는 체감이 안 되지만, 트래픽이 붙고 데이터가 쌓이기 시작하면 이..