Spring 용어 정리

김태균·2025년 3월 18일

프로그래밍 명명규칙(Casing)

📚 프로그래밍 세계에서는 각각의 언어, 환경에 알맞는 명명 규칙이 존재한다.
  1. snake_case

    • Python이나 DB Table, Column에 사용된다.
    • 문자와 문자 사이를 _ 언더바로 이어준다.
    • 모든 단어는 소문자이거나 대문자이다.
  2. camelCase

    • Java, JavaScript, TypeScript에서는 변수, 함수, 메서드 이름을 만들 때 사용한다.
    • 문자와 문자 사이를 대문자로 이어준다.
  3. PascalCase

    • 대부분의 프로그래밍 언어에서 클래스 이름을 지정하는 데 파스칼 케이스가 사용된다.
    • 문자의 처음 시작을 대문자로 한다.
    • 문자와 문자 사이를 대문자로 이어준다.
  4. kebab-case

    • 문자와 문자 사이를 - 대시로 이어준다.
    • 모든 단어는 소문자이다.


    Java의 명명법

📚 JSON은 클라이언트와 서버가 통신할 때 사용하는 데이터 양식이다. 클라이언트와 서버가 사용하는 언어에 관계 없이 통일된 데이터를 주고받을 수 있도록 만들어준다.

💡 과거 웹 초기 시절부터 사용된 XML 은 헤더와 태그 등의 여러 요소로 가독성이 떨어지고, 불필요한 용량을 잡아먹는다는 단점을 항상 지적받았다. 이에 대응해 간결하고 통일된 양식으로 각광을 받고 있는 것이 JSON이다.

  • 요약
    • JSON은 사람, 기계 모두 이해하기 쉬우며 용량이 작다.

    • XML을 대체해서 데이터 전송 등에 많이 사용한다.

    • 마치 전세계 공통어로 영어를 사용하는것처럼 Web의 세계에서는 JSON(JavaScript Object Notation)을 공통어로 사용한다.

      그림예시

    • 클라이언트 to 서버의 통신에 JSON을 사용한다.

  • 서버 to 서버의 통신에도 JSON을 사용한다.
  • MSA(MicroService Architecture)
    • 아주 작은 단위로 서비스를 잘게 나누어 운영하는 아키텍처

👉 해당 아키텍처를 가지게 되면 구성된 Application마다 어떠한 언어를 사용하는지에 상관없이 서로 통신을 할 수 있는데 이것이 가능한 이유는 **JSON 형태로 데이터 통신을 하기 때문이다**.

JSON(제이슨)은 데이터를 저장하고 교환하는 형식인데, 쉽게 말해 "정보를 깔끔하게 정리한 목록"이라고 생각하면 돼.

예시로 쉽게 설명할게!
가정: 너가 친구에게 나의 정보(이름, 나이, 직업 등)를 보내야 한다고 할 때, JSON은 이렇게 정보를 보내는 방법이야.

json

{
"name": "홍길동",
"age": 28,
"job": "개발자"
}

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 형태의 데이터를 사용할 수 있다.

Scale Up, Scale Out

서버의 성능 향상을 위한 두 가지 방법이다.

  • Scale Up

    • 수직적 확장

  • 단일 서버의 하드웨어의 사용을 높인다. (CPU, Memory 등의 스펙을 높인다)

  • 요청에 대한 처리를 더욱 빠르게 할 수 있도록 만든다.

  • Scale Out
    - 수평적 확장

  • 같은 사양의 서버(인스턴스)를 여러 대 배치한다.

  • 동시에 더 많은 사용자 요청을 처리할 수 있도록 만든다.

Stateful, Stateless

📚 클라이언트와 서버간의 통신 상태(state) 유지 여부에 따라 나뉘는 특성이다.
  • Stateful(상태 유지)
    • 클라이언트의 상태를 유지한다.

