상반기 채용 과정, 그리고 회사 입사 후에도 일이 너무 많아서 블로그 포스팅을 아예 작성하지 못했다..😰 노션에 대충 작성해놨던 글들을 다시 정리해보려고 한다. 스프링에서는 스레드 풀을 통해 다수의 요청이 처리가 되는데, 장고는 어떻게 처리해주는지 궁금해서 포스팅해보았다. 장고가 다수의 요청을 처리하는 방법 장고는 Gunicorn, 즉 스프링에서 요...
만약 여러 사람이 한 계좌에 송금하거나, 한 계좌에 송금과 적금이 동시에 일어나는 경우 동시성 이슈를 어떻게 해결할 수 있을까에 대해 고민해보고 작성했다. 1. 여러 사람이 한 계좌에 송금 아래 코드는 송금 로직 예시로, 잔액이 부족하면 충전을 하고, 내 잔액을 차
최근 프로젝트에서 대용량 파일을 읽어올 일이 많이 생겼다. 파일을 읽어와서 `Json` 형태로 변환을 해줘야 했기에 한줄을 읽어와서 편하게 처리할 수 있도록 `readline()` 을 사용했었다.
Redis와 Event-Loop? > Redis는 싱글 스레드인데, 어떻게 수많은 요청을 동시에 처리할 수 있는걸까? 라는 궁금증에서 해당 포스팅을 작성해보았다. 결론부터 말하자면, Redis를 제외하고도 Node.js나 JavaScript 는 싱글 스레드면서 이벤
결론부터 말하자면, `HashSet` 역시 내부적으로 `HashMap` 을 사용해서 동작한다. 그리고 `HashMap` 은 해시 테이블 기반으로 동작한다.
☁️ Redis를 사용한 이유? `Redis` 나 `Memcached` 를 사용하는 방법은 글로벌 캐싱 전략이다.
원격 프록시는 실제 객체처럼 행동하지만, 실제로는 네트워크로 진짜 객체와 데이터를 주고 받게 된다. 즉 원격 프록시는 각 사용자의 JVM 내부의 힙 영역에 존재하는 로컬 객체라고도 할 수 있다.클라이언트가 로컬에서 원격 프록시를 호출한다.(대변자 역할)프록시가 실제 원
MySQL 서버의 옵티마이저는 실행 계획을 수립할 때, 통계 정보와 옵티마이저 옵션을 결합해 최적의 실행 계획을 수립한다. 옵티마이저 스위치 옵션은 optimizer_switch 시스템 변수를 이용해서 제어한다.Multi Range Read 란, Nested Loop
GROUP BY 처리 GROUP BY 역시 ORDER BY과 마찬가지로 인덱스를 사용할 수 없으므로, 필터링 역할을 하는 HAVING절을 튜닝할 수 없다. 인덱스를 사용하는 경우 인덱스 스캔 이용 루스 인덱스 스캔 이용 임시 테이블을 사용하는 경우 DISTI
60만건의 유실물 데이터를 내용으로 검색할 때, 프론트에서 가끔 응답 시간이 너무 오래 걸린다는 피드백을 받고 성능을 올려보기로 했다.
클러스터링 인덱스란? > 🫧 클러스터링이란? 서로 연관이 있는 데이터들을 하나로 묶는 것을 의미한다. 따라서 클러스터링 인덱스란, 테이블의 레코드를 프라이머리키가 비슷한 것 끼리 묶는 것을 의미한다. 중요한 것은 InnoDB 에서는 프라이머리 키에 의해, 삽입
☁️ 디스크 읽기 방식 CPU와 메모리는 전기적 특성을 띄고 있는 장치이기 때문에, 속도가 빠르다. 하지만 이에 반해 디스크와 같은 기계적 장치는 여전히 느리므로, 데이터베이스 성능 튜닝은 디스크 I/O를 얼마나 줄이느가 관건이라 할 수 있다. HDD VS SSD
Q. static 키워드가 붙으면 어플리케이션 실행 시에 이미 초기화가 끝나는데, 어떻게 지연 로딩이 가능한가? 정적 필드 초기화 - 지연 초기화 홀더 클래스 관용구 ☁️ Bill Pugh Solution (LazyHolder) 권장되는 방법 중 하나로, 멀티스레
트랜잭션 격리 수준이란, 여러 트랜잭션이 동시에 처리될 때 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있도록 허용할지 말지 결정하는 것을 의미한다. 총 네 단계로 나뉘며, 뒤로 갈수록 고립 정도(격리)가 높아져 동시 처리 성능이 떨어져서 잘
트랜잭션 : 작업의 완전성(일부만 적용되는 일이 없도록)을 보장하는 데이터의 정합성을 위한 기능이다. 잠금(Lock): 레코드에 대한 동시성을 제어하기 위한 기능이다. MyISAM이나 MEMORY 는 InnoDB 와 달리 트랜잭션을 지원하지 않는다. 트랜잭션 기능이
어느때처럼 SSH 접속을 하려고 명령어를 실행시켰더니, 어느 에러 문구도 없이 접속이 되지 않았다. 크론탭을 통해 테스트하려고 매초마다 크롤링을 해오도록 설정해놨었기 때문에, 역시 직감으로 CPU 사용률을 먼저 확인해보았다.스케줄링 작업이 일어날때 아래와 같이 CPU
InnoDB 버퍼 풀이란, 디스크의 데이터 파일이나 인덱스 정보를 메모리에 캐시해두는 공간이다. 또한 일괄 처리를 위한 쓰기 작업 레코드 버퍼 용도로도 사용된다. 1. 버퍼 풀 크기 설정 일반적으로 운영체제 공간이 8GB 미만이라면, 50% 정도만 InnoDB 버퍼
싱글톤고 같이 불변식을 지키려고 한다면, 열거 타입을 사용하자. readResolve 를 사용한다면 반드시 모든 참조 타입 인스턴스 필드를 transient 로 선언해야 한다. 싱글턴 클래스 직렬화 문제 싱글턴 클래스를 직렬화 하려고 Seriablizable 를 구현
☁️ 프라이머리 키에 의한 클러스터링 모든 테이블은, 기본적으로 프라이머리 키를 기준으로 클러스팅되어 저장된다. 클러스터링 인덱스란? https://www.geeksforgeeks.org/difference-between-clustered-and-non-clus
전체적인 아키텍처 MYSQL 엔진 클라이언트로부터의 접속 및 쿼리 요청을 처리하는 커넥션 핸들러, SQL 파서, 옵티마이저 등 요청된 SQL 문장을 분석하거나 최적화하는 엔진이다. GROUP BY, ORDER BY 등 복잡한 처리는 해당 엔진의 처리 영역인 쿼리 실행