일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- arraylist
- 쇼핑몰 프로젝트
- spring 쇼핑몰
- 스프링 쇼핑몰
- 로그아웃 기능 구현
- spring 프로젝트
- 스프링 게시판
- 스프링 프로젝트
- 스프링 파일 삭제
- 스프링 게시판 구현
- 스프링 쇼핑몰 프로젝트
- BCrypt 적용
- 스프링 메일 전송
- 파일 업로드
- 이미지 출력
- 삭제 구현
- Bcrypt
- 로그인 기능
- 쇼핑몰 포트폴리오
- 스프링 포트폴리오
- 스프링 이미지
- 정규표현식
- ResponseEntity
- oracle 설치방법
- 스프링 업로드
- 스프링 HikariCP
- 인증번호 전송
- 회원가입 기능
- 스프링 프로젝트 설정
- 스프링 프로젝트 기본 설정
- Today
- Total
Kim VamPa
[Spring][쇼핑몰 프로젝트][29] 상품 이미지 수정 - 4(배치 프로그램 적용 1) 본문
프로젝트 Github : https://github.com/sjinjin7/Blog_Project
프로젝트 포스팅 색인(index) : https://kimvampa.tistory.com/188
목표
배치 프로그램 이해 및 적용을 위한 환경설정
앞 선 포스팅에서 웹을 사용하는 사용자 입장에선 이미지가 수정이 되었다고 느낄 수 있도록 구현을 완료하였습니다. 하지만 현 상태에서 사용자가 수정을 한 경우에 서버의 첨부물(이미지) 저장소(저장 폴더)에는 수정을 하기 전 저장하였던 이미지, 또는 사용자가 수정 페이지에서 이미지를 추가하였다가 취소한 이미지가 남아 있게 됩니다.
이러한 이미지는 DB에 정보가 저장이 되지 않은 이미지 입니다. 따라서 삭제를 해주어야 하는데 배치 프로그램(Batch Program)을 적용하여 지정한 시간에 DB에 정보가 없는 이미지 파일들을 삭제하는 작업을 수행하도록 만들 것입니다.
본격적으로 구현하기 앞서 배치 프로그램이 무엇인지 간략히 알아보고, 우리 프로젝트에 적용하기 위해 기본적인 환경설정하는 법을 알아볼 것입니다.
순서
1. 배치 프로그램이란?
2. 환경설정
3. 테스트 해보기
1. 배치 프로그램이란?
배치 작업(Batch Processor)을 수행하는 프로그램
여기서 배치 작업이란 최종 사용자의 개입 없이(또는 자원이 허가한다면) 실행을 스케줄링할 수 있는 작업(job)의 실행을 의미합니다(위키). 쉽게 말해 수행되어야 할 어떠한 '작업'을 실시간으로 바로바로 수행하는 것이 아니라, 지정한 시간에 일괄적으로 작업을 처리하는 것을 말합니다.
이러한 배치 작업을 수행하는 배치 프로그램은 은행의 정산작업과 같은 업무에 적용을 할 수 있습니다. 또 다른 예로는 주문 앱에서 주문 정보를 DB에 저장하는 작업입니다. 인기가 많은 주문 앱의 경우 분당 수 만 건의 주문 요청이 있을 수 있습니다. 이러한 정보들을 실시간으로 DB에 저장을 하게 된다면 너무 많은 자원이 불 규칙적으로 소모되어야 할 것입니다. 따라서 이러한 정보들을 임시 저장소에 저장해 두었다가 지정한 시간에 주기적으로 지정한 수만큼의 데이터를 DB에 저장하는데 배치 프로그램을 활용할 수 있을 것입니다.
배치 프로그램은 'Spring Batch', 'Quartz' 등 이 있습니다. 이 중 우리는 비교적 환경설정이 쉬운 'Quartz'를 사용할 것입니다.
2. 환경설정
가장 먼저 pom.xml에 Qurartz 라이브러리를 추가해줍니다.
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz-jobs -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.3.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.2</version>
</dependency>
Quartz 스케줄링 기능을 사용하기 위해 설정을 하는 방법은 'xml 설정', '어노테이션 설정' 두 가지가 있습니다. 우리는 이 중 '어노테이션 설정' 방법을 사용할 것입니다.
설정에 앞서 배치 작업 처리만 전담할 클래스가 저장될 패키지를 추가해주겠습니다. "src/main/java" 경로에 com.vam.task 패키지를 추가해줍니다.
이번엔 root-context.xml 에서 스케쥴링 어노테이션을 사용하기 위한 설정과, 추가한 패키지의 클래스가 스프링에서 인식할 수 있도록 <component-scsan> 태그를 추가해줄 것입니다. root-context.xml 파일을 연 후 하단의 'namespace'탭을 클릭 후 "task"를 체크해줍니다.
하단의 Source 탭을 클릭하여 설정 코드가 있는 창으로 이동합니다. 스케줄링 어노테이션 사용과 추가한 패키지의 클래스들이 스프링에서 인식을 할 수 있도록 아래의 코드를 추가해줍니다.
<task:annotation-driven/>
<context:component-scan base-package="com.vam.task"></context:component-scan>
3. 테스트
Quartz를 사용하기 위한 기본적인 설정은 완료하였습니다. 클래스를 작성하여 실제로 지정한 시간에 주기적으로 코드를 실행시켜주는지 직접 확인해보도록 하겠습니다.
com.vam.task 패키지에 batchTest.java 파일을 추가해줍니다.
추가한 클래스 선언부에 해당 클래스가 스프링에서 인식을 할 수 있도록 @Component 어노테이션을 추가해주고, log메서드를 사용할 수 있도록 @Log4j 어노테이션을 추가해주었습니다.
우리가 처리하고자 하는 코드를 구현부로 가질 메서드를 선언해줍니다.
메서드의 구현부에는 코드가 실행되었음을 알 수 있도록 console창에 문구가 출력이 되도록 log.wnar() 메서드를 작성하였습니다. (log.info의 경우 console창에 출력이 되지 않습니다.)
추가한 메서드가 실행될 시간 설정을 하기 위해 해당 메서드의 선언부에 @Scheduled 어노테이션을 추가해줍니다.
@Scheduled 어노테이션에 속성과 속성값을 부여함으로써 시간을 지정해줄 수 있습니다. 속성의 종류는 아래의 그림과 같습니다.(다른 방식들 또한 자세히 알고 싶으시다면 "Scheduled 어노테이션"과 같은 키워드로 구글링 하시면 관련 글들을 보실 수 있습니다.)
우리는 시간을 지정해주는 방식을 cron 표현식을 사용할 것입니다. 따라서 cron 속성을 추가해준 후 1분마다 실행이 되도록 아래와 같은 속성 값을 부여해주었습니다. (cron은 유닉스 계열 컴퓨터 운영 체제의 시간 기반 잡 스케줄러입니다. cron은 시간을 지정해주기 위해 cron 표현식을 용합니다. cron과 시간 지정방법을 자세히 알고 싶으 시다면 "cron" 키워드를 통해서 구글링 해보시면 됩니다.)
서버를 실행하여 기다려 보시면 1분마다 우리가 작성한 문자가 지속적으로 출력되는 것을 볼 수 있습니다.
REFERENCE
- 코드로배우는 스프링 웹 프로젝트(남가람북스)
DATE
- 2020.07.26
'스프링 프레임워크 > 쇼핑몰 프로젝트' 카테고리의 다른 글
[Spring][쇼핑몰 프로젝트][29] 상품 이미지 수정 - 6(배치 프로그램 적용 3) (0) | 2021.07.28 |
---|---|
[Spring][쇼핑몰 프로젝트][29] 상품 이미지 수정 - 5(배치 프로그램 적용 2) (0) | 2021.07.27 |
[Spring][쇼핑몰 프로젝트][29] 상품 이미지 수정 - 3(서버처리) (0) | 2021.07.20 |
[Spring][쇼핑몰 프로젝트][29] 상품 이미지 수정 - 2(삭제, 재등록) (3) | 2021.07.14 |
[Spring][쇼핑몰 프로젝트][29] 상품 이미지 수정 - 1(이미지 출력) (0) | 2021.07.13 |