Service, ServiceImpl, 그리고 DAO(Data Access Object)는 일반적으로 소프트웨어 개발에서 데이터베이스와 상호 작용하고 비즈니스 로직을 분리하고 관리하기 위해 사용되는 구조입니다. 이러한 구조를 사용하는 주요 이점은 다음과 같습니다:
분리된 역할: Service, ServiceImpl 및 DAO는 각각 서로 다른 역할을 수행하며 엄격하게 분리됩니다. 이렇게 하면 각각의 역할이 명확하게 정의되어 코드의 가독성과 유지 보수성이 향상됩니다. 또한, 특정 역할에 대한 변경 사항을 다른 역할에 미치는 영향을 줄일 수 있습니다.
재사용성: Service 계층은 비즈니스 로직을 캡슐화하고 다양한 클라이언트에서 재사용할 수 있도록 합니다. 비즈니스 로직을 별도의 서비스 클래스에 넣으면 해당 로직을 여러 곳에서 호출할 수 있으며, 이것은 코드 중복을 줄이고 유지 보수를 쉽게 만듭니다.
테스트 용이성: 비즈니스 로직은 Service 계층에 캡슐화되므로 단위 테스트와 통합 테스트를 수행하기 쉽습니다. 비즈니스 로직을 독립적으로 테스트하면 버그를 더 쉽게 식별하고 수정할 수 있습니다.
확장성: 다양한 데이터베이스 백엔드 또는 데이터베이스 연결 방식으로 전환할 수 있습니다. DAO 계층이 데이터베이스에 대한 접근을 추상화하므로 DAO 코드를 수정하지 않고도 데이터베이스를 변경할 수 있습니다.
보안: 데이터베이스 연결 정보 및 쿼리는 DAO 계층에 캡슐화됩니다. 이로 인해 보안이 강화되며 악의적인 사용자로부터 데이터베이스를 보호할 수 있습니다.
코드 유지 보수성: 비즈니스 로직, 데이터 액세스 로직 및 컨트롤러/뷰 로직이 분리되면 변경이 필요한 경우 해당 계층만 수정하면 됩니다. 이로 인해 코드 변경의 파급 효과가 최소화되며 유지 보수가 용이합니다.
코드의 가독성: 각 계층은 자체적으로 명확한 역할과 책임을 가지고 있으므로 코드의 가독성이 향상됩니다. 특히 대형 애플리케이션의 경우 코드를 이해하고 관리하기 쉬워집니다.
트랜잭션 관리: 서비스 레이어에서 트랜잭션 관리를 할 수 있습니다. 비즈니스 로직이 여러 DAO 메서드를 호출하는 경우, 트랜잭션을 시작하고 커밋 또는 롤백할 수 있습니다.
로깅 및 예외 처리: 서비스 계층에서 로깅 및 예외 처리를 통합적으로 처리할 수 있습니다. 이로 인해 오류를 식별하고 로그를 통해 디버깅하는 데 도움이 됩니다.
요약하면, Service, ServiceImpl 및 DAO는 코드의 구조화와 유지 보수성 향상, 재사용성 증가, 테스트 용이성 향상, 데이터베이스와의 상호 작용을 추상화하여 유연성을 확보하며 보안 및 예외 처리를 향상시키는 데 도움이 되는 패턴 및 아키텍처입니다.
1. service
/**
* 전기차 충전소 공공api 정보 저장
* @Method : insertEvChargerDataApi
* @author : 이준호
* @since : 2023.09.25
* @version 1.0
*
* <pre>
* << 개정이력(Modification Information) >>
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
*
* </pre>
*/
public String insertEvChargerDataApi(EvreoneMapVO evreoneMapVO) throws Exception;
2. serviceimple
/**
* 전기차 충전소 공공api 정보 저장
* @Method : insertEvChargerDataApi
* @author : 이준호
* @since : 2023.09.25
* @version 1.0
*
* <pre>
* << 개정이력(Modification Information) >>
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
*
* </pre>
*/
@Override public String insertEvChargerDataApi(EvreoneMapVO evreoneMapVO) throws
Exception { return evreoneMapDAO.insertEvChargerDataApi(evreoneMapVO); }
4. sql
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd">
<!--
파일명: evreonMapSQL.xml
설명:
수정일 수정자 수정내용
========= ========= ====================================
2023.09.05 이준호 최초작성
-->
<sqlMap namespace="evreoneMapDAO">
<typeAlias alias="egovMap" type="egovframework.rte.psl.dataaccess.util.EgovMap"/>
<typeAlias alias="evreoneMapVO" type="sports.evreone.evreoneMap.vo.EvreoneMapVO"/>
<!-- <select id="evreoneMapDAO.selectEvChargerDataByzscode" parameterClass="evreoneMapVO" resultClass="egovMap">
/* 2023.09.05 - 클릭 zscode 기준으로 충전소 데이터 불러오기 : evChargerDAO.selectEvChargerDataByzscode */
SELECT *
FROM EV_USER
WHERE id_kakao = #idKakao#
AND user_class != 'Q'
</select> -->
<insert id="evreoneMapDAO.insertEvChargerDataApi" parameterClass="evreoneMapVO">
/* 2023.09.26 - 데이터 베이스 최신화 : evChargerDAO.insertEvChargerDataApi */
INSERT INTO EV_STATION_API (
statNm,
) VALUES (
#statNm#,
)
표현 계층 (Presentation Layer): 사용자 인터페이스와 상호 작용하며 클라이언트 요청을 받아 처리하는 역할을 합니다. 주로 웹 페이지, 모바일 앱 뷰, 데스크톱 애플리케이션 GUI 등을 다룹니다.
비즈니스 계층 (Business Layer 또는 Service Layer): 비즈니스 로직을 처리하고 도메인 로직을 실행합니다. 데이터의 유효성 검사, 데이터 조작, 트랜잭션 관리 및 보안을 다룹니다.
데이터 액세스 계층 (Data Access Layer 또는 Persistence Layer): 데이터베이스 또는 다른 데이터 소스와의 상호 작용을 처리합니다. 데이터를 읽고 쓰는데 필요한 로직을 구현하며 데이터베이스와의 통신을 담당합니다.
위의 설명에서 나온 Service, ServiceImpl, 그리고 DAO 패턴은 주로 비즈니스 계층과 데이터 액세스 계층에 해당합니다. 이러한 패턴은 계층화 아키텍처를 구축하고 비즈니스 로직을 분리하고 관리하는 데 사용됩니다.
또한, 이러한 아키텍처는 주로 "MVC (Model-View-Controller)" 아키텍처 또는 "MVP (Model-View-Presenter)" 아키텍처와 결합하여 사용될 수 있습니다. 이러한 아키텍처 패턴들은 애플리케이션의 구조와 역할을 명확하게 정의하고 개발 및 유지 보수를 용이하게 만드는 데 도움을 줍니다.
https://refactoring.guru/ko/design-patterns/java
'SW Dev Portfolio' 카테고리의 다른 글
정보처리기사 : 소프트웨어 설계에서 자주 발생하는 문제에 대한 일반적이고 반복적인 해결 방법을 무엇이라고 하는가? (0) | 2023.10.13 |
---|---|
Java 백엔드 기반 DBMS (MSSQL , MYSQL)으로 대량의 데이터를 컨트롤 및 서버 과부화를 막기 위한 고찰 (0) | 2023.10.12 |
카카오 개발자 카카오 지도 목적지 검색 API 서비스를 사용해보도록하지 (0) | 2023.10.05 |
아파치 톰캣의 메모리 사용량을 증가시켜주는 bat 파일 코드 (0) | 2023.09.25 |
Jotai 전역 변수 관리 라이브러리 (0) | 2023.09.21 |
지도 웹앱 개발 좌표계 [최근접 이웃 알고리즘] (0) | 2023.09.19 |