분류 전체보기 140

[Spring] Batch

Spring Batch 대용량 데이터를 일괄(batch) 처리를 위한 프레임워크. 1. 로깅/추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작, 건너뛰기, 리소스 관리 등 대용량 레코드 처리에 필수 기능 제공 2. 최적화 및 파티셔닝 기술을 통해 대용량 및 고성능 배치 작업을 가능하게 하는 고급 기술 서비스 및 기능 제공 3. 작업 실패시 작업 재시작을 하게 된다면 실패지점부터 실행한다. 중복 실행을 막기 위해 성공한 이력이 있는 Batch는 동일한 Parameters로 실행 시 Exception이 발생한다. 주요 구성 요소 JobLauncher Job과 Job Parameters를 사용하여 Job을 실행하는 객체 Job 배치 처리 과정의 전체를 하나의 단위로 만들어 놓은 객체. 하나 이상의 Step..

CS 2023.12.07

[DB] Transactional 전파단계

트랜잭션 전파(Transaction propagation) 상위 메서드의 트랜잭션이 동작중인 과정에서 트랜잭션이 적용된 하위 메서드를 실행할 경우 어떻게 처리하는 가에 대한 개념이다. 주로 사용되는 값은 default값인 REQUIRED 이며, 이외에도 여러 전파단계가 존재한다. REQUIRED 따로 지정해주지 않으면 사용되는 기본값. 진행중인 Transaction이 있으면 해당 Transaction을 사용, 없다면 새로운 Transaction을 생성한다. MANDATORY 진행중인 Transaction이 없을경우 exception 발생 REQUIRES_NEW 항상 새로운 Transaction을 생성 한다. 진행중인 Transaction이 있다면 중지하고 새로운 Transaction를 시작한다. 새로운 ..

CS 2023.12.04

[Java] 강한 결합과 느슨한 결합

강한 결합 (Tight Coupling) 코드나 모듈간의 의존성이 높은 상태 하나의 모듈이 다른 모듈에 너무 의존적이며, 변경 발생 시 여러 부분에 영향을 줄 수 있는 상황 하나를 수정하면 다른 것들도 함께 수정해야 할 수 있다. 코드의 재사용성과 확장성이 떨어지게 된다. 느슨한 결합 (Loose Coupling) 모듈이 서로 독립적이며, 하나의 모듈이 다른 모듈과 상대적으로 낮은 수준의 의존성을 가지는 상태 각 모듈이 자신의 역할을 수행하면서 다른 모듈과의 상호 작용을 최소화하는 것을 의미한다. 변경 발생 시 해당 모듈만 수정하면 되며, 다른 모듈에 영향을 덜 주고 독립적으로 변경할 수 있는 유연성을 제공한다. 코드의 유지보수성과 확장성을 향상시킬 수 있다. 느슨한 결합을 구현하기 위한 방법 1. 인터..

CS 2023.11.29

[java] Error, Checked Exception, Unchecked Exception

java 실행 시(runtime) 발생할 수 있는 프로그램 오류는 크게 Exception, Error 이 두가지로 나눌 수 있다. 이 중, 개발자가 다뤄야 하는 Exception은 Checked Exception, Unchecked Exception로 나뉘게 된다. Error 메모리 부족(OutofMemoryError)이나 스택오버플로우(StackOverflowError)와 같이 복구할 수 없는 시스템에 비정상적인 상황이 발생했을 경우에 발생한다. 개발자가 예측하기도 어렵고, 딱히 처리할 수 있는 방법도 없다. Exception 프로그램 실행 중에 개발자의 실수로 예기치 않은 상황이 발생했을 때 발생한다. ArrayIndexOutOfBoundsException, NPE 등이 대표적인 예이다. 앞서 얘기한..

CS 2023.11.24

[java] String, StringBuilder, StringBuffer

