인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

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

중급자를 위해 준비한
[백엔드, 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)입니다.

4,428

수강생

176

수강평

95

답변

4.9

강의 평점

8

강의

안녕하세요.

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

잘 부탁 드리겠습니다.


이력

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

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

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

 

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

 

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

GitHub - https://github.com/lleellee0

더보기

커리큘럼

전체

17개 ∙ (2시간 39분)

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

수강평

전체

6개

4.7

6개의 수강평

  • println님의 프로필 이미지
    println

    수강평 1

    평균 평점 5.0

    5

    100% 수강 후 작성

    • 이준형(Foo)
      지식공유자

      println님 완강 하느라 고생 많으셨습니다. 수강평도 남겨주셔서 감사합니다~!

  • gihun.kim님의 프로필 이미지
    gihun.kim

    수강평 1

    평균 평점 4.0

    4

    100% 수강 후 작성

    • 이준형(Foo)
      지식공유자

      gihun.kim님 수강평 남겨주셔서 감사합니다! 완강하시느라 고생 많으셨습니다. (_ _)

  • 쿄큐큐님의 프로필 이미지
    쿄큐큐

    수강평 44

    평균 평점 4.9

    5

    100% 수강 후 작성

    • 이준형(Foo)
      지식공유자

      쿄큐큐님 수강평 남겨주셔서 대단히 감사합니다!! 완강하느라 고생하셨습니다.

  • hanumoka님의 프로필 이미지
    hanumoka

    수강평 45

    평균 평점 4.4

    4

    100% 수강 후 작성

    다음강의 기대할게요.

    • 이준형(Foo)
      지식공유자

      hanumoka님 수강평 남겨주셔서 감사합니다. (_ _)

  • dfdrdodm95님의 프로필 이미지
    dfdrdodm95

    수강평 13

    평균 평점 5.0

    5

    100% 수강 후 작성

    강의 구성이 무척 좋다고 느꼈습니다. 전통적인 방식은 영상 내에서 전부 다 실습으로 재현하게 하여 불필요한 시간 소모가 있고 집중해야 하는 부분이 무엇인지 알기 어려워지는 단점이 있는데 이 강의는 그런 불편을 피할 수 있도록 잘 압축이 돼 있고 내용도 제가 원하던 키워드를 충분히 설명해주고 있어서 만족합니다.

    • 이준형(Foo)
      지식공유자

      dfdrdodm95님 감사합니다. (_ _) 말씀하신대로 최대한 콤팩트하게 강의 내용을 전달하려고 노력중입니다~ 앞으로도 dfdrdodm95님 기대에 부응하는 강의 만들어보겠습니다.

이준형(Foo)님의 다른 강의

지식공유자님의 다른 강의를 만나보세요!

비슷한 강의

같은 분야의 다른 강의를 만나보세요!

₩39,600