본문 바로가기
FrameWork/Spring

Spring Framework

by titlejjk 2023. 6. 16.

나는 비전공자 이기 때문에 내 블로그에는 기본적인 개념을 기반으로 개발에 관련된 지식이나 생각을 조금씩 적어나아가고 있다. 어느덧 학원을 다닌지 2개월이 지나 드디어 너무나 배우고싶었던 Spring Framwork를 시작하게 되었다. 말로만 들었지 개인적으로 Java의 꽃이라고 생각하는 Spring을 드디어 겪어 볼수 있어서 설렘 반 긴장 반이다. 

위에 기본적인 개념을 기반으로 한다는 말은 내 공부 스타일이긴 하지만 무작정 만들어보고 하는 것도 중요하지만 무언가 이게 왜 존재하는지 어디에 쓰이는지 어떻게 만들어 졌는지도 굉장히 중요하다 생각하기 때문에 이번 글도 Spring이 어디서 어떻게 왜 생겨났고 어디에 쓰이는지 먼저 알아보겠다.

 

Java/Kotilin 기반의 웹 프레임워크이며 2002년에 로드 존슨(Rod Johnso)이 선보인 소스 코드를 시작으로 점점 발전하게 되었으며, 2003년6월에 최초로 공개되었다.

스프링 이라는 이름은 이전 Java EE의 스펙을 구현한 EJB가 기술의 복잡도가 증가새 성능이 느린 것을 개선한 것에 대해 EJB를 사용 했을 때를 겨울에 빗대어 벗어난 것을 "봄"이라는 표현에 시작되었다.

 

Spring은 자바 엔터프라이즈 애플리케이션 개발은 위한 것으로 그에 다양한 기능과 모듈을 제공하여 개발자가 효율적으로 애플리케이션을 개발할 수 있도록 지원하는 도구인데, 이 스프링은 여러 가지 모듈로 구성되어 있으며, 각각의 모듈은 특정한 기능을 담당하고 있다. 먼저 스프링 프레임워크의 주요 특징과 모듈에 대해 자세히 알아보겠다.

 

  1. 경량성(Lightweight)
    스프링은 경량 프레임워크로서, 자바 애플리케이션을 개발할 때 불필요한 부가적인 기능과 복잡성을 최소화한다. 이를 통해 개발자는 필요한 기능에 집중할 수 있으며, 애플리케이션의 성능과 유지보수를 용이하게 만든다.
  2. 제어의 역전(IoC, Inversion of Control)
    Spring은 IoC컨테이너를 제공하여 개발자가 객체의 생성과 의존성 관리를 직접 하지 않고 Spring 컨테이너에 위임할 수 있다. 이를 통해 개발자는 객체 간의 의존성을 설정하고 애플리케이션의 구조를 유연하게 조정할 수 있다.
  3. 의존성 주입(DI, Dependency Injection)
    Spring은 DI를 지원하여 개발자가 객체 간의 의존성을 쉽게 주입할 수 있다. 이를 통해 객체 간의 결합도를 낮추고 코드의 재사용성과 유지보수성을 향상시킬 수 있다.
  4. 관점 지향 프로그래밍(AOP, Aspect-Orented Programming)
    Spring은 AOP를 지원하여 애플리케이션에서 횡당 관심사(Cross-cutting Concerns)를 분리하여 모듈화할 수 있다. 이를 통해 코드의 중복을 줄이고 핵심 비지니스 로직에 집중할 수 있다. AOP를 사용하면 로깅, 트랙잭션 관리, 보안 등과 같은 부가적인 기능을 모듈화하여 필요한 곳에서 적용할 수 있다.
  5. 데이터 액세스 기술 지원
    스프링은 데이터베이스 액세스를 위한 다양한 기술을 지원한다. JDBC, JPA, Hibernate, MyBatis등 다양한 데이터 액세스 기술을 통합하여 사용할 수 있으며, 객체-관계 매핑(ORM)을 위한 기능도 제공한다.
  6. 웹 개발지원
    스프링은 웹 애플리케이션 개발을 위한 다양한 모듈과 기능을 제공한다. 스프링 MVC는 Model-View-Controller아키텍쳐를 기반으로한 웹 프레임워크로, 웹요청처리, 데이터바인딩, 검증, 템플릿 엔진과의 통합 등을 제공한다. Spring WebFlux는 비동기 및 반응형 웹 개발을 지원하는 모듈로, 네티(Netty)와 같은 서버를 사용하여 높은 확장성을 제공한다.
  7. 보안기능
    스프링 Security는 인증(Authentication)과 인가(Autorization)를 처리하기 위한 기능을 제공한다. 다양한 인증 방식을 지원하며, 웹 애플리케이션에서 사용자 인증, 권한 관리, 보안 설정 등을 간편하게 처리할 수 있다.
  8. 테스트 지원
    스프링은 테스트를 위한 다양한 기능을 제공한다. JUnit과의 통합을 지원하며, 테스트용 데이터베이스 환경설정, Mock객체를 사용한 테스트, 테스트 자동화등을 지원한다.

스프링 프레임워크는 위 그림처럼 총 6개의 모듈로 구성되어 있다.

  • Core
    제어 역전(IoC)과 의존성 주입(DI)기능을 제공한다. 전체적인 프로세스의 흐름이 개발자가 아니라 프레임워크에 의해 결정된다는 의미이다. 개발자는 프레임워크가 정한 틀에 따라 코드를 작성해 넣기만 하면 된다. 의존성 주입은 객체 생성에 관한 뜻이다. 클래스A와 B가 있다 할 때, A클래스의 메소드 내에서 B클래스의 객체를 생성하여 비지니스 로직에 사용하면 A는 B에 "의존"하는 관계가 된다. 그리고 A,B 클래스가 아닌 외부에서 A클래스의 메소드를 호출하고, 파라미터 값으로 B 클래스의 객체를 전달하는 것을 "주입"이라 한다. 이 두가지 상황을 합친 것을 의존성 주입이라한다.
    파라미터 값으로 전달받은 B객체를 A클래스의 메소드 내에서 비지니스 로직에 사용하는 것을 의미한다.
    즉 A와 B의 "의존"관계가 외부에서의 "주입"을 통해 이루어지는 것을 말한다.
  • DAO
    JDBC추상 계층을 제공한다. JDBC는 자바의 데이터베이스 커넥터이다. 데이터가 담겨있는 VO(Value Object)클래스를 이용하여 사용한다.
  • ORM
    JPA, Hibernate와 같은 ORM이나 MyBatis같은 데이터베이스 API등과 통합할 수 있는 기능을 제공한다.
  • AOP
    스프링 프레임워크에서 제공하는 AOP 패키지를 제공한다. 공통로직을 한군데서 관리해서 공동으로 사용한다는 개념은 어렵지 않으나, 데이터와 변수가 어디서 어디로 오고가는지를 따지면 어지럽다.스프링을 공부할때 최악의 난이도를 지닌 구간이라 평가된다.
  • WEB
    Spring Web MVC, Struts, WebWork 등 웹 애플리케이션 구현에 도움되는 기능을 제공한다.
  • JEE
    EJB, JMX 등의 펜터프라이즈 J2EE스펙에 관한 기능을 제공한다. 

출처 : https://namu.wiki/w/Spring(%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC)

'FrameWork > Spring' 카테고리의 다른 글

Spring DI(Dependency Injection)  (0) 2023.06.19
MyBatis  (0) 2023.06.19
@RequestMapping  (0) 2023.06.16
@ResponseBody  (0) 2023.06.16
DispatcherServlet  (0) 2023.06.16

댓글