1. 스프링 프레임 워크 (Spring Framework)
- 웹 컨테이너
웹 컨테이너는 JSP와 서블릿을 실행하는 소프트웨어로, 웹서버에서 JSP 요청이 오면 해당 JSP 파일을 서블릿 파일로 변환하고 컴파일합니다. 이렇게 생성된 서블릿의 수행 결과는 웹서버를 통해 전달됩니다.
웹 컨테이너는 WAS의 핵심 구성요소로, 서블릿의 생명주기를 관리하며, 서블릿을 로드하고 초기화하고, 클라이언트의 요청에 따라 서블릿 메서드를 호출합니다. 또한, 웹 컨테이너가 종료될 때 서블릿을 종료시키고 메모리를 정리합니다.
웹 컨테이너는 웹서버로부터 받은 요청을 분석하여 서블릿을 실행시키고, 서블릿이 웹서버의 정보를 확인할 수 있도록 지원합니다. 또한, JSP를 지원하며, WAS 내부에서 개발자 대신 서블릿을 관리합니다.
웹 컨테이너에는 서블릿 컨테이너 외에도 JSP 컨테이너, EJB 컨테이너 등이 내장되어 있으며, 대표적인 웹 컨테이너로는 자카르타 톰캣, RESIN, Web Logic, WebtoB 등이 있습니다. 이들은 다양한 컴포넌트들을 내장하고 있습니다. 이렇게 웹 컨테이너는 웹 애플리케이션의 핵심적인 역할을 수행합니다.
- 클라이언트: 사용자가 애플리케이션과 상호작용하는 사용자 인터페이스입니다.
- 컨트롤러: 클라이언트의 요청을 처리하고 적절한 응답을 결정합니다.
- 뷰: 클라이언트가 보는 것입니다. 웹 애플리케이션에서는 주로 사용자 인터페이스입니다.
- 모델: 데이터와 이 데이터에 대한 접근 및 업데이트 규칙을 나타냅니다.
: 스프링은 애플리케이션의 구성 요소를 관리하는 런타임 엔진인 ‘스프링 컨테이너’ 또는 '애플리케이션 컨텍스트’를 제공합니다. 이 컨테이너는 설정 정보를 바탕으로 애플리케이션을 구성하는 오브젝트를 생성하고 관리합니다. 이 오브젝트들은 주로 웹 모듈에서 동작하는 서비스나 서블릿으로 등록되어 사용됩니다.
스프링 컨테이너는 애플리케이션의 생명주기를 관리하며, 필요에 따라 오브젝트를 생성하고, 의존성을 주입하고, 설정을 관리합니다. 이를 통해 개발자는 비즈니스 로직에 집중할 수 있으며, 애플리케이션의 유지 보수와 확장성도 향상됩니다. 이러한 기능들은 스프링 프레임워크가 제공하는 IoC(Inversion of Control)와 DI(Dependency Injection) 원칙에 기반합니다. 이 원칙들은 애플리케이션의 모듈성을 높이고 코드의 재사용성을 증가시킵니다. 이 외에도 스프링은 트랜잭션 관리, 보안, 메시징 등 다양한 엔터프라이즈급 서비스를 제공하여 개발자의 생산성을 높이고 애플리케이션의 안정성을 강화합니다.
공통 프로그래밍 모델 - Ioc/DI, PSA, AOP
프레임워크는 애플리케이션을 구성하는 오브젝트가 생성되고 동작하는 방식에 대한 틀을 제공한다. 추가적으로는 어떻게 작성돼야 하는지에 대한 기준도 제시해준다. 이런 틀을 프로그래밍 모델이라고 한다. 스프링은 IoC/DI, PSA, AOP 이렇게 세가지 핵심 프로그래밍 모델을 지원한다.
- 스프링의 장점
1. 단순함
: 스프링은 EJB라는 복잡한 표준 기술을 비판하면서 등장했습니다. 스프링의 주요 목표는 목적을 달성하는 가장 단순하고 명확한 접근 방법을 제공하는 것입니다. 이를 위해 스프링은 객체지향 언어의 장점을 최대한 활용하는 도구를 제공합니다. 스프링은 POJO(Plain Old Java Object) 프로그래밍, 즉 가장 단순한 객체지향적인 개발 모델을 강력히 주장합니다. 이를 통해 개발자는 복잡한 설정 없이도 애플리케이션을 구현할 수 있습니다
2. 유연성
: 스프링은 유연성과 확장성이 뛰어나며, 이 덕분에 다양한 프레임워크와 편리하게 결합하여 사용할 수 있습니다. 이러한 특성 때문에 스프링은 '접착 프레임워크’라고도 불립니다. 예를 들어, JUnit, Mockito 등의 다른 프레임워크와 함께 사용할 수 있습니다.
스프링의 대부분 기능은 핵심 기능을 확장하여 발전시킨 결과물입니다. 스프링은 개발자들에게 스프링을 확장하여 사용하도록 권장하며, 이를 통해 개발자는 자신의 요구에 맞게 스프링을 맞춤화할 수 있습니다.
3. 테스트 용이성
: 스프링은 테스트 용이성도 중요한 가치로 여깁니다. 스프링은 POJO를 이용한 개발을 지원함으로써 단위 테스트를 쉽게 작성하고 실행할 수 있게 합니다. 이는 애플리케이션의 품질을 높이고, 유지보수를 용이하게 합니다.
4. 개방성
: 스프링은 오픈 소스 프레임워크로서, 개발자 커뮤니티와의 긴밀한 연결을 유지하고 있습니다. 이를 통해 스프링은 지속적인 개선과 혁신을 이루어내며, 최신 기술 트렌드를 반영한 기능을 제공합니다. 이는 스프링이 지속적으로 발전하고 성장하는 데 크게 기여하고 있습니다.
- 스프링의 특징(트라이앵글)
- IoC/DI (Inversion of Control/Dependency Injection): IoC는 프로그램의 제어 흐름 구조가 뒤집힌 것을 의미합니다. 전통적인 프로그래밍에서는 사용자가 작성한 코드가 제어의 흐름을 담당하지만, IoC를 사용하면 프레임워크가 코드의 흐름을 제어합니다. DI는 IoC의 한 형태로, 객체 간의 의존 관계를 빈 설정 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것을 말합니다.
- AOP (Aspect-Oriented Programming): AOP는 특정 로직을 공통 모듈로 만들어서 핵심 로직을 따로 구현할 수 있게 하는 프로그래밍 패러다임입니다. 이를 통해 코드의 중복을 줄이고, 모듈 간의 결합도를 낮출 수 있습니다.
- PSA (Portable Service Abstraction): PSA는 서비스 추상화라는 개념을 말합니다. 스프링은 PSA를 통해 다양한 기술에 대한 접근 방식을 통일시켜줍니다. 이를 통해 개발자는 기술의 세부사항에 신경 쓰지 않고 비즈니스 로직에 집중할 수 있습니다.
이 3가지 기술은 POJO(Plain Old Java Object)를 중심으로 동작합니다. 즉, 스프링은 이 3가지 기술을 통해 POJO 프로그래밍을 가능하게 하며, 이를 통해 개발자는 복잡한 기술에 대한 부담 없이 비즈니스 로직에 집중할 수 있습니다. 이는 스프링의 가장 큰 장점 중 하나입니다.
- POJO(Plain Old Java Object)
: POJO는 특정 자바 모델이나 기능, 환경, 규약, 프레임워크 등을 따르지 않은 순수한 자바 오브젝트를 지칭합니다. 이는 자바의 복잡성을 줄이고 코드의 가독성을 높이는데 중요한 역할을 합니다. POJO는 특정 기술에 종속되지 않기 때문에, 코드의 재사용성이 높아지고, 테스트와 유지보수가 용이해집니다. 이는 POJO가 특정 인터페이스를 구현하거나 상속받지 않기 때문에, 다른 코드와의 결합도가 낮아지기 때문입니다.
POJO 프로그래밍은 이러한 POJO에 애플리케이션의 핵심 로직과 기능을 담아 설계하고 개발하는 방법을 말합니다. POJO 프로그래밍은 다음과 같은 이유로 필요합니다:
- 재사용 가능하고 확장 가능한 유연한 코드: 특정 환경이나 기술에 종속되지 않는 POJO는 재사용 가능하고, 확장 가능한 유연한 코드를 작성할 수 있게 합니다.
- 깔끔한 코드: 저수준 레벨의 기술과 환경에 종속적인 코드를 애플리케이션 코드에서 제거함으로써 코드가 깔끔해집니다. 이로 인해 디버깅도 상대적으로 쉬워집니다.
- 단순한 테스트: 특정 기술이나 환경에 종속되지 않기 때문에 테스트 역시 단순해집니다.
- 객체지향적인 설계의 제한 없는 적용: POJO 프로그래밍은 객체지향적인 설계를 제한 없이 적용할 수 있게 합니다. 이는 POJO 프로그래밍이 필요한 가장 중요한 이유 중 하나입니다.
따라서, POJO와 POJO 프로그래밍은 코드의 유연성, 재사용성, 테스트 용이성을 높이며, 객체지향적인 설계를 제한 없이 적용할 수 있게 해줍니다. 이는 애플리케이션의 유지 보수성과 확장성을 높이는 데 크게 기여합니다. 이러한 이유로, 스프링과 같은 프레임워크에서는 POJO를 기반으로 애플리케이션을 개발하는 것을 권장합니다. 이를 통해 개발자는 복잡한 기술적 세부사항에 신경 쓰지 않고, 비즈니스 로직에 집중할 수 있습니다.
'AIoT' 카테고리의 다른 글
AIoT 정규 37일차 (0) | 2024.02.23 |
---|---|
AIoT 정규 36일차 (0) | 2024.02.22 |
AIoT 정규 34일차 (0) | 2024.02.19 |
AIoT 정규 33일차 (0) | 2024.02.19 |
AIoT 정규 32일차 (0) | 2024.02.15 |