본문 바로가기

Study/Web

[Spring] w/ MyBatis

지난번 에브리타임 을 보고 따라 만든 웹 서비스 프로젝트를 다시 한 번 정리하려고 한다. github

 

Wiki에서 프로젝트 생성~로그인 기능까지 생성하는 과정을 간단히 정리했다.

 

lyw3447/2021WebCamp

Contribute to lyw3447/2021WebCamp development by creating an account on GitHub.

github.com

 


 

이 Spring MVC Project의 구조는 아래와 같다

 

Spring MVC Project 구조

 

 

 

1. Dispatcher Servlet

: Spring MVC 에서 dispatcher-servlet은 클라이언트로부터 URL로 접근해 들어온 요청(Request) 접수

: View로부터 받은 결과 클라이언트에게 전달(Response)

 

 

 

> servlet-context.xml

--> Dispatcher Servlet 생성 시 필요한 설정 정보를 담은 파일로,

 

  • 로그인 기능 구현때의 interceptor
  • @ (annotation)
  • ViewResolver (Controller에게 views(jsp파일)의 위치 설정)
  • Handler Mapping
  • Bean 생성 (ex.  google class bean, 승인된 리디렉션 URI 등)

등의 설정을 한다.

 

 

> root-context.xml

--> servlet-context.xml 과 달리 view와 관련되지 않은 객체를 정의하는 설정 파일로,

 

  • Service
  • DAO (JDBC)
  • MyBatis (csee-mapper.xml, mybatis-config.xml 위치 설정)
  • DB (DB와의 연결정보)

등의 Business Logic Layer 관련 설정을 한다.

 

 

* .xml 파일은 모두 객체(Bean)를 정의함.

 

Dispatcher Servlet

 

 

> web.xml

 

이 파일은 dispatcher servlet에 속하지는 않았지만, dispatcher servlet을 사용하기 위해서는 web.xml 에 등록이 필요하다.

 

web.xml은 어플리케이션의 설정을 하는 파일인데,

 

  • UTF-8 인코딩 추가
  • root-context.xml
  • servlet-context.xml

등에 대한 설정을 한다.

 

web.xml

 

 

 

2. Handler Mapping

: 클라이언트로 부터 들어온 요청 (예를 들어 /main/csee) 을 mapping한 Controller가 있는지 검색

 

 

 

3. Controller

: 클라이언트의 요청을 처리하고 그 결과를 출력할 view (jsp파일) 이름 리턴

 

 

Annotation

현재 github에 올려진 Controller 소스코드를 보면 @로 시작하는 아래와 같은 표시들이 있는데, 이것을 annotation 이라고 한다.

  • @Controller
  • @Autowired
  • @RequestMapping

annotation

annotation을 설명하기 위해서는 DI (Dependency Injection)를 먼저 알아야 한다.

 

 


 

DI (Dependency Injection, 의존성 주입)

의존성 주입이란 어느 객체 B가 다른 객체 A에게 의존성을 제공하는 기술로, 필요한 객체를 직접 생성하지 않고 외부에서 생성해 주입되어 사용할 수 있게 해 준다.

 

즉, new B () 연산자를 통해 객체를 직접 생성하지 않아도 되며, 이것은 객체간 결합도를 최소화 시켜 유지보수성을 향상시킨다.

 

이것은 마치 일체형 배터리 장난감 vs 분리형 배터리 장난감 을 비교했을 때 분리형인 경우 배터리만 쉽게 갈아끼워 계속 사용할 수 있기에 유리하다고 비유할 수 있다.

 

그리고 의존성 주입 방법은 크게 아래와 같다.

 

  • Bean 생성
    • XML 설정파일
    • Annotation 사용
  • Container (객체들을 관리하는 존재) 가 객체간의 의존 관계에 따라 필요한 객체 주입

여기서 annotation은, 사용법이 비교적 간단하고 간단히 어노테이션을 사용해 코드의 가독성도 향상시켜준다는 장점이 있다. 

 

