반응형
이전 내용
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 |