스프링 부트로 syslog 를 분석하는 데몬 어플리케이션 을 만들어 보도록 한다.
가정:
syslog message 에는 IPAddress,MacAddress,Time, JobType 관련 정보가 포함 되어있다.
해당 메시지에서 ip 와 mac 주소,jobtype 을 추출하여 각 jobType 에 따라 처리하도록 한다.
sts 로 spring start project 생성한다.
dependency 에 대해서는 필요할 경우 추가하 면 되기 때문에 여기서는 그냥 skip...
생성된 데몬app 의 클래스 구조는 아래와 같다.
springApplication클래스가 @SpringApplication을 사용하여 실행 하게 된다.
@SpringApplication 은 설정 부터 시작하여 컴포넌트 스캔을 비롯한 각종 어노테이션을 포함한 개념이다.
스프링설정 파일에 필요한 설정부터 하도록 한다.
( 설정 파일 사용법을 알아보기 위함.)
[application.properties]
#jobtype of syslog message
syslog.marker.add=Add
syslog.marker.modify=Modify
syslog.marker.delete=Delete
#syslog analyzer pattern for ip and mac address
#ip,mac 이라는 named 패턴을 사용하도록 한다.
syslog.ip.pattern=(?<ip>(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))
syslog.mac.pattern=(?<mac>([0-9A-Fa-f]{2}[\\.:-]){5}([0-9A-Fa-f]{2}))
#syslog Analyzer pattern for port and gateway
syslog.default.port=100
syslog.default.gateway=40
먼저 전체적인 클래스 다이어그램을 보자.
Class:
Anaylzer
AnalyzerImpl
WorkerService
WorkerServiceImpl
WorkerController
Main
anayler 클래스는 run()메소드 하나를 포함하고 있다.
Analyzer 는 compoent 으로 되어있다.
실질적으로 AnaylzerImple 클래스에서 분석관련 메소드들을 private 으로 구현하여 run 메서드에서 호출 하도록 한다.
WorkerService 에서는 Future<Void> startAnalyzer()를 호함 하고 있다.
비동기적으로 이 함수를 실행 시키기 위해 아래와 같이 한다.
@Autowired
private Analyzer analyzer;
@Async
@Override
public Future<Void> startAnalyzer()
{
analyzer.run();
return new AsyncResult<Void>(null);
}
@Async 어노테이션을 붙임으로서 이 함수는 비동기실행 함수가 된다.
WorkerController클래스는 이러한 비동기 적 실행을 위해 Controller 역할을 할 수 있도록 해준다.
@Controller
public class WorkerController {
@Autowired
private WorkerService workerService;
// 의존하는 객체를 설정한 이후에 초기화 작업수행.
@PostConstruct
public void startWorkerFlow()
{
workerService.startAnalyzer();
}
}
최종적으로 메인 클래스인 DemoAapplication 에서 시작 할수 있도록 한다.
@EnableAsync
@EnableScheduling
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
프로그램을 시작하면 메인에서 DemoApplication클래스가 호출 되고 내부적으로 비동기 처리된 클래스들이 어노테이션들에 의해 작동 되게 된다.
서버에서 구동 시키려는 데몬 프로그램을 이런 과정으로 구현하면 데몬 프로그램은 쉽게 구현 할수있을것 같다.
'SpringBoot' 카테고리의 다른 글
java grok pattern (0) | 2015.10.12 |
---|---|
디렉터리의 특정패턴의 파일 리스트 가져오기 (0) | 2015.10.12 |
비트를 이용한 플래그 사용법 (0) | 2015.02.02 |
자바 데이터 베이스 연동 클래스 설계 (0) | 2014.11.07 |
자바 멤버 관리 클래스 다이어그램 (0) | 2014.10.25 |