전체 글 90

DB와 WAS 간 TCP 통신: 효율적인 커넥션 관리와 흐름, 혼잡 제어

DB와 WAS 서버 간의 통신을 위한 TCP 통신 과정DB 드라이버를 통해 TCP/IP  커넥션을 연결 후 ID ,PW 등을 DB 서버로 보내 내부 인증을 완료하면 생성된 커넥션 객체를 응답받을 수 있다.  초기 TCP/IP 연결 과정(DB 커넥션 풀이 필요한 이유) 초기에 TCP/IP 로 연결하는 과정에서 3 way handshake 로 초기 연결을 하는 과정에서 시간이 많이 걸린다.때문에 DB 호출시 커넥션을 맺게되면 쿼리하는 비용보다 커넥션을 맺는 비용이 더 클수 있다.때문에 TCP/IP 로 DB 와 WAS 서버가 연결된 커넥션들을 커넥션 풀에 미리 생성을 해놓고 애플리케이션 로직은 언제든지 커넥션 풀에 이미 생성되어있는 커넥션 객체 참조를 가져다 쓴다. TCP 커넥션을 맺는 비용은 왜 비쌀까?연결..

CS 2025.01.12

Runnable과 Callable

Runnable과 Callable의 차이점은 무엇이고 왜 쓰일까?둘 다 스레드를 만들 때 사용된다. 즉 스레드를 만들어 실행시킨다는 의미는 비동기적으로 실행시킨다는 의미이다. 비동기적으로 실행해야 하는 작업에 대해서 반환값을 받아야 할 때는 Callable 를 쓰고 그 결과를 무시해도 될 때는 Runnable를 사용한다. Thread는 비동기적으로 실행해야 하는 작업이 있을 때 쓰인다.기존 Runnable 은 반환값이 없고 체크 예외를 던질 수 없다는 불편함이 있었다.public interface Runnable { void run();}Runnable  의 run()  은 반환 타입이 void이다. 따라서 값을 반환할 수 없다.예외가 선업되어 있지 않다.  따라서 해당 인터페이스를 구현하는 모든 메서..

JAVA 2025.01.12

트랜잭션 - 이해

데이터를 저장할 때 단순히 파일에 저장해도 되는데, 데이터베이스에 저장하는 이유는 무엇일까?여러 가지 이유가 있지만 , 가장 대표적인 이유는 바로 데이터베이스는 트랜잭션이라는 개념을 지원하기 때문이다. 트랜잭션의 정의트랜잭션이란? 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 연산들을 의미합니다. 이러한 관점에서 데이터베이스 응용프로그램은 트랜잭션의 집합으로 정의할 수 있습니다. 트랜잭션의 필요성트랜잭션은 작업의 완정성을 보장해주는 것입니다.논리적인 작업들을 모두 완벽하게 처리하거나 또는 처리하지 못할 경우 이전 상태로 복구하여 작업의 일부만 적용되는 현상이 발생하지 않게 만들어주는 기능입니다.  트랜잭션 ACID트랜잭션은 ACID 라 ..

DB 2025.01.12

커넥션풀과 데이터소스 이해

커넥션 풀 이해데이터베이스 커넥션을 매번 획득 데이터베이스 커넥션을 획득할 때는 다음과 같은 복잡한 과정을 거친다.1. 애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회한다.2. DB 드라이버는 DB와 TCP/IP 커넥션을 연결한다. 물론 이 과정에서 3 way handshake 같은 TCP /IP 연결을 위한 네트워크 동작이 발생한다.3. DB 드라이버는 TCP / IP 커넥션이 연결되면 ID, PW와 기타 부가 정보를 DB에 전달한다.4. DB 는 ID, PW를 통해 내부 인증을 완료하고 , 내부에 DB 세션을 생성한다.5. DB 는 커넥션 생성이 완료되었다는 응답을 보낸다.6. DB 드라이버는 커넥션 생성이 완료되었다는 응답을 보낸다. 이렇게 커넥션을 새로 만드는 것은 과정도 복잡하고 시..

DB 2025.01.11

JDBC 이해