String - 불변(immutable) 클래스. 한 번 생성된 내용은 변경할 수 없다. - 수정이 발생할 때마다 새로운 String 객체가 생성되며, 문자열을 수정하는 게 아닌 새로운 문자열을 반환한다. - 수정이 빈번하게 발생하는 경우에는 메모리 공간을 많이 차지하고 성능에 영향을 줄 수 있다. StringBuilder - 가변(mutable) 클래스. 문자열을 수정할 수 있다. - 수정이 발생할 때마다 기존의 버퍼를 수정하여 성능 향상을 제공한다. - 단일 스레드 환경에서 안전하며, 대부분의 문자열 연산에 효율적이다. StringBuffer - 가변(mutable) 클래스. 문자열을 수정할 수 있다. - thread-safe하도록 설계되어 있다. - 멀티 스레드 환경에서 동기화(synchroniza..

CS 2023.11.24

[java] 원시타입(Primitive types)과 참조타입(Reference types)

프로그래밍 언어에서 데이터 유형은 보통 "원시타입(Primitive types)"과 "참조타입(Reference types)"으로 분류되며, 다른 방식으로 저장되고 처리된다. 원시타입(Primitive types) - 원시타입은 단일한 데이터를 나타내며, 해당 데이터는 스택(stack)이나 기본적인 메모리 공간에 직접 저장된다 - 변수에 원시타입의 값을 할당하면 해당 값이 직접 변수에 저장된다. 참조타입(Reference types) - 원시 타입을 제외한 타입들(문자열, 배열, 열거, 클래스, 인터페이스)을 일컫는다. - 참조타입은 객체(object)를 나타내며, 해당 객체의 주소(참조)가 변수에 저장된다. - 객체는 힙(heap)이라는 메모리 영역에 동적으로 할당된다. - 여러 변수가 동일한 객체를 ..

CS 2023.11.24

[java] 동일성(identity, ==)와 동등성(equality, equals)

동일성(Identity) - 객체나 값이 메모리 내에서 정확히 동일한 것인지를 확인하는 개념 - 두 객체의 메모리 주소가 같은지를 비교하여 판단한다. 즉, 두 객체가 정확히 같은 인스턴스인지를 확인한다. 동등성(Equality) - 값이나 객체의 내용이 동일한지 여부를 확인하는 개념 - 두 객체가 가지고 있는 값이 같은지를 비교하여 판단한다. 즉, 두 객체가 동일한 데이터를 가지고 있는지를 확인한다. [Java] 동일성(identity)과 동등성(equality) java-study에서 스터디를 진행하고 있습니다. 동일성 동일성은 동일하다는 뜻으로 두 개의 객체가 완전히 같은 경우를 의미한다. 여기서 완전히 같다는 뜻은 두 객체가 사실상 하나의 객체로 봐도 steady-coding.tistory.com

CS 2023.11.24

[Spring] 의존성과 설정값을 생성자 인자로 주입해야 하는 이유

느슨한 결합(Loose Coupling) 의존성을 생성자 인자로 주입하면, 해당 클래스는 직접 의존하는 객체를 생성하는 책임을 갖지 않게 된다. 대신 의존성을 외부에서 주입받아 사용하므로, 클래스 간의 결합도를 낮출 수 있다. 테스트 용이성 의존성 주입을 통해 Mock Objects를 사용하여 단위 테스트(Unit Test)를 수행할 수 있다. 단일 책임 원칙(SRP; Single Responsibility Principle) 의존성을 주입받는 방식을 사용하면 이러한 객체의 역할을 분리하여 단일 책임 원칙을 준수할 수 있다. 유연성 외부에서 객체를 생성할 때 의존성을 변경하거나 다른 객체로 교체하기 쉽다. 코드를 변경하지 않고도 애플리케이션의 동작을 수정하거나 유연하게 구성할 수 있게 합니다. 코드의 명..

CS 2023.11.22

[Spring] Spring Application 메서드 실행 방법

1. CommandLineRunner 및 ApplicationRunner 구현 CommandLineRunner `run()` 메서드에 `String[] args` 파라미터를 갖는다. 이 인터페이스를 구현하면, Spring Boot 애플리케이션이 구동될 때 `run()` 메서드가 호출된다. ApplicationRunner `run()` 메서드에 `ApplicationArguments` 객체를 파라미터로 받는다. 이 인터페이스를 구현하면, Spring Boot 애플리케이션이 구동될 때 `run()` 메서드가 호출된다. 2. Spring의 ApplicationEvent Spring의 `ApplicationEvent`와 `ApplicationListener`를 사용하면, 커스텀 이벤트를 생성하고 리스너를 통해 ..

CS 2023.11.22

[Spring] Filter, Interceptor 예외 처리방법

HandlerInterceptor HandlerInterceptor 흐름 Interceptor(preHandle) -> Handler -> Interceptor(postHandle) -> HandlerExceptionResolver(예외 복구) -> View 렌더링 -> Interceptor(afterCompletion) 1. afterCompletion 전에 발생한 예외는 모두 DispatcherServlet으로 반환된다. afterCompletion은 모든 처리가 끝난 후 예외 정보, 요청, 응답 정보를 모두 받는 위치에 있기 때문이다. 2. preHandle, postHandle 에서 예외가 발생할 때 @ExceptionHandler 로 핸들링할 수 있다. 3. preHandle에서 예외발생 시, ..

CS 2023.11.22