스프링캠프 2015
inside spring.io
- grunt.js vs gulp.js
- Config based : Code based
- 플러그인 다수 : 적음
curl.js
bye bye src/main/webapp
.addResourceLocations
WebJar 클라이언스 리소스를 묶은 것
- 왜 Client를 분리해야할까?
- 프론트엔드 영역을 백엔드 개발자들만 잘 아는 환경 안에 두는 것은 유연성이 떨어진다.
- 프론트엔드 빌드 도구를 독립적으로 사용할 수 있다.
ElephantDB
New Relic 모니터링 서비스 사용
스프링 환경변수
-
그냥 하면 되는 것이 아니다.
-
자주 변경되거나 확정되지 않은 데이터
- 소스에 박아 넣으면 안되는 정보
-
같은 용도이지만 개발, 테스트, 운영 등 다양한 조건마다 다른 데이터
- DB 커넥션 정보
- 외부 연동 URL 정보
-
다양한 곳에서 사용하는 공통 데이터 존재
-
환경변수가 중요한 이유?
- 시스템의 유연성
(1) 클래스 상수 (2) properties 파일 (3) Spring without Profile
-
3.1 이상에서 지원
-
약간 무식한(?) 방법
- java -Dkey=value
-
Maven과 Profile 기능 그리고, properties
-
mvn -P프로파일명 install -
Maven Profile 장점
- 스프링 애플리케이션에서는 단순한 설정형태 유지
-
단점: 클래스 수가 많아지면 IDE 멍하게 도는 경우가 많아짐
Spring Boot와 YAML
- YAML 핵심 장점
- 하나의 문서 안에 문서를 나눌 수 있는 문법
---
운영할수록 늘어가는 서버, 애플리케이션, 환경변수
-
Spring Cloud Config
- 환경변수를 제공해주는 REST API 서버
- 환경변수에 대한 암복호화 기능 내장
- JSON 형식으로 제공
-
예제 샘플
스프링 부트의 로깅 의존성 관리
- 어떤 로거를 썼는지 알 수 있는가?
- 스프링 부트는 JCL을 사용
- 애플리케이션은 SLF4j를 사용한다.
- 애플리케이션은 Logback을 사용한다.
JCL (commons-logging)
-
로깅 추상화 라이브러리
-
log -> log4j
-
JCL을 꺼리는 이유
- JCL은 클래스로더에 의존적인 방법으로 구현체를 찾는다.
-
SLF4J는 로깅 라이브러리를 런타임이 아닌 컴파일 타임에 정한다.
- 세 가지 모듈(Bridging, API, Binding)을 제공
- 로그 문자열의 연산이 없다. 나은 성능
모니터링 시스템
-
기존 모니터링 시스템 서비스별로 사용
- Zabbix, Nagios, splunk, Ganglia, Cacti
-
개발자가 보기 편한 모니터링 환경
-
collectd + logstash + elasticsearch + kibana
-
collectd의 소모 리소스가 매우 작아서 좋다.
-
elasticsearch는 kafka를 통해서 로그 데이터를 전달
-
kafka 로그를 스트링으로 보내주고 네트워크 장애시 큐 역할
-
프론트엔드는 루비온레일즈로 완전히 분리
-
Spring Boot Actuator
- HTTP endpoint(REST API), JMX, 등을 통해서 모니터링
Spring Integeration으로 본 메시징 세계
- RestTemplate vs Http-outbound-gateway
- 시스템 통합에 대한 해결방싱
- File Transfer
- Shared Database
- Remote Procedure Invocation
- Messaging
- Messaging
- 프로그램 간에 빠르고 신뢰할 수 있는 통신을 비동기 방식으로 가능케 하는 전송 기술
- Enterprise Integration Patterns
- Why Spring Integration?
- 퍼포먼스가 잘 나올까요?