서비스 알아보기

2026. 1. 4. 14:49·Spring/튜토리얼
반응형

🏁 학습할 내용

  • 필요한 이유
  • 정의
  • 간단하게 만들어보기
  • 도입된 후 레이어

✅ 필요한 이유

 

🙋 없어도 문제가 되지 않았던 이유

 

현재 우리의 구조는 Controller에서 직접 repository를 들고있는 형태다.

 

더 자세히 설명하면, repository가 DB에 접근해 원하는 결과 entitiy를 얻어오고,
그 결과를 템플릿에게 전달해서 표시해주고 있다.

 

현재는 단일 페이지라 문제가 없어보이지만, 조금 더 복잡한 화면들이 있다고 상상해보자.

 

🧩역할

 

1️⃣모듈화

만약 A,B 컨트롤러들이 C라는 레포지토리에서 여러개의 함수가 순차적으로 실행된 결과를

사용한다고 가정해보자.

 

그렇다면 A,B는 C 레포지토리를 순차적으로 호출하는 중복코드를 갖게되고, 이 코드는

유지보수에 좋지 않은 영향을 줄 수 있다.

 

이 때, 서비스에 해당 코드를 한번 정의해 놓고, 서비스를 컨트롤러에서 사용하면

중복코드에 대한 문제를 해결할 수 있다.

 

2️⃣보안 및 DTO 변환

Entitiy는 DB와 직접 맞닿아 있는 클래스이므로, 컨트롤러 또는 타임리프와 같은 템플릿 엔진에

직접 전달되어 사용되는 것은 보안적으로 좋지않다.

 

DB 스킴이 거의 노출된다고 봐도 무방하다.

 

그렇기 때문에, 서비스는 Repository에서 얻은 Entitiy를 

다른 레이어(Controller..)로 필요한 데이터만 담은 DTO를 변환하여 전달하는 역할을 할 수 있다.

 

반대로 다른 레이어(Controller)에서 서비스로 DTO를 보내주면, 해당 DTO를 Entity로 변환하여

Repository로 전달해주는 역할을 할 수 있다.


⭐정의

 

핵심 비지니스 로직을 담는 계층
서로 다른 계층을 연동할 때
데이터를 가공 및 변환하여 반환하는 역할

📌특징

  • 모듈화
  • 유지보수성
  • 재사용성
  • 테스트 용이성

🤝간단하게 만들어보기

@Service
class QuestionService(
    private  val repository: QuestionRepository
) {

    fun getList(): List<Question> {
        return repository.findAll()
    }
}

🪜도입된 후 레이어

 


출처

반응형

'Spring > 튜토리얼' 카테고리의 다른 글

리다이렉트 하기  (0) 2026.01.04
Thymeleaf  (0) 2025.12.25
레포지토리  (0) 2025.12.06
엔티티 만들기  (0) 2025.11.22
H2 Database  (0) 2025.11.08
'Spring/튜토리얼' 카테고리의 다른 글
  • 리다이렉트 하기
  • Thymeleaf
  • 레포지토리
  • 엔티티 만들기
Hamp
Hamp
남들에게 보여주기 부끄러운 잡다한 글을 적어 나가는 자칭 기술 블로그입니다.
  • Hamp
    Hamp의 분리수거함
    Hamp
  • 전체
    오늘
    어제
    • 분류 전체보기 (304)
      • CS (30)
        • 객체지향 (2)
        • Network (7)
        • OS (6)
        • 자료구조 (1)
        • LiveStreaming (3)
        • 이미지 (1)
        • 잡다한 질문 정리 (0)
        • Hardware (2)
        • 이론 (6)
        • 컴퓨터 그래픽스 (0)
      • Firebase (3)
      • Programing Langauge (37)
        • swift (32)
        • python (4)
        • Kotlin (1)
      • iOS (132)
        • UIKit (37)
        • Combine (1)
        • SwiftUI (32)
        • Framework (7)
        • Swift Concurrency (22)
        • Tuist (6)
        • Setting (11)
        • Modularization (1)
        • Instruments (6)
      • PS (59)
        • 프로그래머스 (24)
        • 백준 (13)
        • LeetCode (19)
        • 알고리즘 (3)
      • Git (18)
        • 명령어 (4)
        • 이론 (2)
        • hooks (1)
        • config (2)
        • action (7)
      • Shell Script (2)
      • Linux (6)
        • 명령어 (5)
      • Spring (13)
        • 어노테이션 (1)
        • 튜토리얼 (11)
      • CI-CD (4)
      • Android (0)
        • Jetpack Compose (0)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    dp
    IOS
    AVFoundation
    Tuist
    dfs
    CS
    dispatch
    SwiftUI
    concurrency
    투포인터
    protocol
    UIKit
    property
    lifecycle
    백준
    boostcamp
    Spring
    프로그래머스
    Swift
    GIT
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.0
Hamp
서비스 알아보기
상단으로

티스토리툴바