본문 바로가기

Java & Kotlin

(12)
Socket 통신 1. Socket 통신이란 무엇인가?Socket은 네트워크 프로그래밍에서 가장 기본적이고 중요한 개념 중 하나입니다. 다양한 네트워크 애플리케이션(채팅, 실시간 게임, 파일 전송 등)을 개발하려면 클라이언트-서버 간 통신이 필수적입니다. 이때 Socket은 데이터를 주고받는 양 끝단의 연결점을 의미합니다. 2. Socket 통신의 기본 개념2.1. Socket이란?Socket은 네트워크 상의 두 호스트 간 통신을 위한 인터페이스입니다.주로 TCP/IP 또는 UDP 프로토콜 위에서 데이터를 주고받을 때 사용됩니다. 2.2. TCP와 UDP의 차이구분TCPUDP프로토콜 타입연결형(Connection-oriented)비연결형(Connectionless)신뢰성데이터 무결성 및 순서 보장신뢰성 보장 안 함속도느림..
Java ThreadPoolExecutor 예외 처리와 Exception Handler ThreadPoolExecutor의 예외처리와 Exception을 어떤식으로 핸들링 해야 하는지, 그리고 JDK에서는 어떤 설정을 기본으로 가져가는지 알아보겠습니다. 알아보기에 앞서 ThreadPoolExecutor에 대한 사용법부터 간단하게 알아보겠습니다.1. 기본 사용 방법ThreadPoolExecutor executor = new ThreadPoolExecutor(30, 60, 60, TimeUnit.SECONDS , new LinkedBlockingQueue(1000), new ThreadPoolExecutor.AbortPolicy()); executor.execute(runnable);executor.submit(callable); 각 파라미터에 대한 설명1(core) : 코어 쓰레드는 3..
Java Thread로 직접 구현하는 커스텀 쓰레드 풀: 기본 원리부터 동작까지 오늘은 Java의 Thread 객체만을 이용해 직접 Executors 클래스의 쓰레드 풀을 구현하는 방법에 대해 소개하겠습니다. Java에서는 Executors 클래스를 사용해 쉽게 쓰레드 풀을 만들 수 있지만, 내부적으로 어떻게 작동하는지 이해하면 더 유연하고 자신만의 커스텀 쓰레드 풀을 설계할 수 있습니다. 이번 글에서는 Thread와 BlockingQueue를 이용해 최소한의 쓰레드 풀을 구현하고, 이를 통해 기본적인 원리를 설명해보겠습니다. 코드는 GitHub에서 확인하실 수 있습니다: https://github.com/youseonghyeon/threadpool 요구 사항구현하려는 Thread Pool의 주요 기능은 다음과 같습니다: 최소 쓰레드 개수 설정: 항상 일정한 최소 개수의 쓰레드가 살..
Kotlin으로 TTL 기반 Map 구현하기: Java 21 가상 쓰레드와 ConcurrentHashMap 최적화 Redis를 사용할 때 유용한 기능인 시간이 지나면 데이터가 지워지는 기능이 있습니다. 이것을 Kotlin에서 사용해보면 좋을 것 같아 구현해보겠습니다. Redis의 TTL(Time To Live) 기능은 데이터가 일정 시간이 지나면 자동으로 삭제되는 매우 유용한 기능입니다. 이 기능을 활용하면 일정 시간 동안만 유효한 데이터를 관리할 수 있어 리소스 효율성을 극대화할 수 있습니다. Redis 대신 Kotlin에서 직접 이러한 TTL 기능을 구현해보면, 기존 Map처럼 동작하면서도 시간 기반 데이터 관리가 필요한 상황에서 유용하게 사용할 수 있습니다. 요구사항기능은 기존 Map과 동일하게 동작해야 합니다.TTL 시간을 생성자로 주입합니다.시간이 지나면 key, Value가 제거됩니다. 구글이 제작한 라이..
Java Checked vs Unchecked Exception: 예외 처리의 원칙과 트랜잭션 롤백 Checked Exception과 Unchecked Exception에 대한 이해Java에서 예외 처리(Exception Handling)는 매우 중요한 요소입니다.저는 아키텍처 설계에서 가장 중요하다고 생각되는게 Exception 처리라고 생각합니다. 예외는 프로그램 실행 중에 발생할 수 있는 비정상적인 상황을 나타내며, 이 예외를 적절히 처리하지 않으면 프로그램이 예기치 않게 종료될 수 있습니다.Java에서는 예외를 두 가지 유형으로 나눌 수 있는데, 바로 Checked Exception과 Unchecked Exception입니다. 이번 글에서는 두 가지 예외의 차이점과 사용 사례, 그리고 언제 어떤 예외를 사용하는 것이 적절한지에 대해 알아보겠습니다. Checked Exception이란Checked..
Java 불변 객체(Immutable Object) 와 장단점 불변 객체(Immutable Object)는 한 번 생성되면 그 상태가 변하지 않는 객체를 의미합니다. 자바에서 가장 흔히 사용되는 불변 객체의 예로는 String 클래스가 있습니다. 이 글에서는 String 클래스를 통해 불변 객체의 개념을 살펴보고, 불변성의 장점과 단점에 대해 논의해 보겠습니다. String 클래스: 불변 객체의 대표적인 예 String 클래스의 인스턴스는 불변 객체입니다. 즉, 한 번 생성된 String 객체의 내부 상태(저장된 문자열)는 변경할 수 없습니다. 예제를 통해 이를 확인해 보겠습니다.String text = "abc";text = text + "def";System.out.println(text); // 출력 결과: "abcdef"  이 코드에서 text 변수는 처음에..
자바의 Garbage Collection 이해와 성능 최적화 방법 1. Garbage Collection이란?Garbage Collection(GC)는 동적으로 할당된 메모리 중 필요하지 않은 부분을 해제하는 JVM의 기능입니다.더 이상 사용하지 않는 객체의 메모리 자원을 해제하여 메모리의 여유 공간을 만들게 됩니다.객체는 메모리 중 힙 영역에 할당되고, 할당된 객체 즉, 인스턴스가 더 이상 참조되지 않는다면 garbage로 간주되며, 이를 수집하여 메모리를 해제하는 역할이 바로 GC의 역할입니다.이와 같은 자동 메모리 관리는 프로그래머의 부담을 줄이고, 메모리 누수나 불필요한 메모리 사용 등의 문제를 방지하는데 큰 도움이 됩니다.2. GC의 동작 원리GC의 기본적인 동작 원리는 'Mark and Sweep' 알고리즘에 기반합니다. Mark 단계에서는 Root로부터 시..
Lock과 Double Check Lock: 동시성 문제 해결을 위한 효율적 패턴 Lock을 사용하는 이유는 여러 Thread가 하나의 메서드에 동시 접근했을 때 발생할 수 있는 동시성 문제를 해결하기 위해 사용합니다. 예를 들어 private int count = 0; public void addCount() { count = count + 1; }이러한 로직이 있으며 아래 순서대로 쓰레드 2개가 해당 메서드를 호출합니다.[Thread-1] A 쓰레드가 addCount()에 접근하여 count:0 에 1을 더합니다.[Thread-2] B 쓰레드가 addCount()에 접근하여 count:0 에 1을 더합니다.[Thread-1] A 쓰레드가 0+1 의 결과값인 1을 count에 입력합니다.[Thread-2] B 쓰레드가 0+1 의 결과값인 1을 count에..