티스토리 뷰

Dev/Dictionary

Java Spring 용어정리

꿈을 위해 잠을 잊은 그대에게 2020. 4. 30. 10:24

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에 관련된 부분도 모두 설정파일에서 작업한다

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크