Post
KO

spring camp 2019

​

스프링캠프 2019

SPRINGCAMP 2019 애플리케이션 서버 개발자들과 함께 가치있는 기술에 관한 정보과 경험을 공유하고, 참가한 사람들과 함께 인연을 만들고, 시끌벅적하게 즐길 수 있는 개발자들을 위한 축제를 목표로 하는 비영리 컨퍼런스입니다. 2013년부터 시작된 Spring Camp는 개발자 커뮤니티의 자발적인 봉사로 운영되고 있습니다. “빨리 가려면 혼자가고, 멀리가려면 함께가라!” 우리는 개발자다라는 동질감을 가지고 함께 성장할 수 있는 개발자들을 위한 컨퍼런스. 우리 선조들이 품앗이를 통해서 부족한 일손을 거들며 함께 농사를…

​

​

트랙 1

![]()

​

넷플릭스는 지난 12월 자바로된 프로젝트들을 스프링 부트로 전환을 하였다.

스프링 부트 6.0 으로 올라갈 수 있다고 함. (가정)

​

spring framework 기반 개발 플랫폼.

​

spring boot는 빌드와 코드와 배포 등을 포함하고 있다.

​

gradle build DSL에, kotlin DSL부분이 추가 되었다고 함.

​

액츄에이터?

​

Spring boot 에서 BOM을 사용하면서 버전을 명시하지 않아도 사용이 가능하다고 함.

레퍼런스에 작성된 의존성 버전을 확인하면 버전을 명시하지 않아도 된다.

​

spring-boot-dependencies안에 버전들이 명시되어 있음.

​

부트에서 지원하지 않아도 gradle 자체에서도 버전을 관리하는 부분이 있다고 함.

implementation

​

@Profile 애노테이션을 이용하여, 환경에 따른 설정을 실행 시키게 한다.

-> properties로도 가능한데 음 설정 부분 변경일 때 괜찮을 듯, 하지만 코드 중복은 어떻게??할까

​

실행 시점에 속성 변경.

​

동적 properties 변경 관련해서는 예전에도 사용했던 기능임.

​

application.yml에 include 확인해보자.

multi project 내의 properties를 추가할 수 있다.

​

​

Spring Actuator

​

http://wonwoo.ml/index.php/post/1787

Spring boot Actuator 사용해보자 (1)

오늘은 오랜만에 Spring 이야기를 한다. 맨날 원칙원칙 하는 이야기만 했으니 오늘은 쉬어가는 타임으로 재미있는(?)걸 해보도록 하자. 그 중에 오늘은 Spring boot 프로젝트 중에 Actuator 프로젝트가 있다. 이것은 애플리케이션 내부를 볼 수 있게 하는 아주 재밌는 기능이다. Spring의 컨텍스트 빈, 자동설정, 환경설정, 매트릭 정보…

한번 살펴보자.

책에서도 봣던거였는데 훔 -_-;

​

트랙 1

![](/assets/images/posts/221524024111/e9aa5015b818.png?type=w580)

​

spring boot 1.x

​

Metric 관련 확인은 계층형으로 작성되다보니 관리가 힘들었다.

​

spring boot 2.x

Dimensional 지표 구조 로 변경 됨.

Tags == Dimension

== key/value pair

​

장점

  • 이해하기 쉬움

  • 여러 관점에서 지표 분석 가능

  • 유연함. 손쉬운 Tag 추가/삭제

​

지표가 매우 다양하고 자세하게 제공해 줌.

​

Three key metrics you should measure - Tom Wilkie

​

Rate, Errors, Duration

​

반드시 3가지 지표는 측정해야 된다.

​

Spring boot2 base on Micrometer

​

Micrometer 는 지표를 시각화 해주는 도구

​

​

1트랙

![](/assets/images/posts/221524024111/bc8a3e6c5ee7.png?type=w580)

​

​

reactor-kafka

​

listener 레코드 consume 후 처리할 때, 동기로 처리가 되기 때문에 처리량이 떨어질 수 있다.

​

flux를 활용해서 사용한다고 하는 것과,

동일 메시지 수신에 대한 문제가 있었다고 한다.

​

그런데 이게 ? 정확히 무슨 내용인지 이해가 되지 않음 중복 메시지가 왜 발생되는가?

​

논블록킹에 문제는.. 없는가?

​

트랙2

![](/assets/images/posts/221524024111/87b75f1ce6b4.png?type=w580)

레거시 코드란 무엇인가?

​

