1️⃣ 명명 규칙
- 프로그래밍 세계에서는 각각의 언어 , 환경에 알맞는 명명 규칙이 존재한다 .
1. snake_case
- Python 이나 DB Table, Column 에 사용된다 .
- 문자와 문자 사이를 _ 언더바로 이어준다 . 모든 단어는 소문자이거나 대문자이다 .
2. camelCase
- Java, JavaScript, TypeScript 에서는 변수 , 함수 , 메서드 이름을 만들 때 사용한다.
- 문자와 문자 사이를 대문자로 이어준다 .
3. PascalCase
- 대부분의 프로그래밍 언어에서 클래스 이름을 지정하는 데 파스칼 케이스가 사용된다 .
- 문자의 처음 시작을 대문자로 한다. 문자와 문자 사이를 대문자로 이어준다 .
4. kebab-case
- 문자와 문자 사이를 - 대시로 이어준다 .
- 모든 단어는 소문자이다 .
5. Java 의 명명법
종류 | 설명 | 예시 | 규칙 |
---|---|---|---|
Project [프로젝트, 레파지토리] | 대/ 소문자 구분없이 시작 | MyProject | - |
Pakage [패키지] | 소문자 시작 | com.sparta.homework |
- |
class [클래스] | 대문자 시작, 명사사용 | class Person; |
PascalCase |
interface [인터페이스] | 대문자 시작, 형용사 사용 | interface Runnable |
PascalCase |
method [메서드] | 소문사 시작, 동사 사용 | add() , move() |
camelCase |
variable [변수] | 소문자 시작 | int number |
camelCase |
constant [상수] | 대문자로 시작, 문자와 문자 사이는 언더바 구분 | static fianl int MAX_COUNT |
- |
2️⃣ JSON
" JSON은 클라이언트와 서버가 통신할 때 사용하는 데이터 양식이다. 클라이언트와 서버가 사용하는 언어에 관계 없이 통일된 데이터를 주고받을 수 있도록 만들어준다. "
1. JSON 의 특징
- 과거 웹 초기 시절부터 사용된 XML 은 헤더와 태그 등의 여러 요소로 가독성이 떨어지고, 불필요한 용량을 잡아먹는다는 단점을 항상 지적받았다.
- 이에 대응해 간결하고 통일된 양식으로 각광을 받고 있는 것이 JSON이다.
- JSON은 사람, 기계 모두 이해하기 쉬우며 용량이 작다.
- XML을 대체해서 데이터 전송 등에 많이 사용한다.
- 마치 전세계 공통어로 영어를 사용하는것처럼 Web의 세계에서는 JSON(JavaScript Object Notation)을 공통어로 사용한다.
- 어떠한 언어를 사용하는지에 상관없이 서로 통신을 할 수 있는데 이것이 가능한 이유는 JSON 형태로 데이터 통신을 하기 때문이다.
2. JSON 의 구조
{
"user": [
{
"first_name": "wonuk",
"last_name": "Hwang",
"age": 100,
"phone_agree": false,
"hobby": ["Java", "Spring"]
},
{
"firstName": "sparta",
"lastName": "Team",
"age": 200,
"phone_agree": true,
"hobby": ["React", "Spring", "Node"]
},
]
}
snake_case, camelCase
모두 사용이 가능하다.- Application 내에서 변환해주는 자동 변환을 처리하는 로직을 사용하면 가능하다 !
key-value
형태로 구성되어 있다.null, number, string, array, object, boolean
형태의 데이터를 사용할 수 있다.
3️⃣ 서버의 성능향상
1. Scale Up
- 수직적 확장이다.
- 단일 서버의 하드웨어의 사용을 높인다. (CPU, Memory 등의 스펙을 높인다)
- 요청에 대한 처리를 더욱 빠르게 할 수 있도록 만든다.
2. Scale Out
- 수평적 확장이다.
- 같은 사양의 서버(인스턴스)를 여러 대 배치한다.
- 동시에 더 많은 사용자 요청을 처리할 수 있도록 만든다.
둘의 차이를 볼 때, Scale Up 은 성능을 높일 수록 비용이 기하급수적으로 올라가는 걸 알 수 있다.
4️⃣ 통신 상태 유지 여부
1. Stateful (상태 유지)
- 클라이언트의 상태를 유지하는 것이다.
- 같은 서버가 유지되어 있어야 한다.
- 상태를 유지하고 있던 서버가 종료되었다면 서버는 응답할 수 없을 것이다.
- 서버는 다양한 이유로 동작하지 않을 수 있다.
- 시스템 에러, 비지니스 로직 문제, 리소스 부족 문제 등
- 요청 트래픽이 몰리게되면 상태를 유지하는 것에 Resource가 많이 소모된다.
- 리소스가 버티지 못하면 서버가 종료되거나, 다음 요청에 대한 처리가 느려진다.
2. Stateless
- 클라이언트의 상태를 유지하지 않는다.
1) 장점
- 같은 서버를 유지할 필요가 없다.
- Scale Out 수평 확장성이 높다.
- 갑자기 요청량이 증가하여도 서버를 증설 하기 쉽다.
2) 단점
- 클라이언트가 데이터를 추가적으로 전송해야 한다.
- 전송되는 데이터의 양이 많아진다.
3) 한계점
- WebApplication을 만들때 서버의 확장성을 고려하여 최대한 Stateless하게 만들어야 한다.
- 하지만, 실제로는 로그인과 같은 상태를 유지해야하는 경우가 발생한다.
- Cookie, Session, Token 등을 활용하여 이러한 한계를 극복한다.
- 상태 유지를 최소화 시켜야 한다.
5️⃣ 서버 간의 연결(Connection) 유지 여부
1. Connection(연결)
- 서버는 클라이언트와 연결을 유지하기 위해서 자원을 소모한다.
- 하지만, 수많은 사람들이 서비스를 이용해도 실제 서버에서 동시에 처리하는 요청은 작다.
- 클라이언트가 아무런 요청이 없어도 연결을 유지한다.
1) 장점
- 새로운 연결 과정을 거치지 않아도 된다.
- 그만큼 요청에 대한 응답 속도가 빨라진다.
2) 단점
- 클라이언트가 지속적으로 요청을 보낼거라는 보장이 없다.
- 즉, 연결을 위한 자원이 낭비된다.
2. Connectionless(비연결)
- 클라이언트와 서버는 연결을 유지하지 않는다.
- 서버는 최소한의 자원만을 사용한다.
ex) 브라우저가 켜진 상태에서 인터넷이 종료되어도 홈페이지가 정상적으로 노출된다.
1) 장점
- 서버 자원을 효율적으로 사용할 수 있다.
2) 단점
- 요청이 추가적으로 오게되면 연결(3 way handshake)을 새로 해야한다.
- → 요청에 대한 응답 시간이 증가한다.
- 웹 사이트의 HTML, CSS, JS, 이미지 등의 정적 자원 모두를 다시 다운로드 한다.
- → 캐시, 브라우저 캐싱로 해결한다. (임시저장)
- 현재는 HTTP 지속연결(Persistent Connections)로 문제를 해결한다.
3. HTTP 지속연결(Persistent Connections)
- 하나의 요청에 필요한 요청들이 모두 응답될 때 까지 연결을 유지한다.
- 연결을 한번만 맺고 끊기 때문에, Connectionless 방식보다 연결 횟수가 적다.
- → 그만큼 속도가 빨라졌다.
ex) HTML 요청 + CSS 요청 + JS 요청 + 이미지 요청
'코딩 공부 > Spring 입문' 카테고리의 다른 글
[Spring 입문] #06 Web Application (0) | 2025.03.18 |
---|---|
[Spring 입문] #05 HTTP 2 (0) | 2025.03.18 |
[Spring 입문] #04 HTTP 1 (0) | 2025.03.17 |
[Spring 입문] #02 Web 기초 (1) | 2025.03.17 |
[Spring 입문] #01 네트워크 (0) | 2025.03.17 |