inflearn logo
강의

Course

Instructor

Complete in 6 weeks! 4 strategies to differentiate your backend resume - How to stand out among identical resumes

운영환경에 적용해볼 수 없을때...고민입니다 ㅠㅠ

93

HJ

9 asked

0

안녕하세요 딩코님! 좋은 강의 잘 들었습니다.

강의를 듣다가 조언을 구하고 싶은게 있어서 질문 남깁니다.


저는 현재 주니어 개발자로 일으나 부하테스트 같은것을 회사에서 해볼 수 없는 상황이라(운영 인력이 아님...또한 작은 시스템이라 모니터링도 없고 구축할수도 없는 환경)강의에서 다뤄주신 내용을 실무에 적용해보기가 어려운데요...


그래서 제가 생각해본게 테스트 코드로 만들어서 돌려보면 어떨까 생각했거든요. 예를들어 아래와 같은 메소드를 만들어 놓고, 캐시 전/후를 비교하는 거죠...

long start = System.currentTimeMillis();

service.findSomething(id);

long elapsed = System.currentTimeMillis() - start;
System.out.println(elapsed);


그런데 한가지 고민되는 포인트가, 테스트 코드로 만들어서 돌렸을때 성능 개선을 수치적으로 적기가 좀 애매할것 같다고 생각이 들어서요. 아무래도 JVM이라던지, warmup이라던지 통제할 수 없는 변수가 있다보니까요.


그래서 질문은 아래와 같습니다.

  1. 특정 메소드에 로컬 캐시를 적용하기 전/후 테스트 코드에서 성능을 비교했을때, 1초->1ms로 성능 개선했다. <- 이런 문장이 임팩트가 있을까요? 아님 테스트 코드에서 한건 좀 신뢰성이 떨어질까요? ㅠㅠ

  2. 테스트 코드에서 돌려봤을때 누가봐도 신뢰성있게 만들려면 어떻게(?), 무슨 툴(?)을 써서 하는게 좋을까요? ㅠㅠ

  3. 저 같이 운영 환경에 적용해볼수 없는 개발자에게 조언을 주시면 또 감사하겠습니다!


java spring mysql redis 이력서

Answer 2

1

dingcodingco

안녕하세요 좋은 질문 감사합니다!

테스트 코드로 캐시 전/후 성능을 비교하는 방향은 맞습니다. 강의에서도 실제로 테스트 코드를 통해 Redis 캐싱 적용 전/후 조회 속도를 비교하는 방식을 사용했고, 이 결과를 수치화해서 제시하는 것이 핵심입니다.

다만 말씀하신 것처럼 JVM warmup 문제는 실제로 신뢰성에 영향을 줍니다. 강의에서 이 문제를 해결한 방식은 이렇습니다. 총 20번 반복 수행하되, 앞의 10번은 warmup으로 버리고 11번째~20번째 수행 시간의 평균만 비교하는 방식입니다. 이렇게 하면 JVM 최적화가 안정된 이후의 수치만 사용하게 되어 신뢰성이 높아집니다.

코드로 보면 AbstractBookTest에 REPEATED_COUNT = 20, WARM_UP_COUNT = 10 상수를 두고, 앞 10회는 결과를 버리고 뒤 10회 평균을 측정하는 구조입니다. 이 패턴을 그대로 적용하시면 됩니다.

이렇게 측정한 결과라면 "테스트 코드 기반이라 신뢰성이 없다"는 말은 성립하지 않습니다. warmup을 제거하고 반복 평균을 낸 수치는 충분히 설득력 있는 근거가 됩니다. 1초 → 1ms 같은 수치가 나왔다면 그 자체로 임팩트가 있고, 거기에 "왜 이런 차이가 나는지"를 설명할 수 있으면 더욱 좋습니다.

별도 벤치마크 툴로는 JMH(Java Microbenchmark Harness)가 JVM 레벨의 정밀한 측정에 적합하지만, 스프링 통합 테스트 환경에서는 위에서 설명한 warmup 제거 + 반복 평균 방식으로도 충분히 의미 있는 수치를 만들 수 있을겁니다!!! 좋은 고민해주셔서 감사드립니다!!

0

HJ

답변 감사드립니다!!

그런데 한가지 궁금한게 딩코님께서는 10번이라 말씀해주셨는데...: warmup을 몇번 적용하는게 적정한지 판단 기준이 있을까요??


감으로 열번정도했다, 이런것보다 뭔가 신뢰성있는 기준이 있으면 좋을것 같은데 어떤게 그 기준이 될 수 있는지잘 모르겠습니다.ㅠ

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. HJ님.

