분류 전체보기
-
CIDR(사이더, Classless Inter‑Domain Routing) 표기법이란?Etc 2025. 7. 19. 13:39
예를 들어, AWS EC2 보안그룹에서 인바운드 규칙에 소스 ip를 다음과 같이 지정할 때, 뒤의 /32 는 무엇을 뜻할까?예) 106.101.129.168/32IP 주소의 '/32', 무슨 뜻일까?IP 주소 106.101.129.168/32에서 슬래시(/) 뒤에 오는 숫자는 CIDR(사이더, Classless Inter-Domain Routing) 표기법을 나타낸다. 이 숫자는 해당 IP 주소의 네트워크 부분을 표시하는 데 사용되며, 0부터 32까지의 숫자가 올 수 있다.이 숫자는 IP 주소의 네트워크 부분과 호스트 부분을 나누는 기준을 나타내며, 네트워크 크기를 정의.슬래시 뒤 숫자의 의미슬래시 뒤의 숫자는 IP 주소의 32비트 중 네트워크 주소로 사용되는 비트의 수를 의미한다.숫자가 클수록 더 작은..
-
@MappedSuperclass 에 대해 알아 봅시다.JPA 2025. 6. 10. 08:46
@MappedSuperclass 는 공통 컬럼 매핑만 공유하고 독립적인 테이블은 만들지 않는 JPA 상속 전략입니다.엔티티가 아니므로 직접 조회·저장 대상에 속하지 않고, JPQL에서 타입으로 사용할 수도 없습니다.하위 엔티티가 상속받으면, 상위 클래스의 필드가 하위 엔티티 테이블에 그대로 포함 됩니다.@MappedSuperclasspublic abstract class baseTimeEntity { private LocalDateTime createdAt; private LocalDateTime updatedAt;}@Entitypublic class User exteds BaseTimeEntity { @Id @GeneratedValue private Long id; priva..
-
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으로 선언하면서 내부 클래스에서는 접근할 수 있게 할 수 있습니다.코드의 가독성과 유지보수성을 높입니다.다음은 중첩 클래..