본문 바로가기

KOSTA

KOSTA교육 (Spring, Test, CRUD, MVC)

 

배운 내용

 

  1. MVC CRUD Mapper Test
  2. MVC CRUD Service Test
  3. MVC CRUD Controller Test

1. MVC CRUD Mapper Test

Create, Read, Update, Delete를 Mapping을 확인하기 위해 각 Mapper를 Test한다.

  • 라이브러리 및 DB 세팅은 완료되었다고 가정한다.(59일차 참조)

 

  • 연동테스트를 위해 테이블 생성 및 더미 데이터를 생성한다.
  • 데이터 추가 후 commit을 꼭 해주어야한다.

 

DB연동 Test

  • 위의 로직을 이용하여 연동 테스트를 하여 연동 여부를 꼭 확인한다.

 

영속계층 구현 준비
  • 영속 계층 작업 순서
    1. 테이블 칼럼 구조 반영 VO 클래스 생성
    2. Mybatis의 Mapper 인터페이스 작성 / XML 처리
    3. 작성한 인터페이스 테스트

  • DB에서 생성한 객체를 담을 수 있도록 도메인 객체를 위와 같이 생성한다.

 

  • mybatis와 연동하기 위해 mapper 패키지를 scan한다.

 

  • src/main/java에 mapper 패키지 내에 생성
  • src/main/resources에 xml 파일 생성

 

  • SQL과 Mapping할 메소드들을 선언한다.

 

  • namespace를 BoardMapper 클래스로 선언하여 Mapping한다.
  • interface에서 선언한 메소드와 같은 id로 선언하고 쿼리문을 작성한다.
  • <![CDATA 쿼리문]]> 은 쿼리문의 부등호를 사용하기 위해서 사용한다.

 

  • Test할 클래스를 JUnit을 통하여 생성한다.

 

  • 생성한 Test 클래스에서 mapper 객체를 생성한다.
  • test 메소드에서 반복문과 람다식을 이용하여 list를 뽑아낸다.

 

  • log4j를 타고 테이블에 있는 데이터가 출력된다.

 

Create Test
  • 시퀀스를 이용해서 자동으로 데이터가 추가될 때 번호가 만들어 지는 방식
  • 자동으로 PK가 결정시 처리 방법 2가지 
    1. insert만 처리되고 PK 알 필요 없는 경우
    2. insert문이 실행되고 생성된 PK를 알아야 하는 경우

  • 1, 2번 방법을 다 사용하기 위해서 두개의 메소드를 선언한다.

 

  • 1번 방법인 기본 insert문과 2번 방법인 insert, selectKey문을 사용한다.

 

  • VO 객체를 생성하여 set을 이용해 추가할 내용을 적는다.
  • 생성한 BoardMapper에 있는 insert메소드를 호출하고 log로 찍는다.

 

  • bno가 null 값으로 출력되는 것을 볼 수 있다.

 

  • VO 객체를 생성하여 set을 이용해 추가할 내용을 적는다.
  • 생성한 BoardMapper에 있는 insertSelectKey메소드를 호출하고 log로 찍는다.

 

  • bno가 9로 출력되어 있는 것을 알 수 있다.

 

Read Test
  • PK를 이용하여 처리하므로 BoardVO 객체의 bno 타입 정보를 이용해서 처리한다.

 

  • VO 객체의 bno 타입으로 처리

 

  • select문을 사용하므로 resultType을 선언한다.
  • bno 타입으로 읽을 것이기 때문에 where절에 bno 선언

 

  • VO 객체 생성하여 5번 째 객체를 담고 log로 출력한다.

 

결과 값

  • 5번의 객체 내용이 출력된다.

 

Delete Test
  • 데이터를 삭제하는 것 역시 PK를 이용하여 처리하므로 bno를 참고한다.

  • bno로 처리

 

  • bno를 이용하여 삭제한다.

 

  • mapper객체의 delete메소드를 호출하고 3 번째를 삭제한다.

 

  • 3번 객체가 삭제되었다.

 

Update Test
  • 수정은 제목, 내용, 작성자를 수정해야한다. 그래서 객체로 처리한다.

 

  • 객체로 처리한다.

 

  • bno에 맞는 변수들을 update한다.

 

  • 객체를 생성한다.
  • 생성한 객체에 set을 통하여 수정할 변수들을 선언한다.
  • bno을 정하면 정한 bno의 객체가 수정된다.
  • count에 update 메소드를 담고 log로 출력한다.

 

  • 4번 객체에 대한 결과 값이 출력된다.

2. MVC CRUD Service Test

Create, Read, Update, Delete를 비즈니스 로직을위해 각 Service를 Test한다.

 

  • 비즈니스 계층을 위해 패키지를 생성한다.
  • 여기서 BoardServiceImple은 느슨한 결합을 하기 위해 메소드를 구현하는 역할을 한다.

 

  • JUnit 클래스로 생성한다.

 

  • service 패키지를 등록한다.

 

