Back-end

서버 성능 최적화

yujin0517 2023. 10. 17. 15:29

성능 향상을 왜 해야할까?

애플리케이션 로딩 속도가 느리면 사용자의 이탈률이 높다는 조사 결과가 있다. 

구글의 설문 자료에 따르면 3초 안에 페이지 로딩이 되지 않으면 53%의 사용자가 떠나고 길어질수록 이탈률이 늘어난다. 


성능 향상을 위한 방법은 무엇이 있을까?

캐시(Cache) 사용

 캐시란 나중에 요청할 결과를 미리 저장해둔 후 빠르게 서비스 해주는 것을 의미한다. 미리 결과를 저장하고 나중에 요청이 오면 그 요청에 대해서 DB 또는 API를 참조하지 않고 캐시에 접근하여 요청을 처리하게 된다. 

  애플리케이션의 성능을 최적화하기 위해 캐시를 사용하는 방법을 익히면 전체적인 시스템 성능 향상에 큰 도움이 된다. 대표적인 캐시 도구로는 Redis, Memcached 등이 있다.

 캐시 사용 구조

  • Look Aside Cache (Lazy Loading): 캐시에 접근하여 데이터가 존재 여부를 판단 후, 데이터가 있다면 캐시에 있는 데이터를 사용하고, 데이터가 없다면 실제 DB 또는 API를 호출하는 로직
    1. Cache에 Data 존재 여부를 확인
    2. Data가 있으면 Cache에 있는 Data 사용
    3. Data가 없으면 Cache의 실제 DB Data 사용
    4. DB에서 가져온 Data를 Cache에 저장
  • Write Back: 데이터를 캐시에 모아서 일정한 주기 또는 일정한 크기가 되면 한 번에 처리하는 로직
    1. Data를 Cache에 저장
    2. Cache에 있는 Data를 일정 기간동안 확인
    3. 모여있는 Data를 DB에 저장
    4. Cache에 있는 Data 삭제

Redis 

  • List, Set, Sorted Set, Hash 등과 같은 Collection을 지원한다. 
  • 단순한 key-value 구조이다.
  • persistence를 지원하여 서버가 꺼지더라도 다시 데이터를 불러들일 수 있다. 
  • Race condition에 빠질 수 있는 것을 방지한다. 

https://sabarada.tistory.com/103

 

[Redis] 캐시(Cache)와 Redis

[Redis] 캐시(Cache)와 Redis [Redis] Redis의 기본 명령어 [Java + Redis] Spring Data Redis로 Redis와 연동하기 - RedisTemplate 편 [Java + Redis] Spring Data Redis로 Redis와 연동하기 - RedisRepository 편 안녕하세요. 현대의 웹

sabarada.tistory.com


DNS 서버 최적화

DNS는 네트워크에서 도메인이나 호스트 이름을 IP주소로 해석해주는 TCP/IP 네트워크 서비스이다. DNS를 사용하면 인터넷을 할 때 일일이 IP주소를 외워 사용할 필요가 없어 작업 속도가 빨라진다. 


CDN 사용

 CDN(Content Delivery Network)은 지리적 제약 없이 전 세계 사용자에게 빠르고 안전하게 콘텐츠를 전송할 수 있는 콘텐츠 전송 기술을 의미한다. 급속도로 증가한 데이터를 지연 없이 처리하기 위해 데이터 분산 전달 기술이 필수적이다. 이 때문에 지리적으로 먼 거리에 떨어져 있는 사용자에게 지연 없이 콘텐츠를 분산해 전달할 수 있는 CDN 서비스가 등장했다. 

 CDN은 서버와 사용자 사이의 물리적인 거리를 줄여 콘텐츠 로딩에 소요되는 시간을 최소화한다. CDN은 각 지역에 캐시 서버를 분산 배치해 근접한 사용자의 요청에 원본 서버가 아닌 캐시 서버가 콘텐츠를 전달한다. 예를 들어, 미국에 있는 사용자가 한국에 호스팅 된 웹 사이트에 접근하는 경우 미국에 위치한 서버에서 웹 사이트 콘텐츠를 사용자에게 전송하는 방식이다. 

 인터넷을 통해 비즈니스를 운영하거나 웹 사이트에서 그래픽 이미지, 동영상 파일 등의 콘텐츠를 제공함다면 CDN 서비스를 이용할 필요가 있다. CDN은 동영상 스트리밍이나 온라인 게임, 대용량 파일 전송 그리고 해상도가 높아 용량이 큰 이미지를 다루는 쇼핑몰, 포털 사이트 등에서 안정적인 서비스 제공을 사용되고 있다. 

CDN은 서비스가 전 세계에 걸쳐 있고, 구독자의 절반 이상이 미국 외의 지역에 분포하고 있는 넷플릭스,  세계 최대 숙박 공유 서비스인 에어비앤비 더불어 NC소프트나 카카오게임즈 같은 온라인 게임 기업에서 사용하고 있다. 

https://library.gabia.com/contents/infrahosting/8985

 

가비아 라이브러리

IT 콘텐츠 허브

library.gabia.com


프록시 서버 설정

 프록시 서버는 대리인의 개념이라고 생각하면 된다. 우리의 네트워크 구조 대부분이 클라이언트가 Request  요청을 하면 서버에서 Response를 한다. 그 중간에 프록시 서버가 끼어서 대리인 역할을 하여 통신을 수행해주는 역할을 한다. 

프록시 서버는 캐시를 사용해 저장한다. Request를 서버에 접근할 필요 없이 캐시에 저장된 데이터를 클라이언트에게 전달하면 된다. 전송 시간 및 트래픽 감소에 도움이 되어 서버 과부하 및 네트워트 병목 현상 방지에도 좋다. 

 또한, 프록시 서버는 중간에 경유하게 되면 IP를 숨기는 것이 가능하고, 방화벽도 가능하기에 보안에 도움이 된다. 

https://gaebaldiary.tistory.com/31

 

프록시(Proxy) 서버란? (프록시 서버 설정 및 해제)

IT에 종사하는 분들이라면 정말 많이 들어본 단어 일 것 입니다. 그렇다면 과연 프록시 서버란 무엇일까요? 프록시(Proxy) 서버란? 프록시 서버는 간단하게 비유를 하자면 대리인 또는 중간업자 라

gaebaldiary.tistory.com


데이터베이스 성능 최적화

효율적인 테이블 설계 및 쿼리 작성, 인덱스 사용, 쿼리 최적화 등 데이터베이스 성능을 향상시키는 방법을 사용해야 한다. 


서버 부하 분산

애플리케이션 사용자가 늘어날수록 서버에 가해지는 부하가 증가한다. 이를 해결하기 위해 서버 부하 분산 기술을 사용하여 여러 서버로 요청을 나누어 처리하는 방법을 사용해야 한다. 대표적으로 Load Balancer, Reverse Proxy를 사용한다. 

 

https://www.developerfastlane.com/blog/backend-developer-roadmap

 

백엔드 개발자 로드맵: 실력 향상을 위한 백엔드 개발자를 위한 학습법 정리 | 코딩추월차선

백엔드 개발자가 되기 위해 필요한 기초 지식부터 성능 최적화 및 확장성에 이르기까지, 백엔드 개발의 필수 역량들을 정리 해보았습니다. 단계별 학습 내용 정리와 실력 향상을 돕기 위한 단계

www.developerfastlane.com

 

'Back-end' 카테고리의 다른 글

Server Layer (3-Tier)  (1) 2024.04.28
클라우드 컴퓨팅 & AWS  (0) 2023.10.17