📊통신에 사용하는 데이터 양식
XML
: 과거에 주로 사용한 서버-클라이언트 간 통신 데이터 양식.
단점
- 통신에 필요한 데이터 양이 많다
- 사람이 읽기 어려움
JSON
: XML을 대체하여 현재 주로 사용하는 경량화된 데이터 양식.
장점
- 사람, 기계 모두 이해하기 쉬우며 용량이 작음
- 서버나 클라이언트 간 언어가 달라도 통신이 가능.
JSON 예시
{
"userName" : "Henry",
"age" : 33,
"hired" : true,
"phoneNumber":null,
"class": ["Science", "HealthCare", "Math"]
}
key:value 형태
- 예시)
key = userName, value = Henry
snake_case, camelCase 모두 사용 가능
- 허용 데이터 타입:
null, number, string, array, object, boolean
📈서버 성능 향상을 위한 방법
Scale Up
- 수직적 확장. 단일 서버의 하드웨어 성능을 향상
장점
- 단일 서버에서 성능을 확장할 수 있어 빠르게 성능 향상 가능
단점
- 서버 커질수록 비용 급수적으로 증가
- 단일 서버의 문제가 전체 시스템에 영향 끼칠 수 있음
Scale Out
- 수평적 확장. 같은 성능의 서버를 여러개 배치.
장점
- 동시에 더 많은 사용자 요청을 처리 가능 (분산 서버)
단점
- 서버 간의 데이터 동기화가 필요하며 이에 따라 관리가 복잡해질 수 있음
🔄서버 통신 상태 유지
✅서버 통신 상태 유지 (State)
: 클라이언트의 요청을 기억해두는 방식으로, 이전의 요청에 응답한 동일한 서버가 유지되어야 한다.
단점
- 서버 측 동작 문제
- 시스템 에러, 비지니스 로직 문제, 리소스 부족 문제 등
- 요청 트래픽이 몰리게되면 상태 유지에 리소스가 많이 소모된다.
- 리소스가 버티지 못하면 서버가 종료되거나, 다음 요청에 대한 처리가 느려진다.
❌서버 통신 상태 유지 (Stateless)
: 요청을 받을 때마다 새로운 상태에서 처리하는 방식으로, 서버가 클라이언트의 상태를 기억하지 않는다.
장점
- 같은 서버를 유지할 필요가 없다.
- 수평 확장성이(Scale Out) 높다.
- 갑자기 요청량이 증가하여도 서버를 증설하기 쉽다.
단점
- 클라이언트가 데이터를 추가적으로 전송해야 한다.
- 전송되는 데이터의 양이 많아진다.
상태 유지를 최소화하는 것이 좋지만, 일부 필요한 경우 있음 (ex. 로그인, 결제)
➡️ Cookie, Session, Token 등을 활용하여 이러한 한계를 극복
🔗서버 통신 연결 유지
✅서버 통신 연결 유지 (Connection)
: TCP/IP 연결을(3-way 핸드쉐이킹) 통해 서버-클라이언트 간 지속적인 연결을 유지하는 방식
장점
단점
❌서버 통신 연결 유지 (Connectionless)
: 요청 시마다 새로운 연결 과정을 시작하는 방식
단점
- 추가 요청 시 연결 과정 새로 해야함
- 정적 자원(HTML, CSS, JSS …) 다시 다운로드 필요
💡 해결 방법: 캐시, 브라우저 캐싱으로 해결
➡️ 현재는 HTTP 지속 연결로 해결하는 방식
HTTP 지속연결(Persistent Connections)
- 하나의 요청에 필요한 요청들이 모두 응답될 때 까지 연결을 유지한다.
- 연결을 한번만 맺고 끊기 때문에, Connectionless 방식보다 연결 횟수가 적다.
➡️ 그만큼 속도가 증가
예시: (HTML 요청 + CSS 요청 + JS 요청 + 이미지 요청) ➡️ 하나의 요청으로 묶음