사용자관리프로젝트(컨트롤러,서비스,DAO,도메인모델)란?


사용자관리 프로젝트 아키텍쳐

- 계층화(역할별로 나누어서 개발)

3계층과 모든계층에 사용되는 도메인 모델(VO,DTO) 클래스로 구성되어있다.

3계층

-프리젠테이션계층

-서비스계층

-데이터액세스계층

각각계층은 독립적으로 구분에서 구현한다.(각각의 기능과 역할이 다름)


프리젠테이션계층(쉽게말해 컨트롤러)

- 웹클라이언트의 요청 및 응답을 처리한다.

- 상위계층(서비스,데이터액세스계층)에서 발생하는 익셉션 처리한다.

- 최종 UI에서 표현해야 할 도메인 모델 사용한다.

- 최종 UI에서 입력한 데이터에 대한 유효성 검증기능을 제공한다.(타입확인등)

- 비지니스로직과 UI분리한다.(컨트롤러)

- @Controller 어노테이션으로 표현한다.


서비스계층(비지니스 로직)

- 복잡한 처리 구현한다.

- 트랜잭션처리한다.(DB 커밋 및 롤백)

- 프리젠테이션계층과 데이터액세스 계층 사이를 연결하는 역할이다.(직접통신하지않아 유연성증가)

- 다른 계층들과 통신하기 위한 인터페이스를 제공한다.

- Service 인터페이스와 @Service 어노테이션을 사용하여 작성된 Service 구현 클래스이다.


데이터액세스계층

DBMS연동하여 데이터엑세스하는 로직을 담당한다.

- 데이터를 조회 등록 수정 삭제한다.(CRUD)

ORM 프레임워크(Mybatis,Hibernate)를 주로 사용하는 계층이다.

- DAO인터페이스 @Repository 어노테이션을 사용하여 작성된 DAO 구현 클래스이다.


도메인모델클래스

- VO,DTO객체에 해당한다.

- 3개의 계층에 걸쳐 사용한다.

- private 멤버변수있고, getter,setter로 사용한다.



사용자 관리 프로젝트 클래스 설계

테이블 생성


컨트롤러 -> 

서비스(인터페이스) ->

서비스임플(비지니스로직) -> 

DAO(인터페이스) -> 

DAOImpl(db연결 jdbc사용)

UserVO(전구역에걸쳐사용)


UserController

- UI계층과 서비스 계층을 연결하는 역할이다.

- JSP에서 UserController를 통해서 서비스 계층의 UserService를 연결한다.(@autowried사용)

- UserService 를IOC가 주입해준다.



UserService

- 서비스 계층에 속한 상위 인터페이스이다.


UserServiceImpl          

- @Service사용 -> @Component과 같음

- UserService를 구현한클래스이다.

- 복잡한 업무 로직이 있을 경우에는 이 클래스에서 업무 로직을 구현한다.

- 데이터액세스 계층의 UserDao 인터페이스를 구현한 객체를 IoC컨테이너가 주입해준다.(@autowried사용)


UserDao

- 데이터 액세스 계층에 속한 상위 인터페이스


UserDaoImplJDBC 

- @Repository -> @Component역할과 같다.(특별히 데이터엑세스 레파지토리라는 뜻)

- UserDao 인터페이스를 구현한 클래스로 이클래스에서는 데이터 액세스 로직을 구현한다.

- SpringJDBC를 사용하는 경우 DataSource를 IoC컨테이가 주입해준다.

- MyBatis를 사용하는경우에는 SqlSession을 IoC컨테이너가 주입해준다.




Bean등록 및 메타정보구성이란?


Bean등록 메타정보 구성전략


1. XML 단독 사용

- 모든 Bean을 명시적으로 XML에 등록하는 방법이다.

- XML장점:생성된 Bean을 XML에서 확인할 수 있는 장점이 있다.

- XML단점:Bean개수가 많아지면 XML관리가 번거로워진다.

- 여러개발자가 같은 설정파일을 공유해서 개발할시 설정파일을 동시에 수정하면 충돌문제가생긴다.

