티스토리 뷰
DI(Dependency Injection)
- 스프링 컨테이너가 지원하는 핵심 개념 중 하나
- 설정 파일을 통해서 객체간의 의존관계를 설정
- 객체 사이의 의존관계를 객체 자신이 아닌 외부의 조립기가 수행
- 각 클래스 사이에 필요로 하는 의존관계를 Bean설정 정보 바탕으로 컨테이너가 자동으로 연결
- 객체는 직접 의존하고 있는 객체를 생성하거나 검색할 필요가 없음 -> 코드관리가 쉬워짐
AOP(Aspect Oriented Programming)
- 공통의 관심 사항을 적용해서 발생하는 의존 관계의 복잡성과 코드 중복을 해소해 줌
- 각 클래스에서 공통 관심 사항을 구현한 모듈에 대한 의존관계를 갖기 보다는 Aspect를 이용하여 핵심 로직을 구현한 각 클래스에 공통 기능을 적용
- 간단한 설정만으로 공통 기능을 여러 클래스에 적용할 수 있음
- 핵심 로직 코드의 수정없이 웹 어플리케이션의 보안, 로깅, 트랜잭션과 같은 공통 관심 사항을 AOP를 이용하여 간단하게 적용
: 매 프로젝트의 주가 되는 기능은 아니지만 핵심 기능마다 늘 같이 병행 되어 실행되는 중요한 기능을 표현할 때 사용
AOP용어
1. Advice : 언제 공통 관심기능을 핵심 로직에 적용할 지를 정의
2. Joinpoint : Advice를 적용이 가능한 지점을 의미
3. Pointcut : JoinPoint의 부분 집합으로서 실제로 Advice가 적용되는 Joinpoint를 나타냄
4. Weaving : Advice를 핵심 로직코드에 적용하는 것
5. Aspect : 여러 객체에 공통으로 적용되는 공통 관심 사항을 Aspect라고 함, 트랜잭션이나 보인등이 Aspect의 좋은 예
<공통 관심 사항이 삽입 될 위치가 Joinpoint/ Pointcut은 Joinpoint를 적용하기 위한 조건에 해당하는 것>
AOP와 Interceptor 비교
|
Interceptor |
Filter |
AOP |
실행 위치 |
서블릿 |
서블릿 |
메서드 |
실행 순서 |
2 |
1(제일 먼저와 제일 나중) |
3 |
설정 위치 |
xml or java |
web.xml |
xml or java |
실행 메서드 |
preHandler postHandler afterCompletion |
init dofilter destory |
pointcut으로 @after, @before, @around 등 위치를 지정하여 자유롭게 메서드 생성 가능 |
실행되는 메서드를 기준으로 설명하면, 서버를 실행시켜 서블릿이 올라오는 동안 init이 실행
-> 그 후 dofilter가 실행 -> 컨트롤러에 들어가기 전에 preHandler 실행 -> aop가 실행된 후 나오면서
-> postHandler -> after Completion, dofilter 순서대로 실행 -> 서블릿 종료시 destory가 실행
*AOP의 경우에는 Interceptor나 Filter와 달리 메서드 전후의 지점을 자유롭게 설정 가능하고, interceptor와 filter가 주소로만 걸러낼 대상을 구분 할 수 없는 것에 비해서 AOP는 주소, 파라미터, 어노테이션 등 다양한 방법으로 대상을 지정할 수 있는 장점이 있음.
DAO(Data Access Object)
- DB에 데이터를 조회하거나 조작하는 기능들을 전담
Spring MVC Annotation
- 메타 데이터를 XML에 설정하는 것이 아니라 소스코드에 @어노테이션의 형태로 표현하며 클래스, 필드, 메서드의 선언부에 적용 할 수 있는 특정 기능이 부여된 표현법
- 프레임워크들이 활성화 되고 어플리케이션 규모가 커질수록 XML 환경 설정은 복잡해지는데, 이러한 어려움을 개선시키기 위하여 자바 파일에 어노테이션을 적용해서 코드를 작성함으로써 개발자가 설정 파일에 작업하게 될 때 발생시키는 오류의 발생 빈도를 낮춰주기도 함
- 어노테이션을 사용하면 소스 코드에 메타데이터를 보관할 수 있으며, 컴파일 타임의 체크뿐 아니라 어노테이션 API를 사용하여 코드의 가독성을 높일 수 있음
기본적인 5가지 어노테이션
1. @Controller
- 특정 클래스를 Controller로 등록하는 어노테이션
- dispacter-servlet.xml에서 <bean>태그로 정의한 것과 동일한 효과를 나타냄
- DefaultAnnotationHandlerMapping을 통해 컨트롤러로 등록되어 사용됨
2. @RequestMapping
- 컨트롤러로 등록된 클래스내에 특정 메서드를 요청되는 URL과 매칭시키는 어노테이션
3. @Autowired
- Spring에서 자동으로 Dependency Injection을 하기 위한 어노테이션
4. @Service
- @Service로 정의한 클래스는 비지니스로직 처리 Service로 등록이 됨(Impl에서 사용 @Service("boardDao"))
5. @Repository
- Dao로 등록
프로젝트에서 @Service가 아닌 @Component 사용했음
- @Component는 스프링이 관리하는 모든 컴포넌트에 대한 제너릭 스트레오 타입/ 일반적인 용도의 컴포넌트들을 표시하는 기분 스트레오 타입/ 스프링에 의해 자동으로 탐지됨
- @Repository, @Service, @Controller는 스프링 프레임워크의 차기 릴리즈버전에서 추가적인 의미가 생길 가능성이 있다. 그래서 서비스 계층에 @Component나 @Service중에서 어느것을 사용할지 선택해야 한다면 @Service가 명확하게 더 나은 선택이다.
Spring JDBC
- 데이터베이스 테이블과 자바 객체 사이의 단순한 매핑을 비교적 간단한 설정을 통해 처리
- 지금까지 배웠던 JDBC는 하나의 DAO 클래스에도 어떤 로직을 구현하는가에 따라 여러가지의 SQL문이 존재하게 되고 SQL문 하나를 실행하는데도 Connection, PrepareStatement, ResultSet 등 여러개의 클래스를 생성하고 Exception 처리도 해야 하는 번거로움이 있었다. Spring에서는 JDBC를 비롯해 ORM 프레임워크를 직접적으로 지원하고 있기 때문에 약간의 노력만 하면 간단하게 연동할 수 있음
Spring DAO에서 대신 해주는 것들
- Connection 파라미터 정의
- Connection 열기
- Satement 생성
- SQL 문에 parapm 데이터 세팅
- Statement 실행
- result 값을 반복하기 위한 loop 설정
- 반복에 대한 작업 결과값 추출
- 예외처리
- 트랜잭션 처리
- Connection 담기
* 그냥 지가 다해준다고 생각하면 편함
MyBatis
-객체, 데이터베이스, 매퍼 자체를 독립적으로 작성하고 DTO에 해당하는 부분과 SQL실행결과를 SQL문등에 매핑해서 사용할 수 있도록 지원
-스프링이나 JDBC를 통해 작업하던 dao에 관련된 작업은 모두 sql문이 자바 소스상에 위치했었으나 이제 sql문은 설정파일로 관리한다.
-설정파일로 분리되면 변경되거나 했을때 설정파일만 건드리면 되므로 유지보수에 좋다. 또한, 매개변수나 리턴타입으로 매핑되는 모든 DTO에 관련된 부분도 모두 설정파일에서 작업한다
'Dev > Dictionary' 카테고리의 다른 글
인공지능(AI)/머신러닝(ML) 용어정리 (0) | 2020.05.26 |
---|---|
자바 웹을 다루는 기술 (Servlet&JSP/Spring) (0) | 2020.05.19 |
Java & Spring 개발자 면접 질문 (0) | 2020.04.11 |
Managed code vs Native code(Unmanaged code) (0) | 2020.04.06 |
Java 용어 정리 (0) | 2020.04.03 |
- Total
- Today
- Yesterday