우테캠 회고- 서버 진단하기

김병호·2021년 7월 18일
0


https://github.com/next-step/infra-subway-monitoring/tree/etff

이전 미션에서 배포를 하는 작업을 하였다. 배포한 우리 서비스가 잘 작동하는지 관리할 필요가 있다.
예전에 면접장에서 모니터링 작업을 해본적이 있냐는 질문을 받은 적이있다. 부하테스트 정도는 해봤지만
트래픽도 적고 잘 작동(?)하는 것처럼 보였기에 그렇게 신경쓰지 않았다.

다시 고민을 해보자. 안정적인 서비스를 만들기 위해서 모니터링은 필요하다. 모니터링하면 가장 먼저 떠오르는 것은 로그이다. 로그를 설정하고 AWS에서 제공하는 클라우드 모니터링 기능을 사용하기로 했다.

로그 설정

   private static final Logger log = LoggerFactory.getLogger(MemberController.class);
    private MemberService memberService;

    public MemberController(MemberService memberService) {
        this.memberService = memberService;
    }

    @PostMapping("/members")
    public ResponseEntity createMember(@RequestBody MemberRequest request) {
        log.info("member join : {}", request.getEmail());
        MemberResponse member = memberService.createMember(request);
        return ResponseEntity.created(URI.create("/members/" + member.getId())).build();
    }

어떤 작업이 실행되고 있는지 로그를 작성하는 것은 중요하다. 발자취를 남기자.

cloudwatch


확실히 시각화하여 파악하기가 좋을 것같다. 이번에 Spring Actuator의 지표를 모니터링하는 것도 써보았다. Actuator 활용하는 방법을 배워서 좋았다.

성능테스트

이제 모니터링 도구를 설정했으니 어느 정도 성능을 낼 수 있는지 테스트이다.
성능 분석사이트로 webpagetest, pageSpeed Insights를 활용했다.


사이트 퍼포먼스 점수와 개선사항을 확인할 수 있다. Stress Test는 K6 를 사용했다. JS기반의 시나리오를 설정하여 부하테스트를 할 수 있다. 부하테스트를 진행하면서 몇가지 개념을 알게 되었다.

  • SMOKE TEST: 최소한의 부하 테스트, 테스트 시나리오에 오류가 없는지 검증
  • LOAD TEST: 평소 트래픽과 최대 트래픽 상황에서 어떤지 확인
  • STRESS TEST: 서비스가 극한의 상황에서 어떻게 동작하는지 확인

테스트의 목푯값 설정

  • Throughput : 1일 평균 rps ~ 1일 최대 rps
  • Latency : 50~100ms

이번 미션을 진행하면서 성능에 관한 다른 인사이트를 얻게 되었다. 나의 기존 성능 개선 포커스가 어플리케이션 코드와 DB 쿼리에 있었다면, 성능 테스트를 하며 인프라를 고려하게 되었다는 것이다. 사이트를 진단하고 서비스의 사용율을 분석하며 어떤 대책을 세울 것인지 이런 고민을 해보게 되었다. 인프라 미션이었던만큼 삽질도 많이했다.

profile
노력하는 개발자입니다!

0개의 댓글