- DI에필요함 Setter,constructor가 코드내에 반드시 존재해야한다.

- 개발중 보다는 운영중에 적합하다.





2. XML과 빈 스캐닝((Bean Scanning)의 혼용

-Bean에 해당되는 클래스에 어노테이션을 부여해준다.

-어노테이션 붙은 클래스를 자동으로 찾아 빈스캐닝을 해준다.(자동스캔)

-어노테이션을 부여하고 자동 스캔하면 XML문서자 많이 줄어든다.

-단점:Bean설정 정보를 한번에 파악하기 어려움이 있다. (의존관계파악어려움)


적합한 환경

- XML 단독 사용 : 운영환경적합하다.(한눈에 확인가능)

- XML과 빈 스캐닝((Bean Scanning) : 개발환경에적합하다.(XML을 공유하는 상황이 줄어듬)




Bean등록 및 의존관계 설정(annotation)

-@Component

-일반적인 스테레오타입이다.

-<bean>태그와 동일한 역할을 한다.

-@Repository

-영속성을 가지는 속성(파일,DB)을 가진 클래스이다.

-@Service

-비지니스로직을 가지는 클래스를 말한다.

-@Controller

-프리젠테이션레이어에서 사용한다.(웹어플리케이션에서 웹요청과 응답처리) 화면과 연결


Bean의존관계를 주입 Annotation

-@autowired

- 정밀한 의존관계 주입(DI)이 필요한 경우에 사용한다.

- 프로퍼티,setter메서드,생성자,일반메서드에 적용된다.

- 의존 하는 객체를 주입할떄 주로 Type을 이용하게된다.

- XML에서 <property> ,<constructot-arg>태그와 동일한 역할이다.


-@Resource

-기능면에선 autowired와 동일하다.

-프로퍼티,setter에서 제한적 사용된다.

-해당되는 객체를 가져올때 주로 Name으로 이용하게된다.


-@Value

-단순한값줄때 사용한다.

-@Qualifier

-@Autowired와 같이 사용한다.

-@Autowired는 타입으로 찾아 주입하는데, 동일한타입의 Bean객체가 여러개 존재할 때 특정 Bean을 찾기위해 사용한다. 


Component Scan을 지원하는 태그

<context:component-scan>태그

- @Component를 통해 자동으로 Bean을 등록한다.

- @Autowired로 의존관계를 주입받는 어노테이션을 클래스에서 선언하여 사용했을 경우,

해당 클래스가 위치한 특정 패키지를 Scan하기위한 설정을XML에 해준다

- 즉 위에있는 어노테이션을 읽어줄수있게 패키지명을 XML에 등록한다.

ex><context:component-scan base-package="myspring.di.annot" />

<context:include-filter>태그 & <context:exclude-filter>태그

-자동 스캔될시 포함시킬클래스, 포함시키지않을 클래스 구체적으로 명시한다.



SpringPrinter클래스



Hello클래스



value.properties파일



annot.xml






bean,properties설정이란?


Bean의존관계 설정방법

Property값 설정방법

Property파일을 이용한 설정


Bean의존관계 설정방법


Setter Injection

- Setter 메서드를 통해 의존관계가 있는 Bean을 주입하려면 <property>태그사용한다.

- ref는 객체 Bean이름을 통해 주입할 Bean을찾는다.

- value는 단순값이다.


ex)

class

bean.xml


Constructor Injection

- Constructor를 통해 의존관계가 있는 Bean을 주입하려면<constructor-arg>태그를사용한다.

- Constructor 주입방식은 생성자의 파라미터를 이용하기 때문에 한번에 여러개의 객체를 주입할 수 있다.<------------------Setter와차이점


ex)

class


bean.xml

index경우

name경우



Property설정방법




프로퍼티 파일을 이용할 설정방법

- 자주변경되는정보를 사용할때 사용한다.(Ex:DB정보)

- properties파일로 분리하는 깔끔하다.

- key=value로 구성된다.



프로퍼티파일생성


bean.xml




+ Recent posts