반응형
[ Spring Framework ]
: IoC와 AOP를 지원하는 경량의 프레임워크
- 제어의 역행 : 개발자가 객체를 생성(new)하지 않고, 컨테이너가 객체를 생성하고 관리하는 기능을 제공
- 관점 지향 프로그래밍 : 공통로직을 별도의 클래스로 모듈화해 올바른 시기에 호출하는 기능을 수행
- 경량의 POJO를 다루는 컨테이너를 통해 AOP 기능을 구현하고 적용할수 있도록 도와주는 프레임워크
제어의 역행 (Inversion of Control, IoC)
- 코드에서 객체를 생성(new)하는 부분을 개발자가 담당하지 않고 프레임워크나 컨테이너에게 맡기는 것을 말함
- ex) 웹에서 요청을 처리하기 위해 사용하는 각각의 액션(Action)을 개발자가 직접 생성하고 관리하는 것이 아니라, 프레임워크나 컨테이너에게 필요한 액션을 맡기는 방식
- 스프링 프레임워크에서는 이러한 IoC를 통해 개발자가 직접 객체를 생성하거나 관리하는 부분을 최소화함
- 대신, 스프링 컨테이너를 통해 객체의 생성과 관리를 수행
- 이를 통해 개발자는 객체를 생성하는 코드에서 new 연산자를 사용하지 않고도, 스프링 컨테이너를 통해 필요한 객체를 가져와 사용할 수 있음
++
- 서블릿 컨테이너 (== 웹서버, 톰캣) : 서블릿 객체만 생성 가능 (FrontController, 비동기처리 로직 클래스, ...)
- 컨테이너 : 객체를 생성하거나 객체를 관리하는 주체
- 관리 == 호출 시점을 정하는 것 or 객체 소멸시점을 정하는 것
- 제어 == 객체를 생성 및 관리 == new
관점 지향 프로그래밍 (Aspect Oriented Programming, AOP)
- 절차 지향 프로그래밍
- 순서대로 진행하는 방식 (ex. C언어)
- 일의 처리순서가 가장 중요
- 알고리즘 중요
- 성능 - 속도 중요
- 객체 지향 프로그래밍
- 모듈 단위로 코드를 구성하는 방식
- 객체 & 설계 중요
- 성능 - heap메모리 중요 (ex. 싱글톤, 팩토리, ... 그래서 이런 개발 패턴이 나옴)
- 관점 지향 프로그래밍
- 객체 지향 프로그래밍(OOP)의 보완적인 개념
- 핵심로직이 아닌 CRUD에 공통적으로 적용되는 로직을 별도의 모듈로 분리해 개발하는 프로그래밍
- 기존의 객체 지향 프로그래밍(OOP)은 핵심로직을 중심으로 개발됐지만, AOP는 다양한 CRUD와 같은 핵심로직에 공통적으로 적용되는 로직을 별도의 모듈로 분리해 저장하고 호출할 수 있도록 지원함
- 이를 통해 공통로직(횡단관심)과 핵심로직(== 비즈니스 메서드, CRUD, 핵심관심)을 분리해 코드를 모듈화하고 관리할 수 있음
- ex) JDBCUtil과 같은 클래스는 데이터베이스 접속과 자원 해제와 같은 공통로직을 별도로 모듈화해 관리해줌, 이러한 공통로직은 각각의 비즈니스 메서드에서 반복적으로 사용되는 경우가 많음. AOP를 활용하면 이러한 공통로직을 별도의 클래스나 메서드로 작성해 필요한 시점에 적용할 수 있음
- 따라서 AOP는 객체 지향 프로그래밍에서 발생하는 코드의 중복을 줄이고, 유지보수성을 향상시키며, 코드의 재사용성을 높여줌. 특히 스프링 프레임워크에서는 AOP를 지원해 개발자가 간편하게 공통로직을 적용할 수 있도록도와줌
- 개발자가 코드를 ctrl C, V하는 행위를 하면 개선의 여지가 있다는 신호임... Action, DAO류 인터페이스로 제작해도 내부 로직이 유사한 경우 결국 복붙함... 이러한 중복을 줄이기 위해 AOP를 적용해볼 수 있는 타이밍을 고려하는 것이 좋음!
경량
- 다루는 객체가 가볍다 == POJO 다
- 사용되는 메모리가 적다 == 싱글톤 패턴을 활용하면 적어질 수 있음
프레임워크 : 뼈대
- 프레임워크는 개발자가 필요한 기능을 직접 구현하는 대신에 프레임워크가 제공하는 규칙과 패턴을 따라가면서 개발할 수 있도록 도움
- 라이브러리 : 살, 개발자가 필요에 따라 가져와서 사용할 수 있는 기능들의 집합체
- API : 외부에서 제공되는 서비스 또는 인터페이스
- 프레임 워크를 활용했을 때 장점
- 스프링 프레임워크를 설정하고 프로젝트를 생성하면 이미 Spring MVC가 적용된 프로젝트를 쉽게 생성할 수 있음
- 이는 개발 시간을 단축시켜주고, 구현이 빨라지게 됨. 또한 프레임워크를 사용함으로써 일관된 개발 구조를 유지할 수 있으며, 이는 유지보수와 협업을 용이하게 함
- ex) 다른 개발자가 프로젝트에 참여하더라도 프레임워크의 규칙을 따르기만 하면 쉽게 이해하고 참여할 수 있음
- 따라서 프레임워크를 활용함으로써 개발자 실력의 상향 평준화와 유지보수성 향상을 기대할 수 있음
반응형
'개발 > Spring' 카테고리의 다른 글
Spring Framework_컨테이너 & 빈 관리 (0) | 2024.07.16 |
---|---|
Spring Framework_의존성 주입(Dependency Injection, DI) (1) | 2024.07.16 |
Spring Framework_설치 (0) | 2024.07.16 |
Spring Framework_ApplicationContext, <bean></bean> (2) | 2024.07.16 |
Spring Framework_결합도(Coupling) (0) | 2024.07.16 |