1. 트랜잭션 기본 개념트랜잭션이란 무엇이고 ACID 속성에 대해서 알아보자1) 트랜잭션이란?트랜잭션의 가장 핵심적인 정의는- 하나의 논리적 작업단위가장 기본적인 예시가 계좌 이체입니다. - A계좌에서 10만원 출금 -> B계좌에 10만원 입금이 두 연산은 반드시 둘 다 성공하거나, 둘 다 실패해야 합니다.A에서 돈이 빠져나갔는데 B에는 안들어가면 돈이 증발하기 때문이죠이걸 보장하기 위해 DB가 제공하는 메커니즘이 트랜잭션이고, 트랜잭션이 보장해야할 4가지 성질을 ACID라고 합니다. 2) ACID 속성A - 원자성(Atomicity)- 트랜잭션 내 연산은 전부 성공하거나 전부 실패- 중간에 실패하면 이미 수행한 것도 전부 롤백 C - 일관성(Consistency)- 트랜잭션 실행 전후로 DB의 무결성..
1. Maven과 Gradle 우리는 스프링 프로젝트를 생성할 때 Maven을 선택할 것인지 Gradle을 선택할 것인지 선택할 것입니다. 이전엔 책에서 하란대로 따라만 했지 둘이 어떤 차이가 있는지 잘 모르고 개발을 했습니다. 이런 기본적인 것들을... 좀 채워보고자 깊이는 아니더라도 어느 정도 이해할 수 있는 수준으로 스프링을 초기 설정부터 시작해 개발을 진행해보겠습니다. 1) Maven pom.xml을 이용한 정형화된 빌드 시스템으로 다양한 라이브러리를 관리하며 네트워크를 통해 자동으로 다운을 받아줍니다. 기존엔 Apach Ant(자바로 개발된 어플리케이션으로 커맨드 라인 형태의 빌드, 배포를 위한 도구)라는 빌드 도구를 많이 사용했지만 Maven이 Ant를 넘어서 개발자들이 많이 사용하고 있습니다..
1. DI(Dependency Injection) DI란 의존성 주입을 나타낸다. 미리 외부에서 생성한 객체 인스턴스에 대해서 특정 설정을 통해 객체의 종속성을 정의할수 있는 프로세스입니다. 쉽게 말하자면 어떤 객체가 필요한 객체를 외부에서 밀어넣는 것을 의미합니다. DI 원칙을 사용하면 코드가 더 깔끔해지고 디커플링에 대해서 매우 효과적입니다. 이런 스프링 DI를 주입하는 방법에는 크게 2가지 방법이 있습니다. 첫번째로 생성자를 통한 주입, 두번째로는 Setter를 통한 주입 이렇게 2가지 입니다. 이전에는 필드를 통한 생성자 주입도 존재했었는데 스프링 공식문서에는 위의 2가지 방법만을 설명하고 있어서 위의 2가지 설정에 대해서만 보도록 하겠습니다. 1) 생성자를 통한 주입 - 현재 가장 많이 사용하고..
1. Iterator?- Collection에 저장된 요소들을 순차적 처리 하기 위해 사용합니다. (Eager 처리)- 해당 Iterator 인터페이스는 아래와 같은 구조를 가지고 있습니다. MacBookPro:~ ■ 100% ■ CPU ■ 31 GB public interface Iteratorout T> { /** * Returns the next element in the iteration. */ public operator fun next(): T /** * Returns `true` if the iteration has more elements. */ public operator fun hasNext(): Boolean} Iterator는 저..
코루틴을 공부하기에 앞서 왜 코루틴을 써야하는지 간단하게 생각해보았습니다. 서비스가 점점 커지면서 대용량의 트래픽을 처리하기 위해 좋은 성능을 내기 위한 방법들은 여러가지가 있겠지만 그 중 하나는 비동기 프로그래밍을 사용하는 방법이지 않을까 싶습니다. 우리 회사는 MSA로 전환한 이후 부터 언어를 Kotlin으로 사용하고 있습니다. Kotlin을 사용하게 되면서 Coroutines도 같이 사용을 하고 있는데 이제는 이 Coroutines에 대해서...어떻게 동작이 이루어지고 runBlocking, launch, asnyc 등과 같은 함수들에 대해서도 알아야 되지 않을까 싶습니다. 😭😭😭 그동안 모르고 사용해왔던 저의 모습을 반성하면서 이제는 제대로 알고 사용하기위해 해당 글을 작성해봅니다. 1. Coro..
1. Step이란? - Batch Job을 구성하는 독립적인 하나의 단계로서 실제 배치 처리를 정의하고 컨트롤하는데 필요한 모든 정보를 가지고 있는 도메인 객체 - 모든 Job은 하나 이상의 step으로 구성됨 2. 기본 구현체 1) Tasklet - 가장 기본이 되는 클래스로서 Tasklet 타입의 구현체들을 제어 2) PartitionStep - 멀티 스레드 방식으로 Step을 여러 개로 분리해서 실행 3) JobStep - Step 내에서 Job을 실행 4) FlowStep - Step 내에서 Flow를 실행 3. StepExecution - Step에 대한 한번의 시도를 의미하는 객체로서 Step 실행 중에 발생한 정보들을 저장하는 객체 - Step이 매번 시도 될 때마다 각 Step별로 생성 -..