[Spring] SpringBoot, IOC, AOP, DI
Spring이란
Spring 은 자바의 오픈소스 Application Framework 중 하나로 기본 철학은 특정 기술에 종속되지 않고 객체를 관리할 수 있는 프레임 워크를 제공하는 것이다. 컨테이너로 자바 객체를 관리하면서 의존성 주입과 제어의 역전을 통해 결합도를 낮추게 된다.
SpringBoot
SpringBoot는 Spring의 복잡한 환경설정 등을 개선하기 위하여 만든것으로 스프링에 비해 아래와 같은 장점이 있다.
1. 간편한 설정(Configuration)
2. 편리한 의존성 관리(Dependency) & 자동 권장버전 관리
3. 내장Tomcat 혹은 Jetty를 통한 간단한 베포 가능(jar)
4. 스프링 Security, JPA 등의 다른 스프링 프레임워크 쉽게 사용가능
IOC
Inversion of Control의 약자로 제어의 역전을 의미하는데 제어권이 사용자가 아닌 프레임 워크에 있는 것을 의미한다. 스프링에서는 인스턴스의 생성부터 소멸까지 개발자가 아닌 컨테이너에서 대신 관리하게 된다.
Bean
이름과 객체로 나뉘어서 스프링 컨테이너에 저장된다.
컨테이너
스프링에서 사용할 객체들을 담고있는 것으로 등록된 스프링 빈을 생성하고 의존관계를 주입하고 생명
주기를 관리해준다
DI
객체간 의존관계를 설정해주면 스프링 컨테이너가 자동으로 연결을 시켜준다. 의존하는 객체를 직접 생성하거나 검색해서 가져올 필요가 없어 결합도가 낮아진다.
ORM
관계형 데이터베이스를 OOP언어로 변환해주는 기술이고 비즈니스 코드가 DB테이블에 바로 접근하도록 해준다.
JPA
JPA는 ORM을 위해서 자바에서 제공하는 API이다. 자바 객체와 DB 테이블을 매핑하는데 구현체로는 hibernate가 있다.
*ORM, JPA, Hibernate의 장점
비즈니스 로직에 집중하고 객체중심의 개발을 할 수 있게 된다. 메소드를 호출하는 것만으로도 쿼리를 수행해서 생산성이 오르고 유지보수 비용이 줄어든다. 하지만 직접적으로 SQL을 호출하는 것보다는 느리고 복잡한 쿼리는 메소드로 처리하기 어렵다.
AOP
관점지향프로그래밍의 약자로 어떤 로직을 기준으로 핵심적 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하는 것을 말한다.