분류 전체보기 238

Redis의 Sorted Set이 조회 횟수를 저장하는 원리 (검색 순위)

Redis의 Sorted Set은 각 요소에 점수(score)라는 부가 정보를 포함해, 점수를 기준으로 정렬된 상태로 저장하는 데이터 구조이다.조회 횟수를 저장하거나 관리할 때 이 점수를 활용할 수 있다.Sorted Set의 기본 구조Key: Sorted Set의 이름.Member: 저장된 요소 (예: 특정 페이지 ID, 사용자 ID).Score: 숫자 값으로, 정렬 및 계산에 사용됨.Redis의 Sorted Set은 내부적으로 skip list라는 자료 구조를 사용하여 효율적으로 데이터를 삽입, 삭제, 조회, 정렬한다.조회 횟수 저장 원리조회 횟수를 점수로 사용조회된 항목(예: 페이지 ID 또는 특정 데이터의 키)을 Member로 추가한다.조회 횟수를 Score로 사용한다.예: 페이지 page1이 5..

기타 2025.01.12

리플렉션

리플렉션은 실행 중인 자바 프로그램이 자체적으로 검사하고 자신의 구조와 동작을 수정할 수 있게 해주는 기능이다.  컴파일 타임:클래스들의 메타데이터(클래스 정보, 메서드, 필드 등)를 수집이 정보들이 클래스로더에 의해 로드됨런타임:프로그램 실행 중에 동적으로 클래스의 정보를 검사하고 조작 가능클래스 이름이나 메서드 이름으로 해당 객체나 메서드를 찾아서 사용 가능심지어 private 멤버에도 접근 가능1. 클래스의 정보 접근:Class clazz = Class.forName("com.example.MyClass"); 2. 필드 정보 접근 및 조작 Field[] fields = clazz.getDeclaredFields();Field field = clazz.getDeclaredField("fieldName..

Java 2025.01.12

리플렉션 3

그렇다면 리플렉션의 원리는? 대충 컴파일하면 클래스의 구조를 메모리에 올리고 올린 객체를 바탕으로 비유하자면 지도(메타데이터)를 싸악 짜는데 이 지도로 네비게이션이 만들어지고 이 네비게이션은 어떤 위치에 뭐가 있는지는 모르지만 어디로 가고 싶다라고 말하면 거기에 있는 걸 뱉어내거나 복사할 수 있는 놈이다. 이런 건가 완벽해! 네 비유가 정말 찰떡이야! 👏👏👏리플렉션을 비유하자면 딱 이렇게 정리할 수 있어:리플렉션 = 클래스 지도 + 동적 네비게이션클래스의 구조를 메모리에 올린다자바가 컴파일할 때 클래스의 정보(필드, 메서드, 생성자, 접근 제한자 등)를 .class 파일에 저장하고, 이 정보를 JVM이 메모리에 로드.메모리에 올라간 클래스 정보는 지도로 비유할 수 있어. "이 클래스에는 뭐가 들어있..

GPT Archiving 2025.01.11

리플렉션 2

이해가 하나도 안되는데빈에 올리면클래스가 뭐든 간에 일단 빈에 올라간 놈들의 메서드는 싹 다 테이블에 올라가있으니까누가 갖고 왔는지 알 바 아니고 음식이 뭔지만 알면 가져와서 한입씩 먹을 수 있다는 거네?가져올 땐 포장돼서 뭔지 모르는데 일단 컴파일 후 파티가 시작되면 뭐가 들었는지 확인하고 사용할 수 있다.또 포장 뜯어볼 수도 있고, 먹을 수도 있고, 그대로 복사할 수도 있다.뭐 대충 이렇게 파티 입장(컴파일), 손님(클래스), 실행 시점(런타임) 비유하자면 너낌은 알겠는데이게 뭐 왜 의존성 주입이나 엔티티 매핑과 연관있는지 모르겠어    아, 이제야 제대로 비유의 방향을 잡을 수 있을 것 같아. 리플렉션이 스프링의 의존성 주입(DI)이나 JPA의 엔티티 매핑과 어떻게 연결되는지를 파티 비유를 더 구체..

GPT Archiving 2025.01.11

리플렉션

스프링의 리플렉션(Reflection)을 쉽게 이해하려면, 리플렉션을 "비밀의 문을 열고 안을 들여다보는 열쇠"에 비유할 수 있어요.비유: 비밀의 상자와 마스터 키비밀의 상자(클래스)어떤 클래스는 내부에 어떤 내용(필드, 메서드, 생성자 등)을 가지고 있는지 잘 모를 수 있어요. 예를 들어, 친구가 만든 상자(클래스)가 있는데, 그 안에 뭐가 들었는지 알려주지 않았다고 상상해 보세요.마스터 키(리플렉션)리플렉션은 이 비밀 상자의 내용을 몰라도, 상자 안을 열어보고, 필요한 것을 꺼내거나 사용할 수 있는 마스터 키와 같아요.즉, 우리가 클래스를 컴파일 시간에 몰라도, 실행 시간에 그 내용을 확인하고 사용할 수 있게 해주는 도구입니다.예시 상황 친구가 준 상자(Class)가 있는데, 그 안에 있는 물건(M..

GPT Archiving 2025.01.11

정규식, test

1. 정규식(RegEx)이란?정규식은 문자열에서 특정 패턴을 찾거나, 검증하거나, 변환하는 데 사용표현식 작성법: /패턴/플래그주요 용도:문자열 검색 (패턴 매칭)문자열 형식 검증 (이메일, IP 주소 등)문자열 치환 (검색 후 변환)2. test란?정규식 객체의 메서드로, 문자열이 정규식과 매칭되는지 여부를 확인결과: true (매칭됨) 또는 false (매칭되지 않음)형식: 정규식.test(문자열)예제:regex = /^hello/; // 'hello'로 시작하는지 확인console.log(regex.test('hello world')); // trueconsole.log(regex.test('world hello')); // falseconst regex = /hello/; // 'hello'라는 ..

JS 2025.01.09

[카프카 입문] 사용 전후 example

데이터는 보통 데이터 받기 -> 추출 -> 변환 -> 로딩과 같은 흐름을 갖는다... 이런 흐름은 데이터를 보내고 받는 각 시스템이 1:1 일 땐 상당히 간단하고 별 거 없지만n:n으로 늘어날 수록 노답이다.. (4:6 이면 24개의 통합이 필요하다...) 각 시스템이 주고받는 데이터는..프로토콜도 다를 수 있고.. (TCP, HTTP, FTP, REST...)데이터포맷도 다를 수 있고.. (Binary, CVS, JSON...)스키마(데이터 shape) 다름 개복잡;;1. 넷플릭스: 영상 보는 동안 실시간 추천 적용💻 카프카 사용 전사용자 데이터 수집: 영화 재생, 일시정지, 종료 데이터를 수집.저장소 저장: 데이터는 로그 파일이나 데이터베이스에 저장.배치 처리: 추천 알고리즘 서버가 정해진 시간(예..

Kafka 2025.01.07

업캐스팅 다운캐스팅

1. 기본 개념업캐스팅(Upcasting): 하위 클래스 객체를 상위 클래스 타입으로 변환. 자동으로 이루어지며, 상위 클래스의 멤버만 사용할 수 있음.다운캐스팅(Downcasting): 상위 클래스 타입의 참조를 하위 클래스 타입으로 변환. 명시적으로 캐스팅해야 하며, 하위 클래스의 고유 멤버를 사용하려는 경우 필요.2. 예상속 관계:class Parent { public String parentField = "Parent Field"; public void parentMethod() { System.out.println("Parent Method"); }}class Child extends Parent { public String childField = "Child ..

Java 2025.01.07

Java - CompletableFuture & addCallBack

CompletableFuture는 Java의 비동기 프로그래밍을 지원하는 클래스입니다. Java 8에서 추가되었으며, 비동기 작업을 처리하고 조합할 수 있는 강력한 API를 제공합니다.1. CompletableFuture란?Java의 java.util.concurrent 패키지에 포함된 클래스.비동기적으로 작업을 수행하고, 그 결과를 처리하거나 다른 작업과 연결할 수 있도록 설계된 Future의 확장 버전.기존의 Future와 비교하여 더 유연하고 강력하며, 특히 비동기 작업을 쉽게 연결할 수 있습니다.2. CompletableFuture의 주요 특징비동기 작업 수행:특정 작업을 비동기적으로 실행하고 결과를 반환합니다.결과를 기다리지 않고 다른 작업을 계속 진행할 수 있습니다.작업 조합:여러 Comple..

GPT Archiving 2025.01.06