profile
개인용으로 공부하는 공간입니다. 잘못된 부분은 피드백 부탁드립니다!
post-thumbnail

[TIL] Django는 어떻게 다수의 요청을 처리할까?

상반기 채용 과정, 그리고 회사 입사 후에도 일이 너무 많아서 블로그 포스팅을 아예 작성하지 못했다..😰 노션에 대충 작성해놨던 글들을 다시 정리해보려고 한다. 스프링에서는 스레드 풀을 통해 다수의 요청이 처리가 되는데, 장고는 어떻게 처리해주는지 궁금해서 포스팅해보았다. 장고가 다수의 요청을 처리하는 방법 장고는 Gunicorn, 즉 스프링에서 요...

2024년 8월 24일
·
0개의 댓글
·
post-thumbnail

[DB] 송금에서의 동시성 이슈 해결기 (feat. 락을 최소한으로 사용해보자!)

만약 여러 사람이 한 계좌에 송금하거나, 한 계좌에 송금과 적금이 동시에 일어나는 경우 동시성 이슈를 어떻게 해결할 수 있을까에 대해 고민해보고 작성했다. 1. 여러 사람이 한 계좌에 송금 아래 코드는 송금 로직 예시로, 잔액이 부족하면 충전을 하고, 내 잔액을 차

2024년 2월 8일
·
0개의 댓글
·
post-thumbnail

[Java] 자바 File I/O 구조 및 성능에 대해 알아보자

최근 프로젝트에서 대용량 파일을 읽어올 일이 많이 생겼다. 파일을 읽어와서 `Json` 형태로 변환을 해줘야 했기에 한줄을 읽어와서 편하게 처리할 수 있도록 `readline()` 을 사용했었다.

2024년 1월 18일
·
0개의 댓글
·
post-thumbnail

[TIL] 레디스는 싱글 스레드인데 어떻게 동시 요청을 처리할까?

Redis와 Event-Loop? > Redis는 싱글 스레드인데, 어떻게 수많은 요청을 동시에 처리할 수 있는걸까? 라는 궁금증에서 해당 포스팅을 작성해보았다. 결론부터 말하자면, Redis를 제외하고도 Node.js나 JavaScript 는 싱글 스레드면서 이벤

2023년 11월 30일
·
0개의 댓글
·
post-thumbnail

[Java] HashSet VS HashMap 완벽 이해하기

결론부터 말하자면, `HashSet` 역시 내부적으로 `HashMap` 을 사용해서 동작한다. 그리고 `HashMap` 은 해시 테이블 기반으로 동작한다.

2023년 11월 9일
·
0개의 댓글
·
post-thumbnail

[Spring Boot] 캐시 적용 과정에서의 삽질기

☁️ Redis를 사용한 이유? `Redis` 나 `Memcached` 를 사용하는 방법은 글로벌 캐싱 전략이다.

2023년 9월 10일
·
0개의 댓글
·
post-thumbnail

[Design Pattern] Proxy 패턴

원격 프록시는 실제 객체처럼 행동하지만, 실제로는 네트워크로 진짜 객체와 데이터를 주고 받게 된다. 즉 원격 프록시는 각 사용자의 JVM 내부의 힙 영역에 존재하는 로컬 객체라고도 할 수 있다.클라이언트가 로컬에서 원격 프록시를 호출한다.(대변자 역할)프록시가 실제 원

2023년 9월 9일
·
0개의 댓글
·
post-thumbnail

[MySQL] 옵티마이저 최적화

MySQL 서버의 옵티마이저는 실행 계획을 수립할 때, 통계 정보와 옵티마이저 옵션을 결합해 최적의 실행 계획을 수립한다. 옵티마이저 스위치 옵션은 optimizer_switch 시스템 변수를 이용해서 제어한다.Multi Range Read 란, Nested Loop

2023년 9월 6일
·
0개의 댓글
·
post-thumbnail

[MySQL] ORDER BY, GROUP BY, DISTINCT 절에서 옵티마이저는 어떻게 동작하는가

GROUP BY 처리 GROUP BY 역시 ORDER BY과 마찬가지로 인덱스를 사용할 수 없으므로, 필터링 역할을 하는 HAVING절을 튜닝할 수 없다. 인덱스를 사용하는 경우 인덱스 스캔 이용 루스 인덱스 스캔 이용 임시 테이블을 사용하는 경우 DISTI

2023년 8월 30일
·
0개의 댓글
·
post-thumbnail

[Spring Boot] MySQL 검색 쿼리 성능 개선기

60만건의 유실물 데이터를 내용으로 검색할 때, 프론트에서 가끔 응답 시간이 너무 오래 걸린다는 피드백을 받고 성능을 올려보기로 했다.

2023년 8월 23일
·
2개의 댓글
·
post-thumbnail

[MySQL] 클러스터링 인덱스와 유니크 인덱스에 대하여

