[꼼꼼한 개발자] 꼼코더

29. 코드로 배우는 스프링 웹 프로젝트 - [스프링 MVC 프로젝트의 기본 구성] - 영속/비즈니스 계층의 CRUD 구현, 영속 계층의 구현 준비, VO 클래스 본문

Spring/코드로 배우는 스프링 웹 프로젝트

29. 코드로 배우는 스프링 웹 프로젝트 - [스프링 MVC 프로젝트의 기본 구성] - 영속/비즈니스 계층의 CRUD 구현, 영속 계층의 구현 준비, VO 클래스

꼼코더 2023. 1. 8. 02:09
반응형
 

🏚 영속/비즈니스 계층의 CRUD 구현

이번 파트에서는 단순한 1개의 테이블만 사용하기 때문에

데이터베이스에 테이블, 시퀀스, 약간의 데이터들이 생성되었다면

코드를 이용하여 데이터에 대한 CRUD 작업을 진행한다.

 

영속 계층의 작업은 항상 다음과 같은 순서로 진행한다.

  • 테이블의 칼럼 구조를 반영하는 VO(Value Object) 클래스의 생성
  • MyBatis Mapper 인터페이스의 작성/XML 처리
  • 작성한 Mapper 인터페이스의 테스트

 

위의 과정 전에 JDBC 연결을 테스트하는 과정을 거치는 것이 좋지만, SQL Developer의 연결 자체가 이미 JDBC 연결을 이용하기 때문에 예제에서는 별도의 과정을 생략하고 진행하겠다.


🤝영속 계층의 구현 준비

대부분 웹 애플리케이션의 최종 목적은 데이터베이스에 데이터를 기록하거나 원하는 데이터를 가져오는 것이 목적이다.

따라서 개발 시 어느 정도의 설계가 진행되면 데이터 베이스 관련 작업을 하게 된다.


👨🏻‍💻VO 클래스의 작성(BoardVO)

VO 클래스 생성은 테이블 설계 기준으로 작성하면 된다.(tbl_board 테이블 구성 참고)

org.zerock.domain 패키지 생성 → BoardVO 클래스 작성

 


🐧 Mapper 인터페이스와 MapperXML

MyBatis는 SQL을 처리하는데 어노테이션, XML을 이용할 수 있다.

  • 간단한 SQL이면 어노테이션으로 처리
  • 복잡한 SQL이면 XML로 처리하는 경우가 많다.

 

그 이유는 XML의 경우 단순 텍스트를 수정하는 과정만으로 처리가 끝나지만, 어노테이션의 경우는 코드를 수정하고 다시 빌드하는 등의 유지 보수성이 떨어지는 이유가 있다.


🔌 Mapper 인터페이스(BoardMapper 인터페이스)

root-context.xml은 ‘org.zerock.mapper’패키지를 스캔하도록 설정했었다.

이를 활용해서 프로젝트를 제작하겠다.

 

👨🏻‍💻BoardMapper 인터페이스 추가

Mapper 인터페이스 작성 시 리스트(select)와 등록(insert) 작업을 우선으로 작성한다.

org.zerock.mapper 패키지 생성 → BoardMapper 인터페이스 추가.

BoardMapper 인터페이스 작성 시 이미 작성된 BoardVO 클래스를 적극적으로 활용하여

필요한 SQL을 어노테이션의 속성값으로 처리할 수 있다.(SQL 작성 시 ‘;’는 제외)

 

SQL문을 간단히 설명하자면 ‘where bno >0’과 같은 조건은 테이블을 검색하는데

bno라는 칼럼 조건을 주어서 Primary key(이하 PK)를 이용하도록 유도하는 조건이다

 

💁🏻‍♂️ 결과(SQL Developer)

먼저 SQL Developer에서 실행 결과를 확인해 보자

SQL Developer에서 먼저 확인한 이유는 2가지이다

  • SQL에 문제가 없어 정상적으로 실행이 가능한지 확인하기 위함
  • 데이터베이스의 ‘commit’을 하지 않았다면 나중에 테스트 결과가 달라지기 떄문에 이를 먼저 비교하기 위함

 


👨🏻‍💻 BoardMapperTests 작성

작성된 BoardMapper 인터페이스를 테스트 할 수 있는 테스트 클래스를 작성해 준다.

org.zerock.mapper 패키지 생성 → BoardMapperTests 클래스 추가

 

💁🏻‍♂️ 결과

BoardMapperTests 클래스는 스프링을 이용해서 BoardMapper 인터페이스의 구현체를 주입받아 동작한다.

실행 결과는 SQL Developer에 실행 결과와 동일하다.


👨🏻‍💻 Mapper XML 파일 (BoardMapper.XML)

BoardMapperTests를 이용하여 테스트가 완료되면

src/main/resources 내에 패키지와 동일한 org/zerock/mapper 단계의 폴더 생성 후 XML 파일을 작성한다.

(주의 사항은 폴더를 한 번에 생성하지 않고 하나씩 생성해야 한다)

 

✍🏻 XML 작성 시

  • <mapper>의 namespace 속성값은 Mapper 인터페이스와 동일한 이름으로 작성.
  • <select>의 id 속성값은 메서드의 이름과 일치하게 작성
  • resuletType 속성 값은 select 쿼리의 결과를 특정 클래스의 객체로 만들기 위해 설정한다.
  • (CDATA 부분은 XML에서 부등호를 사용하기 위해서 사용)

 

XML에 SQL문을 처리하였으니 BoardMapper 인터페이스의 SQL은 제거해 준다.

 

💁🏻‍♂️ 결과

인터페이스 수정 후 에도 정상적으로 결과가 확인되는지 테스트를 진행한다.

 
 

🧹 최종 정리

  • 대부분 웹 애플리케이션의 최종 목적은 데이터베이스에 데이터를 기록하거나 원하는 데이터를 가져오는 것이 목적이다.
  • 따라서 개발 시 어느 정도의 설계가 진행되면 데이터 베이스 관련 작업을 하게 된다.
  • MyBatis는 SQL을 처리하는데 어노테이션, XML을 이용할 수 있다.
    • XML의 경우 단순 텍스트를 수정하는 과정만으로 처리가 끝나지만
    • 어노테이션의 경우는 코드를 수정하고 다시 빌드하는 등의 유지 보수성이 떨어지는 이유가 있다.


 

Comments