상담원은 수강생의 요청들을 기억(상태 유지)하여 다음 질문들에 대한 처리가 가능하다.

  • Stateful 방식의 문제점
    • 같은 서버가 유지되어야 한다.

    • 상태를 유지하고 있던 서버가 종료된다면?

  • 서버는 다양한 이유로 동작하지 않을 수 있다.
    • 시스템 에러, 비지니스 로직 문제, 리소스 부족 문제 등
  • 요청 트래픽이 몰리게되면 상태를 유지하는것에 Resource가 많이 소모된다.
    • 리소스가 버티지 못하면 서버가 종료되거나, 다음 요청에 대한 처리가 느려진다.
    • stateless(무상태)
    • 클라이언트의 상태를 유지하지 않는다.

  • 어떻게 서로 다른 상담원들이 수강생의 요청을 알 수 있을까요?

  • Stateless 방식의 실제 요청방식

  • 강의를 신청하려는 수강생이 상담한 직원이 아닌 다른 직원이 와도 신청할 수 있게 되었다.

Stateless 방식의 장단점

  • 장점

    • 같은 서버를 유지할 필요가 없다.
    • Scale Out 수평 확장성이 높다.
      • 갑자기 요청량이 증가하여도 서버를 증설 하기 쉽다.
  • 단점

    • 클라이언트가 데이터를 추가적으로 전송해야 한다.
      • 전송되는 데이터의 양이 많아진다.
  • Stateless 방식의 한계점

    • WebApplication을 만들때 서버의 확장성을 고려하여 최대한 Stateless하게 만들어야 한다.
    • 하지만, 실제로는 로그인과 같은 상태를 유지해야하는 경우가 발생한다.
    • 추후에 배울 Cookie, Session, Token 등을 활용하여 이러한 한계를 극복한다.
      • 상태 유지를 최소화 시켜야 한다.

        Connection, Connectionless

📚 클라이언트와 서버 간의 연결(Connection) 유지 여부에 따라 나뉘는 특성이다.

Connection(연결)

  • 서버는 클라이언트와 연결을 유지하기 위해서 자원을 소모한다.

  • 하지만, 수많은 사람들이 서비스를 이용해도 실제 서버에서 동시에 처리하는 요청은 작다.

    • 클라이언트 2, 3이 아무런 요청이 없어도 연결을 유지한다.
  • Connection 장단점

    • 장점
      • 새로운 연결 과정을 거치지 않아도 된다.
      • 그만큼 요청에 대한 응답 속도가 빨라진다.
    • 단점
      • 클라이언트가 지속적으로 요청을 보낼거라는 보장이 없다.
      • 즉, 연결을 위한 자원이 낭비된다.
  • Connectionless(비연결)

  • 클라이언트와 서버는 연결을 유지하지 않는다.
  • 서버는 최소한의 자원만을 사용한다.

ex) 브라우저가 켜진 상태에서 인터넷이 종료되어도 홈페이지가 정상적으로 노출된다.

  • Connectionless 장단점
    • 장점
      • 서버 자원을 효율적으로 사용할 수 있다.
    • 단점
      • 요청이 추가적으로 오게되면 연결(3 way handshake)을 새로 해야한다. → 요청에 대한 응답 시간이 증가한다.
      • 웹 사이트의 HTML, CSS, JS, 이미지 등의 정적 자원 모두를 다시 다운로드 한다. → 캐시, 브라우저 캐싱로 해결한다. 쉽게 말해 임시저장 (추후 다룰 예정)
      • 현재는 HTTP 지속연결(Persistent Connections)로 문제를 해결한다.
  • HTTP 지속연결(Persistent Connections)
    • 하나의 요청에 필요한 요청들이 모두 응답될 때 까지 연결을 유지한다.

    • 연결을 한번만 맺고 끊기 때문에, Connectionless 방식보다 연결 횟수가 적다.

      → 그만큼 속도가 빨라졌다.

      ex) HTML 요청 + CSS 요청 + JS 요청 + 이미지 요청

profile
코딩 공부하는 닝겐

0개의 댓글