분류 전체보기 38

스프링 프레임워크 스레드 풀

스프링 프레임워크에서도 스레드 풀을 사용할 수 있습니다. 스프링에서는 비동기 처리를 위해 @Async 어노테이션과 TaskExecutor 인터페이스를 제공하여 스레드 풀을 쉽게 활용할 수 있도록 지원합니다. 다음은 스프링에서 스레드 풀을 사용하는 방법에 대한 설명입니다.1. @Async 어노테이션비동기 메서드: @Async 어노테이션을 사용하여 비동기적으로 실행할 메서드를 정의할 수 있습니다. 이 메서드는 별도의 스레드에서 실행되며, 호출한 스레드는 즉시 다음 작업으로 진행할 수 있습니다.javaimport org.springframework.scheduling.annotation.Async;import org.springframework.stereotype.Service;@Servicepublic cl..

카테고리 없음 2024.07.24

executorservice 사용 예시

for (int i = 0; i { System.out.println("작업 " + taskId + " 시작"); try { Thread.sleep(2000); // 2초 대기 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("작업 " + taskId + " 완료"); });}비동기 처리ExecutorService 사용:executor.submit(() -> {...})를 사용하여 작업을 제출하고 있습니다. ExecutorService는 비동기적으로 작업을 실행할 수 있는 기능을 제공합니다. 제출된 작업은 스..

카테고리 없음 2024.07.24

메인 스레드 와 서브 스레드

public class SyncToAsync {public static void main(String[] args) {Runnable task = () -> {// 동기적으로 수행할 작업System.out.println("작업 시작");try {Thread.sleep(2000); // 2초 대기} catch (InterruptedException e) {e.printStackTrace();}System.out.println("작업 완료");};// 새로운 스레드에서 작업 실행Thread thread = new Thread(task);thread.start();// 메인 스레드는 다른 작업을 계속 수행할 수 있음System.out.println("메인 스레드에서 다른 작업 수행");}} 메인 스레드와 서브..

카테고리 없음 2024.07.24

스레드 풀 관련 의문점

Thread thread = new Thread(task);는 task를 스레드 풀에 넣는 것이 아닙니다. 이 코드의 의미를 좀 더 자세히 설명드리겠습니다.설명새 스레드 생성:new Thread(task)는 task를 실행하기 위한 새로운 스레드를 생성합니다. 여기서 task는 Runnable 인터페이스를 구현한 객체여야 합니다. 이 객체의 run() 메서드가 스레드에서 실행됩니다.javaRunnable task = new MyTask(); // MyTask는 Runnable을 구현한 클래스Thread thread = new Thread(task); // 새로운 스레드 생성스레드 풀 아님:위의 코드에서는 스레드 풀에 작업을 추가하지 않고, 단순히 새로운 스레드를 생성합니다. 생성된 스레드는 start()..

카테고리 없음 2024.07.24

new string , 리터럴 의 차이

String 리터럴과 new String()의 차이는 주로 메모리 저장 방식에 있습니다. 이 두 가지 방식에 대해 자세히 설명드리겠습니다.1. String 리터럴정의: 문자열을 직접 코드에 작성하는 방식입니다. 예를 들어, "Hello"와 같은 형태입니다.저장 위치: 리터럴은 **문자열 풀(String Pool)**에 저장됩니다. 문자열 풀은 JVM에서 관리하는 특별한 메모리 영역으로, 동일한 문자열 리터럴이 여러 번 사용될 경우, 같은 인스턴스를 재사용합니다.예시:javaString str1 = "Hello";String str2 = "Hello";// str1과 str2는 같은 객체를 참조합니다.2. new String()정의: new String("Hello")와 같이 String 객체를 생성하는 ..

카테고리 없음 2024.07.24

스레드 풀

스레드 풀의 작동 원리스레드 풀 생성: 스레드 풀을 생성하면, 미리 정해진 수의 스레드가 생성되어 대기 상태에 놓입니다. 이 스레드들은 작업을 수행할 준비가 된 상태입니다.작업 제출: 작업을 스레드 풀에 제출하면, 사용 가능한 스레드 중 하나가 해당 작업을 수행합니다. 만약 모든 스레드가 바쁘면, 새로운 작업은 대기열에 쌓이게 됩니다.작업 완료 후 재사용: 작업이 완료된 후, 해당 스레드는 종료되지 않고 다시 대기 상태로 돌아갑니다. 이 스레드는 다음 작업을 수행하기 위해 재사용됩니다. 즉, 스레드 풀 내의 스레드는 작업을 완료한 후 다시 풀에 들어가는 것이 아니라, 대기 상태로 남아 있으며 다음 작업을 받을 준비를 합니다.스레드의 생명주기작업 시작: 스레드가 작업을 수행하기 시작합니다.작업 완료: 작업..

카테고리 없음 2024.07.23

카프카 면접질문

. Kafka란 무엇인가요?Apache Kafka는 고성능의 분산 메시징 시스템으로, 실시간 데이터 스트리밍을 위해 설계되었습니다. 이벤트 기반 아키텍처를 사용하여 대량의 데이터를 처리하고, 여러 시스템 간의 데이터 통신을 지원합니다.2. Kafka의 주요 구성 요소는 무엇인가요?주요 구성 요소는 다음과 같습니다:브로커(Broker): 메시지를 저장하고 관리하는 서버.주제(Topic): 메시지가 저장되는 카테고리.파티션(Partition): 주제를 나누는 단위로, 병렬 처리를 가능하게 함.프로듀서(Producer): 메시지를 주제에 게시하는 애플리케이션.컨슈머(Consumer): 주제에서 메시지를 읽어오는 애플리케이션.3. 주제(Topic)와 파티션(Partition)의 차이는 무엇인가요?주제는 메시지를..

카테고리 없음 2024.07.19

extend, implement 차이

인터페이스의 implements와 클래스의 extends는 각각 다른 목적과 의미를 가지고 있습니다. 둘 다 클래스에 기능을 추가하거나 클래스를 확장하는 방법이지만, 차이점이 있습니다.1. extends (상속)extends 키워드는 한 클래스가 다른 클래스를 상속할 때 사용됩니다. 상속을 통해 자식 클래스는 부모 클래스의 모든 필드와 메서드를 물려받습니다. 자식 클래스는 부모 클래스의 기능을 재사용하고, 필요에 따라 추가하거나 재정의할 수 있습니다.예시:javaclass Parent { void show() { System.out.println("Parent class"); }}class Child extends Parent { void display() { S..

카테고리 없음 2024.07.01

querydsl 을 이용한 비관적 lock

QueryDSL을 사용하여 비관적 락(Pessimistic Lock)을 적용할 수 있습니다. 비관적 락을 사용하면 데이터베이스 수준에서 행(row) 단위의 락을 걸어 다른 트랜잭션이 해당 행을 수정하지 못하게 합니다. JPA에서는 비관적 락을 사용하기 위해 LockModeType.PESSIMISTIC_WRITE 또는 LockModeType.PESSIMISTIC_READ를 사용할 수 있습니다.QueryDSL을 사용하여 비관적 락을 적용하는 방법을 예시를 통해 설명드리겠습니다.1. 엔티티 클래스먼저, JPA 엔티티 클래스를 정의합니다.javaimport javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persisten..

카테고리 없음 2024.07.01