클러스터링 인덱스란? > 🫧 클러스터링이란? 서로 연관이 있는 데이터들을 하나로 묶는 것을 의미한다. 따라서 클러스터링 인덱스란, 테이블의 레코드를 프라이머리키가 비슷한 것 끼리 묶는 것을 의미한다. 중요한 것은 InnoDB 에서는 프라이머리 키에 의해, 삽입

2023년 8월 16일
·
0개의 댓글
·
post-thumbnail

[MySQL] B-Tree 인덱스 구조와 인덱스 스캔

☁️ 디스크 읽기 방식 CPU와 메모리는 전기적 특성을 띄고 있는 장치이기 때문에, 속도가 빠르다. 하지만 이에 반해 디스크와 같은 기계적 장치는 여전히 느리므로, 데이터베이스 성능 튜닝은 디스크 I/O를 얼마나 줄이느가 관건이라 할 수 있다. HDD VS SSD

2023년 8월 8일
·
0개의 댓글
·
post-thumbnail

[Java] Static inner class 는 어떻게 지연 초기화가 가능할까?

Q. static 키워드가 붙으면 어플리케이션 실행 시에 이미 초기화가 끝나는데, 어떻게 지연 로딩이 가능한가? 정적 필드 초기화 - 지연 초기화 홀더 클래스 관용구 ☁️ Bill Pugh Solution (LazyHolder) 권장되는 방법 중 하나로, 멀티스레

2023년 8월 4일
·
0개의 댓글
·
post-thumbnail

[MySQL] 트랜잭션 격리 수준(Isolated-level) 완전 정복하기

트랜잭션 격리 수준이란, 여러 트랜잭션이 동시에 처리될 때 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있도록 허용할지 말지 결정하는 것을 의미한다. 총 네 단계로 나뉘며, 뒤로 갈수록 고립 정도(격리)가 높아져 동시 처리 성능이 떨어져서 잘

2023년 8월 2일
·
0개의 댓글
·
post-thumbnail

[MySQL] 트랜잭션과 MySQL 잠금(Lock) 종류에 대해 알아보자

트랜잭션 : 작업의 완전성(일부만 적용되는 일이 없도록)을 보장하는 데이터의 정합성을 위한 기능이다. 잠금(Lock): 레코드에 대한 동시성을 제어하기 위한 기능이다. MyISAM이나 MEMORY 는 InnoDB 와 달리 트랜잭션을 지원하지 않는다. 트랜잭션 기능이

2023년 7월 31일
·
0개의 댓글
·
post-thumbnail

[AWS] 우리의 연약한 프리티어 서버가..또 터졌어요😇

어느때처럼 SSH 접속을 하려고 명령어를 실행시켰더니, 어느 에러 문구도 없이 접속이 되지 않았다. 크론탭을 통해 테스트하려고 매초마다 크롤링을 해오도록 설정해놨었기 때문에, 역시 직감으로 CPU 사용률을 먼저 확인해보았다.스케줄링 작업이 일어날때 아래와 같이 CPU

2023년 7월 30일
·
0개의 댓글
·
post-thumbnail

[MySQL] InnoDB 버퍼 풀 구조와 로그

InnoDB 버퍼 풀이란, 디스크의 데이터 파일이나 인덱스 정보를 메모리에 캐시해두는 공간이다. 또한 일괄 처리를 위한 쓰기 작업 레코드 버퍼 용도로도 사용된다. 1. 버퍼 풀 크기 설정 일반적으로 운영체제 공간이 8GB 미만이라면, 50% 정도만 InnoDB 버퍼

2023년 7월 25일
·
0개의 댓글
·
post-thumbnail

[Effective Java] 아이템 89: 인스턴스 수를 통제해야 한다면 readResolve 보다는 열거 타입을 사용하라

싱글톤고 같이 불변식을 지키려고 한다면, 열거 타입을 사용하자. readResolve 를 사용한다면 반드시 모든 참조 타입 인스턴스 필드를 transient 로 선언해야 한다. 싱글턴 클래스 직렬화 문제 싱글턴 클래스를 직렬화 하려고 Seriablizable 를 구현

2023년 7월 23일
·
2개의 댓글
·
post-thumbnail

[MySQL] InnoDB 스토리지 엔진 아키텍처

☁️ 프라이머리 키에 의한 클러스터링 모든 테이블은, 기본적으로 프라이머리 키를 기준으로 클러스팅되어 저장된다. 클러스터링 인덱스란? https://www.geeksforgeeks.org/difference-between-clustered-and-non-clus

2023년 7월 16일
·
2개의 댓글
·
post-thumbnail

[MySQL] MySQL 엔진 아키텍처 파헤치기

전체적인 아키텍처 MYSQL 엔진 클라이언트로부터의 접속 및 쿼리 요청을 처리하는 커넥션 핸들러, SQL 파서, 옵티마이저 등 요청된 SQL 문장을 분석하거나 최적화하는 엔진이다. GROUP BY, ORDER BY 등 복잡한 처리는 해당 엔진의 처리 영역인 쿼리 실행

2023년 7월 11일
·
0개의 댓글
·