이것은 spring 설정파일인 servlet-context.xml 에서 아래와 같이 설정해 주면 된다.

 

annotation 설정

 


 

그럼 이제 Controller에 있는 어노테이션들에 대해 설명할 준비가 됐다.

 

annotation들에게도 각자 역할이 다 다르다.

 

먼저 Bean(객체)를 등록하는데 사용되는 annotation은 아래와 같다.

  •  @Controller: Presentation Layer
    • 클라이언트의 요청과 응답을 처리
  • @Service: Service Layer
    • 비즈니스 로직을 가지는 클래스

     

@Service

 

  • @Repository: Persistence Layer
    • 파일이나 database를 처리

@Repository

 

 

  • @Component
    • spring이 bean으로 등록하는 가장 기본 annotation
    • 기본 생성자 반드시 필요

 

 

DI Annotation

  • @Autowired
    • 생성자, 멤버함수, 멤버변수 위에 설정
    • spring container는 Bean으로 설정된 객체 중 같은 타입의 객체를 찾아 멤버변수에 자동 주입
    • @Repository를 통해 CseeDAO가 bean으로 객체 등록이 되면, spring container는 @Autowired를 사용한 곳에 CseeDAO bean을 자동 주입해준다. 
      • -> @Autowired를 사용하면 CseeServiceImpl.java (다른 class)에서 CseeDAO bean 이 자동 주입되어져 사용가능

 

@Autowired
@Autowired

 

 

 

위의 내용들을 바탕으로 직접 Controller 소스코드를 하나씩 분석해 보자.

 

 

> HomeController.java (기본 생성)

 

> CseeController.java

  • @RequestMapping(value="/csee", method=RequestMethod.GET)

@CseeController (1)

0. 사용자로부터 ../main/csee 로 요청이 들어오면 Dispatcher Servlet를 거쳐 CseeController의 cseelist 함수가 실행된다.

 

이때 CseeService bean은 spring container를 통해 자동 주입된 상태이다.

 

1. CseeVO -> CseeDAO -> CseeService interface -> ServiceImpl  순서대로 db로부터 value 값들의 list가 가져와진다 (이 과정은 뒤에서 다시 설명)

 

2. 위에서 가져온 csee list값이 "list"에 저장되고, 

 

3. cseelist.jsp 가 불려진다 (cseelist.jsp에서 "list"에 저장된 db로부터 가져온 value들을 사용할 수 있다)

 

 

 

  • @RequestMapping(value="/detail/{id}", method=RequestMethod.GET)

@CseeController (2)

 

1. id값 (게시글 고유 번호)가 url을 통해 가져와지면 int id에 저장

 

2. getCsee 함수가 VO->DAO->interface->ServiceImpl 을 거쳐 id값에 해당하는 게시글의 정보들을 db로부터 가져옴

 

3. 위에서 가져온 어느 한 게시글의 내용들이 cseeVO에 저장

 

4. cseeVO에서 getters, setters를 통해 저장된 값이 "u"에 저장

 

5. detail.jsp 가 불려짐 (detail.jsp에서는 "u"를 통해 db로부터 가져온 value 사용)

 

 

 

> LoginController.java

 

 

 

Controller

4. Service

> CseeService.java

> CseeServiceImpl.java

 

5. DAO

> CseeDAO.java

> CseeVO.java

 

6. MyBatis

> mybatis-config.xml

> csee-mapper.xml

 

7. DB

 

8. View

> cseelist.jsp

> detail.jsp

> editform.jsp

> login.jsp

반응형

'Study > Web' 카테고리의 다른 글

HTML Forms & Graphics  (0) 2021.01.05
웹사이트 개발 과정  (0) 2021.01.05
HTML  (0) 2021.01.04
'웹 서비스 구축' 사전 준비  (0) 2021.01.04
JSP CRUD 게시판 만들기 -3  (0) 2020.10.26