1. Service 계층이란?
Service 계층은 비즈니스 로직을 처리하는 중심 역할을 합니다. 컨트롤러와 데이터베이스 사이에서 데이터의 흐름을 관리하며, 데이터 검증, 변환, 추가적인 로직 등을 수행합니다.
주요 역할
- 비즈니스 로직 처리: 단순 CRUD 이상의 복잡한 연산이나 데이터 변환.
- 데이터 트랜잭션 관리: 데이터베이스 작업이 원자성을 유지하도록 보장.
- 컨트롤러와 Repository 간의 연결: 컨트롤러에서 요청을 받아 Repository를 통해 데이터 연산 수행.
2. SamTableService 구현
SamTableService 클래스는 SamTableRepository를 호출하여 SamTable 엔티티와 관련된 비즈니스 로직을 구현합니다.
코드 구현
3. Service 메서드 상세 설명
1) getInsertKeyNo()
- 현재 테이블에서 가장 큰 keyno를 찾고, 여기에 1을 더해 새로운 keyno를 생성합니다.
- 테이블이 비어 있을 경우 0을 반환하고, 새 keyno는 1로 시작합니다.
2) getAllValues()
- 모든 데이터를 조회합니다.
- Repository의 findAll() 메서드를 호출하여 데이터베이스의 모든 레코드를 반환합니다.
3) getKeyNoValue(Integer keyno)
- 특정 keyno로 데이터를 조회합니다.
- 데이터가 존재하면 Optional<SamTable>로 반환하며, 없을 경우 빈 Optional 객체를 반환합니다.
4) addValue(SamTable samTable)
- 새로운 데이터를 삽입합니다.
- SamTable 객체를 Repository의 save() 메서드에 전달하여 테이블에 저장합니다.
5) updateValue(Integer keyno, String value)
- 특정 keyno를 가진 데이터를 수정합니다.
- 먼저 해당 데이터를 조회한 후, 존재하면 value를 업데이트하고 다시 저장합니다.
- 데이터가 존재하지 않으면 RuntimeException을 발생시킵니다.
6) deleteValue(Integer keyno)
- 특정 keyno를 가진 데이터를 삭제합니다.
- deleteById() 메서드를 호출하여 테이블에서 해당 레코드를 제거합니다.
4. 비즈니스 로직 적용
Service 계층은 단순 CRUD 외에도 다양한 비즈니스 로직을 추가할 수 있습니다. 예를 들어:
- 데이터 입력 시 중복 값 확인
- 데이터 조회 시 특정 조건 필터링
- 데이터 업데이트 시 변경 이력 기록
예제: 데이터 입력 시 중복 확인
5. 트랜잭션 관리
데이터베이스 작업이 실패하거나 예외가 발생할 경우, 트랜잭션을 통해 데이터의 일관성을 유지할 수 있습니다. Spring은 @Transactional 어노테이션을 통해 이를 간단히 처리할 수 있습니다.
예제: 트랜잭션 적용
6. Service 계층과 Repository의 관계
- Repository는 데이터 접근만 담당하며, 비즈니스 로직은 Service 계층에서 처리합니다.
- 이렇게 역할을 분리하면 코드의 가독성과 유지보수성이 높아집니다.
구조적인 관계
- 컨트롤러 → Service → Repository
- Service는 Repository를 호출하여 데이터를 조회, 저장, 삭제, 수정합니다.
7. 테스트
Service 계층을 테스트하기 위해 다음 단계를 진행합니다:
- Service의 메서드를 호출하여 데이터를 처리합니다.
- MySQL에서 데이터 변경 사항을 직접 확인하거나, Postman을 통해 테스트합니다.
테스트 예제
- 특정 keyno로 데이터 조회:
8. 결론
SamTableService는 데이터의 흐름을 관리하며, 비즈니스 로직을 집중적으로 처리할 수 있도록 설계되었습니다. 이 계층은 Repository와 컨트롤러 사이의 중간 역할을 수행하며, 데이터의 안정성과 일관성을 유지하는 데 중요한 역할을 합니다.
다음 단계에서는 RESTful API 컨트롤러를 작성하여 클라이언트 요청을 처리하는 방법을 알아보겠습니다.
'Spring Boot & JPA' 카테고리의 다른 글
2.7. 테스트 및 실행 (0) | 2025.01.03 |
---|---|
2.6. RESTful API 컨트롤러 개발 (0) | 2025.01.03 |
2.4. Repository 구현 (0) | 2024.12.29 |
2.3. JPA Entity 설계 (0) | 2024.12.29 |
2.2. 프로젝트 준비 (1) | 2024.12.26 |