ABOUT ME

-

오늘
-
어제
-
-
  • KOSTA 교육 60일차(Spring, Test, CRUD, MVC)
    Review 2020. 6. 24. 01:04

    19. 1. 30(수)

     

    배운 내용

     

    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를 가지고 간다.

     

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

    오늘 교육 간 느낀점

    오늘은 MVC구조에서의 각 절차별 Test 과정을 배웠다.
    JUnit을 사용한 방법인데 JSP로 프로젝트를 할 때 활용을 해보고 싶었으나 시간에 쫓겨 하지 못한 기억이 있다.
    확실히 테스트만 구동했는데도 내 로직의 유효성을 판단할 수 있어서 참 편리하고 좋았다.
    하지만 가독성이 생각보다 좋지 않아서 로그를 찾는데 오래 걸리기도 했지만 익숙해지니 조금은 좋아졌다.

     

    로그도 가독성을 높인 라이브러리가 있다고 들었는데 한 번 관심있게 찾아봐야겠다.
    이제 내일부턴 본격적인 웹페이지에 적용하는 단계만 남았다. 아직 넘어야 할 산이 많지만 조금씩 나아가면 끝까지 닿을 수 있을거라 생각한다.
    내일도 화이팅!

    댓글