Spring 기본 - Service 계층

2025. 9. 20. 18:00·개발 아카이브/JAVA
반응형

이전 내용

https://wooncloud.tistory.com/161

 

Spring 기본 시작 - 세팅부터 CRUD API 까지

1. 자바 설치 (Java JDK 17 이상 설치)Java 8 (2014년 출시)여전히 많은 기업에서 레거시 시스템으로 사용 중람다 표현식, Stream API 등 중요한 기능이 도입된 버전장기적으로는 점차 마이그레이션하는 추

wooncloud.tistory.com

 

Service 계층 추가

왜 Service 계층이 필요할까?

  • Controller: HTTP 요청/응답 처리만 한다.
  • Service: 실질적인 비즈니스 로직 처리를 service에서 모두 함.
  • Repository: 데이터베이스 접근만 한다.

Service 패키지와 클래스 생성

src/main/java/com/example/demo_api에 service 패키지를 생성한다.

 

UserService.java 클래스 생성

package com.example.demo_api.service;

import com.example.demo_api.entity.User;
import com.example.demo_api.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {
    
    @Autowired
    private UserRepository userRepository;
    
    // 모든 사용자 조회
    public List<User> getAllUsers() {
        return userRepository.findAll();
    }
    
    // 사용자 생성
    public User createUser(User user) {
        // 여기에 비즈니스 로직 추가 가능
        // 예: 이메일 중복 체크, 데이터 검증 등
        return userRepository.save(user);
    }
    
    // ID로 사용자 조회
    public User getUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }
    
    // 사용자 정보 수정
    public User updateUser(Long id, User userDetails) {
        User user = userRepository.findById(id).orElse(null);
        if (user != null) {
            user.setName(userDetails.getName());
            user.setEmail(userDetails.getEmail());
            return userRepository.save(user);
        }
        return null;
    }

    // 사용자 삭제
    public boolean deleteUser(Long id) {
        if (userRepository.existsById(id)) {
            userRepository.deleteById(id);
            return true;
        }
        return false;
    }

    // 사용자 존재 여부 확인
    public boolean existsById(Long id) {
        return userRepository.existsById(id);
    }
}

 

UserController 수정 - Repository 대신 Service 사용

@RestController
@RequestMapping("/api/users")
public class UserController {
    
    @Autowired
    private UserService userService;  // Repository 대신 Service 사용
    
    @GetMapping
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }
    
    @PostMapping
    public User createUser(@RequestBody User user) {
        return userService.createUser(user);
    }
    
    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        return userService.getUserById(id);
    }
    
    // 이 부분들을 Service 사용으로 수정하세요
    @PutMapping("/{id}")
    public User updateUser(@PathVariable Long id, @RequestBody User userDetails) {
        return userService.updateUser(id, userDetails);
    }
    
    @DeleteMapping("/{id}")
    public String deleteUser(@PathVariable Long id) {
        boolean deleted = userService.deleteUser(id);
        if (deleted) {
            return "사용자가 삭제되었습니다.";
        } else {
            return "사용자를 찾을 수 없습니다.";
        }
    }
}

 

이로서 아키텍처는 다음과 같이 동작하게 된다.

Controller → Service → Repository → Database

 

Service 계층의 장점으로 비즈니스 로직을 추가할 수 있다.

아래와 같이 유저를 만들때 이메일 중복 체크를 할 수 있다.

// UserService의 createUser 메소드를 수정해보세요
public User createUser(User user) {
    // 이메일 중복 체크 로직 추가
    if (userRepository.existsByEmail(user.getEmail())) {
        throw new RuntimeException("이미 존재하는 이메일입니다: " + user.getEmail());
    }
    return userRepository.save(user);
}

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'개발 아카이브 > JAVA' 카테고리의 다른 글

JAVA equals, hashCode 오버라이드시 instanceof와 getClass 차이  (0) 2025.09.21
Spring 기본 - DTO (Data Transfer Object) 패턴  (0) 2025.09.20
Spring 기본 시작 - 세팅부터 CRUD API 까지  (2) 2025.09.04
Java 17 다운로드 방법  (0) 2025.09.03
[Spring] @Autowired를 지혜롭게 하는 법.  (0) 2021.10.21
'개발 아카이브/JAVA' 카테고리의 다른 글
  • JAVA equals, hashCode 오버라이드시 instanceof와 getClass 차이
  • Spring 기본 - DTO (Data Transfer Object) 패턴
  • Spring 기본 시작 - 세팅부터 CRUD API 까지
  • Java 17 다운로드 방법
운클라우드
운클라우드
프로그래밍, 디자인 및 각종 이야기와 리뷰를 담는 블로그
  • 운클라우드
    Wooncloud Blog
    운클라우드
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 이야기
        • 일기
        • 개발일지
        • 제품 리뷰
        • 기타
        • 정보처리기사
      • 정보
        • 유용한 사이트
      • 개발 아카이브 N
        • AI, 인공지능
        • Javascript
        • JAVA N
        • DATABASE
        • 개발 관련 지식 N
        • 라이브러리
        • AWS, Cloud, Server
        • 코드 저장소
        • HTML, CSS
  • 블로그 메뉴

    • 홈
    • 방명록
    • 운구름 웹
    • 벨로그
    • 깃허브
    • 리틀리
    • 도시부엉
  • 링크

    • 홈페이지
    • 깃허브
    • 벨로그
  • 공지사항

  • 인기 글

  • 태그

    스터디
    Ai
    회고
    라이브러리
    스프링
    API
    CSS
    json
    코드저장소
    튜닝
    SQL
    spring
    폰트
    자바스크립트
    웹디자인
    html
    정보처리기사
    자바
    Java
    javascript
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
운클라우드
Spring 기본 - Service 계층
상단으로

티스토리툴바