[Spring/스프링] 2. Spring의 용도, Spring 과 Spring Boot, Spring Web Application의 구조, Spring 의 Layer 구조

2024. 1. 2. 14:31스파르타/Spring

 

 

 

Spring 용도의 변화

 

Spring은 다양한 애플리케이션을 만들 수 있다.

그 중에서 Web Application을 만드는 데 특화되어 있다.

 

 

웹 생태계

1960년, 인터넷이 처음 등장했다.

30년 후인 1990년, 웹의 개념(world Wide Web)이 첫 등장하게 된다.

 

 

1세대

서버를 통해 완성된 HTML / CSS 를 로드한다.

페이지별 완성된 화면을 서버에서 불러오기 때문에 페이지 이동할 때 마다 화면이 깜빡거렸다.

 

 

 

 

 

 

 

 

2세대

 

동적인 웹사이트를 구현하기 위해 Ajax 라는 동적인 웹페이지를 만들기 위한 개발 기법이 등장한다.

이를 통해 페이지가 깜빡거리지 않고,

서버에서 받아온 HTML 위에서 필요한 데이터만을 서버에 재요청하여 변경하는 것이 가능해졌다.

 

 

 

 

 

 

 

3세대

React, Angular, Vue 등의 라이브러리 및 프레임워크가 등장하면서,

HTML, CSS 자체를 Javascript를 통해 동적으로 생성하는 SPA(Single Page Application) 이 주를 이루게 된다.

이 때부터 Frontend 와 Backend 의 역할 구분이 명확해졌다.

Frontend Server와 Backend Server 또한 차츰 나뉘게 되었다.

이렇게 브라우저에서 Javascript 를 읽어 페이지를 렌더링(생성)하는 방식을 CSR(Client Side Rendering) 이라고 부른다.

 

 

 

 

 

 

 

4세대

3세대의 CSR(Client Side Rendering) 방식과는 반대로

HTML 내용을 모두 채워서 Client에 전송해주는 방식을 SSR (Server Side Rendering) 이라고 한다.

CSR 과 SSR 은 모두 장단점이 있다.

CSR 은 자바 스크립트를 통해 페이지를 불러와야 하기에 첫 페이지의 로딩 시간이 느리고,

반대로 SSR은 빠른 대신에 변경사항 혹은 나머지 페이지를 불러오는 시간은 처음부터 HTML을 다시 만들어줘야 한다.

또한, 결정적으로 CSR의 경우 SEO(Search Engine Optimization)에 취약하다.

다른 말로 하면 검색이 잘 되질 않는다. 동적으로 HTML의 내용을 채워주기 때문이다.

최근에는 이러한 CSR과 SSR의 장점을 모두 사용할 수 있는 형태의 프레임워크들이 나왔으며 대표적으로 Next.js가 있다.

 

 

 

 

 

 

Spring의 용도

이전에는 HTML / CSS와 같은 리소스를 응답해주는 역할도 하였지만, 현재에는 Data를 주로 응답해주는 역할을 한다.

여기서 Data는 여러 형태가 될 수 있지만, 현재에는 대부분 JSON 포맷을 사용한다.

 

JSON은 아래 예시처럼 key, value 형태로 이루어진 포맷이라 할 수 있고,

Key는 문자열(String),

Value로는 수(Number), 문자열(String), 참/거짓(Boolean), 배열 (Array), 객체 (Object), null 값이 올 수 있다.

 

 

 

JSON 예시

{
    "number_key": 1,
    "string_key": "string_value",
    "boolean_key": true,
    "array_key_1": [1, 2, 3, 4],
    "array_key_2": ["a", "b", "c"],
    "object_key": {
    "sub_key1": "hello, world",
    "sub_key2":  2.0
},
    "null_key": null
}

 

 

결론적으로 현재의 Spring은 Client, Frontend Server의 요청에 따라

적절한 JSON Data를 응답해주는 역할을 주로 한다고 볼 수 있다.

 

 

 


 

 

Spring 과 Spring Boot

 

Spring 과 Spring Boot의 차이는 바로 이 Plumbing 방식의 차이에 있다.

Plumbing을 쉽게 풀어쓰자면, Application의 각 요소들을 조합하는 과정이라 할 수 있다.

Spring에서는 원래 이 과정을 개발자들이 손수 코드를 통해 표기해야 한다.

예를들어, 요소 A 다음에 요소 B를 연결하고, 다시 C를 연결하고 ···

이런 코드를 작성해줘야한다고 볼 수 있다.

 

Spring Boot는 이러한 과정을 개발자들이 손수 할 필요 없이

Spring이 자동으로 할 수 있게 도와주는 Spring의 Extension,

즉 Plumbing을 손쉽게 해주는 도구라고 볼 수 있다.

 

강의에서는 Spring Framework과 함께 Spring Boot를 사용하여 Application을 개발해 나갈 예정이다.

 

 

 

 


 

 

Spring Web Application의 구조

 

Web Application을 만들기 위해 필요한 요구사항

 

 

 

 

Spring 의 Layer 구조

위의 요구사항들을 처리하기 위해 Spring을 통해 개발할 시 일반적으로 Layer(계층)를 나눈다.

Layer를 나누는 이유는 관심사의 분리(Seperation Of Concerns)를 위해서이다.

관심사의 분리를 통해서 코드의 재사용성, 유지보수성을 높일 수 있다.

Layer를 나누는 방식은 여러가지가 있지만, 일반적으로 많이 쓰는 방식으로,

Web Layer, Service Layer, Repository Layer로 구성을 한다.

 

 

 

 

 

 

 

 

 

 

 

각 Layer 사이의 인터페이스

내용 곧 추가 예정