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를 만들고 해당 설정을 정의하여 사용한다.