프로그래밍/Spring

Spring 5일차 : 스프링 웹 프로젝트 & 로그인, 회원가입

윤도ri 2022. 3. 24. 23:00

 

 

 

| 스프링 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>에 적어준다. 

web.xml. (필터에 직접 인코딩을 해준다. 스프링을 사용하기 전에는 매번 인코딩을 해주어야 했지만 스프링에서는 간단하게 인코딩을 해줄 수 있다.

<회원가입,로그인> 


1.메인에서 페이지만 이동 : controller 
@getMapping(/join) or @getMapping(/login)  
  메소드 생성 

UserFrontController.java (페이지 이동을 위한 메소드를 매핑해준다)


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() 

id는 UserMapper 인터페이스의 메소드와 동일하게 될 것이다.

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 

join은 post 방식으로 전송한다.

 

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임을 알려주기
  - 비즈니스 로직을 적어준다. 

UserService.java 에 틀 만들어놓기.
UserServiceImpl.java에 오버라이딩하여 비지니스 로직을 구현한다.


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)쿠키 유지시간 적어두고  쿠키 저장하기

UserController.java - 회원가입
UserController.java - 로그인


<컨트롤러 테스트 과정>
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