목록전체 글 (531)
개발놀이터
본 포스팅은 인프런의 정수원님의 스프링 배치 강의를 듣고 정리한 포스팅입니다. 더 자세한 내용은 강의를 참고해주세요. @JobScope, @StepScope 기본 개념 Scope 스프링 컨테이너에서 빈이 관리되는 범위 singleton, prototype, request, session, application 이 있으며 기본은 singleton 으로 생성됨 스프링 배치 스코프 @JobScope, @StepScope Job과 Step의 빈 생성과 실행에 관여하는 스코프 프롯기 모드를 기본값으로 하는 스코프 - @Scope(value = "job", proxyMode = ScopedProxyMode.TARGET_CLASS) 해당 스코프가 선언되면 빈의 생성이 어플리케이션 구동시점이 아닌 빈의 실행 시점에 이..
우선 데이터베이스 격리수준을 들어가기 전에 우리는 트랜잭션에 대해서 간단한 이해가 필요합니다. 트랜잭션 트랜잭션은 데이터의 정합성을 보장하기 위한 기능입니다. 트랜잭션은 꼭 여러개의 변경 작업을 수행하는 쿼리가 조합됐을때만 의미있는 개념은 아닙니다. 트랜잭션은 논리적인 작업 셋 자체가 100% 적용되거나 또는 아무것도 적용되지 않아야 함을 보장해 주는 것입니다. 이러한 트랜잭션의 특징을 잘 나타내는 4가지 키워드가 있습니다. 바로 ACID 라고 하는 원자성 (Atomicity), 일관성 (Consistency), 격리성 (isolation), 지속성 (Durability)를 보장해야 합니다. ACID에 대한 자세한 설명은 아래와 같습니다. 원자성 (Atomicity) : 트랜잭션 내에서 실행한 작업들은 ..
본 포스팅은 인프런의 정수원님의 스프링 배치 강의를 듣고 정리한 포스팅입니다. 더 자세한 내용은 강의를 참고해주세요. JobRepository 기본 개념 배치 작업 중의 정보를 저장하는 저장소 역할 Job이 언제 수행되었고, 언제 끝났으며, 몇 번이 실행되었고 실행에 대한 결과 등의 배치 작업의 수행과 관련된 모든 meta data를 저장함 JobLauncher, Job, Step 구현체 내부에서 CRUD 기능을 처리함 JobRepository는 JobLauncher, Job, Step 구현체 내부에서 CRUD 기능을 처리한다고 했는데 구체적으로 어떤 내용을 처리하는 걸까요? 우선 JobLauncher에서는 job_name과 job_parameter를 가지고 JobInstance를 조회해봅니다. 그리고 ..
본 포스팅은 인프런의 정수원님의 스프링 배치 강의를 듣고 정리한 포스팅입니다. 더 자세한 내용은 강의를 참고해주세요. ExecutionContext 기본 개념 프레임워크에서 유지 및 관리하는 키/값으로 된 컬렉션으로 StepExecution 또는 JobExecution 객체의 상태를 저장하는 공유 객체 DB에 직렬화 한 값으로 저장됨 - { "key" : "value" } 공유 범위 Step 범위 - 각 Step의 StepExecution에 저장되며 Step간 서로 공유 안됨 Job 범위 - 각 Job의 JobExecution에 저장되며 Job간 서로 공유 안되며 해당 Job의 Step간 서로 공유됨 Job 재 시작시 이미 처리한 Row 데이터는 건너뛰고 이후로 수행하도록 할 때 상태 정보를 활용한다. ..
본 포스팅은 인프런의 정수원님의 스프링 배치 강의를 듣고 정리한 포스팅입니다. 더 자세한 내용은 강의를 참고해주세요. Step 기본 개념 Batch Job을 구성하는 독립적인 하나의 단계로서 실제 배치 처리를 정의하고 컨트롤 하는 데 필요한 모든 정보를 가지고 있는 도메인 객체 단순한 단일 테스크 뿐 아니라 입력과 처리 그리고 출력과 관련된 복잡한 비즈니스 로직을 포함하는 모든 설정들을 담고 있다. 배치 작업을 어떻게 구성하고 실행할 것인지 Job의 세부 작업을 Task 기반으로 설정하고 명세해 놓은 객체 모든 Job은 하나 이상의 Step으로 구성됨 기본 구현체 TaskletStep 가장 기본이 되는 클래스로서 Tasklet 타입의 구현체들을 제어한다. PartitionStep 멀티 스레드 방식으로 S..
본 포스팅에선 N + 1 문제에 대해서 직접적으로 다루지 않습니다. N + 1 문제에 대한 개념적인 내용은 이미 많이 알려져 있기 때문에 다루지 않습니다. 그럼 이번 포스팅에선 무엇을 다룰것이냐 바로 join fetch 와 @EntityGraph에 대해서 알아볼 것입니다. 그리고 알아보면서 둘의 차이점과 각각을 사용할 때 주의 사항도 알아보도록 하겠습니다. 우선 join fetch부터 보겠습니다. join fetch 대표적으로 알려진 N + 1 문제의 해결 방안입니다. 어떻게 사용하는지와 왜 사용하는지에 대해서는 말씀드렸다시피 다루지 않습니다. 대부분은 join fetch로 문제가 해결되기 때문에 만능이라고 생각하시는 분들이 있습니다. 하지만 join fetch도 만능은 아닙니다. Native Query..
본 포스팅은 인프런의 정수원님의 스프링 배치 강의를 듣고 정리한 포스팅입니다. 더 자세한 내용은 강의를 참고해주세요. **본 포스팅은 앞선 포스팅과 이어지는 내용입니다.** https://coding-review.tistory.com/190 스프링 배치 도메인의 이해 : Job 본 포스팅은 인프런의 정수원님의 스프링 배치 강의를 듣고 정리한 포스팅입니다. 더 자세한 내용은 강의를 참고해주세요. Job 기본 개념 배치 계층 구조에서 가장 상위에 있는 개념으로 하나의 coding-review.tistory.com JobInstance 에 대해서 들어가기 앞서 우리는 Job 과 JobInstance 의 차이에 대해 알아봐야 합니다. Job 자체를 실행하기 위한 단계, 처리, 결과, 구성 등을 포함하고 있는 객..
본 포스팅은 인프런의 정수원님의 스프링 배치 강의를 듣고 정리한 포스팅입니다. 더 자세한 내용은 강의를 참고해주세요. Job 기본 개념 배치 계층 구조에서 가장 상위에 있는 개념으로 하나의 배치 작업 자체를 의미합니다. 이는 API 서버의 접속 로그 데이터를 통계로 서버로 옮기는 배치인 Job 자체를 의미합니다. Job Configuration을 통해 생성되는 객체 단위로서 배치작업을 어떻게 구성하고 실행할 것인지 전체적으로 설정하고 명세해 놓은 객체입니다. 배치 Job을 구성하기 위한 최상위 인터페이스이며 스프링 배치가 기본 구현체를 제공해줍니다. 여러 Step을 포함하고 있는 컨테이너로서 번드시 한개 이상의 Step으로 구성해야 합니다. 기본 구현체 SimpleJob 순차적으로 Step을 실행시키는 ..
이번 프로젝트의 주제와 별개로 제 나름대로의 목표는 두가지입니다. TDD 적극 이용 네이티브 쿼리 없애기 제 프로젝트는 아무 생각없이 프로젝트를 진행하는 것이 아니라 제가 얻어가는 것이 하나라도 있어야 한다는 대전제를 가지고 있습니다. 따라서 이번 프로젝트에서는 TDD 적극 이용, 그리고 네이티브 쿼리 없애기를 목표로 진행하도록 합니다. 개요 주제 선정 이유 이번 주제는 스터디 모임 사이트입니다. 말 그대로 스터디 모임에 있어서 편리함을 주는 사이트입니다. 기존 스터디 모임 사이트가 있긴 하지만 단순히 스터디 할 사람 모여라~ 하고 모이고 스터디하고 이런 사이트가 주로 이룹니다. 따라서 제 사이트는 다른 스터디 사이트들과 차별점을 이룹니다. 바로 프로그램이 알아서 스터디를 관리해준다는 것입니다. 이런 사..
잘 되다가 STOMP 프로토콜 통신이 안되는 이슈가 발생했습니다... 구글링도 하루종일 해보고 스택오버플로우에도 질문을 올려봤지만 해결하지 못했습니다. 그래도 영상으로 남겨놨으니 한번 구현해본것으로 만족하도록 하겠습니다. 언젠가 한번 소켓통신으로 채팅을 구현하는게 자그만 목표였는데 이뤄내서 만족스럽습니다. 사실 정말 아쉬운데... 구현해본것으로 마무리짓도록 하겠습니다. 다음 캡스톤은 정해놨습니다. 다음 캡스톤은 로그인 패턴 + 스프링 배치 공부로 개발자 커뮤니티 사이트를 하도록 하겠습니다.