당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ naver corp....

178
NAVER Corp. 당신도 할 수 있는 레거시 프로젝트 개선 이야기 작성자: 이경일( [email protected] , [email protected] ) 소속팀/ 상위부서 : 쇼핑데이터개발 / 쇼핑플랫폼, 비즈OCR개발/ Glace개발

Upload: others

Post on 08-Jul-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

당신도 할 수 있는레거시 프로젝트 개선 이야기

작성자: 이경일([email protected], [email protected])소속팀/ 상위부서: 쇼핑데이터개발/ 쇼핑플랫폼, 비즈OCR개발/ Glace개발

Page 2: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

발표자

이경일 / [email protected]

네이버쇼핑데이터, 비즈OCR개발

노가다 전문 개발자 (잡부)

Page 3: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

레거시 코드란 무엇일까요?

이미지 출처 : https://village.oyaore.com

어디부터봐야할지막막한코드?

Page 4: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

레거시 코드란 무엇일까요?

복잡한코드? (?)

Page 5: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

레거시 코드란 무엇일까요?

남이(주로퇴사자) 짠코드? (니똥을왜내가...)

Page 6: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

레거시 코드란

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

유지보수가되고있지않은코드 (유지보수가어려운코드)

Page 7: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

개발자들이 레거시 코드를 외면하는 이유?

다른사람이짠코드는수정하기싫다.

신규프로젝트가훨씬재미있다.

조직에서인정받기어렵다??

Page 8: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

레거시 코드를 다시 한번 보자!

오랜시간자신의역할을실행한안정적인코드

조직의축적된비즈니스로직의구현체

Page 9: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

레거시 코드를 다시 한번 보자!

누군가말했다. ”The developers speak by the code.”

앞서운영했던개발자들의오랜Know-How 가있다.

Page 10: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

결국 핵심은...

코드를개선하고내것으로만들어야한다는것!

날개선해줘난니꺼니까

그리고..등짝!등짝을보자!

레거시코드

Page 11: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

레거시 코드 개선...

레거시코드를어떻게개선해야할까요?

DDD로바꾸세요. -> DomainDriven Development

MSA하세요.(후훗전저자싸인받았...)

Page 12: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

레거시 코드 개선...

오늘이야기는이론적인내용이아닙니다. (사실저도몰...)

그냥제가책임감을가지고 (먹고살기위해) 서비스의

운영방식, 코드를개선한이야기를하고자합니다.

Page 13: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

내편으로만들기

급한불부터끄기

한걸음씩가기

아픈곳고치기

조금더다듬기

오늘 할 이야기...

Page 14: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

그전에...

BizOCRProject 를소개합니다.

Page 15: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

BizOCR 프로젝트는요...

영수증이나, 사업자등록증인식 (이미지)

OCR을이용한이미지안의문자를추출하여정제함

Json Document 로출력함 (HTTP REST API 제공)

Page 16: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

Naver: Myplace방문인증 (영수증이용)

Line, Naver: CONOMI (일본맛집, 영수증이용)

NaverBusiness Platform : 사업자등록증

NaverSmart Place : 사업자등록증

BizOCR 프로젝트는요...

Page 17: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

If you are not with me, then you are my enemy.(잘리기싫으면나를빨리개선해라)

내 편으로 만들기...

Page 18: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

첫만남

XX대의운영서버와1대의개발서버 (엄청난사양의)

내 편으로 만들기...

Page 19: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

당시BizOCR을사용하는운영중인서비스는2가지

일본맛집서비스코노미, 한국사업자등록증

내 편으로 만들기...

Page 20: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

내 편으로 만들기...

Page 21: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

Spring 3.x

Tomcat 7

JDK 1.8

ETC...

내 편으로 만들기...

Tensorflow

OpenCV

Regular Expression

Google Vision API

Page 22: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

그리고소스는정규식지옥...

내 편으로 만들기...

Page 23: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

Transaction script 방식의Service Class.

모든로직이한Class 안에있는구조

내 편으로 만들기...

Page 24: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

어떻게내편으로만들어야하나?

로직을파악하는것이최우선 (뭘알아야하던가말던가)

직접돌려보는것이역시가장좋음

내 편으로 만들기...

