운영환경에 적용해볼 수 없을때...고민입니다 ㅠㅠ
2
8 asked
안녕하세요 딩코님! 좋은 강의 잘 들었습니다.
강의를 듣다가 조언을 구하고 싶은게 있어서 질문 남깁니다.
저는 현재 주니어 개발자로 일으나 부하테스트 같은것을 회사에서 해볼 수 없는 상황이라(운영 인력이 아님...)강의에서 다뤄주신 내용을 실무에 적용해보기가 어려운데요...
그래서 제가 생각해본게 테스트 코드로 만들어서 돌려보면 어떨까 생각했거든요. 예를들어 아래와 같은 메소드를 만들어 놓고, 캐시 전/후를 비교하는 거죠...
long start = System.currentTimeMillis();
service.findSomething(id);
long elapsed = System.currentTimeMillis() - start;
System.out.println(elapsed);그런데 한가지 고민되는 포인트가, 테스트 코드로 만들어서 돌렸을때 성능 개선을 수치적으로 적기가 좀 애매할것 같다고 생각이 들어서요. 아무래도 JVM이라던지, warmup이라던지 통제할 수 없는 변수가 있다보니까요.
그래서 질문은 아래와 같습니다.
특정 메소드에 로컬 캐시를 적용하기 전/후 테스트 코드에서 성능을 비교했을때, 1초->1ms로 성능 개선했다. <- 이런 문장이 임팩트가 있을까요? 아님 테스트 코드에서 한건 좀 신뢰성이 떨어질까요? ㅠㅠ
테스트 코드에서 돌려봤을때 누가봐도 신뢰성있게 만들려면 어떻게(?), 무슨 툴(?)을 써서 하는게 좋을까요? ㅠㅠ
저 같이 운영 환경에 적용해볼수 없는 개발자에게 조언을 주시면 또 감사하겠습니다!
Answer 1
0
안녕하세요, 인프런 AI 인턴입니다. HJ님.
강의 내용을 실무에 바로 적용해보기 어려운 상황에서 고민하고 계신 것 같습니다. 주니어 개발자로서 부하 테스트와 같은 환경을 회사 내에서 실험해보지 못하는 애로사항을 가지고 계시군요. 이럴 때 테스트 코드로 성능 개선 효과를 비교하고자 하는 계획은 굉장히 좋은 접근입니다. 몇 가지 안내드리겠습니다.
1. 성능 개선 임팩트
테스트 코드에서 메소드의 성능을 원시적인 방식으로 비교하는 것은 유용할 수 있습니다. 예를 들어,
1초 -> 1ms로 개선되었다는 문장은 분명히 임팩트가 큽니다. 그러나, 이 수치는 테스트 환경과 실제 환경에서 다르게 나타날 수 있으며, 테스트 코드 기반일 경우 신뢰성을 담보하기 위한 명확한 설명이 필요합니다.성능 개선의 임팩트가 제대로 드러나도록 하려면, 개선 전후의 환경과 조건이 일관되게 유지되도록 해야 하며, 이 부분을 명확히 설명할 수 있어야 합니다.
2. 신뢰성 있는 테스트 설정
JMH(Java Microbenchmark Harness)를 사용하는 것을 추천드립니다. JMH는 자바 프로그래밍 언어에서 미세 성능 분석을 위한 공식적인 툴입니다. 이는 Warmup 단계, 측정 및 측정 결과의 신뢰성있는 분석을 제공합니다.
JMH를 통해 설정된 마이크로벤치마크를 작성하여 JVM의 최적화 영향을 최소화하고 성능 개선을 구현해보세요.
3. 운영 환경의 제약 극복
운영 환경에 접근하기 어려운 경우에는 위와 같은 성능 측정 도구를 사용하여 로컬 환경에서라도 최대한 신뢰성 있는 데이터를 수집하시는 것이 좋습니다.
자체 프로젝트나 가상 시나리오를 통해 실제 사용 환경을 모의 시뮬레이션 해보세요. 이때, 가상 시나리오를 설득력 있는 환경으로 설명할 수 있도록 관련 데이터나 가설을 바탕으로 시나리오를 구성하세요.
성능 개선 측정 결과를 단순히 수치로만 표현하기 보다는, 개선 과정에서의 문제와 그에 대한 해결 과정을 중점적으로 설명하는 것이 더 중요합니다.
이와 관련한 구체적인 사례는 다음의 링크를 참조하시기 바랍니다:
- 질문 제목: 성능 테스트 및 개선 방법
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해 드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
답을언제쯤받아볼수있나요
0
63
2
프로젝트가 없어요..
0
72
2
조회속도 개선에서 더 개선하는 방법이 궁금합니다.
0
75
2
Build 관련 문제 (테스트 관련 문제)
0
62
2
인덱스 관련 질문 있습니다.
0
99
2
비관적 락 구현 방식 문의 건
0
107
2
외부 api 처리 방안에 대하여 궁금한 점이 있습니다.
0
112
2
네임드 락 사용 시 커넥션 풀을 분리하는 방법에 대한 질문
0
99
2
이벤트) 백엔드 기술면접 실전문제집
0
120
2
로컬에서 테스트 한 결과를 이력서에 써도 괜찮을까요?
0
155
2
데드락 발생 시, 외래 키를 제거하는 방법 관련 질문
0
105
2
Redis 캐싱을 도입하는데 db조회와 성능이 차이가 거의 없습니다.
0
135
2
k6 부하테스트 중인데 개선 전 성능이 너무 안나와서 고민
0
168
2
강의와 성능수치 비교
0
112
2
13강 강의 뒷부분의 과제 안내부분은 어디있나요?
0
57
2
이벤트 참가자 수 증가 후, save 메서드 호출 코드 질문
0
70
2
[수업 자료 질문] Cache Aside의 특징 문의
0
102
2
[수업자료 문의] RedisTemplate으로 SETNX 시 리턴값 문의
0
97
2
블로그에 학습 내용 정리 포스트를 올려도괜찮나요?
0
127
2
멀티스레드 상황인데 currentParticipants 가 AtomicInteger가 아닌 이유?
0
95
3
클라우드 환경 배포시 부하 테스트 방식에 대하여
0
185
2
k6 dashboad 안나오는 상
0
124
2
2-4 도커 빌드 에러가 계속 납니다.
0
324
2
AWS EC2에 도커 컨테이너가 동작하지 않을 때 확인 해야하는 것
0
125
2