테스트 코드로 커버가 되지 않으며

유지보수가 되고 있지 않음.

더러운코드 등등

​

결국 레거시 코드를 개선하고 내것으로 만들어야 함.

​

어떻게 개선해야 될까?

​

물어보면 주변에선 아래와 같이 이야기를 함.

DDD로 바꾸세요.

MSA로 분리하세요.

​

이런 내용이 아닌 이론적으로 설명한다.

​

내편으로 만들기

-> 레거시 코드는 잘동작하고 있는 것이니 비난하지 말고 이해한다.

​

어떻게 내편으로 만드나?

로직을 분석

테스트를 돌려본다.

​

  1. 테스트 코드를 짜기 시작한다.

​

  1. 운영중인 코드 이기 때문에 당장 해결 해야할 우선 순위를 정해야 한다.

​

한걸음씩 가기

​

  1. 코드 패키지 분리

언제든 작은 단위로 나뉠 수 있도록 정리를 함.

​

  1. 코드 및 패키지 등이 분리가 된 뒤 framework 버전을 올린다.

​

아픈곳 고치기

​

  1. CPU 사용량이 높은 성격의 로직

​

코드에 CPU 사용량을 많이 점유하는 Thread를 찾아 무엇이 문제인지 확인.

​

  1. Memory 절약하기

​

128GB 물리메모리중 32GB만 사용하는 것을 보고, Thread dump 분석 메모리 릭이 발견됨.

​

정규식을 이용할 때 사용하는 java Matcher에서 문제가 있어서 해당 부분을 찾아 변경.

JDK 버전업으로 문제 해결.

​

내장 라이브러리 쪽에 문제를 해결하기 위해서 jdk 버전업을 하는데, 나도 heap dump를 다시 확인해보고 jdk 버전도 확인해봐야 될 것 같음.

​

조금더 다듬기

​

기존에 레거시에 문제가 되었던 설정 부분에 대한 환경을 구성한다. spring cloud config emd.

​

트랙 1

![](/assets/images/posts/221524024111/27b8ed794b32.png?type=w580)

강연자는 새로운 언어를 사용하는 (코틀린) 회사를 알아보셨다고 함. 이미 네이버 쪽에서도 일하시고 여러가지 일을 하시던 중에 옴기신거였고 그러던 중 쏘카로 들어가셨다고 함.

​

런타임시에 NPE 체크 방법에 대해 질문하거나 (정답 TDD), 경험하셨던 시행착오를 설명해보고 싶으셨는데 세션 발표시간이 매우 부족해서 제대로 다 말씀하시지 못한거 같다.

​

코틀린에 대한 시행착오 등을 들었을 땐 아리송 한 면도 있었다.

​

​

​

트랙 1

![](/assets/images/posts/221524024111/ff923939ab53.png?type=w580)

Kotlin 장점과 Java와의 호환성

​

Kotlin 에서 Java class 호출은 자연스러움

​

Java 에서 Kotlin 호출은 제한적임.

​

Spring Data Repository 와 Kotlin

​

코틀린 Kotlin ?. 연산자 ( 코틀린의 null 처리 방식)

우선 코틀린에서는 null이 기본적으로 허용되지 않는다. var c:Int = null;위처럼 어떤 형식(Int)을 주고…

Kotlin 에서 Java를 호출 할 경우 Java 쪽에서 Kotlin 관련된 Exception을 지원해준다.

​

개인적인 생각으로는 간결하다라기 보다는 부자연스러운..

​

@ManyToOne이 코틀린에서 어떻게 동작하는지, (Lazy 로딩 포함)

​

코틀린에서는 기본적으로 final 클래스로 정의가 됨, 지연 로딩이 작동하기 위해서는 class 정의 앞에 open이라 적어 줘야 지연 로딩이 가능해 진다고 함.

​

이러한 문제로 간결함이 사라질 경우마다 컴파일러 플러그인을 설치하여 처리한다 -_-;고 한다.

​

결론 plugin 깔면 잘 된다.

​

@OneToMany 시에는 타입을 찾지 못하여 문제가 생긴다..는 군..

@JvmSuppressWildcards 를 붙여서 하거나, 기본 불변 List 타입을 MutableList 타입으로 변경한다.

​

자바와 코틀린 간 의미가 다른 코드 들이 있기 때문에 조심하라고 함.

​

자바와 호환성 문제가 있을 때는 바이트코드를 확인해보자.

​

​

This article is licensed under CC BY 4.0 by the author.