세션 관리 : TTL과 함께 빠른 key - value 스토어로 사용하여 손쉬운 세션관리.
분산 환경에서의 이점 : 원격 시스템간 동일한 맵 형태의 데이터를 참고해야 할 때, 시스템 별 동기화가 어려운 문제가 있음. Redis 서버를 별도로 구축하여 값을 저장해두고 시스템마다 Redis 서버에서 값을 꺼내어 쓴다면 빠른 처리시간과 데이터 불일치 문제 해결 가능.
PM2 is a daemon process manager that will help you manage and keep your application online. 요약하면 PM2는 어플리케이션의 관리와 온라인상태를 유지하도록 돕는 역할을 하는 데몬 프로세스 관리자 라고 한다.
$ pm2 logs // 기본 15줄의 로그가 보인다.
$ pm2 logs --lines 200// 여러줄을 보고 싶을 경우 --lines 옵션을 사용한다.
실시간 로그도 간단한 명령어 하나로 확인 가능하다.
모니터링
$ pm2 monit
이 명령어로 대쉬보드 형태로 모니터링도 가능하다.
클러스터 모드
pm2를 클러스터 모드로 실행하지 않으면 fork 모드로 실행이 되는데 fork모드는 싱글스레드로만 동작한다. pm2의 장점인 멀티 스레드를 활용하기 위해 클러스터 모드로 실행해보자.
클러스터 옵션
--watch : PM2가 어플리케이션 변경사항을 자동으로 감지하여 서버를 재시작함-i (코어수) : 클러스터 모드로 실행할 시 사용할 코어수. max 로 적을시 cpu 코어 수 만큼 할당됨--name : 어플리케이션 이름--log (경로) : 로그 파일 경로-- arg1 arg2 arg3 : 스크립트에 전달 될 파라미터--restart-delay (딜레이 시간) : 재시작시 딜레이 시간 지정 (ms)--no-autorestart : 재시작 불가능하도록 설정함
외부 API 호출을 쉽게할 수 있도록 도와주는 HTTP 클라이언트 도구로 어노테이션으로 손쉽게 구현가능하다. Spring Cloud에서 Open Feign을 스프링 클라우드로 통합하였다.
기본설정
spring-cloud-dependencies 와 openfeign 의존성 추가를 해준다.
// Gradle 기준 예시compile("org.springframework.cloud:spring-cloud-dependencies:Finchley.SR3")
compile("org.springframework.cloud:spring-cloud-starter-openfeign:2.1.4.RELEASE")
Application 파일에 @EnableFeignClients 어노테이션을 추가해준다.
@SpringBootApplication@EnableFeignClients// 요거 추가 필요.
public class WebApplication {
publicstaticvoidmain(String[] args) {
SpringApplication.run(WebApplication.class, args);
}
}
사용법
jpa 사용법과 유사하다.
interface 를 만들고, @FeignClient 어노테이션을 정의하고 호출하기만 하면 된다.
// 동일한 도메인을 이용하는 여러 API의 경우 @FeignClient URL 속성에 공통부분을 적어주고, // interface 내부에 메서드를 정의할 때 개별 url 뒷부분의을 적어주면 이용 가능하다.@FeignClient(name = "testApi", url = "https://api.test.com", configuration = TestApi.Configuration.class)
public interface TestApi {
@GetMapping(value = "/abc/auth", headers = "Accept=application/json")
String getAuth(@RequestHeader("aaa") String param1, @RequestHeader("bbb") String param2); // 헤더에 들어갈 파라미터를 정의할 수도 있다.@GetMapping(value = "/def/select", headers = "Accept=application/json")
List<UserDao> getSelect(@SpringQueryMap UserDao param);
// interface 내에 설정을 정의할 수도 있다.classConfiguration {
@Bean
Encoder feignFormEncoder(ObjectFactory<HttpMessageConverters> converters) {
returnnewSpringFormEncoder(new SpringEncoder(converters));
}
}
}
위 클래스 안의 메서드를 호출하기만 하면 API 통신이 가능하다.
기타설정
타임아웃 설정
OpenFeign 이 제공하는 타임아웃은 두 종류가 있다.
connectTimeout: 1000
readTimeout: 30000
시간은 ms 기준으로, 1000 = 1초 이다.
설정은 properties 파일과 java Configuration 에서도 가능하며, properties가 우선순위를 가진다. 각 클라이언트 별로 다른 설정이 필요하면 @FeignClient 에 직접 Configuration을 설정하면 된다.
#yml 사용 예feign:client:config:default:connectTimeout:15000readTimeout:15000
로그설정
로그는 각각의 Feign client 마다 만들어지며 기본적으로 로그의 이름은 Feign client를 사용하는 인터페이스 명이다. Feign logging 은 오직 DEBUG level 에서 동작한다.