Create Test
  • VO 객체를 통하여 처리한다.

 

  • 객체로 추가하는 메소드를 작성한다.

 

  • ALLArgsContructor 어노테이션은 단일 파라미터일 경우 자동으로 DI하는 어노테이션이다. 때문에 따로 Setter를 선언할 필요가 없다.
  • DB연동 체크를 위해 BoardMapper 객체를 생성한다.
  • Override를 통해서 구현한다.
  • mapper 메소드를 선언한다.

 

  • service를 test해야하기 때문에 객체를 생성하고 Setter를 선언하여 DI 한다.
  • VO 객체 생성 후 작성할 내용을 set 하고 service객체에서 생성한 메소드를 선언한다.

 

  • 위와 같은 결과가 호출된다.

 

Read Test
  • list 출력은 List<VO>를 선언하여 출력하고 조회는 VO객체의 bno로 처리를 한다.

 

  • 메소드를 선언한다.

 

  • 내용 출력은 mapper의 getList()메소드를 return한다.
  • 조회는 mapper의 read()메소드를 return한다.

 

  • service에서 선언한 메소드를 호출한다.

 

  • 전체 출력 및 조회를 하였다.

 

Update Test

  • void도 상관없지만 엄격한 처리를 위해 boolean값을 선언하였다.

 

  • 정상적으로 수정이 되면 1을 출력하기 때문에 1일 시 return하도록 한다.

 

  • 객체에서 1을 조회한다.
  • 조회한 값이 null이면 return하고 값이 있다면 set을 사용하여 제목을 수정한 후 modify 메소드를 호출한다.

 

  • 수정된 값이 출력된다.

 

delete Test
  • update와 동일한 이유로 boolean 타입을 사용한다.

 

  • 메소드를 생성한다.

 

  • 정상적으로 삭제가 되면 1을 출력하기 때문에 1일 시 return하도록 한다.

 

  • 삭제할 bno를 선언한다.

 

  • 삭제된 객체를 확인할 수 있다.

3. MVC CRUD Controller Test

Create, Read, Update, Delete을 웹으로 구현하기위해 각 Controller를 Test한다.

 

  • Controller와 test를 생성한다.

 

  • Controller 어노테이션을 통해 객체로 등록될 수 있도록 한다.
  • RequestMapping으로 상위 경로를 나타내 준다.
  • AllArgsConstructor로 파라미터 하나인 객체를 DI한다.

 

  • RunWith 어노테이션으로 JUnit을 사용할 수 있게 한다.
  • WebAppConfiguration을 사용하여 WebAppicationContext를 이용할 수 있도록 한다.
  • ContextConfiguration으로 설정 파일을 로드한다.
  • WebAppicationContext를 Setter로 DI한다.
  • MockMvc를 선언한다. 이유는 WAS 구동을 하지 않고도 테스트를 할 수 있기 때문
  • Before 어노테이션은 테스트 메소드 실행 전 실행하게 해준다.

 

Create Test
  • Post 방식으로 처리된다.
  • list로 가야하는 새로운 요청이기 때문에 redirect 처리한다.

 

  • command 방식으로 VO 객체를 가져온다.
  • Redirect를 위하여 RedirectAttributes를 선언한다.
  • service에서 로직 처리한 메소드를 호출한다.
  • addFlashAttribute(key, value)로 bno를 result에 담아 list로 redirect한다.

 

  • mockMvc 객체 내에 내장되어 있는 함수를 사용하여 post 방식으로 register 경로로 데이터를 전달할 수 있다.
  • 이 때 .param을 사용하여 전달할 파라미터값을을 선언할 수 있다.

 

  • 들어간 값을 확인할 수 있다.

 

Read Test

  • 리스트를 출력하는 메소드이다.
  • Model 객체를 생성하여 데이터를 가지고서 전달한다.
  • getList 메소드를 list에 담고 간다.

 

  • 조회 하는 메소드이다.
  • bno를 참고하고, Model객체를 이용하여 bno을 가지고 전달한다.

 

  • get 방식으로 list로 이동한다.

 

  • get 방식으로 get으로 이동하는데 bno가 4인 값을 들고 이동한다.

 

  • 리스트가 출력된 것을 볼 수 있다.

 

  • 4에 해당하는 객체가 출력된 것을 볼 수 있다.

 

Update Test

  • 수정 메소드이다.
  • VO 객체를 생성하고 list로 이동하기 위해 redirect 객체를 선언한다.
  • 만약 수정을 한다면 success를 result에 담아서 list로 redirect한다.

 

  • Post방식으로 modify로 이동한다.
  • param으로 수정될 내용을 담는다.

 

  • 수정된 내용을 볼 수 있다.

 

Delete Test

  • 삭제하는 메소드이다.
  • 수정과 동일한 과정을 거친다.

 

  • Post 방식으로 4인 bno를 가지고 간다.

 

  • 삭제된 결과를 볼 수 있다.