[Spring] 기초 지식 모음

늘보·2025년 1월 31일

Spring

목록 보기
3/24
post-thumbnail

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

snake_case

  • python이나 DB 테이블에 자주 사용된다.
  • 대문자 혹은 소문자로 통일해서 사용한다.

💡 [DB 테이블 예시]

💡 [Constant 상수 사용 예시]

      static final int N_PI = 3.14


camelCase

  • 변수 혹은 메서드명에 사용된다.
  • java에서 주로 사용

💡 [메서드 및 변수명 예시]

    String inputNumber
    findById ()


PascalCase

  • 대부분의 프로그래밍 언어에서 클래스 이름을 만들 때 사용한다.
  • 첫 시작은 대문자여야 한다.

💡 [클래스명 예시]

     Class PersonInfo

💡 [인터페이스명 예시]

      interface Car


프로젝트명대/소문자 구분 없이 작성해도 되고, 패키지명은 반드시 소문자로 작성해야한다.



JSON (Java Script Object Notation)

  • 클라이언트와 서버가 통신할 때 사용하는 데이터 양식이다.
  • 사람과 기계 모두 읽기 쉽게 만들어져 있으며, 용량이 적다. ➡︎ 데이터 통신 시 요금이 적다는 것을 의미한다.
  • JSON을 이용하면 서로 다르게 구성된 서버일지라도 데이터 양식이 통일 되어 통신 시 문제가 생기지 않는다.

클라이언트 ⮂ 서버 , 서버 ⮂ 서버에 사용된다.


MSA (MicroSevice Architecture)

아주 작은 단위로 서비스를 잘게 나누어 운영하는 아키텍쳐이다.
[아키텍쳐 참고 자료]


JSON 구조

  • Key - value 형태로 구성되어 있다.
  • snake, camel 모두 사용 가능하다.
  • null, number, String, array, object, boolean 형태의 데이터를 사용할 수 있다.
{
  "user": [
    {
      "first_name": "Jane",
      "last_name": "Doe",
      "age": 28,
      "phone_agree": true,
      "hobby": ["Photography", "Traveling"],
      "last_seen": "2025-01-30T14:30:00",
      "device_status": "active"
    },
    {
      "first_name": "Marcus",
      "last_name": "Lee",
      "age": 35,
      "phone_agree": false,
      "hobby": ["Gaming", "Cycling", "Cooking"],
      "last_seen": "2025-01-28T18:15:00",
      "device_status": "inactive"
    }
  ]
}


Scale UP && Scale Out

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

Scale UP

  • 수직적 확장으로, 비용이 기하급수적으로 올라간다.
  • 단일 서버 하드웨어(CPU, Memory) 스펙을 높인다.
  • 서버가 커질수록 비용과 성능이 증가하고, 성능이 증가함에 따라 요청 처리 속도가 빨라진다.

Scale Out

  • 같은 사양의 서버를 여러개 배치하여, 동시에 더 많은 사용자 요청을 처리할 수 있도록 해준다.


Stateful && Stateless

클라이언트서버간의 통신 상태 유지 여부에 따라 나뉜다.

Stateful

클라이언트가 요청한 것을 서버가 기억하는 것상태 유지 특성 (Stateful)이라고 표현한다. 이를 토대로 서버가 응답할 수 있게 된다.

장점

  • 이전 요청을 기억하여 다음 요청에 대한 처리가 가능하다.

문제점

  • 항상 같은 서버가 유지되어야 한다.
  • 서버는 에러나 문제 발생으로 동작하지 않을 수 있으며, 요청이 많아지게 되면 상태 유지에 많은 리소스가 소요된다.
    ➡︎ 리소스가 버티지 못하면 서버가 죽거나 느려진다.

Stateless

클라이언트가 요청할 때마다 이전 요청들을 함께 전달한다.

장점

  • 같은 서버를 유지할 필요가 없다.
  • 요청이 많아져도 ScaleOut으로 서버를 여러개 확장하여 자유로워질 수 있다.

문제점

  • 클라이언트가 데이터를 추가적으로 전송해야한다. ➡︎ 비용이 조금 더 발생할 수 있다.

한계점

  • WebApplication을 만들 때 ScaleOut을 고려하며, stateless하게 만들어야 한다.
  • 로그인과 같이 상태를 유지해야하는 경우가 발생한다.

      ➡︎ Cookie, Session, Token
    등을 활용하여 이러한 한계를 극복한다.


Connection && Connectionless

클라이언트서버간의 연결 유지 여부에 따라 나뉜다.

Connection

  • 클라이언트 수만큼 연결 수가 늘어나 자원을 소비한다.
  • 연결만 되어 있는 클라이언트들도 연결해야한다.

장점

  • 새로 연결과정을 거치지 않아도 되기 때문에, 요청에 대한 응답 속도가 빨라진다.

문제점

  • 클라이언트가 지속적으로 요청을 보낼 것이라는 보장이 없다. 연결을 위한 자원이 소비된다.

Connectionless

장점

  • 서버 자원을 효율적으로 사용 가능하다.

문제점

  • 항상 3 Way HandShack 연결을 새로 해야한다. ➡︎ 응답 시간이 길어진다.
  • 요청에 대한 응답을 하기 위해서 사용되는 정적 자원들 (이미지, HTML ...)을 다운로드 해야한다. ➡︎ 캐시, 브라우져 캐싱(임시저장)으로 해결

💡 HTTP 지속 연결 문제 ➡︎ 현재 사용
요청과 연관된 모든 것을 하나로 묶어 처리한 후 연결을 해제한다. 즉, 하나의 요청에 필요한 요청들이 모두 응답될 때까지 연결을 유지한다.

profile
누워만 있지 말고 제발 뭐라도 하자.

0개의 댓글