FOREST_CHOI's BLOG

Spring? 본문

프로그래밍/Spring Boot

Spring?

Forest_Choi 2022. 10. 15. 14:06
728x90

예전 토이프로젝트를 진행하면서 Spring이란 무엇인지에 대해서 정리하였다.

 


 

Spring 이란?

    -      자바 엔터프라이즈 개발을 편하게 해주는 경량급 Open Source Application Framework

(1)   Application Framework

  일반적으로 LibraryFramework는 특정 업무 분야나 한 가지 기술에 특화된 목표를 가지고 만들어진다. 그래서 프레임워크는 애플리케이션의 특정 계층에서 주로 동작하는 한 가지 기술분야에 집중된다. 하지만, Spring은 이와 다르게 Application Framework라는 특징을 갖고있다. Application Framework는 특정 계층이나, 기술, 업무 분야에 국한되지 않고 Application의 전 영역을 포괄하는 범용적인 프레임워크이다. Application FrameworkApplication 전 개발 과정을 빠르게 편리하며 효율적으로 진행하는데 목표를 두는 FrameWork 이다.

 

(2)   경량급

  Spring이 매우 복잡하고 방대한 규모의 프레임워크인데 경량급이라고 불리는 이유는 불필요하게 무겁지 않다는 의미이다. , 만들어진 코드가 지원하는 기술수준은 비슷하더라도 그것을 훨씬 빠르고 간편하게 작성하게 해줌으로써, 생산성과 품질 면에서 유리하다는 것이다.

 

(3)   자바 엔터프라이즈 개발을 편하게

  스프링은 애플리케이션 개발자들이 스프링이라는 프레임워크가 제공하는 기술이 아니라, 자신이 작성하는 애플리케이션의 로직에 더 많은 관심과 시간을 쏟게 해준다. 초기에 스프링의 기본 설정과 적용 기술만 잘 선택하고 준비해두면, 이후로 스프링과 관련된 코드나, API에 대해 개발자가 거의 신경 쓸 일이 없다.

 

(4)   오픈소스

  모두에게 공개되고, 특별한 라이선스를 취득할 필요없이 얼마든지 자유롭게 이용해도 된다. 소스를 자유롭게 열람하고 자신의 목적에 맞게 사용할 수 있으며, 필요시 개발자 마음대로 수정할 수 있으며, 수정한 소스를 공개 해야 하는 의무가 없다.

 

 

 

Spring 의 목적

    -      Professional Spring Framework라는 책에서 스프링의 핵심 개념은 스프링의 정수는 엔터프라이즈 서비스 기능을 POJO에 제공하는 것이라고 했다.

 

Spring의 특징

(1)   POJO(Plain Old Java Object)기반의 구성

    -      객체 지향적인 원리에 충실하면서 환경과 기술에 종속되지 않고 필요에 따라 재활용 될 수 있는 방식으로 설계된 오브젝트

    -      개발자가 특정 라이브러리나 컨테이너의 기술에 종속적이지 않다는 것

 

(2)   의존성 주입(DI : Dependency Injection)

    -      의존성 : 하나의 객체가 다른 객체 없이 제대로 된 역할을 할 수 없다는 의미

    -      주입 : 외부에서 밀어 넣는 것

    -      어떤 객체(A) 가 필요로 하는 객체(B)를 외부에서 밀어 넣어주는 것

    -      주입을 받는 입장에서는 어떤 객체인지 신경 쓸 필요가 없으며, 어떤 객체에 의존하든 자신의 역할은 변하지 않는다.

    -      생성자를 이용한 주입, Setter 메서드를 이용한 주입이 있다.

 

(3)   AOP(Aspect Oriented Programming)의 지원

    -      어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화 하겠다는 것이다.

    -      코드들을 부분적으로 나누어 모듈화 하겠다는 의미

    -      Aspect로 모듈화 하고 핵심적인 비즈니스 로직에서 분리하여 재사용 하겠다는 것이다.

 

(4)   WAS에 독립적인 개발 환경

    -      과거의 EJB가 동작하려면 고가의 느리고 무거운 WAS가 필요했지만, Spring은 단순한 서버환경에서도 충분히 애플리케이션을 개발 할 수 있다.

 

(5)   트랜잭션 처리

 

다른 프레임워크의 특징과 장단점(Node.js, Django, PHP)

1)     Node.js

    -      구글 크롬 V8 자바스크립트 엔진을 기반으로 한, 고성능 네트워크 서버

    -      Single Thread 기반의 Event Loop을 기반으로 하고 있으며 File, Network등에 대해서 비동기 처리를 하는 서버 미들웨어

    -      장점

                    싱글 스레드, 비동기 I/O 처리에 기반한 빠른 속도

                    파일 I/O나 네크워크 처리를 이벤트 드리븐 방식으로 처리하기 때문에 빠른 처리가 가능함

                    CPU 대기 시간을 최소화 할 수 있음

                    CPU부하기 적고, 많은 커넥션을 동시에 처리해야하는 구조에 적합

-      단점

                    싱글 스레드 모델이기 때문에 하나의 작업에 시간이 오래 걸리면 시스템 전체 성능이 급격하게 저하

                    이벤트 콜백 중심으로 코드가 중첩될 경우 가독성이 떨어짐

                    에러가 발생할 경우 프로세스 자체가 죽어 버림

 

2)     Django

  -      파이썬으로 작성된 웹 개발 프레임워크, MTV아키텍처를 따르고, ORM이 프로젝트의 객체들을 데이이터베이스 테이블과 매핑을 도와주어 복잡한 데이터 기반 웹 사이트 개발이 쉬워질 수 있음

  -      장점

                    다양하고 강력한 라이브러리

                    스크립트 언어로 쉽고 간결

                    다양한 운영체제 활용

                    높은 생산성

                    파이썬 라이브러리 사용가능

  -      단점

                    모바일 컴퓨팅에 취약하기 때문에 스마트폰 어플리케이션은 거의 없음

                    언어 설계면에서 파이썬이 동적 입력형태를 띄기 때문에 더 많은 테스트가 필요하고 실행했을 때 드러나는 오류가 있음

3)     Codeigniter

  -      PHP기반 오픈소스이며, 무료로 사용할 수 있다. 빠르고 MVC 모델을 지원한다.

  -      장점

                    PHP기반 full stack framework중에서 성능이 뛰어나다

  -      단점

                    Restful 서비스에 적합하지 않다

                    Session 처리가 안정적이지 않고, DB Session만을 지원하여 File 이나 Memory 기반의 Session을 사용하기 위해서는 별도의 개발이 필요함

 

 

 

Spring VS Node.js

  -      Node.js 싱글 스레드로 파일 I/O 네트워크 처리를 이벤트 기반 방식으로 빠르게 처리가 가능하다. CPU 부하가 적고, 많은 커넥션을 동시에 처리하는 구조에 적합하다. 다만, 싱글 스레드이기 때문에 하나의 작업에 오랜 시간이 걸리면 시스템 전체의 성능이 급격히 떨어지는 한계를 가진다.

  -      Spring  멀티 스레드 Spring 동시에 많은 요청을 처리할 있다. 또한 많은 개발자들이 오랜기간 사용해왔기 때문에 버그와 보안 이슈를 보다 쉽게 해결할 있고, 자유성이 낮다는 점에서 안정적이라고 있다. 다만, Node.js 보다는 진입장벽이 높다.

  -      따라서 I/O 작업과 같은 커넥션이 많고, 적은 CPU 연산을 처리하는 시스템에서는 Node.js CPU 연산이 많고, 커넥션이 적은 시스템에서는 Spring 적합하고 있다.

728x90
Comments