벌꿀오소리가 되고싶은
[용어정리] Spring 본문
Hibernate or JPA
Hibornate는 완벽학 ORM 프레임워크이다. ORM 프레임 워크는 SQL 명령어를 프레임워크가 자체적으로 생성하여 DB연동을 처리한다. JPA는 Hibernate를 비롯한 모든 ORM의 공통 인터페이스를 제공하는 자바 표준 API이다.
POJO (Plain Old Java Object)
단일 책임의 원칙 한가지 관심사, 즉 비즈니스 로직만 명확하게 나타낼 수 있도록.. 공통관심사는 Spring AOP로 처리 하게끔 구현. 변화에 자유로움 갈아끼거나 대체가능하고 Test할때 용이하게 만들었다면 POJO
IoC (inversion of Control)
역행제어라 하며, 자바 객체 생성을 자바 코드로 직접 처리하는 것이 아니라 컨테이너가 대신 처리한다. 그리고 객체와 객체 사이의 의존관계 역시 컴테이너가 처리, 결과적으로 소스에 의존관계가 명시되지 않으므로 결합도가 떨어져거 유지 보구가 편리하다. 스프링 컨테이너가 이 역할을 수행함
AOP (Aspect Oriented Programming)
관점지향 프로그래밍, 로깅, 보안, 트랜젝션 등 반복해서 등장하는 공통 로직을 분리함, 해당 기능을 프로그램 코드에 직접 명시하지 않고 선언적으로 처리.
스프링 컨테이너의 종류
스프링에서는 BeanFactory와 이를 상속한 ApplicationContext 두 가지 유형의 컨테이너를 제공.
BeanFactory는 스프링 설정 파일에 등록된 <bean>객체를 생성하고 관리하는 가장 기본적인 컨테이너 기능만 제공. 컨테이너가 구동될 때 <bean> 객체를 생성하는 것이다니라, getBean메소드를 통헤 lookup클라이언의 요청에 의해서만 객체 생성.
AppliacationContext는 구동되는 시점에 빈등록된 클래스들을 객체 생성하는 즉시 로딩 함.
*Servlet에 대한 사실들...
Servlet 컨테이너는 web.xml 파일에 등록된 Servlet 클래스의 객체를 생성할 때 디폴트 생성자만 인식.
따라서 생성자로 Servlet객체의 멤버변수를 초기화할 수 없음.
그래서 Servletd은 init()메서드를 재정의(Overriding)하여 멤버변수 초기화함.
스프링 init-method 속성
<bean id="tv" class="polymorphism.SamsungTV" init-method="initMethod"/>
polymorphism.SamsungTV 클래스에 initMethod라는 메서드를 사용하여 객체 생성 후 멤버변수 초기화 시켜줄 수 있음.
lazy-init 속성
AppliacationContext는 구동되는 시점에 빈등록된 클래스들을 객체 생성하는 즉시 로딩 하지만 lazy-init 속성을 통해 제어가능
<bean id="tv" class="polymorphism.SamsungTV" lazy-init="true"/>
scope 속성
싱글톤패턴 제어 가능
어노테이션 XML 설정 병행하여 사용하기
어노테이션 기반 설정은 XML설정에 대한 부담이 없고, 의존관계에 대한 정보가 자바 소스에 들어있어서 사용하기 편함. 하지만 의존성 주입할 객체의 이름이 자바 소스에 명시되어야 하므로 자바 소스를 수정하지 않고 인터페이스를 구현한 자손객체들을 교체할 수 없다는 문제가 있음
AOP 용어 및 기본 설정
Joinpoint
조인포인트는 클라이언트가 호출하는 모든 비즈니스 메소드로서, BoardServiceImpl이나 UserServiceImpl클래스의 모든 메소드를 조인포인트라고 생각하면됨.
조인포인트 중에서 포인트컷이 선택되기 때문에 포인트컷 대상 또는 후보라고도 함
Pointcut
클라이언트가 호출하는 모든 비즈니스 메소드가 조인포인트라면, 포인트 컷은 필터링 된 조인 포인트를 의미.
예를 들어 트랜젝션 처리하는 공통 기능을 만들었다고 가정하면, 횡단관심사은 등록, 수정, 삭제 기능의 비즈니스 메소드에 대해서 당연히 동작해야 하지만, 검색 기능의 메소드에 대해서는 트랜잭션과 무관하므로 동작할 필요가 없다.
포인트컷 표현식
* 모든 리턴타입 허용
void 리턴타입이 void 메소드 선택
!void 리턴타입이 void가 아닌 메소드 선택
com.springbook.biz 정확하게 com.springbook.biz 패키지만
com.springbook.biz.. com.springbook.biz 패키지로 시작하는 모든 패키지 선택
com.springbook.biz..impl com.springbook.biz 패키지로 시작하면서 마지막 패키지 이름이 impl로 끝나는 패키지
BoardServiceImpl 정확하게 BoardServiceImpl클래스만 선택
*Impl 클래스 이름이 Impl로 끝나는 클래스만 선택
BoardService+ 클래스 이름 뒤에 +가 붙으면 해당 클래스로 부터 파생된 모든 자식 클래스 선택, 인터페이스 뒤에 +가 붙으면 해당 인터페이스를 구현한 모든 클래스 선택
*(..) 가장 기본 설정으로 모든 메소드 선택
get*(..) 메소드 이름이 get으로 시작하는 모든 메소드 선택
'개발 > 용어정리' 카테고리의 다른 글
JWT 토큰 (0) | 2020.03.11 |
---|---|
Node 개념 정리 (0) | 2020.03.05 |
자바스크립트 (0) | 2020.02.26 |
[Docker] Docker와 VM의 차이? (0) | 2020.02.22 |
[용어정리] Java (0) | 2019.08.13 |