Page 25: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

로직을파악하기위해서는역시TestCase를보는것!

하지만테스트케이스가없었음...

내 편으로 만들기...

Page 26: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

성장(self landing)을위한기회... (라고정말로생각했음)

내 편으로 만들기...

Page 27: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

테스트코드를짜기시작했습니다.

JUnit이아닌Spock Framework을사용했습니다.

내 편으로 만들기...

Page 28: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

자연스럽게레가시코드를파악할수있음

Refactoring을할만한부분이보이기시작함

처음으로PR을날렸음

내 편으로 만들기...

Page 29: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

베프까진아니더라도사친정도까진친해짐별로친해지고싶진않았지만(먹고살아야하니) 어쩔수없었음

내 편으로 만들기...

Page 30: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

급한 불부터 끄기... (운영 중이기 때문에)

같이 타

죽즈아~!

당장해결해야할우선순위를정해야합니다.

Page 31: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

급한 불부터 끄기... (운영 중이기 때문에)

같이일하는사람은총3명 (저포함)

감독이미지처리 잡부

Page 32: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

급한 불부터 끄기... (운영 중이기 때문에)

이들에게급한불은총2가지

정규식을유지보수하기힘들다.

Application 구동시간이 너무오래걸린다.

팀장님

박사님

잡부

Page 33: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

급한 불부터 끄기... (운영 중이기 때문에)

정규식을유지보수하기힘든이유...

Page 34: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

급한 불부터 끄기... (운영 중이기 때문에)

하나를수정하고다시빌드해서검증... (무한반복)

이런식으로치환& 추출하는케이스는5개이상

Page 35: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

급한 불부터 끄기... (운영 중이기 때문에)

OCR 작업중약50%는정규식작업소스코드의수정이필요없이정규식만수정을해야할상황이

생각보다많다는소리 (새로운패턴을추가한다든지)

Page 36: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

급한 불부터 끄기... (운영 중이기 때문에)

OCR 작업중약50%는정규식작업

