개발 · 프로그래밍

/

백엔드

백엔드 애플리케이션 성능 개선하기 - 기초편

'백엔드 애플리케이션 성능 테스트하기'의 후속 강의로, 여러분들이 만든 백엔드 애플리케이션의 성능을 개선하기 위한 기초를 다질 수 있는 강의입니다.

(4.5) 수강평 4개

수강생 192명

Thumbnail

중급자를 위해 준비한
[백엔드, artillery] 강의입니다.

이런 걸
배워요!

  • API 성능 테스트

  • 서버 자원이 성능에 영향을 주는 이유와 개선 방법

  • 비동기를 활용한 성능 개선

  • 스노우 플레이크를 활용한 중복 체크 없이도 유니크한 키를 만드는 방법

  • 인덱스와 캐시를 활용한 조회 성능 개선

성능 테스트를 해봤으면,
이번엔 성능 개선을 해봐야겠죠?


지난 성능 테스트 강의에서 예고한대로 성능 개선 강의로 돌아왔습니다. 🤗


혼자 개발할 때와 달리 실무에서 팀으로 일하기 시작하면서 겪은 가장 큰 변화가 있습니다. 바로 성능을 측정하고 개선하는 것이었는데요. 혼자 애플리케이션을 만들 때는 사용자 수가 적어 성능이 크게 문제되지 않았지만, 실무에서는 많은 데이터를 처리하고 트래픽이 증가하면서 성능 테스트가 필수라는 것을 알게 되었습니다. 잘 동작하는 기능이라도 성능이 나쁘면 시스템 전체의 장애 포인트가 되기 쉽고, 이는 사용자 경험을 크게 해칠 수 있습니다.

이번 강의는 이러한 문제를 해결하기 위한 성능 테스트 후 API의 로직에 맞는 개선 방법을 다룹니다. 단축 URL 서비스를 예제로, 백엔드 애플리케이션의 성능을 단계적으로 향상시키는 방법을 이해하기 쉽게 준비했습니다.

먼저, 단축 URL 애플리케이션의 기본 코드를 살펴보고 서버에 배포하는 과정을 진행합니다. 생성 API와 조회 API의 성능을 측정하고 어떤 식으로 성능 개선이 가능할지 미리 알아보고 성능 개선 방법을 하나씩 적용해봅니다.

생성 API의 경우, 요청 처리 스레드 수를 늘리고 서버 사이즈를 키우며, 응답과 생성을 분리하는 등의 기법을 통해 성능을 향상시킬 수 있습니다. 비동기 처리와 스노우 플레이크 알고리즘이 어떻게 생성 API의 성능을 크게 개선할 수 있는지 배웁니다.

조회 API의 성능 개선을 위해서는 데이터베이스 인덱스 추가, 캐시 사용, 윈도윙을 활용 등을 다룹니다. 이를 통해 조회 성능을 크게 향상시킬 수 있는 방법들을 실습을 통해 체득할 수 있습니다.


API별 로직을 분석하여 성능 개선 방안 도출


스노우 플레이크를 활용한 단축 URL Key 중복 체크 로직 제거


단계적인 성능 개선 방안 제시와 성능 테스트 결과 확인


이런 내용을 배워요

1⃣ 서버 자원을 늘려서 성능을 개선하는 방법

성능에 영향을 주는 애플리케이션 서버의 자원에는 여러가지가 있습니다. CPU, 메모리, 디스크 같은 물리적인 자원에서 시작하여 스레드나 커넥션 같은 소프트웨어 자원들도 있습니다. 이들 모두가 결국에는 성능에 영향을 줍니다. 이 강의에서는 이들 서버 자원이 성능에 어떤 영향을 주고, 어떻게 성능을 개선할 수 있을지에 대해 다루고 있습니다.

2⃣ 비동기를 활용한 Latency 줄이기

API의 사용자인 클라이언트가 느끼는 애플리케이션의 성능은 결국 요청에 대한 응답이 돌아오기까지의 시간인 Latency에 의해 결정됩니다. 결과적으로 같은 일을 하더라도 클라이언트가 더 빠르게 응답을 받아본다면 API의 성능이 좋게 느껴집니다. 만약 클라이언트가 진짜 사용자가 아니라 또 다른 서버라면 시스템 전체의 성능에도 영향을 주겠죠? 이 부분을 개선할 수 있을만한 비동기를 활용한 성능 개선 방법에 대해 알아봅니다.

