오늘/Today I..
-
레디스오늘/Today I.. 2024. 11. 25. 16:00
cache hit (캐시 적중) → 캐시에서 찾음cache miss (캐시 누락) → 캐시에서 못찾음eviction policy (삭제 정책) → 캐시에 공간이 부족할 때 어떻게 공간을 확보할지에 대한 정책 Cache - Aside 레이지 로딩이라고도 함데이터를 조회할 때 항상 캐시를 먼저 확인캐시에 데이터가 있으면 캐시에서 데이터를 가져오고, 없으면 원본에서 데이터를 가져온 뒤 캐시에 저장필요한 데이터만 캐시에 보관됨최초 조회 시 캐시를 확인하기 때문에 최초 요청은 상대적으로 오래 걸림반드시 원본을 확인하진 않기 때문에 데이터가 최신이라는 보장이 없음 Write - Through 데이터를 작성할 때 항상 캐시에 작성하고, 그 후 원본에도 작성하는 전략캐시는 항상 최신 데이터임이 보장됨자주..
-
레디스 명령어 (4) Hash, Sorted Set오늘/Today I.. 2024. 11. 24. 01:48
Redis의 Hash는 Hash데이터를 가져오기 위해 Key를 사용하고 Key에 저장된 Hash데이터에 Field - Value 쌍을 넣어주는 식으로 동작한다. HSET HSET user:1 name boy age 20 city seoul # 하나의 키에 복수의 필드와 밸류가 담김 HGET String 과는 다르게 키 와 필드까지 넣어서 확인해야함HMGET 2개 이상의 필드 지정 가능HGETALL 데이터 다 가져옴HGET user:1 name # boy 반환HMGET user:1 name age # boy 20 반환HGETALL user:1 # name boy age 20 city seoul 반환 HKEYS Hash에 포함된 모..
-
레디스 명령어 (3) set오늘/Today I.. 2024. 11. 24. 01:10
Set (문자열의) 집합 SADD 로 데이터를 만들고 넣어준다.SADD alpha "a" "b" "c" "d" # {"a", "b", "c", "d"}SADD alpha "a" "e" # {"a", "b", "c", "d", "e"} SMEMBERS 로 모든 요소를 반환한다.SMEMBERS alpha # {"a", "b", "c", "d", "e"} SREM remove로 요소를 제거한다.SREM alpha "e" # {"a", "b", "c", "d"} SISMEMBER 특정 요소가 집합에 포함되어있는지 확인 (존재하면 1 존재하지않으면 0)SISMEMBER alpha "a" # {"a", "b", "c", "d"}Output: 1 SCARD ..
-
레디스 명령어 (2) list오늘/Today I.. 2024. 11. 24. 01:08
레디스에서 List라고 하면Doubly Linked List의 형태로 데이터를 저장다만 작은 크기의 리스트나 간단한 데이터인 경우 압축리스트 ziplist로 저장 이중연결리스트이기 때문에 push pop 명령어 실행 시 L, R을 지정해줘야함 LPUSH a:list 2LPUSH a:list 1RPUSH a:list 3RPUSH a:list 4 # 1234 순으로 저장된다. get은 문자열에서만 사용할 수 있는 명령어 이므로pop으로 꺼내거나,LRANGE로 특정 범위의 값을 가져오거나,LINDEX로 특정 인덱스의 값을 가져올 수 있다.(pop은 L, R 명시해줘야하지만, range와 index는 R이 없다.) LRANGE a:list 0 -1 # -1을 줄경우 처음부터 끝까지 가져온다. ..
-
레디스 명령어 (1) String오늘/Today I.. 2024. 11. 23. 20:41
SETGET문자열 데이터를 저장하고 조회한다. SET K V EX # 초 단위 만료SET K V PX # 밀리초 단위 만료SET K V NX # 새 키만 저장SET K V XX # 기존 키만 업데이트위와 같은 기능을 추가해서 저장할 수 있다.DEL을 쓰면 삭제도 가능하다. 또한최대 512MB까지 저장 가능데이터형식은 텍스트, 숫자, JSON, 바이너리 등 어떤 형식의 데이터든지 문자열로 저장가능 하다. 문자열 값이 정수일 경우 (문자열, 소수점 있으면 에러남)SET count 10INCR count # ++ 되어 11이 됨DECR count # -- 되어 10이 됨INCRBY count 10 # +10이 되어 20이 됨INCRBY count -10 # -10이 되어 ..
-
MySQL 과 PostgreSQL오늘/Today I.. 2024. 11. 19. 17:29
항목MySQLPostgreSQL설계 철학간단하고 빠른 성능고급 기능과 확장성, 표준 준수를 중시라이센스오픈소스오픈소스SQL 표준 준수SQL 표준을 완벽히 준수하지 않음SQL 표준 준수도가 높음데이터 타입지원하는 데이터 타입이 제한적(ex. JSON 지원 제한적)많은 데이터 타입 지원(JSON, JSONB, HSTORE, UUID 등)확장성제한적인 확장성 (플러그인 시스템은 존재)높은 확장성(C-language, PL/pgSQL, 파이썬으로 확장 가능)트랜잭션 관리InnoDB 엔진 사용 시 ACID 지원기본적으로 ACID 지원.더 강력한 트랜잭션 제어 기능 제공복제 및 클러스터링읽기 복제를 쉽게 설정 가능하지만기본 제공 클러스터링은 부족복제, 클러스터링 및 분산 처리에 뛰어남(BDR, Patroni 등)J..
-
데이터베이스 정규화오늘/Today I.. 2024. 4. 7. 22:12
데이터베이스 정규화란? 데이터베이스 설계에서 데이터의 중복을 최소화하고 데이터 무결성을 유지하기 위해 데이터를 구조화하는 과정 이상현상이 있는 릴레이션을 분해하여 이상현상을 제거하여 중복된 데이터를 허용하지 않게 함 결과적으로 데이터 무결성을 유지하고 데이터베이스 저장공간을 확보할 수 있다. 데이터베이스 정규화 절차 일반적으로 제 3 정규형 또는 BCNF까지 진행하면 데이터베이스 설계에 무리가 없다. 제 4, 제 5 정규형까지 가서 중복을 완전히 제거해버릴경우 다른 문제가 발생할 수 있다. 제 1정규형부터 BCNF까지는 기본 정규형 제 4정규형, 제 5정규형은 고급 정규형으로 분류한다. 제 1 정규형 (1NF) 제1 정규형은 모든컬럼의 값이 원자값이어야 한다. 즉, 각 필드는 반드시 하나의 값만을 가져야..
-
Virtual Thread 는 왜 도입된걸까오늘/Today I.. 2024. 3. 25. 10:23
이번 JDK21에 Virtual Thread가 도입되었다. 기존에 있는 thread 기능도 제대로 활용하지 못하는데 이 기능은 왜 들어온걸까 라는 생각만 하며 이 기능이 무엇인지 알아보았다. Virtual Thread (이하 가상 쓰레드)는 KLT(kernel-level thread) 와 ULT(user-level thread) 를 1대1 매핑해서 사용하던 기존의 쓰레드 모델을 개선한 모델이다. 여러 개의 가상 쓰레드를 하나의 네이티브 스레드에 할당하여 사용한다. Java Native Interface는 인터프리터없이 OS가 바로 읽을 수 있는 형태의 네이티브 코드를 JVM이 호출 할 수 있게 하는 인터페이스 이다. 이것 덕분에 자바가 플랫폼에 상관없이 동작할 수 있는데, 자바에서 메서드 앞에 nativ..