Java 44

Redis를 이용한 접속 대기열 구현 방법

1. 왜 Redis인가?빠른 성능: Redis는 메모리 기반 데이터 저장소이기 때문에 대기열 처리 속도가 매우 빠릅니다.명령어의 다양성: LPUSH, RPOP, BLPOP 등을 사용해 큐(queue) 구조를 손쉽게 구현할 수 있습니다.분산 환경에서 유용: 여러 서버가 동시에 대기열을 공유할 수 있어, 대규모 시스템에서도 적용 가능.📌 구현 시나리오유저가 접속 요청을 하면 Redis의 대기열 리스트에 유저 ID를 넣음 (LPUSH).서버는 일정 간격으로 큐에서 유저를 하나씩 꺼내어 자원을 할당 (RPOP).특정 시간 동안 응답이 없거나 실패하면 다시 큐에 넣을 수 있음 (optional).🗃️ Redis 구조 설계Key 이름예시 설명waiting_queue접속 대기열을 저장하는 리스트allowed_us..

Redis로 캐시 구현하는 방법

웹 서비스에서 자주 조회되는 정적인 데이터를 데이터베이스 없이 빠르게 제공하는 방법 중 하나는 Redis 캐시입니다. 이번 글에서는 Spring Boot와 Redis를 이용해 애플 실리콘 칩셋(M1, M2, M3, M4 등)의 정보를 캐시하는 예제를 실습해보겠습니다.1. 프로젝트 세팅Gradle 의존성 추가dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-redis' implementation 'org.springframework.boot:spring-boot-starter-cache' implementation 'org.springframework.boot:spring-boot-starter-..

자바와 닷넷 비교 - 접근제어자

C#과 Java의 접근 제어자(Access Modifiers)는 비슷한 개념을 가지지만, 일부 차이점이 있습니다. 아래에서 비교해 보겠습니다.🔹 C#과 Java의 접근 제어자 비교 접근 제어자  C# Java  설명 public✅✅어디서든 접근 가능private✅✅같은 클래스 내에서만 접근 가능protected✅✅같은 클래스 + 하위 클래스에서 접근 가능 (Java는 같은 패키지에서도 가능)internal✅❌같은 어셈블리(프로젝트) 내에서만 접근 가능package-private (default)❌✅같은 패키지 내에서만 접근 가능 (default 접근 제어자)protected internal✅❌같은 어셈블리 또는 하위 클래스에서 접근 가능private protected✅❌같은 어셈블리 내의 하위 클..

프로그래밍 2025.03.02

자바와 닷넷 비교 - 생성자

C#과 Java에서 생성자(Constructor)는 객체를 초기화하는 역할을 합니다. 기본적인 개념은 비슷하지만, 문법과 일부 기능에서 차이가 있습니다. 주요 차이점을 비교해 보겠습니다.1. 기본 생성자 (Default Constructor)C#과 Java 모두 기본 생성자를 명시적으로 선언하지 않으면, 매개변수가 없는 기본 생성자가 자동으로 제공됩니다.C#public class Person{ public string Name { get; set; } // 기본 생성자 public Person() { Name = "Unknown"; }}Javapublic class Person { private String name; // 기본 생성자 public ..

프로그래밍 2025.03.02

자바와 닷넷 비교 - static

C#과 Java에서 static 키워드는 거의 동일한 개념을 가지지만, 몇 가지 중요한 차이점이 있습니다.1. static의 기본 개념C#과 Java 모두 static 키워드를 사용하여 클래스 수준에서 접근할 수 있는 멤버(변수, 메서드, 클래스)를 정의합니다.즉, static 멤버는 인스턴스 없이 클래스 자체에서 접근할 수 있습니다.2. static 변수 (클래스 변수)C#class Example{ public static int count = 0; public Example() { count++; }}Console.WriteLine(Example.count); // 0Example ex1 = new Example();Example ex2 = new Example();..

프로그래밍 2025.03.02

자바와 닷넷 비교 - final과 sealed, final과 readonly and const

C#과 Java에서 각각의 키워드인 final, sealed, readonly, const의 차이점을 비교해 보겠습니다.1. final (Java) vs sealed (C#)Java의 final과 C#의 sealed는 클래스 상속 및 메서드 재정의 방지와 관련이 있습니다.기능Java (final)C# (sealed)클래스 제한final class는 상속 불가능sealed class는 상속 불가능메서드 제한final 메서드는 오버라이드 불가능sealed는 override된 메서드만 사용 가능 (sealed override)변수 제한final 필드는 한 번 할당 후 변경 불가sealed는 변수에 사용 불가예제Java (final)final class FinalClass {} // 이 클래스는 상속 불가능cl..

프로그래밍 2025.03.02

자바와 닷넷 문자열 비교

자바(Java)와 닷넷(.NET)의 문자열 비교 방식에는 몇 가지 차이점이 있습니다. 주요 차이점과 각각의 문자열 비교 방법을 살펴보겠습니다.1. 기본 비교 방식🔹 JavaJava에서 String은 불변(Immutable) 객체입니다.문자열 비교에는 == 연산자와 .equals() 메서드가 사용됩니다.String str1 = "hello";String str2 = "hello";String str3 = new String("hello");System.out.println(str1 == str2); // true (같은 String Pool 참조)System.out.println(str1 == str3); // false (new String()으로 생성 -> 다른 객체)System.o..

프로그래밍 2025.03.02

자바와 닷넷 리플렉션 비교

자바(Java)와 닷넷(.NET)의 Reflection(리플렉션) 기능을 비교해보겠습니다.리플렉션은 클래스, 메서드, 필드 등의 메타데이터를 런타임에 동적으로 조회하고 조작하는 기능을 제공합니다.1. 주요 차이점 비교 항목  Java (Reflection API) .NET (System.Reflection) 네임스페이스java.lang.reflectSystem.Reflection클래스 정보 조회Class 사용Type 사용메서드 호출Method.invoke()MethodInfo.Invoke()필드 값 변경Field.set()FieldInfo.SetValue()생성자 호출Constructor.newInstance()ConstructorInfo.Invoke()성능일반 호출보다 느림 (JVM 최적화 가능)..

프로그래밍 2025.03.02

자바와 닷넷 비교 - ENUM

자바(Java)와 닷넷(.NET)에서 enum(열거형) 사용법을 비교하면 다음과 같은 차이점이 있습니다.1. 기본 선언 방식Javapublic enum Color { RED, GREEN, BLUE}C# (.NET)public enum Color{ Red, Green, Blue} ✅ 차이점Java에서는 enum 값이 UPPER_CASE로 쓰이는 것이 일반적이고, .NET에서는 PascalCase를 주로 사용합니다.Java에서는 ; 없이 나열 가능하지만, .NET에서는 각 요소 끝에 ,를 붙입니다.2. Enum 값에 특정 값 할당Javapublic enum Color { RED(1), GREEN(2), BLUE(3); private final int value; Colo..

프로그래밍 2025.03.02

자바와 닷넷 날짜 함수 비교

1. 현재 날짜 및 시간 가져오기 기능  Java (Java 8 이상)  .NET (C#) 현재 날짜 및 시간LocalDateTime.now()DateTime.Now현재 날짜LocalDate.now()DateTime.Today현재 UTC 날짜 및 시간Instant.now()DateTime.UtcNow2. 날짜 포맷팅 (문자열 변환)기능 Java .NET (C#)날짜를 문자열로 변환DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now())DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")문자열을 날짜로 변환LocalDate.parse("2025-03-02", DateTimeFormatter.o..

프로그래밍 2025.03.02