Java & Spring Boot 14

[Java] 스레드 구성 방식

두 코드 모두 결과는 동일하지만, Runnable 인터페이스 방식은 더 유연하고 재사용 가능한 구현이 가능하다.// Thread 클래스 확장 방식public class Main { public static void main(String [] args) { Thread thread = new TaskThread1(); thread.start(); } public static class TaskThread1 extends Thread { @Override public void run() { System.out.println("Hello from new thread"); } }}// Runnable 인터페이스 구현 방식public clas..

Java & Spring Boot 2024.11.24

[Java] 멀티스레딩 연습 - 금고, 해커, 경찰 게임 구현

프로그램 개요이 프로그램은 다음과 같은 역할을 가진 세개의 스레드로 구성됩니다.  구성1. 금고 (Vault)임의의 비밀번호를 가지고 있으며, 해커가 추측한 비밀번호를 검증 2. 해커 스레드 (HackerThread)금고의 비밀번호를 추측하는 스레드오름차순(AscendingHackerThread)과 내림차순(DescendingHackerThread)으로 비밀번호를 추측. 3. 경찰 스레드 (PoliceThread)해커를 막으려는 역할10초 동안 카운트다운을 하며, 시간이 다 되면 프로그램 종료 실행 흐름 1. Vault 객체 생성임의의 비밀번호를 가진 금고 생성 2. 해커 및 경찰 스레드 생성오름차순 해커(AscendingHackerThread), 내림차순 해커(DescendingHackerThread)..

Java & Spring Boot 2024.11.24

[Java] Thread와 Runnable 활용 및 예외 처리

Thread 클래스와 Runnable 인터페이스Thread 클래스Runnable 인터페이스를 구현하고 있으며, 스레드 실행 흐름 제어 및 관련 메서드 제공주요 메서드스레드 시작 (start())스레드 일시 중지 (sleep())스레드 종료 (interrupt())스레드 이름 설정 (setName())스레드 우선순위 관리 (setPriority())Runnable 인터페이스스레드에서 실행할 작업을 정의하기 위한 인터페이스단 하나의 메서드인 run() 포함 스레드 생성 예제Java에서 스레드 생성 후 .start() 실행 시, JVM이 새 스레드를 생성해 운영체제에게 전달한다.아래 예제 코드에서 스레드 생성, 이름/우선순위 설정, 병렬 실행 확인을 위한 테스트를 진행했다.package thread.creat..

Java & Spring Boot 2024.11.24

[Java] Multithreading 기본 개념 - 응답 속도 & 성능 향상 이해하기

멀티스레딩이 필요한 이유1. 응답성 향상사용자 요청을 개별 스레드로 처리해 대기 시간을 줄임동영상 재생, 버튼 클릭 등 다양한 작업을 동시에 처리해 반응 속도 개선2. 성능 최적화병행성을 통해 단일 코어에서 여러 작업을 동시에 처리하는 효과병렬 처리를 활용하면 실제로 여러 작업을 동시에 수행 가능적은 하드웨어로도 높은 처리량을 구현, 비용 절감 효과 멀티스레드의 기본 개념프로세스 : 운영체제에서 실행되는 독립적인 어플리케이션스레드 : 프로세스 내에서 실행되는 작업 단위각 스레드는 개별 스택(Stack)과 명령어 포인터(Instruction Pointer)를 가짐스택(Stack)각 스레드의 메모리 영역으로, 지역 변수와 함수 호출 정보를 저장스레드가 수행하는 작업의 상태와 컨텍스트를 유지하는데 사용예를 들..

Java & Spring Boot 2024.11.23

[Spring Boot] 다중 데이터베이스 + JPA 환경에서의 트랜잭션 관리에 대하여

개요Spring Boot 애플리케이션에서 다중 데이터베이스 환경(Primary, Replication DB 여러대)을 운영하면서 스케줄러를 통해 데이터를 INSERT, UPDATE, DELETE하는 과정에서 실제 데이터베이스에 변경사항이 반영되지 않는 문제를 경험했습니다. 이는 트랜잭션 관리 방식의 차이에서 기인한 문제일 수 있습니다.해당 포스트에서는 제가 주로 사용한 두 가지 트랜잭션 관리자 DataSourceTransactionManager와 JpaTransactionManager에 대해 비교해보고 어떻게 위 문제를 해결했는지 기록합니다.  트랜잭션 관리자 비교DataSourceTransactionManager- 이 트랜잭션 관리자는 주로 JDBC API를 사용할 때 적합하며, 각 트랜잭션은 단일 데..

Java & Spring Boot 2024.05.08

[Java] Generic 동작 원리 및 용도

해당 포스트는 JAVA의 Generic에 대한 동작 원리와 용도에 대한 내용을 포함하고 있습니다.  Java에서 제네릭(Generic)은 다양한 타입의 객체를 다루는 메소드나 컬렉션 클래스에 타입 체크와 타입 캐스팅을 컴파일 시간에 처리할 수 있게 도와주는 프로그래밍 기법입니다. 제네릭을 사용하면 코드의 재사용성을 높이고, 타입 안정성을 강화할 수 있습니다. 제네릭의 동작 원리와 용도에 대해 쉽게 설명해 보겠습니다. 동작 원리제네릭을 사용하면 클래스, 인터페이스, 메소드를 정의할 때 타입(Type)을 파라미터로 사용할 수 있습니다. 이 타입 파라미터는 실제 클래스 타입이 사용될 때까지 구체적인 타입을 지정하지 않고, 코드 작성 시점에는 추상적인 '타입 변수'로서 사용됩니다. 컴파일 시, 컴파일러는 이 타..

Java & Spring Boot 2024.02.12

[Java] .stream() 동작 원리 및 용도

해당 포스트는 JAVA의 .stream()에 대한 동작 원리와 용도에 대한 내용을 포함하고 있습니다..stream()을 자주 사용하지만 해당 메소드의 동작 원리에 대한 막연한 궁금증이 생겨 글을 작성하게되었습니다.  동작 원리1. 스트림 생성 : 스트림은 Collection 인터페이스의 stream() 메소드 호출, Arrays.stream(T array), 또는 Stream 인터페이스의 of(), generate(), iterate() 등의 메소드를 통해 생성됩니다. 스트림 생성 시 데이터 소스는 변경되지 않으며, 데이터의 추상적인 뷰만을 제공합니다.2. 중간 연산(Intermediate Operations) : 필터링(filtering), 매핑(mapping), 정렬(sorting) 등 데이터 스트림..

Java & Spring Boot 2024.02.12