본문 바로가기

Spring

Spring 기초 - 1

오랜만에 작성하는 블로그같습니다. 

그동안 알고리즘 공부한다고 머리 집어뜯으면서 했었는데, 간만에 강의만 보니까 편안하네요...

 

Spring vs Spring boot

Spring은 기능이 많은 만큼, 개발자가 앱을 실행하기 위해서 필요한 설정이 많았는데,

Spring boot는 이런 초기 설정을 자동으로 처리해주는 도구 이다. 자주 사용되는 설정을 미리 정리하고 이를 바탕으로 앱을 구성을 해주기때문에 설정없이 바로 개발을 시작할 수 있다는 장점이있습니다.

사실 요즘 Spring이라고 한다면 대부분 Spring이 아니라 Spring boot를 뜻하는 것이라 생각하면 될거같습니다.

 

라이브러리(Library)

라이브러리란, 개발에 필요한 클래스, 함수 등을 모아 놓은 코드의 모음을 의미. 

쉽게말해서 내가 개발할때 필요한 기능을 이미 누군가 만들어 두었고, 해당 기능을 가져와서 쓸 수 있는 것. 그것을 라이브러리라고 지칭합니다. 

 

장점

개발자가 직접 복잡한 코드를 작성하지 않아 생산성이 늘어나고, 검증된 라이브러리는 테스트와 커뮤니티가 활발해 안정성과 품질이 보장됩니다.

 

단점

- 지원이 중단 될경우 서버에 문제가 발생 할 수 있습니다. 

- 버전 호환성 문제 등으로 기존 코드나 다른 라이브러리와 충돌 발생 가능성이 있습니다. 

- 불필요한 기능을 포함한 라이브러리를 쓰면 비효율 적이다.

- 특정 요구사항에 맞게 커스텀 하기 어려울 수 있다.

 

프레임워크(Framework)

개발을 할때 필요한 것(라이브러리)들을 미리 모아두어서 모두 호환이 가능하도록 세팅 해두고 기본 구조와 흐름을 미리 세팅해두어 개발자가 환경설정을 최소화 하고 바로 개발에 집중 할 수 있도록하는 소프트웨어 개발 환경입니다.

 

장점

- 프로젝트에 일관된 구조를 제공. 가동성을 높여주고 협업을 편하게 해준다.

- 개발자들이 핵심 비지니스로직에 집중 할 수 있다.

- 보안 관련 기능을 기본적으로 제공 하여, 보안 취약점을 방지하는데 도움을 준다.

- 통합된 테스트 환경을 제공하여 테스트를 쉽게 작성하고, 실행 할 수 있다.

- 인기있는 프레임워크는 방대한 커뮤니티를가 존재하여, 다양한 문서를 활용할 수 있다.

 

단점

- 굉장히 복잡한 구조를 가지기때문에 러닝커브가 높다.

- 새로운 버전이 기존 코드와 호환하지 않을 수 있다.

- 정해진 규칙과 구조를 따르게 강제하여 자유롭게 변경이 어려울 수 있다. 

 

스프링 프레임워크(Spring Framework)

자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크, 복잡한 애플리케이션 개발을 보다 쉽고 효율적으로 할 수 있도록 강력하고 포괄적인 기능을 제공합니다.

개발자는 Spring을 사용하여 비지니스 로직에 더 징중 할 수 있고, 인프라나 기술적인 복잡성은 Spring이 대신 처리하도록 할 수 있습니다.

 

API 이해하기

본격적으로 Spring에 들어가기 전에 API (Application Programming Interface) 에대해서 간단하게 알아보겠습니다.

API는 이름에서 알 수 있듯이 Interface 입니다. 즉, 쉽게 이해하면 명세서라는 의미입니다.

애플리케이션 프로그래밍에서 어떤 기능 사용 할 수 있는지 어떤 것들이 구현 되어있는지 정의한것입니다.

 

클라이언트와 서버는 Interface의 명세대로만 통신하는 것이 바로 API인 것입니다.

API를 사용하는 클라이언트는 우리의 백엔드 서버가 스프링으로 만들었는지, 자바로 만들었는지 전혀 궁금하지 않고 모른다고 해서 개발에 지장이 있어서는 안됩니다.

 

RESTful API??

REST는 어떻게 서버 구현을 알지 못하는 클라이언트가 API를 잘 이용할 수 있을지에 대한 고민의 결과입니다.

 

반드시 지켜야하는 규칙은 아니며, 일종의 이렇게 하면 좋을 것 같아! 라는 철학이라고 생각하면 될거같습니다!

**1. 동사보단 명사를, 단수보단 복수를**

❌ /member/get/item/hello

✅ /members/items

**2. 마지막에 / 넣지 않기**

❌ /members/

✅ /members

**3. _ 대신 - 사용 + 대문자 사용하지 않기**

❌ /restful_services

✅ /restful-services

**4. 확장자 포함하지 않기(svg, png, exe 등)**

❌ /image.svg

✅ /images

**5. 계층화 하기**

❌ /items/{memberId}/members/{itemId} (x)

✅ /members/{memberId}/items/{itemId}