
| 스프링 MVC 프로젝트의 기본 구성
스프링 MVC에서 어떤 단계를 거쳐서 실행되는지를 이해해야 문제 발생시 빠른 대처와 대안을 찾을 수 있다.
스프링 웹 프로젝트는 3-Tier(티어) 방식으로 구성한다.
Presentation Tier(M) <-> Business Tier(B) <-> Persistence Tier(C)
| Persistene Tier(영속 계층, 데이터 계층)
-데이터를 어떤 방식으로 보관하고, 사용하는 가에 대한 설계가 들어가는 계층
- 일반적으로 DB를 많이 이용하지만, 상황에 따라서 네트워크 호출 혹은 원격 호출 등의
기술이 접목된다.
| Business Tier(비즈니스 계층) =홈페이지를 만들어달라고 한 의뢰인
- 순수한 비즈니스 로직을 담고있는 영역
- 고객이 원하는 요구사항을 반영하는 계층이기 때문에 중요한 영역이다.
- 이 영역의 설계는 고객의 요구 사항과 정확히 일치해야 하며, "~Service" 와 같은 이름으로 구성한다.
| Presentation Tier(화면 계층)
- 화면에 보여주는 기술을 사용하는 영역
- JSP/Servlet 혹은 스프링 MVC가 담당하는 영역이며 화면 구성이 이에 속한다.
*비즈니스 로직이나 데이터관리코드를 포함해서는 안된다.
ex)HTML, javascript,CSS,image
| 결론
-각 영역은 독립적으로 설계되어 나중에 특정한 기술이 변하더라도 필요한 부분을 전자제품의 부품처럼 쉽게 교환할 수 있게 설계 하자는 방식이다.
- 각 연결 부위는 인터페이스를 이용해서 설계하는 것이 일반적인 구성 방식이다.
| Naming Convention(명명 규칙)
: 이번에 내가 사용할 패키지명 : com.koreait
요소별 명명
- config : 프로젝트와 관련된 설정 클래스들의 보관 패키지
- constroller : 스프링 MVC의 Controller 들의 보관 패키지
- service : 스프링의 service 인터페이스와 구현 클래스 패키지
- domain : DTO, VO 클래스들의 패키지
- persistence: MyBatis Mapper 인터페이스 패키지
- exception : 웹 관련 예외 처리 패키지
- aop : 스프링의 aop 관련 패키지
- security : 스프링 Security (하위 프레임워크) 관련 패키지
- util : 각종 유틸리티 클래스 관련 패키지
| 회원가입, 로그인 구현
<기본 과정>
1.view단 만들기.
2.이동할 controller.java 만들어놓기.(각각 상황에 맞게 하기 user,board,home..)
3.controller에 requestMapping 어노테이션으로 /user/* 로 매핑하기.
4.db에 데이터 저장할때 한글깨짐 방지. : web.xml
<filter></filter>에 적어준다.


<회원가입,로그인>
1.메인에서 페이지만 이동 : controller
@getMapping(/join) or @getMapping(/login)
메소드 생성

2.테이블 만들기 : Oracle

3.Mapper 만들기 : UserMapper.xml
src/main/resources < com.koreait.mapper <UserMapper.xml
- 필요한 쿼리문 다 만들어 놓기
(원래 우리는 흐름에 따라 개발을 했었다. 그러나 실제 업무는 그 순서로 개발이 불가능하다. 왜냐하면 체계적인 회사의 경우 각각 업무를 분담하여 진행한다. 그래서 DB를 전담하는 사람이 있게 될것이다. 그러므로 개발자는 만들어져 있는것을 호출해서 쓴다고 생각하면 된다.)
1) 쿼리문만 만들자
<insert id="join"></insert>
<select id="login"></select>
2) namespace : com.koreait.mapper.UserMapper 적어주기
-맵퍼끼리 연결하기 위해서~
: 처음부터 만들필요없다-> 5 1) 끝나고 고고
3. (필요한 경우)resultType 적어주기
ex) login()

4. DTO 만들기: UserDTO.java
src/main/java < com.koreait.domain < UserDTO.java
- 여러개의 데이터를 받아오는 경우가 생기므로 데이터 꾸러미를 만들어 놓자
1) 변수 선언
2) 어노테이션으로 @Data import 하기(for getter, setter)

5.DB를 연결해주는 곳 : UserMapper(interface)
src/main/java < com.koreait.mapper < UserMapper.java
- 인터페이스 선언하기 :UserMapper.java

6.Mapper 테스트하기
* root-context.xml 에 mapper 인식할 수 있도록 적어주기
<mybatis-spring:scan base-package="com.koreait.mapper"/>
1) UserMapperTest.java 만들기
src/test/java < com.koreait.mapper < UserMapperTest.java
(1) 스프링 연결, root-context.xml 읽어오기
(2) 인터페이스 객체 만들고 주입받아오기
(3) 테스트할 메소드 적어주기
(4) Junit 이용해서 성공했으면 테스트 성공!!

7.폼 action이랑 method적어주기 : join.jsp

8.UserController 로 요청들어온다.
@PostMapping("/join"), @PostMapping("/login") 메소드 적기
8.UserController 테스트하기
src/text.java > com.koreait.controller > UserController.java
*테스트 과정은 길어서 아래에 자세히 설명할게요.

9.service 만들기 (dao(=mapper)를 호출하기 위한 곳,실제로 dao이용해서 비즈니스 로직을 처리한다.)
: UserService.java(인터페이스), UserServiceImpl.java
src/main/java > com.koreait.service > UserService.java, UserServiceImpl.java
1) 인터페이스로 틀 만들어 놓기 : UserService.java
2) 실제로 구현하기 : UserServiceImpl.java
- 오버라이딩하고 service임을 알려주기
- 비즈니스 로직을 적어준다.


10.service 테스트하기 : UserServiceTest
src/test/java < com.koreait.service < UserServiceTest.java
1) 스프링 실행, root-context.xml 읽어오기
@Runwith, ContextConfiguration,Log4j
2) service 주입받아오기
3) 테스트 메소드 적어주기

11.컨트롤러에서 service 사용하기
1)service 주입받아오기
2) 회원가입하는 경우
(1)service.join(user) 성공했다면 이동하도록 하기
(2)쿠키 이용해서 user 정보 담아두기
(3)쿠키 유지시간 적어두고 쿠키 저장하기


<컨트롤러 테스트 과정>
1.컨트롤러를 실행하기 위해서 mvc필요하므로 가짜 mvc만든다.
2.mvc 만들기 위해 context관리해주는 가상의 wac를 넣어서 만들어 준다.
3.각각 요청에 맞게 테스트한다.
1)가상 mvc 빌더가 ~ url을 ~방식으로 보내도록 적어준다.
2)그리고 그 이후 돌려주는 게 있음 받아오고 그 중 모델과 뷰를 받아와서 객체에 담는다.
3)객체에 있는 뷰이름을 가져오거나 모델을 가져온다
로그인이 잘 된것을 확인 했으면 home.jsp로 이동했을때 ~님 환영합니다를 띄워주면 된다. jstl 을 사용하여 choose 문으로 loginUser 가 null이 아닐때 띄워주면 끗~!

오늘은 로그인,회원가입처리를 스프링을 이용하여 해보았다. 굉장히 복잡한 과정이지만 훨씬 체계적인 과정으로 컨트롤러, 맵퍼, 서비스, 뷰단이 각각 실제로 어떤 역할을 하는지 배웠다. jsp ,java 프로젝트를 통하여 이 과정들을 계속 학습해오고 있지만 전엔 큰 가지만 쳤다면 지금은 작은 가지들을 치는 단계인것 같다. 이 글을 보시는 분들이 꼭 도움이 되었으면 좋겠다. 사실 공부하느라 바빠서 더 자세히 적지 못해 아쉬움이 남는데 혹시 개선사항이 필요해보인다면 피드백은 언제든 환영입니다,,!! 내일은 게시판 등록을 공부해서 정리해보려고 한다.
'프로그래밍 > Spring' 카테고리의 다른 글
Spring IoC , Bean (0) | 2022.07.12 |
---|---|
Spring 4일차 - 예외처리 (0) | 2022.03.24 |
Spring 3일차 - 스프링 MVC (0) | 2022.03.17 |
Spring 2일차 - DI(의존성 주입) (0) | 2022.03.15 |
Spring 1일차 - 스프링 프레임워크 (0) | 2022.03.14 |