본문 바로가기

Spring

(13)
Spring Batch (4) - MetaData 앞서 다음과 같은 metadata 테이블을 보여드렸습니다. 이것을 하나하나 차근차근 설명해보겠습니다. 1) BATCH_JOB_INSTANCE Job Instance를 기록하는 테이블입니다. * Job Instance == 'Job 하나의 실행 단위/객체' 이 테이블은 Job Parameter에 따라 데이터가 생성되는 테이블입니다. 동일한 Job Parameter를 갖고있는 Job이 실행된다면, 이는 테이블에 기록되지 않습니다. 2) BATCH_JOB_EXECUTION 이 테이블은 Job Instance가 배치를 성공했는지, 실패했는지에 대한 여부를 담고 있는 테이블로 BATCH_JOB_INSTANCE의 부모테이블로 생각하시면 됩니다. 3) BATCH_JOB_EXECUTION_PARAMS Job Param..
Spring Batch (3) 🤩 Spring Batch 시스템을 만들어봅시다 ! SpringBoot 프로젝트는 IntelliJ를 사용하실 경우, 툴 내에서 생성이 가능합니다. 사용하지 않으실 경우, spring.io라는 공식 사이트를 이용하시면 편리하게 생성하실 수 있습니다. 해당 포스트는 조졸두님의 jojoldu.tistory.com/325?category=902551 포스트를 기반한 포스트입니다. 먼저, 정말 정말 정말 * 100 간단한 배치 시스템을 만들어보겠습니다. 일단 BatchApplication.java에 @EnableBatchProcessing 어노테이션을 추가하여 Spring Batch가 동작할 수 있는 어플리케이션으로 만들어주어야 합니다. import org.springframework.batch.core.conf..
Spring Batch (2) 🤔 Step을 처리하는 방식 1. Tasklet 방식 : 잘 사용하지 않는 방식이긴 합니다. Input/Output에 대한 process가 없는 단순 통계, 일반적인 Query 수행과 같은 간단한 Batch에 사용하곤 합니다. Chunk의 ItemReader, ItemProcessor, ItemWirter의 과정을 단일 작업으로 인식하여 Step을 수행합니다. 2. Chunk 방식 : 지정한 Chunksize에 맞게 ItemReader, ItemProcessor, ItemWirter로 나눠 Step을 처리하는 방식입니다. 정리하자면, Spring Batch에서는 Job이 있는데요. 이 Job은 여러개의 Step으로 구성되고, Step 은 Tasklet || Chunk로 구성된다고 생각하시면 됩니다. 🤔 ..
CRUDRepository vs JPARepository 도대체 무슨 차이지? API 문서를 살펴보면 각 repository에는 다음과 같은 Methods들이 포함되어있다. 보는 것과 같이 CRUD repo.에는 기본 CRUD에 관한 메서드를 정의하지 않고, 자동으로 사용할 수 있는 method들이 선언되어있다. (단, ID를 통한 CRUD이므로, 다른 field를 이용하고 싶으면, 따로 선언해야 한다.) JPA repo.의 경우 Batch 혹은 Paging과 같은 추가적인 기능을 제공해준다. 실제로, 많은 블로그 글들을 보게 되면, JPA repo.가 CRUD repo.의 손자뻘?이 되는 인터페이스라고 한다. 공식 문서 또한, 이와 같이 JPA repo가 CRUD, PagingAndSorting 등의 인터페이스를 상속받고 있음을 말하고 있다.
Servlet (서블릿이란? 그리고, Dispatcher Servlet이란 ? ) 🎨 What is Servlet? - JAVA를 사용하여 웹을 만들기 위해 필요한 프로그래밍 기술입니다. (Servlet 클래스의 구현 규칙을 지켜야합니다.) - 또한, 이러한 웹 기반의 요청에 대해 동적으로 처리해주는 역할로서 Server Side에서 작동(WAS)합니다. - 웹 페이지 개발 시, 웹 화면(HTML)은 JSP로 표현하고, 복잡한 프로그래밍은 서블릿으로 구현하여 조화롭게 사용합니다. - 클라이언트가 요청을 하면 그 결과를 다시 전송해주는 프로그램입니다. - HttpServlet이라는 Java의 클래스를 상속받습니다. 🎨 Servlet Life Cycle 1. Servlet 객체 생성 (1회) 2. init() 호출 (1회) 3. service(), doGet(), doPost() 호출 (..
Spring Container & Bean 생명주기 🎨 스프링 Container Life Cycle 생성 -> 설정(초기화) -> 사용 -> 종료 의 과정을 거칩니다. // 생성 GenericXmlApplicationContext ctx = new GenericXmlApplicationContext(); // 설정 ctx.load("classpath:applicationContext.xml"); ctx.refresh(); // 사용 Blog blog = ctx.getBean("blog", Blog.class); System.out.println("블로그 주인 :" + blog.getUserName()); System.out.println("블로그 이름 :" + blog.getBlogName()); // 종료 ctx.close(); 🎨 스프링 Bean Li..
Container란? (Servlet / Spring Container) 컨테이너란? Servlet, Java등의 객체를 담고 객체의 생성 및 소멸과 같은 라이프 사이클을 관리하는 것 Servlet Container (ex : Tomcat) servlet의 LifeCycle을 관리하는 컨테이너이며, 새로운 요청이 들어올 때마다 새로운 자바 스레드를 만들어줍니다. 즉, 개발자가 웹서버와 통신하기 위해 (소켓을 생성하고, 특정 포트에 리스닝하고, 스트림을 생성하는 등) 복잡한 일들을 할 필요가 없게 만들어줍니다. Servlet Container안에는 http 프로토콜을 통해 들어오는 모든 요청을 처리하는 Disaptcher Servlet도 존재합니다. 관련 포스트는 추후에 작성하여 링크를 걸도록 하겠습니다. Disaptcher Servlet 참고용 링크 : galid1.tisto..
Lombok의 좋은 사용법 1. @Data 지양하기 @ToString @EqualsAndHashCode @Getter @Setter @RequiredArgsConstructor @Data는 위와 같은 모든 어노테이션을 따로 선언해줄 필요없습니다. 왜냐하면, @Data안에 이 모든 어노테이션이 포함되어있기 때문이죠! 그런데, 이 간편한 @Data를 사용하는 것을 왜 지양해야 할까요? 이에 대한 여러가지 이유가 있습니다. 첫 번째, @Setter는 안전하지 못합니다 Setter를 사용하게 된다면 객체를 언제든 수정할 수 있기 때문에 객체의 안전성이 보장받기 힘듭니다. 만약, '사용자의 실명'이 변경되지않아야 하는 웹이라면, 아예 그 기능을 제공하지 않는 것이 안전합니다. 그러나, @Setter를 사용하게 된다면, 이 기능을 원천적으로..