I/O를 줄이는 법

클라이언트가 3명있다

서버는 하나다

서버는 db를 들고 있다

db -> 저장소는 하드디스크 + 램

서버의 가용량은 5개 (동시접속이 그 이상되면 뻗는다)

3명이 접속한뒤

다른 3명이 더 접속함 -> 뻗음

 

뻗지않기 위한 행동

1. 스케일업

장비를 좋은 걸로 바꾼다 / 알고리즘을 바꾼다 / 장비를 늘린다 (서버를 분산)

#L4
장비를 늘리게 되면 클라이언트가 어느 장비로 접속할지 정하는 (로드밸런싱 L4 비쌈)을 사용해야한다.
L4장비는 하드웨어적으로 분기해주기 때문에 비싸다 (전기적으로 분기)
접속 정보를 물리적으로 기록 (response가 없다면 서버에 머물고 있다는 뜻)

다만 재요청시 다른 서버로 가게되면 세션 인증이 없어서 로그인 등이 풀릴 수 있다.
그런 것을 방지하기 위해 스티키 세션 기능을 이용한다. (갔던 서버로 무조건 가도록 만들기)

 

2. 다른방법

# 라우터
L4장비가 비싸서 라우터를 쓰는 경우 스티키 세션을 못씀.
그럴경우 여러장비의 세션을 복제하여 모든 서버에 저장

# JDBC세션
DB에 인증정보를 저장(JDBC세션) - DB의 램에 상주시켜서 SELECT

# 레디스(Redis) 
세션만 담당하는 서버
레디스는 하드디스크가 없이 메모리만을 사용한다(빠른 응답)

큰회사는 L4도 쓰고 레디스도 쓴다

 

3. 세션을 쓰지 않는 방법 (비용이 들지 않는 방법)

#JSON WEB TOKEN

웹에 특화된 티켓이고 형태는 제이슨이다.

https://velopert.com/2389

 

[JWT] JSON Web Token 소개 및 구조 | VELOPERT.LOG

지난 포스트에서는 토큰 기반 인증 시스템의 기본적인 개념에 대하여 알아보았습니다. 이 포스트를 읽기 전에, 토큰 기반 인증 시스템에 대해서 잘 모르시는 분들은 지난 포스트를 꼭 읽어주세�

velopert.com

 

 


세션을 쓰지 않고 RSA를 사용 (서명)

웹: 화면에 대한 모든 데이터를 다운 - 통신시 HTML파일 전송,

앱: 화면에 대한 데이터를 내장 - 통신시 데이터를 전송, DB에서 JSON을 전송하고 앱에서 완성

Wifi나 아이피가 바뀌면 세션이 끊긴다

한종류의 서버로 웹과 앱과 응용프로그램을 동시에 운영할 수 있다 

,

여러개의 서버를 운영시

서버에 JSON WEB TOKEN을 던져 주고 sig의 3가지의 값을 한번더 해시한 값이 인증키이다

비밀키를 알기 때문에 비밀키로 풀면 3가지의 해시값이 동일 할 것이다

그렇다면 해당 정보가 정확하다는 것을 알 수 있다.

내용이 조금이라도 바뀌면 해시값이 달라짐

해당 내용은 DB에서 가져오지 않고 바로 사용해도 된다(서버에서 만든 자료라는 것을 인증 했기 때문)

------------------------

* RSA - 공개키 암호 시스템 (수많은 암호화 방식 DES AES 등등이 있었지만 최근에는 RSA를 사용한다)

 3*5*7*2 = 210은 쉽지만
210에서 3*5*7*2를 추출하는 것은 어렵다

키가 두개인 것을 비대칭키라고 한다.

암호화: 수신자의 공개키로 잠근다 - 보호해야할 데이터

서명: 전자 서명 (자신의 비밀키로 잠근다) - 자신을 인증해야할 데이터

------------------------

+ Recent posts