Spring Boot & JPA

2.5. Service 계층 작성

backend 따라쟁이 2025. 1. 3. 20:11

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 계층에서 처리합니다.
  • 이렇게 역할을 분리하면 코드의 가독성과 유지보수성이 높아집니다.

구조적인 관계

  1. 컨트롤러ServiceRepository
  2. Service는 Repository를 호출하여 데이터를 조회, 저장, 삭제, 수정합니다.

7. 테스트

Service 계층을 테스트하기 위해 다음 단계를 진행합니다:

  1. Service의 메서드를 호출하여 데이터를 처리합니다.
  2. 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