Published on

10월 1주 있었던 일 정리

Authors
  • avatar
    Name
    이건창
    Twitter

Introduction

1. 성능 개선은 나의 숙명

1. 원인 : 어쩌면 좋지 않은 프로세스일지도

지금 맡은 업무는 팀업 회원들의 데이터를 백업하는 일이야. 사용자마다 A, B, C 카테고리에 속한 데이터를 백업해줘야 하는데, 특정 카테고리 데이터가 방대해서 총 실행 시간이 의존하더라.

원인을 분석해보니 특정 카테고리를 분석하는 쿼리의 문제였어. 쿼리는 사용자가 속한 그룹 단위로 데이터를 조회하도록 작성되어 있어.

현재 수행중인 방법

사용자의 데이터를 그룹 단위로 조회할 때 많은 데이터 양으로 인해 풀 테이블 스캔이 N 번 발생하더라. 최악의 경우는 한 번의 쿼리로 인해 30초 기다리는 상황도 있었어.

문제점

2. 가설 : 실행 시간을 줄여 버그 발생 확률을 줄인다.

여기에서 가장 우려되는 점은 데이터를 많이 가진 회원의 백업은 엄청 느려진다는거야. 그럼 문제 발생 확률이 높아지겠지.

실행이 길어지면 길어질 수록 오류 발생 확률이 높아진다는 게 나의 지론이야

문제 발생 확률을 낮추기 위해서는 실행 시간을 최소로 낮출 필요가 있었어.

근거

3. 해결 : 풀 테이블 스캔 횟수 감소

고안한 방법은 풀 테이블 스캔 횟수를 줄이는 일이었어. 각 그룹마다 조회하는 로직을 없애고 한 사용자에 대한 전체 데이터를 추출한 다음 애플리케이션에서 그루핑하는 작업을 거쳤어.

해결

4. 얻은 인사이트 : 남는 리소스가 무엇이냐!!

고민을 하면서 들었던 생각은 속도 개선은 가용 리소스 기반 트레이드 오프가 존재한다.였어. 데이터베이스의 리소스 사용량을 최소화하고 애플리케이션의 리소스 사용량을 높이면서 자원 활용률을 높였던 게 이번 속도 개선의 핵심이었어.

OO% 속도 개선 이란 결과에는 얼마나 리소스를 효율적으로 사용하는지가 중요했지

2. 이펙티브 소프트웨어 테스팅 책을 읽고

책 만 읽으려니 머리에 남는게 없더라구. 그래서 읽으면서 고민했던 생각을 정리해봤어!

1. 효율적인 소프트웨어 엔지니어는 효율적인 테스터가 되어야 해

테스팅은 정말 어려워. 이론으로 테스트 방법론을 끊임없이 학습했지만 실무에서 적용하기 어렵더라. 원인을 생각해보면 상황에 맞는 방법과 문제 해결 경험 부재가 컸어.

이론과 실무 사이에서 절충점을 찾기 위해 이펙티브 소프트웨어 테스팅 책을 읽게 됐어.

2. 나의 고민들

책을 읽기 전에 실무를 겪으면서 만들어진 고민을 정리했어.

  1. 테스트 케이스는 많은데 그 중 어떤 테스트를 작성해야 할까
  2. 시스템을 운영 환경으로 옮길 때 걱정은 되지 않는가. 이런 경우 어떤 테스트가 필요할까
  3. 시스템을 변경 할 때마다 깨지지 않는 테스트 스위트를 만들 수 있을까

3. 책에서 얻은 인사이트

이 책을 읽으면서 배운 건 살충제 역설이었어. 살충제 역설은 단 하나의 기법으로는 모든 버그를 식별하지 못한다는 의미야. 작업 메서드 테스트부터 시스템 테스트까지 다양한 수준에서 테스트 하지 않는다면 안정적인 서비스를 제공하기 어렵겠지.

안정적인 서비스를 제공하기 위해서는 테스트 기법을 단위, 통합, 시스템으로 나누고 관리하는 방법이 존재했어.

  • 단위 테스트 : 비즈니스 로직 검증
  • 통합 테스트 : 외부 구성요소와의 상호작용 검증
  • 시스템 테스트 : 취약점 분석

결국 서비스를 안정적이고 빠르게 전달하기 위해서는 단위-통합-시스템 으로 테스트를 작성해 나가는 일이었어. 그럼 상황에 맞게 빠르게 테스트 코드를 작성하고 유동적으로 관리할 수 있겠지.

4. 생각정리

효율적인 테스터가 되려면 애플리케이션을 관리하는 프로세스가 정형화가 먼저 필요하다는 것을 이해했어. 그리고 프로세스에서 비효율적인 부분들을 걷어내면서 훌륭한 테스터가 됨을 책을 통해 이해 할 수 있었어.

앞으로는 여러 테스트 기법을 이해하면서 실무에 적용해볼 생각이야. 물론 회고록에서 공유해보도록 할게.

마지막으로

1. 성능 개선

성능 개선은 가용되지 않는 리소스를 분석해 최대한 활용하는 과정이라 생각해. 속도를 높이는 일은 리소스를 많이 사용하는 일 임을 명심해야겠어.

2. 테스트

이전에 영상에서 레거시 코드는 그 때의 최선이다. 라는 말을 들었어. 다른 시각으로 볼 때, 빠르게 개발 트렌드가 변화하는 세상 이기 때문에 변화하는 세상에서 빛을 발휘하는 방법은 테스트를 작성하는 일 이 중요함을 깨달았어. 덕분에 테스트 코드로 버그를 예방하는 일을 넘어서 레거시 코드를 빠르게 리팩토링 하면서 앞으로의 개발 방향성을 확립할 수 이 있었어. 변화하는 환경에 맞춰 개발 방법을 수립하는 일은 정말 중요한 것 같아.