-
KOSTA 교육 60일차(Spring, Test, CRUD, MVC)Review 2020. 6. 24. 01:04
19. 1. 30(수)
배운 내용
- MVC CRUD Mapper Test
- MVC CRUD Service Test
- 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를 가지고 간다.
- 삭제된 결과를 볼 수 있다.
오늘 교육 간 느낀점
오늘은 MVC구조에서의 각 절차별 Test 과정을 배웠다.
JUnit을 사용한 방법인데 JSP로 프로젝트를 할 때 활용을 해보고 싶었으나 시간에 쫓겨 하지 못한 기억이 있다.
확실히 테스트만 구동했는데도 내 로직의 유효성을 판단할 수 있어서 참 편리하고 좋았다.
하지만 가독성이 생각보다 좋지 않아서 로그를 찾는데 오래 걸리기도 했지만 익숙해지니 조금은 좋아졌다.로그도 가독성을 높인 라이브러리가 있다고 들었는데 한 번 관심있게 찾아봐야겠다.
이제 내일부턴 본격적인 웹페이지에 적용하는 단계만 남았다. 아직 넘어야 할 산이 많지만 조금씩 나아가면 끝까지 닿을 수 있을거라 생각한다.
내일도 화이팅!'Review' 카테고리의 다른 글