Configuration

소스 구조

ICE4 Backend Core를 설치하고나면 다음과 같은 디렉토리 구조로 소스가 구성된다.

각 디렉토리의 구성은 다음과 같다.

  • ansible : 대규모 사이트에서 배포를 구성하는 경우 Jenkins만으로 한계가 있기 때문에 서버의 구성이나 설치까지 담당할 수 있는 ansible을 사용하며, 이때 필요한 관련 스크립트가 작성되어 있다.

  • bin : 배포후 실행에 필요한 파일들을 보관

  • jsonSchema : ICE4에서는 스키마나 API등과 같은 중요 설정 데이터를 Json 파일로 관리하고 있으며, 이런 Json 파일을 작성하는 경우에 Validation이나 Suggest에 사용되는 Json Schema를 정의

  • kubernetes : Kubernetes 배포에 필요한 설정 정의

  • postman : 작성된 API에 대한 정의 및 테스트

  • programs : 배포 및 실행에 필요한 스크립트 정의

  • shell : SpringBoot 실행 및 중단에 필요한 스크립트 정의

  • src : 소스 저장

SpringBoot

SpringBoot의 설정 src/main/resource/application*.yml 형태로 저장 된다. yml 파일은 Profile에 따라서 application-dev.yml, application-prd.yml 과 같이 Profile을 붙여서 각각 정의한다. ICE에서는 이 Profile 기능을 활용하여 MSA 구조를 정의하기 때문에 매우 중요하게 사용된다.

yml 구조는 다음과 같다.

# Override the default Tomcat port of 8080 to "0", meaning # pick any available port. # This is necessary to be able to run multiple copies of the # application on the same machine. # session 및 JWT 의 시간은 분단위 입니다. spring: servlet: multipart: enabled: true max-file-size: 20MB max-request-size: 10MB profiles: active: default-dev devtools: restart: enabled: false add-properties: false server: http2: enabled: true port: 8443 compression: enabled: true mime-types: application/json,application/xml,text/html,text/xml,text/plain,text/javascript,application/javascript,text/css tomcat: uri-encoding: utf-8 accesslog: enabled: true rotate: true directory: /root/core/resource/log ssl: enabled: true key-alias: just10dev key-store: classpath:ssl/dev/just10dev.jks key-password: just10 key-store-password: just10 core: project: default internal-port: 8080 session-timeout: 30m cluster: api-url-prefix: http://dev-core.justten.io/ front-url-prefix: http://dev-builder.justten.io/ mode: all default-service-group: all members: 127.0.0.1 infinispan: cache-path: /root/core/resource/ice/default/cache jwt: issuer: I-ON secret-key: 1YfNBiacMwNdwWsDi05q13FJSKVXIyPjB8FaXfLTrgkAxht143ivTZzb0viYuPVp3R9ICxwUJi6dtLgRgFJHvFLClgQ0obwje4dtMDDSlWQPYllJZ0hb25ywxKwVLfBZ3KXd5K0OUae48185hdlmEyXp4BkrpFSAqANmM6DF8F2Ze19jGaosEZtHfuNFyC7tcLvOWKNX91RQGk6jQ0OlQNNZ87VOML8BGKM6eTafjqdWIviOelot8eYtrtfYIEVG token-prefix: SDP head-string: X-Authorization token-expiration-time: 1800 refresh-token-expiration-time: 1800 resource: path: /root/core/resource/ice/default/files json-store: /root/core/resource/ice/default/jsonStore git: local-path: /root/core/resource/ice/default/source git-url: http://dcsf-dev08.i-on.net/dxp/backendcore.git user-nm: ice@i-on.net pass-wd: ice40710 src-branch: refs/heads/develop dist-branch: refs/heads/staging i18n: defaults: ko-KR apiLog: true logging: config: classpath:logback-default-docker.xml level: web: info management: endpoints: web: exposure: include: "*" endpoint: health: show-details: ALWAYS saltKey: RwVn^Q>mmYp`*#v?#3QD]xyha @(E,/P3#3annC<h=S@+90D S{sy&8nY%c(M/9| aesKey: xd9b@87e4+71n2#3f4^b4g ice-email: template: dir: /root/core/resource/ice/template smtp: host: smtp.gmail.com port: 465 sender: id: justten@mail.i-on.net pw: dkdldhs!QAZ display: 아이온커뮤니케이션즈 mail: host: smtp.gmail.com port: 587 protocol: smtp default-encoding: UTF-8 username: your-email@domain password: password

여기서 spring은 spring의 기본 설정을 정의하는 부분이며, profiles.active=default-dev 이 부분이 해당 YML에 해당하는 profile을 정의한다. 또한 이 경우는 application-default-dev.yml로 파일명을 생성해야 한다.

server는 SpringBoot의 서버 기능과 Embedded Tomcat에 관한 설정을 정의하는 부분으로 필요한경우 max-thread와 같은 설정들을 추가할 수 있다.

core는 ICE4의 핵심 설정들을 다음과 같이 정의한다.

  • project : 해당 프로젝트 정의

  • internal-port : http 포트 정의, HTTPS는 server.port에 정의

  • session-timeout : 세션 타임 아웃 설정

  • cluster : MSA에 관련된 클러스터링 설정

  • infinispan : Infinispan 저장소 관련 설정

  • jwt : JWT 관련 설정

  • resource : 파일 관련 설정

  • git : LCD관련 수정 사항을 배포하기 위한 GIT 설정

  • i18n : 다국어 설정

  • apiLog : API 로그 생성 여부 설정

이렇게 설정된 설정 정보는 다음과 같이 소스에서 선언되어 접근 한다.

@Component @EnableConfigurationProperties @ConfigurationProperties(prefix = "core") public class CoreConfiguration { private static Logger logger = LoggerFactory.getLogger(CoreConfiguration.class); private static List<String> defaultUsedCookies = Arrays.asList(new String[]{"admJWT", "reAdmJWT", "mngJWT", "reMngJWT"}); @Autowired private ServerProperties serverProperties; @Autowired private ClusterConfiguration clusterConfiguration; @Autowired private JWTConfiguration jwtConfiguration; @Autowired private ResourceConfiguration resourceConfiguration; @Autowired private Environment environment; private String project = null; private Integer internalPort = null; private Duration sessionTimeout = null;

 

coreConfiguration.getJwtConfiguration().getTokenPrefix().concat(" ").concat(jwt); coreConfiguration.getInfinispan().getCachePath()

새로운 기능 개발에 필요한 설정이 있는경우 해당 Microservice 로 설정 root를 만들고 해당 설정을 정의하여 사용한다.