본문 바로가기

분류 전체보기

(99)
7장 레디스 데이터 백업 방법 레디스에서 데이터 영구 저장하기레디스는 메모리에서 관리되기 때문에 인스턴스가 재시작되면 모두 날라갈 가능성이 있으니 백업 정책은 중요하다.복제 정책도 있으나 서로 목적이 다르고(복제는 가용성, 백업은 데이터 복구), 의도치 않게 데이터 삭제 커맨드가 실행되면 복제 정책으로도 복구할 수 없다.백업하는 방법 2가지: RDB, AOFAOF(Append Only File): 메모리 변경있는 모든 쓰기 작업을 차례대로 기록, 복원할 때 커맨드 실행해가며 데이터 재구성RDB(Redis Data Base): 스냅샷 방식. 일정 시점에 메모리에 저장된 데이터 전체 저장실제로 RDB는 바이너리 형태로, AOF는 RESP(레디스 프로토콜)형태로 저장된다.장단점RDB: AOF보다 복원이 빠르나 특정 시점으로 복구는 불가능A..
6장 레디스를 메시지 브로커로 사용하기 1.pub/sub(publish, subscribe), 2.메시징 큐(list), 3.이벤트 스트림(stream)메시지 브로커메시지 브로커가 필요한 이유최근 서비스 아키텍쳐(MSA)에선 각 애플리케이션 간 느슨하면서 탄탄한 상호 작용이 필요하기 때문핵심 역할모듈 간 통신에서 커넥션 실패 같은 장애가 바로 전파되지 않게 비동기 통신으로 하는게 권장된다. 메시지 브로커를 사용하면 서비스 간 통신이 불가능하더라도 바로 장애로 이어지지 않게, 당장 메시지 처리하지 못해도 메시지를 쌓아두어 나중에 처리할 수 있는 채널을 만들어둔다.크게 두 형태: 메시징 큐, 이벤트 스트림 메시징큐와 이벤트 스트림메시징 큐생산자-소비자이벤트 스트림발행자-구독자방향성 관점메시징 큐: 생산자는 소비자의 큐로 직접 push 한다. 같은..
5장 레디스를 캐시로 사용하기 캐시원본 데이터 저장소보다 더 빠르고 효율적으로 접근할 수 있는 임시 데이터 저장소목표: 응답속도 줄이기부가 효과: 원본 저장소 리소스 줄일 수 있고 원본 저장소가 장애난 상황에서 캐시에서 가져오기 때문에 장애 영향 줄일 수 있다. 캐시 적용하면 좋은 경우원본 저장소에서 매번 계산을 해서 가져온다거나 읽기 시간이 오래걸리는 경우캐시에서 가져오는 속도가 더 빠른 경우캐시에 저장된 데이터가 잘 변하지 않는 경우자주 검색되는 데이터일 경우 캐시로서 레디스 쓰면 좋은 점키-값 또는 다양한 자료구조 지원으로 저장/반환할 때 변환 과정없어도 돼서 간단하다.메모리 위에 존재해서 굉장히 빠르다.센티널, 클러스터 사용하면 자동으로 장애 감지해 페일오버돼서 고가용성이다.클러스터 사용하면 스케일아웃도 쉽다. 캐싱 전략: 레..
4장 레디스 자료 구조 활용 사례 실시간 리더보드 - sorted set실시간 리더보드에 sorted set이 좋은 이유실시간으로 정렬돼야하는데 sorted set은 저장할때부터 정렬되므로 조회가 빠름 ZADD, ZREVRANGE, ZINCRBY, ZUNIONSTORE127.0.0.1:6379> ZADD score:250116 100 player:1 (integer) 1127.0.0.1:6379> ZADD score:250116 500 player:2(integer) 1127.0.0.1:6379> ZADD score:250116 700 player:3(integer) 1127.0.0.1:6379> ZREVRANGE score:250116 0 2 withscores1) "player:3"2) "700"3) "player:2"4) "500"..
3장 레디스 기본 개념 redis-cli -h 127.0.0.1 -p 6379string, list, set, hash, sorted set, 비트맵, hyperloglog, geospatial, streamstring한 키에 최대 512MB 저장 가능이진 데이터, JPEG 이미지 같은 바이트 값 HTTP 응답값 다양하게 저장 가능키 하나에 값도 하나 저장되는 유일한 자료 구조SET, GET127.0.0.1:6379> set hello world // 키 값OK127.0.0.1:6379> get hello"world"127.0.0.1:6379> set hello newval NX(nil)127.0.0.1:6379> get hello"world"127.0.0.1:6379> set hello newval XXOK127.0.0.1:..
2장 레디스 시작하기 도커로 띄움서버 환경 설정 변경file descriptor 수는 레디스 maxClients + 32 로소켓도 파일이다: 리눅스는 클라이언트가 접속할 때마다 '소켓'을 생성하는데, 이를 파일(File Descriptor)로 취급합니다.레디스 내부에서 쓰는 파일 디스크립터 수는 32다.만약 nofiles 값이 1024(기본값인 경우가 많음)라면, 클라이언트가 1,000명만 접속해도 레디스는 더 이상 요청을 받을 수 없다.ulimit -a 로 open files 혹은 nofiles 로 파일 디스크립터 값 확인 THP(Transparent Huge Page) 기능 끄기리눅스는 메모리를 페이지 단위(4KB)로 관리하는데, 메모리 크기 클수록 페이지 관리 테이블 크기(TLB)가 커짐테이블 크기가 크면 오버헤드 이슈..
1장 마이크로서비스 아키텍처와 레디스 소프트웨어 아키텍처의 변화(모놀리틱 → MSA)로 인해 데이터 저장소의 요구사항(RDB -> NOSQL)이 바뀌었다모놀리틱 아키텍처전체 애플리케이션을 하나의 단위로 배포, 관리장점: 구조 단순, 소규모에 적합단점:한 곳의 장애가 전체 장애로 퍼질 수 있다프레임워크가 통일이라 새로운 기술 적용이 쉽지 않다배포 시간이 오래 걸린다데이터 저장소 : RDB가 많이 쓰였다.모든 데이터를 한 곳에서 관리하므로 관계형이 표준이었다.마이크로서비스 아키텍처특정 단위로 모듈을 쪼개서 관리장점: 배포가 상대적으로 간단해 요구사항 빨리 처리 가능, 신기술 적용 특정 부분만 해볼 수 있음단점: 관리포인트가 많아져 소규모에서는 어려움데이터 저장소: NoSQL각 모듈에 필요한 데이터를 독립적으로 저장하는게 편리구조화되지 않은 비정..
테스트 클래스 다른 모듈에서 공유하기 배경멀티 모듈로 구성되어 있다: s3 접근하는 data-s3 모듈, 스프링 배치 batch 모듈batch 모듈에서 s3 접근이 필요한 로직들은 data-s3 모듈에 들어있다.하고싶은 것data-s3 모듈에서 테스트용 빈을 구현해 batch모듈에서도 쓰고 싶다.S3Mock을 사용한 테스트용 S3Client지금까지는batch 모듈에서 직접 구현함batch 모듈에서 S3Mock 디펜던시 주입 (io.findify:s3mock_2.12)batch 모듈에서 S3MockConfig 빈 생성→ S3MockConfig 는 s3와 관련된 클래스이니 data-s3 모듈에서 생성하고, batch 모듈에 공유하여 사용하고 싶은 것첫 번째 방법 - testFixtures 플러그인 사용(장점) batch 모듈에서 testImpl..
최신 정보검색론 1장부터 11장까지 책 내용을 정리한 PPT입니다https://docs.google.com/presentation/d/1IwnPWQdgyo3Gsbh_TF0QqTbA-pmFS4lDbFvXsLbYMuQ/edit?slide=id.g36768965a52_0_125&pli=1#slide=id.g36768965a52_0_125 [스터디] 최신 정보검색론최신 정보검색론 1장 소개 2025.6.16docs.google.com Chapter 1 소개Chapter 2 검색 사용자 인터페이스Chapter 3 모델링Chapter 4 검색평가Chapter 5 연관 피드백과 질의확장Chapter 6 문서: 언어 및 특성Chapter 7 질의: 언어 및 특성Chapter 8 텍스트 분류Chapter 9 색인과 검색Chapter 1..
opencode 튜토리얼 - LLM모델을 CLI에서 사용하기 opencode 는 여러 LLM을 CLI 환경에서 사용할 수 있는 AI Coding Agent이다.opencode 사용법, agent 생성하는 법에 대해 알아보기로 한다.opencode 특징TUI 기반이다 (설정같은 건 CLI로 하긴 함)여러 LLM 들을 한 곳에서 사용할 수 있다agent를 지원하지 않는 LLM(ex. github copilot)도 agent를 사용할 수 있다 (생성은 안되더라)독스 학습이 쉽다opencode툴 자체는 무료지만 사용하려는 LLM에 대해서는 API key를 이용하든 구독을 하든 돈을 내야한다. ※참고) 용어-화면 매핑CLI터미널 창TUIopencode 커맨드 입력한 후opencode 설치독스brew install opencode(맥북)opencode help 커맨드를 통해..