본문 바로가기

TIL(Today I Learned)

TIL-231028(Spring Framework)

📝오늘 공부한 것

  • Spring Framework 공부
  • 프로그래머스 문제풀기

📌 Spring Framework

📍 Spring Framework

자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크로서 간단히 스프링이라고도 한다.

대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준프레임워크의 기반 기술로 쓰이고 있다.

 

📍 SpringBoot

스프링으로 애플리케이션을 만들 때에 필요한 설정을 간편하게 처리해주는 별도의 프레임워크

 

📍 Spring

정의 : 엔터프라이즈용 Java 애플리케이션 개발을 편하게 할 수 있게 해주는(1) 오픈소스(2) 경량급(3) 애플리케이션 프레임워크(4)

 

(1)엔터프라이즈용 Java 애플리케이션 개발을 편하게 할 수 있게 해주는

스프링이 등장하기 이전에는 비즈니스 로직을 구현하기 위해 기술 자체에 대한 공부를 추가적으로 해야만 했다. 그러나, 스프링은 이전 기술에 비해 사용 방법이 상대적으로 덜 복잡하다. 따라서, 개발 초기에 기본적인 설정과 적용시킬 기술들만 잘 선택을 해준다면, 기술보다는 애플리케이션의 로직 자체에 더 집중하여 비즈니스 로직을 구현할 수 있다.

 

(2)오픈소스

스프링은 모든 사용자에게 무료로 열려있다. 즉, 어떤 개인 및 기업도 스프링을 사용하여 웹 애플리케이션을 개발할 수 있으며, 필요하다면 스프링의 코드를 일부 수정하여 사용하여도 무관하다.

스프링은 오픈소스 프레임워크이지만, 안정적인 개발과 개선이 보장된다. 현재 스프링은 오픈소스로 배포되어 누구나 이용할 수 있지만, 스프링소스(SpringSource)라는 IT기업에서 관리하고 있으며, 스프링의 소스 코드를 수정하거나 개선하는 일에는 스프링소스의 한정적인 인원만 참여할 수 있다.

 

(3)경량급

스프링은 수십개의 세부 모듈 및 수십만줄의 방대한 코드로 이루어진 프레임워크임에도 불구하고, 스프링의 정의할 때에 경량급이라는 수식어를 사용할 수 있다. 그 이유는 기존에 스프링 대신 사용하던 기술들과 비교하여, 스프링을 사용했을 때에 개발자가 작성해야 할 코드가 상대적으로 단순하다는 것을 표현하기 위함이다.

즉, 스프링을 사용함으로써 기존 기술을 사용할 때에 불가피하게 작성해야만 했던 불필요하게 복잡한 코드를 제거하여 코드의 복잡성을 낮출 수 있음을 의미한다.

 

(4) 애플리케이션 프레임워크

웹 개발에 있어서 프레임워크란, 어떠한 목적을 쉽게 달성할 수 있도록 해당 목적과 관련된 코드의 뼈대를 미리 만들어준 것을 의미한다.

애플리케이션 프레임워크는 애플리케이션을 개발하는 데에 있어 필요한 모든 업무 및 모든 기술과 관련된 코드들의 뼈대를 제공한다.

 

📍 Spring의 특징

POJO를 지향

  • POJO(Plain Old Java Object)로 순수 Java만을 통해서 생성한 객체를 의미한다. 순수 Java만을 사용한다는 것은 Java 및 Java의 스펙에 정의된 기술만 사용한다는 의미이다.
  • 외부 기술이나 규약의 변화에 얽매이지 않아, 보다 유연하게 변화와 확장에 대처할 수 있다.
  • 객체지향 설계를 제한없이 적용할 수 있으며, 코드가 단순해져 테스트와 디버깅 또한 쉬워진다.
  • POJO 프로그래밍을 위해 스프링은 IoC/DI, AOP, PSA를 지원한다.

IoC(Inversion od Control) - 제어의 역전 / DI(Dependency Injection) - 의존성 주입

  • IoC : 객체 간의 의존 관계를 개발자가 아닌 스프링이 맺어주는 것
  • DI : 의존 객체를 특정 클래스에서 직접 생성하는 것이 아니라, 외부로부터 주입해주는 것
    각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.

AOP(Aspect Oriented Programming) - 관심지향 프로그래밍

  • 애플리케이션 전반에 걸쳐 공통적으로 적용되는 코드들을 비즈니스 로직으로부터 분리해내는 것
  • 트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있다.

PSA(Portable Service Abstraction) - 일관된 서비스 추상화

특정 기술과 관련된 서비스들을 추상화하여 일관된 방식으로 사용할 수 있도록 한 것

 

📍 Spring Framework의 아키텍처

https://docs.spring.io/spring-framework/docs/5.0.0.M5/spring-framework-reference/html/overview.html

Data Access/Integration

데이터 처리 관련 모듈

 

Web

Client쪽 처리에 가까운 모듈

 

AOP / Aspects / Instumentation / Messaging

유틸성 모듈

 

Core Container

스프링 구동의 핵심 모듈

 

Test

유닛테스트등 지원

 

 

 

 

 

 

 

 

 

 

References :

https://www.codestates.com/blog/content/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8

https://ko.wikipedia.org/wiki/%EC%8A%A4%ED%94%84%EB%A7%81_%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC

https://m.blog.naver.com/goottjob/223017496733

https://devscb.tistory.com/111

https://docs.spring.io/spring-framework/docs/5.0.0.M5/spring-framework-reference/html/overview.html

https://ko.wikipedia.org/wiki/%EC%8A%A4%ED%94%84%EB%A7%81_%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC

'TIL(Today I Learned)' 카테고리의 다른 글

TIL-231031(Garbage Collection)  (0) 2023.10.31
TIL-231030(HTTP Method)  (0) 2023.10.30
TIL-231027(WAS, WS)  (0) 2023.10.27
TIL-231026(REST API)  (0) 2023.10.26
TIL-231025(URI, URL, URN)  (0) 2023.10.25