본문 바로가기
SpringBoot

spring boot 데몬 어플리케이션 만들기

by ByteBridge 2015. 9. 28.
반응형


스프링 부트로 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클래스가 호출 되고 내부적으로 비동기 처리된 클래스들이 어노테이션들에 의해 작동 되게 된다.


서버에서 구동 시키려는 데몬 프로그램을 이런 과정으로 구현하면 데몬 프로그램은 쉽게 구현 할수있을것 같다.


반응형