JDBC 등장 이유애플리케이션을 개발할 때 중요한 데이터는 대부분 데이터베이스에 보관한다.    클라이언트가 애플리케이션 서버를 통해 데이터를 저장하거나 조회하면, 애플리케이션 서버는 다음 과정을 통해서 데이터 베이스를 사용한다. 애플리케이션 서버와 DB -  일반적인 사용법  1. 커넥션 연결 : 주로  TCP/IP를 사용해서 커넥션을 연결한다.2. SQL 전달 : 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 연결된 커넥션을 통해 DB에 전달한다.3. 결과 응답 : DB 는 전달된 SQL을 수행하고  그 결과를 응답한다. 애플리케이션 서버는 응답 결과를 활용한다.  애플리케이션 서버와 DB -  DB 변경  문제는 각각의 데이터베이스마다 커넥션을 연결하는 방법, SQL을 전달하는 방법, 그리고 ..

DB 2025.01.10

ReentrantLock

ReentrantLock - 이론 자바는 1.0부터 존재한 synchronized와 BLOCKED 상태를 통한 임계 영역 관리의 한계를 극복하기 위해 자바 1.5부터 Lock 인터페이스와 ReentrantLock 구현체를 제공한다. synchronized 단점 무한 대기 : BLOCKED 상태의 스레드는 락이 풀릴 때까지 무한 대기한다.특정 시간까지만 대기하는 타임아웃 X 중간에 인터럽트 X공정성 : 락이 돌아왔을 때 ` BLOCKED ` 상태의 여러 스레드 중에 어떤 스레드가 락을 획득할지 알 수 없다. 최악의 경우 특정 스레드가 너무 오랜 기간 락을 획득하지 못할 수 있다.  package java.util.concurrent.locks; public interface Lock { void l..

JAVA 2025.01.07

Java에서의 지연 초기화,지연 평가 Optional 활용: orElse vs orElseGet

지연 평가는 언제 사용할까?Optional 케이스에서  orElseGet() 인 경우에는 Optinal.empty() 일때만 평가를 하지때문에 평가하는데 비용이 크거나,empty 가 아닐때 평가를 안해도 되는 비용들을 좀 줄여야하는 필요가 있을때  orElseGet을 써서 지연평가로 해당 부분을 해결한다. 핵심: orElseGet을 통해 평가 비용이 큰 연산을 지연시키고, 필요할 때만 실행하는 방식이 지연 평가의 본질이다. 이를 통해 성능을 최적화할 수 있다. 지연 초기화는 객체나 리소스의 초기화 시점을 지연시키는 것이고지연 평가는 연산 시점을 지연시킨다. 둘다 성능 최적화라는 공통점이 있다. Supplier 의 내부 람다식이 언제 평가(실행)될까?import java.util.function.Suppl..

JAVA 2025.01.06

고급 동기화 - concurrent.Lock

LockSupport1` synchronized` 는 자바 1.0부터 제공되는 매우 편리한 기능이지만, 다음과 같은 한계가 있다. synchronized의 단점 무한 대기 : BLOCKED 상태의 스레드는 락을 풀릴 때까지 무한 대기한다.특정 시간까지만 대기하는 타임 아웃 X중간에 인터럽트 X공정성 : 락이 돌아왔을 때 BLOCKED 상태의 여러 스레드 중에 어떤 스레드가 락을 획득할지 알 수 없다. 최악의 경우 특정 스레드가 너무 오랜 기간 락을 획득하지 못할 수 있다.  자바 1.5부터 ` java.util.concurrent` 라는 동시성 문제 해결을 위한 라이브러리 패키지가 추가된다.이 라이브러리에는 수 많은 클래스가 있지만, 가장 기본이 되는 ` LockSupport` 에 대해서 먼저 알아보자...

JAVA 2025.01.05

생산자 소비자 문제1

생산자 소비자 문제 - 소개 생산자 소비자 문제는 멀티스레드 프로그래밍에서 자주 등장하는 동시성 문제 중  하나로, 여러  스레드가 동시에 데이터를 생성하고 소비하는 상황을 다룬다. 멀티스레드의 핵심을 제대로 이해하려면 반드시 생산자 소비자 문제를 이해하고, 올바른 해결방안도 함께 알아두어야 한다.생산자 소비자 문제를 제대로 이해하면 멀티스레드를 제대로 이해했다고 볼 수 있다. 그만큼 중요한  내용이다. 프린터 예제 그림  기본 개념 생산자(Producer) 데이터를 생성하거나 작업을 요청하는 역할. 예를 들어, 파일에서 데이터를 읽어 오거나 네트워크에서 데이터를 받아오는 스레드가 생산자 역할을 할 수 있다프린터 예제에서 사용자의 입력을 프린터 큐에 전달하는 스레드가 생산자의 역할이다.소비자(Consum..

JAVA 2024.12.31