본문 바로가기

728x90

분류 전체보기

(74)
[Spring] Spring Core(1): 스프링 빈(Spring Bean)의 개념, Component, Controller, Service, Repository의 역할 스프링 빈(Spring Bean)이란? Spring IoC 컨테이너가 관리하는 자바 객체 IoC(Inversion Of Control)이 뭘까? 제어의 역전이다. 우리가 사용하던 자바 프로그램에서는 프로그래머가 직접 객체를 생성하고, 원하는 클래스 내에서 다른 객체를 생성해 사용했다. 이 경우 프로그래머가 객체의 생명 주기를 관리하고 있다. 제어의 역전이 일어나면, 프로그래머가 아닌 다른 무언가가 관리를 위임하게 된다. 프로그래머의 제어 권한을 다른 주체에게 넘기는 것을 IoC(제어의 역전) 이라고 한다. Spring은 직접 자바 객체를 생성하고 관리하기 떄문에 이 관리 위임 주체는 Spring이 된다. Spring이 생성하고 관리하는 자바 객체를 Bean이라고 한다. Spring Framework에서는..
Spring Batch 원리와 철학 이해 1. 배치 프로그램이란 무엇인가? 2. 배치 사용 예 정산 시스템 데이터 마이그레이션 ( 기존 데이터를 특정 요구사항에 의해 다른 테이블, 다른 DB로 이동 ) 약관 변경 메일 통계 게임 랭킹 쇼핑몰 배송 요청 등등 3. 배치의 특징 자원을 효율적으로 사용 대량의 데이터를 실시간으로 매번 처리하는것은 값비싸고 크게 의미가 없는 행위 그래서 배치처리를 통해 한번만 처리하고 결과물을 캐시하여 사용자게에 제공할 수 있음. 사용자가 없는 다시 말해 자원이 많은 야간 시간대에 배치를 돌림으로써 풍족한 자원 활용할 수 있다. 대량의 데이터 처리 주로 정해진 시간에 반복적으로 자동 실행 ex) 정산시스템 일간,주간,월간 사용자와의 상호작용 없이도 동작 ex) 약간 변경 메일 전송 실시간성 결핍 잘못 동작하면 큰 문제..
[Java] ConcurrentHashMap 개념과 동기화 동작 원리 (Thread-safe) 멀티 스레드(Multi-Thread) 환경에서 동시성 이슈로 인해 ConcurrentHashMap을 사용해 보면서 정리한 것으로 `ConcurrentHashMap의 개념과 해당 클래스가 Thread-safe 하게 동작할 수 있는 동작원리`에 대한 내용 입니다. Synchronized 키워드 Synchronized 키워드 아래 ConcurrentHashMap을 이해하는 데 있어서 중요한 요소 중 하나라고 생각되는데요. 멀티스레드(Multi-Thread) 환경에서는 여러 스레드가 하나의 공유 자원에 동시에 접근하지 못하도록 막는 '스레드 동기화'가 필수적입니다. (스레드 동기화가 되지 않는 경우 여러 스레드에서 서로 공유하고 수정할 수 있는 데이터에 대한 안전성과 신뢰성을 보장할 수 없게 됩니다.) 그리고 ..
[Spring Webflux] 스프링 웹플럭스(MVC와 비교, 내부 동작 원리, Netty) Spring WebFlux 탄생 배경 Spring MVC 서블릿 기반의 Blocking I/O 방식 요청당 하나의 스레드를 사용, 스레드의 작업이 끝날 때 까지 스레드가 차단됨 Spring MVC의 한계 대용량 요청 트래픽을 Spring MVC 방식이 처리하기엔 한계가 있었다. 트래픽이 많아지면 많아질수록 스레드도 많이 사용되는데, 스레드풀에 스레드 200개가 default로 존재하고, 만약 만명이 동시 접근한다면...? 스레드 스위칭비용도 그만큼 많이 발생한다. Spring WebFlux를 이용한 극복 대용량 트래픽을 감당하기 위해선, 비동기/논블로킹 방식의 I/O를 사용해야 했으며 이 방식이 적용되어, 대용량도 안정적으로 처리할 수 있는 Spring WebFlux가 생겨놨다. ** 예시를 통해 MVC..
ChatGPT 를 200% 활용하는 방법! feat. 프롬프트 엔지니어링 오늘은 ChatGPT를 최적화하는 프롬프트 기법을 공유해 보겠습니다. ChatGPT는 나의 작업을 위협하는 도구가 아니라 생산성을 높여주는 도구라고 생각합니다. 퍼듀 대학교에서 실시한 최근 연구에 따르면, 스택 오버플로우에서 517개의 코딩 문제를 제시했을 때 ChatGPT는 52%의 경우 부정확하거나 작동하지 않는 코드가 포함된 답변을 제공한 것으로 나타났습니다. 스택 오버플로우 답변과 ChatGPT 답변을 비교할 수 있는데, 이 연구에 따르면 ChatGPT는 스택 오버플로우에 비해 정확성, 포괄성, 간결성 및 유용성에서 낮은 순위를 차지했습니다. 또 다른 문제는 이 모델이 정답이 틀리거나 반만 맞더라도, 자신감 있는 언어로 설득력 있는 답변을 생성하는 것으로 밝혀졌다는 점입니다. 때때로 환각을 보고 ..
[Netty] @Sharable 어노테이션과 ChannelHandler 인스턴스 관리 Netty를 사용하면서 클라이언트로부터 들어오는 데이터를 처리하는 ChannelHandler의 역할과 관리 방법은 매우 중요합니다. 특히, @Sharable 어노테이션의 사용과 각 클라이언트 연결에 대한 ChannelHandler 인스턴스 생성 방식은 데이터 무결성 및 애플리케이션의 성능에 큰 영향을 미칩니다. 'ChannelHandler'와 '@Sharable'의 이해 ChannelHandler는 Netty에서 네트워크 이벤트를 처리하는 주요 구성 요소입니다. 클라이언트의 연결, 데이터 수신 등 이벤트가 발생할때마다 Netty는 해당 ChannelHandler를 통해 이를 처리합니다. @Sharable 어노테이션은 하나의 ChannelHandler 인스턴스가 여러 ChannelPipeline 에서 안전..
[Java] Reactor 패턴과 이벤트 루프 Reactor 패턴 Reactor 패턴은 동시에 들어오는 여러 종류의 이벤트를 처리하기 위한 동시성을 다루는 디자인 패턴 중 하나입니다. Reactor 패턴은 관리하는 리소스에서 이벤트가 발생할 때까지 대기하다가 이벤트가 발생하면 해당 이벤트를 처리할 수 있는 핸들러(handler)에게 디스패치(dispatch)하는 방식으로 이벤트에 반응하는 패턴으로 '이벤트 팬들링(event handling)'패턴이라고도 부릅니다. Reactor 패턴은 크게 Reactor와 핸들러로 구성됩니다. Reactor: 무한 반복문을 실행해 이벤트가 발생할 때까지 대기하다가 이벤트가 발생하면 처리할 수 있는 핸들러에게 디스패치합니다. 이벤트 루프라고도 부릅니다. 핸들러: 이벤트를 받아 필요한 비즈니스 로직을 수행합니다. 세부적..
[Java] Java NIO와 멀티플렉싱 기반의 다중 접속 서버 Java NIO와 멀티플렉싱 기반의 다중 접속 서버 Java NIO는 Java의 기존 I/O API를 대체하기 위해 Java 1.4 버전에서 도입된 I/O API입니다. 새로 바뀐 부분을 간략히 요약하면 다음과 같습니다. 채널과 버퍼 Java NIO에서는 채널과 버퍼를 사용합니다. 서버에서 클라이언트와 데이터를 주고받을 때 채널을 통해서 버퍼(ByteBuffer)를 이용해 읽고 씁니다. 논블로킹(non-blocking) I/O Java NIO에서는 논블로킹 I/O를 사용할 수 있습니다. 예를 들어보겠습니다. 스레드가 버퍼로 데이터를 읽어달라고 채널에 요청하면, 채널이 버퍼에 데이터를 채워 넣는 동안 해당 스레드는 다른 작업을 수행할 수 있습니다. 이후 채널이 버퍼에 데이터를 채워 넣고 나면 스레드는 해당..

728x90