전체 글
-
Tasklet과 ItemReader, ItemProcessor, ItemWriter란?Spring/Spring Batch 2024. 7. 26. 11:46
Contents --> Tasklet목적: 배치 작업에서 단일 태스크를 정의합니다. 주로 간단한 작업을 수행할 때 사용합니다. , Tasklet은 Step에서 단일 작업을 정의할 때 사용됩니다. 간단한 파일 읽기, 쓰기, 데이터베이스 작업 등에 적합합니다.구현 방법: Tasklet 인터페이스를 구현하고 execute 메서드를 오버라이드하여 작업을 정의합니다.Tasklet 구현 (MyTasklet)// MyTasklet.javapackage com.example.batch;import org.springframework.batch.core.StepContribution;import org.springframework.batch.core.scope.context.ChunkContext;import org...
-
내부 스태틱 클래스(static nested class)를 사용하는 이유와 그 동작 방식자바웹프로그래밍/JAVA 2024. 7. 25. 14:00
내부 스태틱 클래스(static nested class)를 사용하는 이유논리적인 그룹화: 내부 스태틱 클래스는 외부 클래스와 밀접한 관련이 있는 클래스를 논리적으로 그룹화하는 데 유용합니다. 이를 통해 코드의 가독성과 유지보수성을 높일 수 있습니다.캡슐화: 내부 스태틱 클래스는 외부 클래스의 private 멤버에 접근할 수 있기 때문에, 외부 클래스의 구현 세부 사항을 캡슐화하는 데 도움이 됩니다.외부 클래스와의 결합도 낮추기: 내부 클래스(non-static inner class)와 달리, 내부 스태틱 클래스는 외부 클래스의 인스턴스에 대한 참조를 갖지 않기 때문에 외부 클래스와의 결합도가 낮아집니다. 이는 내부 스태틱 클래스의 독립성을 높입니다.내부 스태틱 클래스의 메모리 관리내부 스태틱 클래스는 외..
-
BufferedOutputStream를 사용하면 성능이 좋아지는 이유 및 자세한 설명 with FileDescriptor자바웹프로그래밍/JAVA 2024. 7. 24. 14:37
Contents --> Java에서 데이터를 디스크에 쓰는 과정은 여러 단계로 구성되어 있으며, 최종적으로는 운영 체제의 네이티브 파일 시스템 호출로 이어집니다. 여기서 BufferedOutputStream이 실제로 어떻게 작동하는지, 그리고 네이티브 코드에서 어떻게 구현되는지 살펴보겠습니다. 데이터가 디스크에 적재되는 과정Java 애플리케이션 코드: 애플리케이션은 FileOutputStream 또는 BufferedOutputStream을 사용하여 데이터를 파일에 씁니다.Java 클래스: FileOutputStream과 BufferedOutputStream 클래스는 Java 표준 라이브러리의 일부이며, 데이터를 디스크에 쓰기 위한 메서드를 제공합니다.네이티브 메서드 호출: FileOutputSt..
-
InputStream 과 OutputStream에 차이 !자바웹프로그래밍/JAVA 2024. 7. 24. 14:18
Contents --> OutputStream과 InputStream은 Java의 I/O 시스템에서 데이터를 순차적으로 읽고 쓰는 데 사용되는 기본적인 스트림 클래스입니다. 이 두 클래스는 각각 출력과 입력에 대한 추상적인 개념을 제공합니다. 차이점역할:InputStream: 데이터를 소스(파일, 네트워크, 메모리 등)에서 읽어 들입니다.OutputStream: 데이터를 대상(파일, 네트워크, 메모리 등)으로 씁니다.메소드:InputStream: 주로 read 메서드를 사용하여 데이터를 읽습니다. 대표적인 메서드는 다음과 같습니다:int read(): 한 바이트를 읽고, 0에서 255 사이의 값을 반환하거나, 더 이상 데이터가 없으면 -1을 반환합니다.int read(byte[] b): 바이트 배열 b..
-
Spring에서 @Autowired를 사용하는 것보다 생성자 주입 방식이 나은 이유?Spring 2024. 7. 24. 10:33
Spring에서 @Autowired를 사용하는 것보다 생성자를 통해 구성하는 방식이 더 나은 이유는 다음과 같습니다:불변성(Immutable) 보장: 생성자 주입은 필드를 final로 선언할 수 있게 하여 객체의 불변성을 보장합니다. 불변 객체는 상태 변화를 방지하여 안전성을 높입니다.명시적 의존성(Explicit Dependency): 생성자 주입은 클래스의 의존성을 명확하게 보여줍니다. 어떤 의존성이 필요한지 명확하게 드러나기 때문에 코드의 가독성이 향상됩니다.테스트 용이성(Testability): 생성자 주입을 사용하면 테스트 코드에서 setter나 리플렉션을 사용하지 않고도 의존성을 쉽게 주입할 수 있습니다. 따라서 단위 테스트 작성이 더 용이합니다.순환 의존성 방지: 생성자 주입은 순환 의존성을..
-
JSESSIONID의 역할 및 생성과정 및 JSESSIONID가 필요없는경우자바웹프로그래밍 2024. 7. 23. 14:42
Contents --> JSESSIONID는 Java EE 및 Spring 기반 웹 애플리케이션에서 사용되는 세션 식별자(Session Identifier)입니다. 이 식별자는 서버가 클라이언트와의 세션을 관리하기 위해 사용됩니다. 세션은 서버와 클라이언트 간의 상태 정보를 유지하기 위한 기술로, HTTP의 무상태(stateless) 특성을 보완하기 위해 사용됩니다. JSESSIONID의 역할세션 식별:JSESSIONID는 서버에서 생성되며, 각 클라이언트에 대해 고유합니다. 클라이언트가 서버에 요청할 때마다 JSESSIONID를 사용하여 해당 요청이 어느 클라이언트로부터 왔는지 식별할 수 있습니다.세션 상태 유지:HTTP는 본래 무상태 프로토콜이므로, 각 요청 간에 상태를 유지하지 않습니다. JS..
-
웹 브라우저를 통해 도메인 주소를 입력하는 경우, 실제로는 IP 주소와 MAC 주소를 모두 얻는 과정컴퓨터과학/네트워크 2024. 7. 23. 10:02
Contents --> 전체 과정 요약DNS 조회: 도메인 주소를 IP 주소로 변환ARP 조회: IP 주소를 MAC 주소로 변환 (로컬 네트워크 내)데이터 전송: IP 및 MAC 주소를 이용해 데이터를 전송 1. DNS 조회도메인 주소 (예: www.example.com)를 입력하면, 먼저 해당 도메인에 대한 IP 주소를 알아내야 합니다.DNS 조회 과정호스트 파일 확인: 클라이언트는 먼저 로컬 호스트 파일을 확인하여 도메인에 대한 IP 주소가 지정되어 있는지 확인합니다.DNS 캐시 확인: 운영체제의 DNS 캐시에 도메인에 대한 IP 주소가 저장되어 있는지 확인합니다.DNS 서버 질의: 캐시에 없으면 설정된 DNS 서버에 질의합니다.질의 과정:클라이언트의 DNS 리졸버가 DNS 서버에 www.exam..
-
DB 커넥션 풀을 사용해도 시스템 성능의 영향을 끼치는것데이터베이스/최적화 2024. 7. 22. 11:32
MyBatis와 같은 ORM 툴을 사용할 때, 동일한 데이터를 가져오기 위해 5번의 쿼리를 호출하는 것과 5개의 쿼리를 WITH 구문을 통해 하나의 쿼리로 요청하는 것 사이에는 성능상의 차이가 있습니다. 이 차이가 발생하는 이유는 여러 가지가 있지만, 주요 원인은 다음과 같습니다: 네트워크 레이턴시:각 쿼리 호출 시마다 네트워크 요청이 발생합니다. 네트워크 왕복 시간이 누적되면 지연이 발생할 수 있습니다. 커넥션 풀을 사용해도 각 요청마다 네트워크 레이턴시가 존재하기 때문에, 5번의 네트워크 왕복 시간이 1번의 왕복 시간보다 더 큽니다.쿼리 실행 준비:각 쿼리 호출 시마다 데이터베이스는 쿼리 파싱, 최적화, 실행 계획 수립 단계를 거쳐야 합니다. 5번의 쿼리 호출은 이 단계를 5번 반복하는 셈이 됩니다..