3⃣ 인덱스와 캐시를 활용한 조회 성능 개선

조회 성능에 대해 이야기할 때 빠지지 않고 등장하는 존재가 바로 인덱스와 캐시입니다. 인덱스는 주로 데이터베이스 레벨에서 다루고, 캐시는 애플리케이션 내에 존재하는 캐시와 공유 캐시 등 여러가지 형태로 존재합니다. 이 강의에서는 인덱스와 캐시에 대한 자세한 내용을 다루는 것은 아니지만, 인덱스와 캐시의 존재가 API 성능에 얼마나 큰 영향을 줄 수 있는지 보여주고 있습니다.

4⃣ 윈도윙을 활용한 Update Query 성능 개선

동일한 레코드를 대상으로 Update Query가 계속 날아가는 상황에서는 레코드에 걸리는 Lock에 의해 급격하게 성능이 나빠질 수 있습니다. 이런걸 보통 Hot Spot이라고 부릅니다. Hot Spot 문제에 대한 성능 개선 방법에는 여러가지가 있지만, 단축 URL의 redirectCount를 증가시키는 작업에 적합한 윈도윙을 통해 문제를 해결해봅니다.

*) 강의에서 진행한 내용은 배치 처리에 더 가깝지만, 윈도윙과 동일한 아이디어를 가지고 있습니다. Kafka를 활용하도록 바꾸면 윈도윙으로 쉽게 바꿀 수 있을겁니다.

수강 전 참고 사항

실습 환경

  • 운영 체제 및 버전(OS): Windows 10,

  • 사용 도구: Intellij Community 2023.2, Google Chrome


학습 자료

선수 지식 및 유의사항

  • 클라우드 서비스는 Vultr이라는 서비스를 사용하고 있으나, AWS나 GCP등 다른 클라우드 서비스를 사용해도 됩니다. 다만 다른 클라우드 서비스 사용시 방화벽 설정 등 일부 차이가 있을겁니다. 그러나 이런 문제는 여러분들이 직접 검색해보고 몸으로 부딪혀보면 더 많이 얻어갈 수 있을거라고 생각합니다.

  • 기존 성능 테스트 강의에서 사용했던 Artillery를 사용하여 성능 테스트를 진행하고 있습니다. nGrinder를 활용한 성능 테스트는 부록에서 간단히 보여주고 있습니다.

  • 수강하시면서 궁금한 내용이 있다면 질문을 남겨주세요. 업데이트해야 할 내용이 있다면 업데이트하겠습니다.


이런 분들께
추천드려요!

학습 대상은
누구일까요?

  • 이전 강의인 '백엔드 애플리케이션 성능 테스트하기'를 수강한 사람

  • API 성능 개선에 많이 활용되는 방법에 대해 배우고 싶은 사람

선수 지식,
필요할까요?

  • 백엔드 애플리케이션 개발 경험

  • 성능 테스트에 관심이 있거나 해본 경험

안녕하세요.

멘토링을 하면서 주니어 개발자들이 어려워 하는 개념들에 대해 어떻게 하면 쉽게 전달할 수 있을지에 대해서 많은 고민을 하고 있는 푸(Foo)라고 합니다.

잘 부탁 드리겠습니다.


이력

  • 2019. 08 ~ 현재 : 카카오 자바 백엔드 개발자

  • 2021. 08 ~ 현재 : programmers 백엔드 데브코스 멘토

  • 2021. 12 ~ 현재 : F-Lab 자바 백엔드 멘토

 

  • 이것이 취업을 위한 백엔드 개발이다 with 자바(링크)

 

기타 이력 및 타 플랫폼 강의들은 아래 GitHub 링크에서 확인할 수 있습니다.

GitHub - https://github.com/lleellee0

커리큘럼

전체

17개 ∙ (2시간 39분)

강의 게시일: 
마지막 업데이트일: 

수강평

아직 충분한 평가를 받지 못한 강의입니다.
모두에게 도움이 되는 수강평의 주인공이 되어주세요!