강의 내용을 실무에 바로 적용해보기 어려운 상황에서 고민하고 계신 것 같습니다. 주니어 개발자로서 부하 테스트와 같은 환경을 회사 내에서 실험해보지 못하는 애로사항을 가지고 계시군요. 이럴 때 테스트 코드로 성능 개선 효과를 비교하고자 하는 계획은 굉장히 좋은 접근입니다. 몇 가지 안내드리겠습니다.

1. 성능 개선 임팩트

  • 테스트 코드에서 메소드의 성능을 원시적인 방식으로 비교하는 것은 유용할 수 있습니다. 예를 들어, 1초 -> 1ms로 개선되었다는 문장은 분명히 임팩트가 큽니다. 그러나, 이 수치는 테스트 환경과 실제 환경에서 다르게 나타날 수 있으며, 테스트 코드 기반일 경우 신뢰성을 담보하기 위한 명확한 설명이 필요합니다.

  • 성능 개선의 임팩트가 제대로 드러나도록 하려면, 개선 전후의 환경과 조건이 일관되게 유지되도록 해야 하며, 이 부분을 명확히 설명할 수 있어야 합니다.

2. 신뢰성 있는 테스트 설정

  • JMH(Java Microbenchmark Harness)를 사용하는 것을 추천드립니다. JMH는 자바 프로그래밍 언어에서 미세 성능 분석을 위한 공식적인 툴입니다. 이는 Warmup 단계, 측정 및 측정 결과의 신뢰성있는 분석을 제공합니다.

  • JMH를 통해 설정된 마이크로벤치마크를 작성하여 JVM의 최적화 영향을 최소화하고 성능 개선을 구현해보세요.

3. 운영 환경의 제약 극복

  • 운영 환경에 접근하기 어려운 경우에는 위와 같은 성능 측정 도구를 사용하여 로컬 환경에서라도 최대한 신뢰성 있는 데이터를 수집하시는 것이 좋습니다.

  • 자체 프로젝트나 가상 시나리오를 통해 실제 사용 환경을 모의 시뮬레이션 해보세요. 이때, 가상 시나리오를 설득력 있는 환경으로 설명할 수 있도록 관련 데이터나 가설을 바탕으로 시나리오를 구성하세요.

  • 성능 개선 측정 결과를 단순히 수치로만 표현하기 보다는, 개선 과정에서의 문제와 그에 대한 해결 과정을 중점적으로 설명하는 것이 더 중요합니다.

이와 관련한 구체적인 사례는 다음의 링크를 참조하시기 바랍니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해 드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

AWS 배포 성능테스트

0

59

1

답을언제쯤받아볼수있나요

0

112

2

프로젝트가 없어요..

0

109

2

조회속도 개선에서 더 개선하는 방법이 궁금합니다.

0

107

2

Build 관련 문제 (테스트 관련 문제)

1

78

2

인덱스 관련 질문 있습니다.

0

118

2

비관적 락 구현 방식 문의 건

1

130

2

외부 api 처리 방안에 대하여 궁금한 점이 있습니다.

0

133

2

네임드 락 사용 시 커넥션 풀을 분리하는 방법에 대한 질문

1

124

2

이벤트) 백엔드 기술면접 실전문제집

0

144

2

로컬에서 테스트 한 결과를 이력서에 써도 괜찮을까요?

0

186

2

데드락 발생 시, 외래 키를 제거하는 방법 관련 질문

1

131

2

Redis 캐싱을 도입하는데 db조회와 성능이 차이가 거의 없습니다.

0

176

2

k6 부하테스트 중인데 개선 전 성능이 너무 안나와서 고민

0

217

2

강의와 성능수치 비교

0

128

2

13강 강의 뒷부분의 과제 안내부분은 어디있나요?

0

75

2

이벤트 참가자 수 증가 후, save 메서드 호출 코드 질문

0

84

2

[수업 자료 질문] Cache Aside의 특징 문의

0

135

2

[수업자료 문의] RedisTemplate으로 SETNX 시 리턴값 문의

0

126

2

블로그에 학습 내용 정리 포스트를 올려도괜찮나요?

0

154

2

멀티스레드 상황인데 currentParticipants 가 AtomicInteger가 아닌 이유?

0

128

3

클라우드 환경 배포시 부하 테스트 방식에 대하여

0

248

2

k6 dashboad 안나오는 상

0

142

2

2-4 도커 빌드 에러가 계속 납니다.

0

347

2