[꼼꼼한 개발자] 꼼코더
31. 코드로 배우는 스프링 웹 프로젝트 -[비즈니스 계층] - 비즈니스 계층의 설정, 스프링의 서비스 객체 설정(root-context.xml) 본문
31. 코드로 배우는 스프링 웹 프로젝트 -[비즈니스 계층] - 비즈니스 계층의 설정, 스프링의 서비스 객체 설정(root-context.xml)
꼼코더 2023. 1. 9. 23:30🧑🏻💼 비즈니스 계층
비즈니스 계층은 ‘고객의 요구사항을 반영하는 계층’이다.
프레젠테이션 계층과 영속 계층의 중간다리 역할을 하게 된다.
영속 계층은 데이터 베이스를 기준으로 설계를 나누어 구현하지만
비즈니스 계층은 ‘로직을 기준으로 해서 처리’하게 된다.
💁🏻♂️ 쇼핑몰에서 상품을 구매 예시를 들어본다.
해당 쇼핑몰의 로직은 ‘물건을 구매한 회원에게 포인트 적립’이라고 한다면
영속 계층의 설계는 ‘상품’과 ‘회원’으로 나누어 설계하게 된다.
반면 비즈니스 계층은 ‘상품 영역’과 ‘회원 영역’을 동시에 사용해서
하나의 로직으로 처리하게 되므로 다음과 같은 구조를 만들게 된다.
현제 예제는 단일한 테이블을 이용하고 있기 때문에 위와 같은 구조는 아니지만
설계를 할 때는 원칙적으로 영역을 구분해서 작성해야 한다.
‘일반적으로 비즈니스 영역에 있는 객체들은 ‘서비스(Service)’라는 용어를 많이 사용’ 한다.
⚙️ 비즈니스 계층의 설정
프로젝트 → org.zerock.service 패키지 생성 → BoardService 인터페이스, BoardServiceImpl 클래스 작성
설계 시 각 계층 간의 연결은 인터페이스를 이용하여 느슨한(loose) 연결(결합)을 한다.
게시물은 BoardService 인터페이스와 인터페이스를 구현한 BoardServiceImpl 클래스를 선언
👨🏻💻 BoardService 인터페이스 작성
BoardService 메서드를 설계할 때 메서드 이름은 현실적인 로직의 이름을 붙이는 것이 관례이다.
명백한 반환 데이터가 있는(select 필요한) 메서드는 리턴타입을 지정해 준다.
게시물은 특정한 게시물을 가져오는 get() 메서드와 전체 리스트를 구하는 getList()의 경우
처음부터 메서드의 리턴타입을 결정해서 진행할 수 있다.
BoardService 인터페이스의 구현체인 BoardServiceImpl 클래스는
약간의 로그를 기록할 수 있는 정도의 코드로 작성한다.(클래스 상세내용은 추후에..)
👨🏻💻 BoardServiceImpl 클래스 작성
BoardServiceImpl의 중요한 부분은 @Service 어노테이션이다.
@Service는 비즈니스 영역을 담당하는 객체를 표시하기 위해 사용한다.
작성된 어노테이션은 패키지를 읽어 들이는 동안 처리된다.
BoardServiceImpl가 정상 동작하기 위해서는 BoardMapper 객체가 필요하다.
이는 @Autowired와 같이 직접 설정해 줄 수 있고, Setter를 이용해서 처리할 수도 있다.
Lombok을 이용한다면 아래와 같은 방식으로 만들 수 있다.
스프링 4.3부터는 단일 파라미터를 받는 생성자의 경우
필요한 파라미터를 자동으로 주입할 수 있다.
@AllArgsConstructor는 모든 파라미터를 이용하는 생성자를 만들기 때문에 실제 코드는 아래와 같이
BoardMapper를 주입받는 생성자가 만들어지게 된다.
프로젝트 구조에서 클래스를 조사해 보면 스프링 4.3의 자동주입 기능으로 인해
앞의 그림과 같은 형태가 된다.
👨🏻💻 스프링의 서비스 객체 설정(root-context.xml)
비즈니스 계층의 인터페이스와 구현 클래스가 작성되었다면 이를 스프링의 빈으로 인식하기 위해서는
root-context.xml에 들어가서 ‘@Service 어노테이션이 있는 org.zerock.service 패키지를 스캔(조사)하도록’ 코드를 추가해야 한다.
root-context.xml 접속 → namespase 탭에서 context 항목 추가
네임스페이스를 추가하면 해당 이름으로 시작하는 태그들을 활용할 수 있다.
☕️ Java 설정의 경우
root-context.xml을 대신하는 RootConfig 클래스를 이용해서 @ComponentScan을 추가한다.
🧹 최종 정리
- 비즈니스 계층은 ‘고객의 요구사항을 반영하는 계층’이고 프레젠테이션 계층과 영속 계층의 중간다리 역할을 하게 된다.
- 영속 계층은 데이터 베이스를 기준으로 설계를 나누어 구현하지만 비즈니스 계층은 ‘로직을 기준으로 해서 처리’하게 된다.
- 일반적으로 비즈니스 영역에 있는 객체들은 ‘서비스(Service)’라는 용어를 많이 사용
- 비즈니스 설계 시 각 계층 간의 연결은 인터페이스를 이용하여 느슨한(loose) 연결(결합)을 한다.
- @Service는 비즈니스 영역을 담당하는 객체를 표시하기 위해 사용
- @AllArgsConstructor는 모든 파라미터를 이용하는 생성자를 만들기 때문에 주입받는 생성자가 만들어지게 된다.
위 내용은 코드로 배우는 스프링 웹 프로젝트 교재를 참고하여 작성되었습니다.