전체 글
-
WebSocket 이란? WebSocket Best Practice!Etc 2025. 4. 5. 23:48
🧊 개요모든 세부적 개념보다는, 반드시 알아야 할 개념과 이 개념들을 알게 됐을 때,WebSocket 을 통한 개발에 문제가 없게 하기 위해 만들게 됨🧊 WebSocket 과 HTTP 의 주요 차이점?🐑 요약공통점: 둘 다 TCP 소켓 위에서 동작한다.차이점: HTTP는 요청-응답 기반의 단방향 통신 모델, WebSocket은 양방향(Full Duplex) 통신 모델이다.🐑 3-way-handshakeTCP 계층에서 이뤄지는 “SYN → SYN+ACK → ACK” 과정을 통해 소켓 연결을 확립한다.HTTP, WebSocket 모두 결국 TCP 위에서 동작하므로, 연결 시 이 과정을 거친다.그러나 WebSocket 핸드셰이크는 추가로 HTTP Upgrade 요청/응답을 통해 프로토콜을 ws로 전환한..
-
Redis Lock 요청에 대한 부하 분산카테고리 없음 2024. 8. 7. 10:09
Redis에 지속적으로 lock을 요청하면 Redis 서버에 과도한 부하가 발생할 수 있습니다. 이를 해결할 수 있는 몇 가지 방법을 제안합니다1. Lock Timeout 설정 및 재시도 간격 조정Redis lock에 타임아웃을 설정하고, lock을 얻지 못했을 때 재시도 간격을 조정하여 Redis에 과부하가 가지 않도록 합니다.2. Redlock 알고리즘 사용Redlock 알고리즘은 여러 Redis 인스턴스를 사용하여 분산 락을 구현하는 방법입니다. 이는 단일 인스턴스의 장애에도 견딜 수 있는 강력한 락 메커니즘을 제공합니다.3. 백오프 전략 사용백오프 전략을 사용하여 lock 획득에 실패했을 때 재시도 간격을 점진적으로 증가시켜 Redis에 부하가 가지 않도록 합니다.4. 비동기 작업 큐 사용비동기 ..
-
MVCC (Multi-Version Concurrency Control)와 언두 로그(Undo Log), 리두 로그(Redo Log)Database 2024. 8. 6. 10:53
1. MVCC (Multi-Version Concurrency Control)MVCC는 다중 버전 동시성 제어 기법으로, 데이터베이스 관리 시스템(DBMS)에서 동시성을 제어하기 위한 기술입니다. 이는 데이터베이스의 일관성과 무결성을 유지하면서 동시에 여러 트랜잭션을 지원하는 방법입니다. MVCC는 일반적으로 다음과 같은 방식으로 작동합니다.버전 관리: 각 데이터 항목은 여러 버전을 가질 수 있습니다. 새로운 트랜잭션이 데이터 항목을 변경할 때마다 새로운 버전을 생성합니다.스냅샷 읽기: 각 트랜잭션은 자신의 시작 시점의 데이터베이스 스냅샷을 사용합니다. 즉, 트랜잭션은 자신이 시작된 시점에 존재했던 데이터 버전만을 읽습니다.쓰기 시점 충돌 방지: 두 트랜잭션이 동일한 데이터 항목을 동시에 변경하려고 할 ..
-
넥스트 키 락(Next-Key Lock) in Database SystemsDatabase 2024. 8. 6. 00:26
넥스트 키 락에 대한 소개넥스트 키 락은 데이터베이스 시스템에서 트랜잭션을 처리할 때 사용되는 동시성 제어 메커니즘입니다. 이는 주로 팬텀 리드(phantom read) 현상을 방지하는 데 유용합니다. 넥스트 키 락에서는 개별 행에 락을 거는 것이 아니라, 행과 행 사이의 간격에 락을 겁니다. 이렇게 하면 데이터베이스가 읽기와 쓰기를 보다 효과적으로 관리할 수 있어, 동시성 트랜잭션 간 데이터 일관성과 고립성을 보장할 수 있습니다.넥스트 키 락의 구성 요소레코드 락(Record Locks): 실제 행에 걸리는 락.갭 락(Gap Locks): 행 사이의 간격에 걸리는 락.넥스트 키 락(Next-Key Locks): 레코드 락과 갭 락의 조합으로, 두 개의 연속된 인덱스 레코드 사이의 간격에 락을 겁니다.넥..
-
Phantom RowsDatabase 2024. 8. 6. 00:24
17.7.4 Phantom RowsPhantom 문제는 트랜잭션 내에서 동일한 쿼리가 다른 시간에 다른 행 집합을 생성할 때 발생합니다. 예를 들어, 두 번 실행된 SELECT가 처음에는 반환되지 않은 행을 두 번째 실행 시 반환하면 그 행은 "Phantom " 행입니다.child 테이블의 id 열에 인덱스가 있고, id 값이 100보다 큰 모든 행을 읽고 잠그고자 하는 경우:SELECT * FROM child WHERE id > 100 FOR UPDATE;쿼리는 id가 100보다 큰 첫 번째 레코드에서 시작하여 인덱스를 스캔합니다. 테이블에 id 값이 90과 102인 행이 있는 경우, 인덱스 레코드 범위에 설정된 잠금이 간격(이 경우 90과 102 사이의 간격)에 삽입을 잠그지 않으면, 다른 세션이 i..
-
Java의 Nested ClassesJAVA 2024. 8. 5. 23:37
자바 프로그래밍 언어에서는 클래스 안에 또 다른 클래스를 정의할 수 있는데, 이를 중첩 클래스라고 합니다. 중첩 클래스는 두 가지로 나뉩니다: 비정적 중첩 클래스(내부 클래스)와 정적 중첩 클래스입니다. 내부 클래스는 외부 클래스의 인스턴스와 관련되어 있으며, 외부 클래스의 멤버에 직접 접근할 수 있습니다. 반면에 정적 중첩 클래스는 외부 클래스의 인스턴스 멤버에 직접 접근할 수 없습니다.중첩 클래스를 사용하는 이유는 다음과 같습니다:특정 클래스에서만 사용되는 클래스들을 논리적으로 그룹화하여 코드의 가독성과 유지보수성을 높입니다.캡슐화를 증가시킵니다. 외부 클래스의 멤버를 private으로 선언하면서 내부 클래스에서는 접근할 수 있게 할 수 있습니다.코드의 가독성과 유지보수성을 높입니다.다음은 중첩 클래..
-
AWS에서 Redis Master Slave 설정Etc 2024. 7. 15. 00:25
우선, t2.micro유형의 EC2를 Ubuntu로 한대 띄운다.Master와 Slave 설정을 최소한으로 하기 위해서는,EC2서버를 2대 띄우고 각각 마스터와 슬레이브에 맞는 설정을 해주면 된다.참고로 네트워크 통신이 가능하게 끔 VPC 와 서브넷을 동일하게 설정해 주는 것을 잊지 말자.보안 그룹은 최소한으로 다음처럼 해주자.혹시 연결이 되지 않는 다면, 로그를 확인해 보자.로그는 다음처럼 입력해서 확인할 수 있다.$ tail -f /var/log/redis/redis-server.log다음처럼 오류가 나고 있는 것을 볼 수 있다.이건 redis.conf에 설정된 bind 를 한번 확인해 보자.$ vi /etc/redis/redis.conf처음에 다음 처럼 설정되어 있을 수 있다.bind 127.0...
-
EC2 Jenkins 구성 중 OOM Killer 원인카테고리 없음 2024. 5. 2. 20:26
AWS EC2 Jenkins 구성t2.micro 에 Jenkins를 docker container위에 올리고 시간이 지났더니, Jenkins 서버가 죽는 문제가 발생했다. 원인을 찾아보자. 서버를 띄워놓고 어느정도 시간이 지난뒤에 돌아와 보니, 서버가 죽어있다. 아마, Jenkins만 설치해 놨으니, Jenkins가 메모리를 많이 잡아먹어서 죽지 않았을까,아마 자동으로 죽었다면, oom killer에 의해 죽지 않았을까 의심해 볼 수있다. 한번 확인해 보자.$ sudo -i$ cat /var/log/kern.log | grep oom$ cat /var/log/syslog | grep oomOOM Killer 로그 분석1. systemd invoked oom-killersystemd: 시스템의 init 시..