게다가순서가중요함2018年5月23日(水) 20時24分000101\n重さ(g특수문자, 의미없는숫자, 특수문자( ) $#% 등등제거

필요없는水같은요일TEXT 제거

날짜패턴(20\d{2}\s?[\-\/年\s]\s?(?:0[1-9]|1[1-2… 사용해서값추출

Page 37: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

급한 불부터 끄기... (운영 중이기 때문에)

코드안에있는모든정규식을추출함

Page 38: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

급한 불부터 끄기... (운영 중이기 때문에)

정규식을YML로 (즉설정으로서)분리함

Page 39: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

급한 불부터 끄기... (운영 중이기 때문에)

YML -> MAP 변환후Loop 문으로처리함

소스코드량대폭적인감소& 유지보수가수월해짐대신그코드가설정으로갔다는....

Page 40: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

급한 불부터 끄기... (운영 중이기 때문에)

다음급한문제는구동시간이너무오래걸린다는것

약1분이상...

Page 41: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

급한 불부터 끄기... (운영 중이기 때문에)

왜이렇게오래걸리는지살펴보니...

Oracle, ElasticSearch, 각종캐싱, 각종Bean...초기화

Page 42: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

급한 불부터 끄기... (운영 중이기 때문에)

쓰지도않는불필요한초기화가너무많음

원인은Common library

Page 43: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

급한 불부터 끄기... (운영 중이기 때문에)

Common library 소스분석후필요한부분을찾음

Page 44: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

급한 불부터 끄기... (운영 중이기 때문에)

크게3가지를사용하고있음

API 통신관련설정들 (주소, 호출파라미터정의)

상황별Exception, Json 관련로직, 각종DTO객체들

XML로 Inject 되고있던Bean 객체들

Page 45: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

급한 불부터 끄기... (운영 중이기 때문에)

과감하게Dependency 삭제

Common Library에서꼭필요한부분만복사함

Custom 된Class 대신Spring의Feature를사용함주로RestTemplate같은...

Page 46: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

급한 불부터 끄기... (운영 중이기 때문에)

XML 설정부분을properties + Java config로수정

Page 47: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

급한 불부터 끄기... (운영 중이기 때문에)

오류나는부분전부찾아서수정후...

미리짜둔테스트케이스로검증함

Page 48: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

급한 불부터 끄기... (운영 중이기 때문에)

내친김에Spring 3.x를버리고Spring Boot로...

Page 49: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

급한 불부터 끄기... (운영 중이기 때문에)

새로운Repository 생성후

기본적인Spring Boot MVC 프로젝트세팅함

Page 50: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

급한 불부터 끄기... (운영 중이기 때문에)

새로운Repository 생성후

기본적인Spring Boot MVC 프로젝트세팅함

여기에기존소스를복사함

Page 51: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

급한 불부터 끄기... (운영 중이기 때문에)

팀장님께코드리뷰를(라고쓰고허락이라고읽는다)받고

일부서버에배포를해서검증을했음

Page 52: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

급한 불부터 끄기... (운영 중이기 때문에)

문제가없어서전부배포함

다같이소고기먹었음 (삼합... 또먹고싶...)

Page 53: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

급한 불부터 끄기... (운영 중이기 때문에)

구동시간감축으로인한Local 작업효율향상

약1분~ 2분걸리던시간을3~5초로감소

Spring 3.x에서Spring Boot로Framework 버전업

Common Library제거로인한프로젝트독립

Page 54: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

한 걸음씩 가기

A journey of a thousand miles begins with a single step.

Page 55: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

코드패키지분리

한 걸음씩 가기

Page 56: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

프로세스의흐름을정리하면...

Base64 encoded

Regular Expression

한 걸음씩 가기

Page 57: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

이미지가들어오면구분, Validation

Base64 encoded

Regular Expression

한 걸음씩 가기

Page 58: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

이미지데이터를메모리에올림

Base64 encoded

Regular Expression

한 걸음씩 가기

Page 59: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

이미지를편집함

Base64 encoded

Regular Expression

한 걸음씩 가기

Page 60: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

OpenCV와, Tensorflow사용

Base64 encoded

Regular Expression

한 걸음씩 가기

Page 61: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

편집한이미지를Vision API 호출, 결과정제

Base64 encoded

Regular Expression

Base64 encoded

한 걸음씩 가기

Page 62: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

이미지를Base64 encoding 하면용량이약25%UP

Base64 encoded

Regular Expression

Base64 encoded

한 걸음씩 가기

Page 63: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

좌표와데이터를이용해서라인보정

Base64 encoded

Regular Expression

Base64 encoded

한 걸음씩 가기

Page 64: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

기본정규식을이용한TEXT 제거, 치환

Base64 encoded

Regular Expression

Base64 encoded

한 걸음씩 가기

Page 65: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

정규식을이용한정보추출 (상호, 날짜, 전화번호, 주소, 메뉴, 금액)

Base64 encoded

Regular Expression

Base64 encoded

한 걸음씩 가기

Page 66: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

요구사항에따른Json Document 생성

Base64 encoded

Regular Expression

Base64 encoded

한 걸음씩 가기

Page 67: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

어떻게분리를할지고민

Base64 encoded

Regular Expression

한 걸음씩 가기

Page 68: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

Base64 encoded

Regular Expression

이미지 분류, 검증

한 걸음씩 가기

Page 69: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

Base64 encoded

Regular Expression

이미지 처리 부분

한 걸음씩 가기

Page 70: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

Base64 encoded

Regular Expression

API 통신 부분

한 걸음씩 가기

Page 71: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

Base64 encoded

Regular Expression라인 보정 부분

한 걸음씩 가기

Page 72: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

Base64 encoded

Regular Expression

정규식 처리

한 걸음씩 가기

Page 73: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

그리고모든곳에서사용되는Static Util부분

Base64 encoded

Regular Expression

Static Util

한 걸음씩 가기

Page 74: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

Package 구조를결정함

Reader 부분은언제든분리가가능하도록설계함

한 걸음씩 가기

Page 75: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

Package 구조를결정함

모든부분을언제나쉽게분리를하기위해신경을씀

한 걸음씩 가기

Page 76: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

OCR의핵심기능...

이미지전처리

정규식후처리

이미지 출처 : https://economiology.com/핵심감사제도-

한 걸음씩 가기

Page 77: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

image : 이미지전처리모듈

다양한상태의영수증이들어옴

한 걸음씩 가기

Page 78: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

image : 이미지전처리모듈

OpenCV를이용한영수증영역검출, 이미지편집

Tensorflow학습데이터를이용한각도보정

학습데이터수집을위한이미지로깅

한 걸음씩 가기

박사님

Page 79: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

image : 이미지전처리모듈이왜필요할까요?

OCR 엔진이이미지를더잘읽을수있게하기위해

반복적인노가다를통해Magic Number를찾아야함

한 걸음씩 가기

Page 80: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

OCR의핵심기능...

이미지전처리

정규식후처리

이미지 출처 : https://economiology.com/핵심감사제도-

한 걸음씩 가기

Page 81: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

정규식을사용한후처리부분

텍스트보정-replacer

텍스트검출-matcher

한 걸음씩 가기

Page 82: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

정규식을사용한후처리부분-Replace

매우심플한케이스인데요...

한 걸음씩 가기

Page 83: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

정규식을사용한후처리부분-Replace

대부분이렇게복잡해요.

한 걸음씩 가기

Page 84: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

정규식을사용한후처리부분-Replace

이미지전처리과정-OCR 엔진으로호출

한 걸음씩 가기

Page 85: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

정규식을사용한후처리부분-Replace

원본텍스트검출

한 걸음씩 가기

Page 86: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

정규식을사용한후처리부분-Replace

라인보정

한 걸음씩 가기

Page 87: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

정규식을사용한후처리부분-Replace

필요없는텍스트제거

한 걸음씩 가기

Page 88: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

정규식을사용한검출부분-Matcher

숍이름, 일시, 주소, 전화번호, 메뉴, 가격등을추출

한 걸음씩 가기

Page 89: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

정규식을분야별로구분하여관리함

한 걸음씩 가기

Page 90: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

편한유지보수와개발을위해디버깅툴을만듬

한 걸음씩 가기

Page 91: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

정규식Loop 문으로돌려체크하는방식어떤정규식에걸려서텍스트가변경되었는지추적이어려움

한 걸음씩 가기

Page 92: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

Local에서복잡한정규식디버깅을위해로그를만듬

한 걸음씩 가기

Page 93: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

정규식을수정했을때종종있는상황

전에는잘나왔는데지금은안나와요~ !

한 걸음씩 가기

Page 94: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

Local, Stage 동일요청결과비교하는툴개발

한 걸음씩 가기

Page 95: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

Local, Stage 동일요청결과비교하는툴개발

한 걸음씩 가기

Page 96: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

공통으로사용하는부분

전화번호, 일자, 시간

한 걸음씩 가기

Page 97: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

전화번호는전세계가비슷한포맷을사용함

하나의클래스를같이쓰려고만들었지만...

생각보다클래스크기가너무커졌음

그래서동일한부분은같이쓰고다른부분은주입으로해결

한 걸음씩 가기

Page 98: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

전화번호중다른부분은국번 (지역번호)

한 걸음씩 가기

Page 99: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

한국은생각보다심플함

지역번호가몇개없음

한 걸음씩 가기

Page 100: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

헐...그런데일본은?

A4로16페이지...

중복제거하니388개

한 걸음씩 가기

Page 101: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

YML 파일로독립후사용

한 걸음씩 가기

Page 102: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

전화번호Class의역할을분리함

MainClass-전화번호의패턴만확인후추출함

한 걸음씩 가기

Page 103: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

Interface를하나만들고...

한 걸음씩 가기

Page 104: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

구현 Class를만들어줌

국가별로다른부분을구현하여주입

한 걸음씩 가기

Page 105: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

전화번호Class의역할을분리함

MainClass-전화번호의패턴만확인후추출함

CodinatorClass-추출된전화번호를국가에맞춰검증& 보정

한 걸음씩 가기

Testcase 작성후검증

Page 106: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

전화번호가잘인식되었는지 (기획자가)검증방법은?

전화번호의앞자리 (지역번호)가잘인식되었는지

전화번호포맷에맞는지

정답셋과비교 (알바군단이작성한...)

한 걸음씩 가기

Page 107: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

또다같이소고기먹었음 (삼합... 또먹었...)

전화번호인식률

98%이상

한 걸음씩 가기

Page 108: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

CPU 절약하기

아픈 곳 고치기

Page 109: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

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

아픈 곳 고치기

Page 110: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

CPU 사용량이높은성격의로직 (왜이렇게CPU를많이쓰지?)

Thread 중CPU를가장많이쓰는순으로추출

아픈 곳 고치기

Page 111: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

CPU 사용량이높은성격의로직 (왜이렇게CPU를많이쓰지?)

Thread 중CPU를가장많이쓰는순으로추출

http://bit.ly/2Uvvyhz<-추출방법정리해보았습니다.

아픈 곳 고치기

Page 112: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

CPU 사용량이높은성격의로직 (왜이렇게CPU를많이쓰지?)

ThreadDump받아서확인

아픈 곳 고치기

Page 113: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

CPU 사용량이높은성격의로직 (왜이렇게CPU를많이쓰지?)

OpenCV + Tensorflow의이미지편집

아픈 곳 고치기

Page 114: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

CPU 사용량이높은성격의로직 (왜이렇게CPU를많이쓰지?)

보다정확하게Profiling을해봅니다.

아픈 곳 고치기

Page 115: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

CPU 사용량이높은성격의로직 (왜이렇게CPU를많이쓰지?)

당장할수있는게없어... (매우안타까웠습니다. )

아픈 곳 고치기

Page 116: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

제가짠코드를다시살펴보기시작했죠.

팀장님에게CPU 떨어트리겠다고호언장담을...

아픈 곳 고치기

Page 117: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

정규식을순회하는부분에서Pattern 객체생성부분

순회를할때마다객체를새로만드는문제

아픈 곳 고치기

Page 118: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

Local Cache Map을만들어서해결함

정규식패턴은변경되지않기때문에...

CPU 사용량그다지차이는크지않음 (티끌모아태산이라고주장함)

아픈 곳 고치기

Page 119: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

Memory 절약하기

아픈 곳 고치기

Page 120: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

서버의램은128GB를장착한고사양의서버

JVM memory는32G를사용...

이미지 출처 : https://m.post.naver.com/viewer/postView.nhn?volumeNo=6647722&memberNo=36047368

아픈 곳 고치기

Page 121: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

아니왜이렇게램을많이쓰지?

HeapDump를받아분석

Memory Leak이발견됨

아픈 곳 고치기

Page 122: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

좀더디테일한분석을위해서Profiling을시작함

OpenCV의객체가많은메모리점유

Java 환경에서처음사용해봐서발생한문제

아픈곳고치기

Page 123: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

OpenCV를사용해서생성한객체는 (Mat 객체)

명시적인 Release가필요함... (아니이게무슨…)

아픈 곳 고치기

Page 124: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

동일한조건에서테스트한결과

많이좋아짐...

아픈 곳 고치기

Page 125: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

여기까지작업해서32G -> 24G까지낮춤...

그래도너무Memory를많이쓰고있음...

HeapMemory그래프를보면... (엄청쓰고있음덜덜덜)

아픈 곳 고치기

Page 126: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

다시Profiling으로해봄...

char, byte Array 용량이... (이건뭐지?)

아픈 곳 고치기

Page 127: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

문제가있는코드를보면... (별문제없어보이는간단한메서드)

Request 당약아래의코드가2xxx 번정도실행됨

String Size가작지않음

Return 할때마다새로운문자열이메모리에만들어짐

아픈 곳 고치기

Page 128: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

제가생각하는개선포인트

메모리공간을재사용했으면좋겠다. -> StringBuilder사용

그리고빠르게GC 되었으면좋겠다.

Google,Github에서쓸만한라이브러리가있나검색...

아픈 곳 고치기

Page 129: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

benelog님에게코드리뷰를부탁드림 (NaverPaaS)

아픈 곳 고치기

Page 130: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

benelog님에게코드리뷰를부탁드림 (NaverPaaS)

해결책이나옴!!! -> 등잔밑이어둡다.. 라고하셨음..

Java의기본API 중Matcher의AppendReplacement

아픈 곳 고치기

Page 131: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

Matcher_AppendReplacement

그런데문제가있음...

StringBuffer

아픈 곳 고치기

Page 132: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

Matcher_AppendReplacement

그런데문제가있음...

StringBuffer->Jdk9부터는StringBuilder

아픈 곳 고치기

Page 133: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

내친김에OpenJDK 11로업글...(남자라면최신)

아픈 곳 고치기

Page 134: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

아픈 곳 고치기

최종코드

Loop 문의시작전에만들StringBuilder를buffer로재사용

아래의코드는예시코드입니다.

Page 135: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

아픈 곳 고치기

결과는?

메모리사용량대폭감소!!

Page 136: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

아픈 곳 고치기

결과는?

메모리사용량대폭감소!!

관련해서정리한글-> http://bit.ly/2IOezox

Page 137: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

아픈 곳 고치기

결과는?

메모리사용량대폭감소!!

또다같이소고기먹었음 (삼합... 또먹었...)

Page 138: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

아픈 곳 고치기

결과는?

메모리사용량대폭감소!!

HeapMemory24G -> 8G까지조절

Page 139: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

아픈 곳 고치기

어? 그런데뭔가이상함...

n-gringer를이용한부하테스트1시간진행

FullGC가나기시작하다가... 사망...

그런데특별한오류로그가없음

Page 140: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

아픈 곳 고치기

눈물을흘리며다시JVM Memory 조정

HeapMemory 8G -> 24G

n-gringer를이용한부하테스트1시간진행-> 문제없음

HeapMemory 24G -> 16G

n-gringer를이용한부하테스트1시간진행->문제없음

n-gringer를이용한부하테스트2시간진행->사망

Page 141: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

아픈 곳 고치기

단서를찾기시작함

Profiling, ThreadDump, HeapDump-> 별이슈없음...

Page 142: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

아픈 곳 고치기

그래서Linux system 로그를확인함

OOM Killer 로그확인!

Page 143: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

아픈 곳 고치기

JVM 때문에사망한것이아니라고판단함

범인은OpenCV 일것으로예상 (Native Memory Release)

OpenCV를사용하기위해사용한JavaCPP라이브러리에서

문제가발생했다고생각했음

Page 144: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

아픈 곳 고치기

이번에는이명현님과의논함 (Naver PaaS)

Page 145: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

아픈 곳 고치기

이번에는이명현님과의논함 (Naver PaaS)

당시사용한OpenJDK Version -> 11.0.1

OpenJDK Version -> 10.0.2

3시간이상TEST 문제없음

Page 146: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

아픈 곳 고치기

기쁨의눈물을흘리며다시JVM Memory 조정

HeapMemory 16G -> 8G

n-gringer를이용한부하테스트3시간이상진행->문제없음

Page 147: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

아픈 곳 고치기

다시Profiling으로해봄...

char[] 232MB -> 9MB

byte[] 199MB -> 68MB

Page 148: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

아픈 곳 고치기

OpenJDK 11.0.2가나옴... (바로테스트함)

Page 149: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

아픈 곳 고치기

OpenJDK 11.0.2가나옴...

OpenJDK 11.0.1과동일하게사망...

Page 150: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

아픈 곳 고치기

JDK 12에서이이슈인것으로예상되는내용이 패치가됨

물론(아직) 테스트는해보지못했음...

조만간해볼예정...

https://www.oracle.com/technetwork/java/javase/12-relnote-issues-5211422.html

Page 151: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

아픈 곳 고치기

Heap Memory 32G -> 8G

Oracle Java8 -> OpenJDK 10

Boot Instance 1개-> 2개

Page 152: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

조금 더 다듬기

OCR 엔진바꾸기

Page 153: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

Google Vision 개발되어있는프로젝트 (호출할때마다돈이..)

ClovaOCR 엔진이개발될예정 (사내프로젝트)

처음이야기했던일정보다엄청빨리나올상황...

조금 더 다듬기

Page 154: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

Clova가나왔을때바로갈아껴야하는상황

API 요청 interface를만들고

API 호출한결과셋을표준결과셋으로만듬

조금 더 다듬기

Page 155: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

조금 더 다듬기

준비를끝내고마침내Clova API 가나왔습니다.

코드작성, 테스트검증, 배포까지딱30분걸림

Page 156: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

조금 더 다듬기

Google Vision에비해넘사벽으로좋은인식성능

오인식보정을위한정규식의10% 정도가필요없어짐

김진중,안종필님감사합니다.

Page 157: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

조금 더 다듬기

I / O 줄이기

Page 158: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

조금 더 다듬기

Base64 encoded

Regular Expression

I / O 가많이발생하는부분

편집이된이미지저장-> DISK에저장OCR 엔진결과저장-> DISK에저장

Page 159: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

조금 더 다듬기

서버에RAM이넘쳐흐르는상황

당연히RAM Drive 사용

Linux /dev/shm파티션사용 (소스코드수정최소화)

/dev/shm에저장된 image, text 파일을주기적으로network disk에이동하는스크립트작성

Page 160: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

조금 더 다듬기

결과는약20TPS이상향상!

코드수정거의없이...

Page 161: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

조금 더 다듬기

Spring Cloud Config 적용

Page 162: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

조금 더 다듬기

OCR의운영업무중정규식작업이큰비중을차지함

정규식하나수정하고배포를하기에는비효율적

정규식은미리YML로분리된상태

Page 163: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

조금 더 다듬기

Spring Cloud Config 서버적용!

갱신은기존에있는Jenkins를사용한curl 호출!

배포없이빠른정규식적용가능

다른사람일시켜먹기도좋다!

꼭필요한것만사용하는것도방법

Page 164: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

조금 더 다듬기

Spring Cloud Config 운영할때이슈발생!

갑자기YML 설정파일을찾을수없다고...

Page 165: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

조금 더 다듬기

Spring Cloud Config는YML, Properties를File로저장

Linux의/tmp에저장하는데...

Linux는특정기간access가없으면지워버림... (덜덜덜)

당연히파일이없으면새로받아오긴하는데...

저장소가느리다면? 저장소가장애라면? (기본timeout 5초)

Page 166: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

조금 더 다듬기

Spring Cloud Config 설정을바꾸는것이좋음

Page 167: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

조금 더 다듬기

Spring Cloud Config 관련궁금하신분들은

http://bit.ly/2vlbhRu <-여기를참고하세요.

Page 168: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

복잡한정규식코드-> YML로분리, 정규식수련

Spring3.X, Common lib -> SpringBoot, 프로젝트독립

Application Start Time 1분이상-> 3~5초

Memory 사용량32G -> 8G

CPU,Memory사용량절약-> 인스턴스1개더추가

시간관계상이야기하지못한경험들...

도메인지식습득, 내서비스가됨

결과를 정리해보면...

Page 169: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

정리하며...

더하고싶은이야기가많지만시간관계상생략…

Apache, Tomcat -> Nginx + Spring Boot

Nginx Traffic Throttling

Graceful Shutdown

ELK stack 적용

GC튜닝

기타등등...

또기타등등...

Page 170: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

다이루었다... IT에서는잘못된말이다...

아직저의개선은끝나지않았습니다.

저랑같이하실분?

정리하며...

Page 171: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

계속적인관심과업그레이드, 리팩토링이필요함

정리하며...

Page 172: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

개밥먹기를하세요.

정리하며...

Page 173: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

일본에서직접테스트해본영수증의흔적들...

정리하며...

Page 174: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

한국에서도열심히구석구석다니며테스트

정리하며...

Page 175: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

개밥먹기를하세요.

TestCase는TestCase일뿐필드에서일어나는일을

전부커버할순없다.

정리하며...

Page 176: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

피할수없다면즐기자

코드에서도메인지식을습득해내것으로만들자

정리하며...

Page 177: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

Naver 쇼핑데이터플랫폼, 플레이스는 개발자를

모집하고 있습니다. (특히 BizOCR같이 하실분?!!)

네이버에지원한다

네이버에지원한다네이버에지원한다.

[email protected] 으로문의주셔도됩니다.

Page 178: 당신도 할 수 있는 레거시 프로젝트 개선 이야기 · 2019-09-30 · ⓒ NAVER Corp. 당신도ೣ수있는 레거न로ౡ개선이ঢ기 작성자: 이경일(kellin.me@navercorp.com,

ⓒ NAVER Corp.

Thank You.