Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
오오픈픈 소소스스를를 활활용용한한 게게임임 배배치치 
플플랫랫폼폼 개개선선 사사례례 
NCSOFT 김형석
OVERVIEW 
• 구 배치 환경 소개 
• 개선 방향 
• 솔류션 평가 및 선정 
• 계획 및 일정 
• 개선 결과
배치 구성도 
HTTP 
XML 
Game API 
BATCH SERVER 
WEB DB
구 배치 수집 현황 
• 스케쥴링 : RAC XML에 명시된 Quart JOB 을 수행 
• 마샬링 : Xstream 
• 일 수집 데이터 평균 건수 : 10만건 
• 배치 JOB 건수 : 9 건 
• JOB 이력 관리...
문제점 
• 특정 시간 혹은 작업 이력테이블상에선 알수 없는 
이유로 인해 배치가 동작이 안됨 
• 특정 JOb 구동시 3시간 30 분 이상 소요 
가 되며 
시간이 지날수록 점차 증대 
• 재 구동시에도 반복적인 현상...
장애 및 지연 원인 
• 1건 처리시마다 Sleep 구간을 두어 시간이 지연 
• 대량의 데이타 등록후 데이타 미삭제로 인해 
인덱스 단편화 발생되어 성능 하락 
• 특정 JOB 실패시 작업 이력 테이블 삭제가 되며 
...
조치 사항 
• 시간 체크주기를 3 시간에서 4 시간 으로 임시 증가 
• 배치를 재 구동후 전체가 완료될때까지 수동 모니터링 
• JOB 별로 하나씩 처리후 Tomcat Restart 후 반복 확인
근본적인 문제 
• 로깅 및 메세지 , 예외 처리 문제 
– 특정 배치 JOB 에 대한 실행, 시작, 종료, 성공 여부, 오류 사항에 대한 로그가 
없어서 명확한 원인 파악이 불가능 
• 모니터링 시스템에 대한 부재 
...
OVERVIEW 
• 배치 소개 
• 개선 방향 
• 솔류션 평가 및 선정 
• 추진 계획 
• 개선 결과
개선 방향
사용자와의 상호 작용 
• 일반적인 온라인 Application 과 달리 사용자에 의해 
실행이 결정되지 않는다 . 
• 주어진 시간외에 독립적으로 배치를 실행 지원 
• 실시간 동작되는 배치를 업무 필요상 중단 혹은 ...
정해진 시간내에 실행이 완료 
• 사업 및 기획 요구 특성에 따라 수집 데이터 증가되고 
있으며 전형적인 CNP 패턴으로 유사 코드 반복으로 
인해 정책 반영이 느림 
• WAS 위에 동작되는 어플리케이션으로 서로 다른...
대량의 데이터를 다루기 위한 
성능 최적화 
• 배치 처리 에러 발생시 전체가 롤백됨 
• 트랜잭션 단위가 껀별로 진행되어 성능지연 
• 전체 ( 성공 &실패) 단위로 배치가 구성되어 부분 처 
리 미흡 
• FILE ...
관리 시스템 구축과 기반 설계 
• 모듈 활용의 부족 
• ORM BATCH 기능 부재 
• 장애 관련 모니터링 시스템 부족 
• 배치 상세 모니터링 시스템 구성 
• 아키텍처 모듈 최적화 
• 배치 정책 (재시도, 재...
배치 서비스 표준화 
• 배치에서의 정보 항목등이 명확하지 않음 
– 작업주기, 작업 유형 , 작업 현황 정의 
• 배치 기술 유형이 불분명하고 , 기술 유형별로 구현 방 
법이 상이 
– 입출력 리소스 추상화 , 사용...
배치 서비스 표준화 
• 개인역량에 따라 각기 배치 어플리케이션의 보안 , 성 
능, 
자원관리 개발이 이루어지고 품질 확보가 어려움 
• 기존 Batch SYSTEM 
– Linux 의 Crontab을 이용한 Shel...
배치 서비스 표준화 
• 트랜잭션에 대한 깊은 고민 부족 
– 지나치게 긴 트랜잭션은 DB 자원 (Rollback 
Segement) 
한계 부딪칠 가능성 높다 
– 짧은 트랜잭션은 좋은 성능 보장이 어려움 
DB 및 ...
배치 서비스 표준화 개선 절차 
• 비즈니스 변화에 대한 빠른 대응과 저 비용으로 
고품질을 만들수 있어야 한다. 
• 유형별로 빨리 만들어 낼수 있어야 한다. 
• 반복되는 로깅, 보안, 예외처리, 신경 끄기 
• 개...
OVERVIEW 
• 배치 소개 
• 개선 방향 
• 솔류션 평가 및 선정 
• 추진 계획 
• 개선 결과
솔류션 평가 및 선정 
• SPRING BATCH 
• SPRING DATA JPA 
• SPRING BOOT 
• JdbcTemplate 
• Java Configuration
SPRING BATCH + ALPHA 
• Run Tier : 실행과 스케쥴링 담당 ( Spring Boot, Jenkins) 
• Job Tier : 전체적인 JOB 수행 책임 (Spring Batch) 
• Appl...
SPRING BATCH 
• Spring 의 기술력과 컨설팅 회사인 Accenture 의 
대형 금융권 배치 기술 아키텍처의 경험이 녹여듬 
• 자바 환경에서 사실상 표준인 Spring 활용 
• 국내 및 해외 유수 보...
SPRING BATCH 
AmqpItemReader 
JpaPagingItemReader 
IbatisPaingItemReader 
JdbcCursorItemReader 
MultiResourceItemReader 
F...
SPRING BATCH 
문서 참고 : http://docs.spring.io/spring-batch-old/1.1.x/spring-batch-docs/reference/html-single/index.html
SPRING BATCH 
• 혼자 이해하던 복잡한 Legacy 배치를 배치 프 
레임워크 변환후 동료들과 공유 가능 
• JOB 문제시 추적 범위가 좁혀져 오류 발생시 
원인파악이 쉬움 
• 코딩량이 이전에 비해 ½로 ...
SPRING DATA JPA 
• 도메인 클래스에 대한 투명한 감시 및 관리 
• 페이징 지원, 다이나믹 쿼리 수행, 데이터 엑세스 코드를 도메인에 통합 
• ANNOTATION 으로 테이블 매핑
SPRING DATA JPA
SPRING DATA JPA 
• 반복적인 쿼리 노가다 삽질 작업 제거 
• 엔티티 기반 도메인 설계에 집중 
• 비즈니스 로직 구현 최소화 
• 인터페이스 정의만 하면 알아서 구현체 생성 
• 변경 사항에 대한 개발 ...
SPRING BOOT 
• Spring 프로젝트 개발을 빠르고 다양한 방법으로 
시작할수 있도록 한다. 
• 설정을 위해 별도의 코드 구현이 없으며 XML 이 
필요치 않다. 
• Tomcat 과 Jetty가 내장됨 
...
SPRING BOOT 
spring-boot-starter-actuator 
spring-boot-starter-amqp 
spring-boot-starter-aop 
spring-boot-starter-batch 
s...
SPRING BOOT 
Endpoints 
ID 설명 
Autoconfig 자동 설정되거나 설정되지 않는 목록들과 그 이유 
Bean 어플리케이션에서 선언한 Bean 목록들 
Configprops Properties 로...
SPRING BOOT 
Endpoints Example
SPRING BOOT 
Magic 
@Configuration 
@EnableAutoConfiguration 
@ComponentScan 
public class Start { 
public static void mai...
JAVA CONFIGURATION 
스크롤의 압박
JAVA CONFIGURATION
OVERVIEW 
• 배치 소개 
• 개선 방향 
• 솔류션 평가 및 선정 
• 추진 계획 
• 개선 결과
추진 계획 
2014 
3월 4월 5월 
13 19 03 30 08 20 28 
Start With GitHub 
1차 Prototype 구현 
성능 테스트 
Major JOB 완료 
및 모듈 구성 
2차 Prototy...
OVERVIEW 
• 배치 소개 
• 개선 방향 
• 솔류션 평가 및 선정 
• 추진 계획 
• 개선 결과
속도 및 코드 개선 
배치 수행 시간 코드 라인 수 
Lombok 
제외
운영 및 모니터링 개선 
• Jenkins 을 활용한 스케쥴링 자동화 
– Job failure, Load balancing 
– Web UI에서 로그 확인 
– Retry , 노드 확장성 
Jenkins JOB Spr...
운영 및 모니터링 개선 
스케쥴 관리 
실행 스크립트 
Profile 설정
운영 및 모니터링 개선 
• JOB 실패시 DB 이력 
•
운영 및 모니터링 개선 
• Spring Batch Listener 를 활용한 배치 상세 로그 관리 
– Job 별 수행건수, 수행시간, 에러메세지, 배치 상태, 
커밋, 롤백, 파라미터 관리, Skip, 에외 처리 기...
운영 및 모니터링 개선 
Spring Boot 를 활용한 어플리케이션 생성 , JOB 손쉬운 관리 
#SPRING BATCH 
Spring.batch.job.names=armorItemXmlToDbJob 
Spring....
테스트 및 유지보수 개선 
• 망별 환경설정을 통해 XML , URL Resource 자동 분기 
– Spring.profiles.active, spring.core.io.resource
테스트 및 유지보수 개선 
• 단계별 JOB 수행 및 테스트 코드를 통해 빠른 테스트 
진행 및 선택적 확인 가능 
– Full Test Code Support
테스트 및 유지보수 개선 
• SPRING DATA JPA를 통한 반복적 쿼리 작업 제거 
NO
테스트 및 유지보수 개선 
• Web Project에서 배치를 제거하여 관심 분리 
• 유지보수 집중화 
WEB WEB 
BATCH 
BATCH
로직 개선 
• 쿼리 및 비즈니스 로직 최소화 
MVC 
패턴 
SPRING 
DATA 
SPRING 
BATCH 
SPRING 
DATA 
Domain -> Service -> ServiceImpl -> DAO -> ...
배포 개선 
With Spring BOOT
고려사항 
• 코드양은 줄어드는 반면 개념이해는 필수 
• SPRING 프로젝트들은 계속 진화중 
• SPRING-BATCH 는 동일 JOB Repository 에 동일한 JOB-NAME 과 
JOB-PARAMETER ...
참고 
• http://blog.skcc.com/932 
• http://www.manageability.org/blog/stuff/open-source-etl 
• http://docs.spring.io/spring-...
DEMO 
• https://github.com/ghostflare76/spring-batch-extension/ 
tree/master/spring_batch
배치는 
오픈소스+ 스프링 조합으로 
간단하게 끝
Upcoming SlideShare
Loading in …5
×

오픈 소스를 활용한 게임 배치 플랫폼 개선 사례

2,705 views

Published on

Spring Batch 및 Spring 프로젝트를 활용한 게임 플랫폼 배치 개선 사례 공유

Published in: Software

오픈 소스를 활용한 게임 배치 플랫폼 개선 사례

  1. 1. 오오픈픈 소소스스를를 활활용용한한 게게임임 배배치치 플플랫랫폼폼 개개선선 사사례례 NCSOFT 김형석
  2. 2. OVERVIEW • 구 배치 환경 소개 • 개선 방향 • 솔류션 평가 및 선정 • 계획 및 일정 • 개선 결과
  3. 3. 배치 구성도 HTTP XML Game API BATCH SERVER WEB DB
  4. 4. 구 배치 수집 현황 • 스케쥴링 : RAC XML에 명시된 Quart JOB 을 수행 • 마샬링 : Xstream • 일 수집 데이터 평균 건수 : 10만건 • 배치 JOB 건수 : 9 건 • JOB 이력 관리 단일 테이블을 통해 전체 JOB 이 수행 여부 체크 • (조건 : 완료가 안되었거나 작업 완료후 4시간 지난경우)
  5. 5. 문제점 • 특정 시간 혹은 작업 이력테이블상에선 알수 없는 이유로 인해 배치가 동작이 안됨 • 특정 JOb 구동시 3시간 30 분 이상 소요 가 되며 시간이 지날수록 점차 증대 • 재 구동시에도 반복적인 현상 발생되며 톰켓상 오류로는 배치 상세 문제 확인이 어렵고 테스트가 불가능 .
  6. 6. 장애 및 지연 원인 • 1건 처리시마다 Sleep 구간을 두어 시간이 지연 • 대량의 데이타 등록후 데이타 미삭제로 인해 인덱스 단편화 발생되어 성능 하락 • 특정 JOB 실패시 작업 이력 테이블 삭제가 되며 해당 JOB 재시도가 아닌 전체 배치 재 구동되어 시간 지연 • 데이터 한건마다 트랜잭션을 수행하며 대량 데이터 일괄 처리를 위한 ORM BATCH 기능 부재
  7. 7. 조치 사항 • 시간 체크주기를 3 시간에서 4 시간 으로 임시 증가 • 배치를 재 구동후 전체가 완료될때까지 수동 모니터링 • JOB 별로 하나씩 처리후 Tomcat Restart 후 반복 확인
  8. 8. 근본적인 문제 • 로깅 및 메세지 , 예외 처리 문제 – 특정 배치 JOB 에 대한 실행, 시작, 종료, 성공 여부, 오류 사항에 대한 로그가 없어서 명확한 원인 파악이 불가능 • 모니터링 시스템에 대한 부재 – 배치 오류시 개발자에 의한 확인보다는 장애 확인요청에 의한 대응 • 일괄 처리 정책 미흡 – 대량의 데이터 처리시 DB 에 영향을 최소화 하며 일정 단위로 나누어 한꺼번에 처리하는 방법이 필요함 • 부분 처리에 대한 고려 필요 – 실행 중인 작업이 중간에 에러 발생시 전체 작업을 재시도하기때문에 진행 부분에 대한 파악이 어려움 • 테스트 환경의 어려움 : – 처리되는 전체작업을 하나의 단위로 처리하는 경우가 많기 때문에 에러 발생시 디 버깅에 어렵다.
  9. 9. OVERVIEW • 배치 소개 • 개선 방향 • 솔류션 평가 및 선정 • 추진 계획 • 개선 결과
  10. 10. 개선 방향
  11. 11. 사용자와의 상호 작용 • 일반적인 온라인 Application 과 달리 사용자에 의해 실행이 결정되지 않는다 . • 주어진 시간외에 독립적으로 배치를 실행 지원 • 실시간 동작되는 배치를 업무 필요상 중단 혹은 재 시작을 손쉽게 할수 있어야 한다.
  12. 12. 정해진 시간내에 실행이 완료 • 사업 및 기획 요구 특성에 따라 수집 데이터 증가되고 있으며 전형적인 CNP 패턴으로 유사 코드 반복으로 인해 정책 반영이 느림 • WAS 위에 동작되는 어플리케이션으로 서로 다른 배치 가 영향을 주고 받아 성능 문제 발생 • 업무 로직 개선과 배치 분리 개선 병행
  13. 13. 대량의 데이터를 다루기 위한 성능 최적화 • 배치 처리 에러 발생시 전체가 롤백됨 • 트랜잭션 단위가 껀별로 진행되어 성능지연 • 전체 ( 성공 &실패) 단위로 배치가 구성되어 부분 처 리 미흡 • FILE 및 DB I/O 최소화 및 프로그램 최적화 • 병렬 처리
  14. 14. 관리 시스템 구축과 기반 설계 • 모듈 활용의 부족 • ORM BATCH 기능 부재 • 장애 관련 모니터링 시스템 부족 • 배치 상세 모니터링 시스템 구성 • 아키텍처 모듈 최적화 • 배치 정책 (재시도, 재시작,건너뛰기) 수립 • SPRING 및 오픈 소스 최대 활용 • Jenkins 활용한 배치 모니터링 시스템 구성
  15. 15. 배치 서비스 표준화 • 배치에서의 정보 항목등이 명확하지 않음 – 작업주기, 작업 유형 , 작업 현황 정의 • 배치 기술 유형이 불분명하고 , 기술 유형별로 구현 방 법이 상이 – 입출력 리소스 추상화 , 사용 도구 , 처리 흐름 , 적 용 기술
  16. 16. 배치 서비스 표준화 • 개인역량에 따라 각기 배치 어플리케이션의 보안 , 성 능, 자원관리 개발이 이루어지고 품질 확보가 어려움 • 기존 Batch SYSTEM – Linux 의 Crontab을 이용한 Shell Script – Windows 의 작업스케쥴러를 이용한 batch script – Web Service 안에 Web Call 호출 방식 – Web Service 안에 QuartzJob 이용 – 자체 배치 플랫폼 개발 – Legacy (C, C++, php, ETL, rsync, perl, python, Pure Java)
  17. 17. 배치 서비스 표준화 • 트랜잭션에 대한 깊은 고민 부족 – 지나치게 긴 트랜잭션은 DB 자원 (Rollback Segement) 한계 부딪칠 가능성 높다 – 짧은 트랜잭션은 좋은 성능 보장이 어려움 DB 및 운영 특성에 맞게 일정 사이즈로 데이터 를 균일하게 Fetch 하여 적정횟수 만큼 Commit 문서 참고 : http://helloworld.naver.com/helloworld/1247
  18. 18. 배치 서비스 표준화 개선 절차 • 비즈니스 변화에 대한 빠른 대응과 저 비용으로 고품질을 만들수 있어야 한다. • 유형별로 빨리 만들어 낼수 있어야 한다. • 반복되는 로깅, 보안, 예외처리, 신경 끄기 • 개발자에게 노출이 필요한 부분 최소화 • 배치 기반 특성이 충분히 반영되어야 한다
  19. 19. OVERVIEW • 배치 소개 • 개선 방향 • 솔류션 평가 및 선정 • 추진 계획 • 개선 결과
  20. 20. 솔류션 평가 및 선정 • SPRING BATCH • SPRING DATA JPA • SPRING BOOT • JdbcTemplate • Java Configuration
  21. 21. SPRING BATCH + ALPHA • Run Tier : 실행과 스케쥴링 담당 ( Spring Boot, Jenkins) • Job Tier : 전체적인 JOB 수행 책임 (Spring Batch) • Application Tier : JOB 을 수행하는 필요한 컴포넌트 (Spring Data Jpa, Java Configuration) • Data Tier : DataBase, Flat, XML 등 물리적 데이터 리소스
  22. 22. SPRING BATCH • Spring 의 기술력과 컨설팅 회사인 Accenture 의 대형 금융권 배치 기술 아키텍처의 경험이 녹여듬 • 자바 환경에서 사실상 표준인 Spring 활용 • 국내 및 해외 유수 보험 및 금융기관에서 채택되어 전사 표준 배치로 사용중 • Spring 추상화 기술로 특정 기술에 종속적이지 않음
  23. 23. SPRING BATCH AmqpItemReader JpaPagingItemReader IbatisPaingItemReader JdbcCursorItemReader MultiResourceItemReader FlatFileItemReader HibernatecursorItemReader JmsItemReader ListItemReader MongoItemReader Neo4jItemReader RepositoryItemReader ResourceItemReader StaxEventItemReader StoredProcedureItemReader
  24. 24. SPRING BATCH 문서 참고 : http://docs.spring.io/spring-batch-old/1.1.x/spring-batch-docs/reference/html-single/index.html
  25. 25. SPRING BATCH • 혼자 이해하던 복잡한 Legacy 배치를 배치 프 레임워크 변환후 동료들과 공유 가능 • JOB 문제시 추적 범위가 좁혀져 오류 발생시 원인파악이 쉬움 • 코딩량이 이전에 비해 ½로 줄어듬 • 배치 로직 구현이 단일건 대상으로 이해가 쉬 움
  26. 26. SPRING DATA JPA • 도메인 클래스에 대한 투명한 감시 및 관리 • 페이징 지원, 다이나믹 쿼리 수행, 데이터 엑세스 코드를 도메인에 통합 • ANNOTATION 으로 테이블 매핑
  27. 27. SPRING DATA JPA
  28. 28. SPRING DATA JPA • 반복적인 쿼리 노가다 삽질 작업 제거 • 엔티티 기반 도메인 설계에 집중 • 비즈니스 로직 구현 최소화 • 인터페이스 정의만 하면 알아서 구현체 생성 • 변경 사항에 대한 개발 기간 단축 • 코딩량이 이전의 ½ 로 줄어듬 • 손쉬운 테스트 코드 작성
  29. 29. SPRING BOOT • Spring 프로젝트 개발을 빠르고 다양한 방법으로 시작할수 있도록 한다. • 설정을 위해 별도의 코드 구현이 없으며 XML 이 필요치 않다. • Tomcat 과 Jetty가 내장됨 • 임베디드서버, 시큐리티, 헬스체크, 외부 설정 연 계등 개발의 모든 사이클을 제공한다.
  30. 30. SPRING BOOT spring-boot-starter-actuator spring-boot-starter-amqp spring-boot-starter-aop spring-boot-starter-batch spring-boot-starter-data-elasticsearch spring-boot-starter-data-gemfire spring-boot-starter-data-jpa spring-boot-starter-data-mongodb spring-boot-starter-data-rest spring-boot-starter-data-solr spring-boot-starter-freemarker spring-boot-starter-groovy-templates spring-boot-starter-hornetq spring-boot-starter-integration spring-boot-starter-jdbc spring-boot-starter-jetty spring-boot-starter-log4j spring-boot-starter-logging spring-boot-starter-mobile spring-boot-starter-parent spring-boot-starter-redis spring-boot-starter-remote-shell spring-boot-starter-security spring-boot-starter-social-facebook spring-boot-starter-social-linkedin spring-boot-starter-social-twitter spring-boot-starter-test spring-boot-starter-thymeleaf spring-boot-starter-tomcat spring-boot-starter-velocity spring-boot-starter-web spring-boot-starter-websocket spring-boot-starter-ws spring-boot-starter Boot Application Starter
  31. 31. SPRING BOOT Endpoints ID 설명 Autoconfig 자동 설정되거나 설정되지 않는 목록들과 그 이유 Bean 어플리케이션에서 선언한 Bean 목록들 Configprops Properties 로 선언된 목록들 Dump Thread Dump Env 시스템 환경 및 어플리케이션 환경 목록 Health 어플리케이션 상태 체크 Info 어플리케이션 정보 metrics 어플리케이션의 메트릭스 정보 mappings @RequestMapping 에 매핑된 경로 정보 shutdown 어플리케이션 종료 trace Http 요청 정보
  32. 32. SPRING BOOT Endpoints Example
  33. 33. SPRING BOOT Magic @Configuration @EnableAutoConfiguration @ComponentScan public class Start { public static void main(String[] args) { if (args.length == 0) { args = new String[]{ "date=" + getCurrentDate()}; } SpringApplication.run(AppConfig.class, args); }
  34. 34. JAVA CONFIGURATION 스크롤의 압박
  35. 35. JAVA CONFIGURATION
  36. 36. OVERVIEW • 배치 소개 • 개선 방향 • 솔류션 평가 및 선정 • 추진 계획 • 개선 결과
  37. 37. 추진 계획 2014 3월 4월 5월 13 19 03 30 08 20 28 Start With GitHub 1차 Prototype 구현 성능 테스트 Major JOB 완료 및 모듈 구성 2차 Prototype Spring Data JPA 연동 Spring Boot 연동 망별 성능 테스트 End With Live Deploy Jenkins 을 활용한 스케쥴링 Timeline
  38. 38. OVERVIEW • 배치 소개 • 개선 방향 • 솔류션 평가 및 선정 • 추진 계획 • 개선 결과
  39. 39. 속도 및 코드 개선 배치 수행 시간 코드 라인 수 Lombok 제외
  40. 40. 운영 및 모니터링 개선 • Jenkins 을 활용한 스케쥴링 자동화 – Job failure, Load balancing – Web UI에서 로그 확인 – Retry , 노드 확장성 Jenkins JOB Spring Batch
  41. 41. 운영 및 모니터링 개선 스케쥴 관리 실행 스크립트 Profile 설정
  42. 42. 운영 및 모니터링 개선 • JOB 실패시 DB 이력 •
  43. 43. 운영 및 모니터링 개선 • Spring Batch Listener 를 활용한 배치 상세 로그 관리 – Job 별 수행건수, 수행시간, 에러메세지, 배치 상태, 커밋, 롤백, 파라미터 관리, Skip, 에외 처리 기록…
  44. 44. 운영 및 모니터링 개선 Spring Boot 를 활용한 어플리케이션 생성 , JOB 손쉬운 관리 #SPRING BATCH Spring.batch.job.names=armorItemXmlToDbJob Spring.batch.job.enabled=true Spring.batch.initalizer.enabled=false • spring.batch.job.names : Context 에 등록된 Bean 중 해당하는 JOB 만 명시적으로 선 언하여 사용할지 선택하며 comma 로 구분 • spring,batch.job.enabled : Spring Ruuner 가 구동시 모든 JOB 을 수행할지 여부 • spring,batch.initializer.enable : 데이타베이스 플랫폼에 해당하는 SQL 초기화 스크립 트를 수행 여부
  45. 45. 테스트 및 유지보수 개선 • 망별 환경설정을 통해 XML , URL Resource 자동 분기 – Spring.profiles.active, spring.core.io.resource
  46. 46. 테스트 및 유지보수 개선 • 단계별 JOB 수행 및 테스트 코드를 통해 빠른 테스트 진행 및 선택적 확인 가능 – Full Test Code Support
  47. 47. 테스트 및 유지보수 개선 • SPRING DATA JPA를 통한 반복적 쿼리 작업 제거 NO
  48. 48. 테스트 및 유지보수 개선 • Web Project에서 배치를 제거하여 관심 분리 • 유지보수 집중화 WEB WEB BATCH BATCH
  49. 49. 로직 개선 • 쿼리 및 비즈니스 로직 최소화 MVC 패턴 SPRING DATA SPRING BATCH SPRING DATA Domain -> Service -> ServiceImpl -> DAO -> DaoImpl -> 쿼리 Domain -> Service -> Repository Domain -> Processor
  50. 50. 배포 개선 With Spring BOOT
  51. 51. 고려사항 • 코드양은 줄어드는 반면 개념이해는 필수 • SPRING 프로젝트들은 계속 진화중 • SPRING-BATCH 는 동일 JOB Repository 에 동일한 JOB-NAME 과 JOB-PARAMETER 로 JOB Instance 생성 불가 • BATCH JOB 은 성격이 다양하기 때문에 SPRING에서 다양한 해결 방법을 지원한다 • 바퀴를 재 개발하지 말고 오픈 소스를 찾아서 사용하자 • 장애 발생을 최소화 하고 TestCase를 통해 사전에 문제를 예방 • 테스트가 어느 자리, 어느 망에서도 쉽게 재현되도록 준비
  52. 52. 참고 • http://blog.skcc.com/932 • http://www.manageability.org/blog/stuff/open-source-etl • http://docs.spring.io/spring-boot/docs/current- SNAPSHOT/reference/htmlsingle/#boot-features-external-config • http://www.slideshare.net/knight1128/batch-8508863 • http://www.dbguide.net/knowledge.db? cmd=view&boardUid=128487&boardConfigUid=20&boardStep=0 •
  53. 53. DEMO • https://github.com/ghostflare76/spring-batch-extension/ tree/master/spring_batch
  54. 54. 배치는 오픈소스+ 스프링 조합으로 간단하게 끝

×