전체 글 171

Redis 자료구조 이해하기

Redis 는 기본적으로 key-value 구조의 저장 방식을 갖지만 Lists,Sets, Sorted Sets, Hashes, Streams 같은 다양한 저장 방식을 제공합니다.  1. Stringskey-value 가 일 대 일 관계입니다.데이터 타입: Binary-safe strings - 알파벳, 숫자, 한글,. 이미지 등을 사용할 수 있습니다.최대 길이: 512mb 2. Listskey-value 가 일 대 다 관계입니다.value 는 입력한 순서대로 저장됩니다.주로 Queue -들어오는 데이터를 순서대로 처리할 때- 이나Stack-웹브라우저의 백버튼처럼 되돌아 갈 때-으로 사용됩니다.value 가 저장되면 key(list) 가 생성됩니다. key에 value가 하나도 없으면 해당 키는 삭제됩니..

기타 2025.01.07

Redis - Lettuce , Redisson 의 Lock 구현

1. Lettuce를 이용한 직접 구현특징:Lettuce는 Redis와 비동기로 통신할 수 있는 자바 클라이언트 입니다.직접 분산 락을 구현하려면 **SETNX** 와 **EXPIRE** 명령어를 활용해야 합니다. public boolean acquireLock(String lockKey, String requestId, long expireTime) { String result = redisTemplate.execute((RedisCallback) connection -> { return connection.set( lockKey.getBytes(), requestId.getBytes(), Expiration.from(expi..

기타 2025.01.07

회고 - Jmeter 를 활용한 성능 테스트

성능 테스트를 위한 도구: Jmeter, K6, nGrinder 등성능 테스트 결과 시각화를 위한 도구: influxdb, prometheus, grafana 등 회고 - 정말 많은 일이 있었습니다. 더보기저는 자바스크립트 언어를 모르기에 Jmeter 를 쓰는 게 현명했습니다. 하지만 GPT 의 도움과 팀원들의 응원에 K6를 골랐습니다....  정말 많은 일이 있었지만 간단하게 정리하고자 합니다. 총 8가지 경우의 수가 있었습니다. 1. Jmeter, K62. influxdb, prometheus3. docker O, docker X 맨처음 Jmeter 하나만으로 테스트를 성공했지만(여기서부터 K6 도전) 시각화 자료가 너무 '구려서' grafana 를 떠올리게 되었습니다. 그래서 위와 같은 8가지의 경..

기타 2025.01.01

컴퓨터 개요

컴퓨터: 여러 유형의 데이터를 처리 -> 사용자가 원하는 정보 제공 컴퓨터의 기능: 입력, 기억, 연산, 제어(명령 해독, 각 장치 통제), 출력 하드웨어: 기계 장치, 소프트웨어의 지시 수행 소프트웨어: 프로그램 및 데이터 하드웨어1) 중앙처리장치(CPU): 명령어 해독 및 실행- 구성제어장치: 명령 해석 --지시>> 연산 장치연산 장치: 산술·논리 연산레지스터 집합: CPU 동작 중 필요한 정보 저장 2) 기억장치: 프로그램 및 데이터 저장소- 구성보조기억장치: 영구 저장소, CPU에서 요청에 따라 프로그램 및 데이터를 주기억장치로 전송(응답)주기억장치: - RAM: 실행 중인 프로그램 데이터 저장, 휘발성 메모리- ROM: 부팅 시 동작하는 바이오스 프로그램 저장, 비휘발성 메모리캐시기억장치: 주기..

CS 2024.12.29

로컬 캐시(Local Cache) vs 글로벌 캐시(Global Cache)

캐시는 크게 **로컬 캐시(Local Cache)**와 **글로벌 캐시(Global Cache)**로 구분됩니다. 각 유형은 데이터가 어디에 저장되고 어떤 방식으로 접근 가능한지에 따라 다릅니다. 1. 로컬 캐시 (Local Cache) - 공유X로컬 캐시는 개별 서버 또는 애플리케이션 인스턴스의 메모리 내에서 작동하는 캐시입니다. 이 캐시는 데이터 접근 속도가 빠르지만, 여러 인스턴스 간의 데이터 공유가 어렵습니다. 특징위치: 캐시가 애플리케이션이 실행 중인 서버 내부(메모리나 디스크)에 저장됩니다.속도: 서버 메모리를 직접 사용하므로 매우 빠릅니다.격리: 각 서버가 독립적으로 데이터를 캐싱하며, 다른 서버와 캐시 데이터를 공유하지 않습니다.적합한 상황:단일 서버에서만 동작하는 애플리케이션.데이터가 자..

기타 2024.12.29

상속 관계와 생성자

자바에는 상속(Inheritance)이 존재합니다. 상속 관계에서는 상위 클래스와 하위 클래스가 있습니다. 하위 클래스는 상위 클래스를 상속하여 그 부모의 멤버-필드와 메서드-를 받아 사용할 수 있습니다.  예를 들어 아래와 같이 사용할 수 있습니다.class SuperClass { int age; int height; String name; Sex sex; sc.eat("사랑스러운 소고기");}class SubClass extends SuperClass{ public SubClass() { }}public class Main { public static void main(String[] args) throws InterruptedException { SubClass sc = new Sub..

Java/Java 문법 2024.12.26

캐시란 무엇일까?

캐시란 무엇일까?  너는 학교 도서관에서 자주 쓰는 참고서를 종종 빌려와야 해.그런데 매번 도서관까지 걸어가서 책을 빌리고 돌아오려니 너무 귀찮고 시간이 걸려....그래서 그 책을 그냥 네 책상 서랍에 넣어두면 어때?이제는 참고서가 필요할 때마다 바로 책상 서랍에서 꺼내 볼 수 있으니 시간을 훨씬 절약할 수 있어!이 서랍에 책을 두는 방법이 바로 캐싱이야. 캐시란 데이터를 빠르게 사용할 수 있도록 미리 저장해 두는 임시 저장소를 뜻합니다. (이제 캐시라는 말에 '자주', '일시적', '고속', '데이터 저장소'를 떠올립시다.) 캐싱이란 캐시를 사용하는 것입니다. 캐시의 주목적은 데이터 검색 성능을 향상시키는 것입니다. 메모리 계층 구조에서 가장 빠른 레벨에 위치한 저장소라고 할 수 있습니다.  캐시는 일..

기타 2024.12.23

동기 vs 비동기 (feat. Blocking vs Non-blocking)

동기는 동시에 일어난다는 뜻입니다. 무엇이 동시에 일어난다는 것일까요? 바로 요청과 결과입니다. 동기란 요청과 그 결과가 동시에 일어난다는 것인데요. 동기 방식으로 동작한다면, 요청을 하면 시간이 얼마가 걸리든지 요청한 자리에서 결과가 주어져야 합니다.  은행 창구를 예로 들 수 있습니다. 은행 접수원은 고객의 요청에 시간이 얼마가 걸리든지 그 자리에서 결과를 줍니다. 전산 처리가 오래 걸릴 것 같다고 다른 고객을 받으며 일하진 않죠.   비동기는 동시에 일어나지 않는다는 뜻입니다. 요청과 결과가 동시에 일어나지 않는다는 것인데요. 요청을 처리하는 시간이 오래 걸린다면 그 시간동안 다른 일을 할 수 있음을 내포하고 있습니다. 예를 들어 '스타벅스'를 보겠습니다. 고객 A와 B가 있습니다. 먼저 A가 샌드..

기타 2024.12.23

JPA 레벨 vs 데이터베이스 레벨 (feat.성능)

JPA는 엔터티를 객체로 다룬다는 장점이 있지만 일부 작업에서 데이터베이스와 직접 상호작용하는 방식에 비해 성능이 떨어질 수 있습니다. 그 이유는 JPA가 데이터베이스 작업을 처리할 때 엔터티 매핑과 관리라는 추가 작업을 수행하기 때문입니다. 주요 차이점JPA 레벨엔터티를 메모리로 가져온 뒤, 각 엔터티에 대해 작업을 수행합니다.데이터베이스와의 작업이 세부적으로 나뉘어질 수 있으며, 네트워크와 메모리 사용량이 증가합니다.특징: 개별적인 SELECT, UPDATE, DELETE 쿼리가 여러 번 실행됩니다.데이터베이스 레벨조건에 따라 데이터베이스가 직접 데이터를 조회하거나 삭제하는 작업을 수행합니다.작업이 데이터베이스 내에서 한 번에 처리되므로 성능이 최적화됩니다.특징: 단일 쿼리로 작업을 수행합니다.   ..

프로젝트 즉시 교환 서비스에서 상태값

메서드교환의 상태등록 물품의 상태제안 물품의 상태교환 생성PENDINGREGISTERING-교환에 대한 제안 생성PENDINGREGISTERINGSUGGESTING제안 수락IN_PROGRESSREGISTERINGACCEPTED교환 완료 -  updateStatusCompleted()COMPLETEDCOMPLETEDCOMPLETED제안 수락 취소 - cancelAcceptanceOfSuggest() PENDINGREGISTERING PENDING 제안 거절PENDINGREGISTERINGPENDING cancelAcceptanceOfSuggest() - 제안 수락 취소: 수락 -> 채팅 후 변심 -> 수락 취소제안 거절 시 : 제안 물품의 상태를 PENDING 으로 변경 + 교환_제안_물품 테이블에서 데이..

기타 2024.12.18