OPEN HYPER STEP
← 목록으로 (Java+Spring)
JAVA · 51 / 69
java
CHAPTER 51 / 69
읽기 약 2
FUNCTION

서비스 레이어 패턴


핵심 개념

Controller-Service-Repository 3계층 아키텍처. @Transactional, DTO 변환, 비즈니스 로직 분리의 실무 원칙을 익힌다.

코드 분석
JAVA📋 코드 (40줄)
// UserService.java
@Service
@Transactional(readOnly = true) // 기본 읽기 전용
@RequiredArgsConstructor
public class UserService {
    private final UserRepository userRepository;
    private final PasswordEncoder passwordEncoder;

    public List<UserDto> findAll() {
        return userRepository.findAll().stream()
            .map(UserDto::from)  // Entity → DTO
            .collect(Collectors.toList());
    }

    public UserDto findById(Long id) {
        return userRepository.findById(id)
            .map(UserDto::from)
            .orElseThrow(() -> new UserNotFoundException(id));
    }

    @Transactional  // 쓰기는 별도 선언
    public UserDto create(CreateUserDto dto) {
        if (userRepository.existsByEmail(dto.getEmail())) {
            throw new DuplicateEmailException(dto.getEmail());
        }
        User user = User.builder()
            .email(dto.getEmail())
            .password(passwordEncoder.encode(dto.getPassword()))
            .name(dto.getName())
            .build();
        return UserDto.from(userRepository.save(user));
    }

    @Transactional
    public void delete(Long id) {
        User user = userRepository.findById(id)
            .orElseThrow(() -> new UserNotFoundException(id));
        userRepository.delete(user);
    }
}

AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
Claude

무료: Sonnet 4.6 / Pro $20/mo: Opus 4.6

이 Spring '서비스 레이어 패턴' 코드에서
DI 관련 버그·순환 참조·트랜잭션 누수를
찾아서 수정해줘.
ChatGPT

무료: GPT-5.5 / Plus $20/mo: GPT-5.5 Pro

'서비스 레이어 패턴'를 Spring Boot 3.x로 구현한
실전 API 코드(컨트롤러+서비스+레포지토리+테스트)를 완성형으로 만들어줘.
Gemini

무료: 2.5 Flash / Pro $19.99/mo: 3.1 Pro

이 Spring '서비스 레이어 패턴' 프로젝트의 빈 구조와
의존성 트리를 전체 분석하고
N+1 쿼리·순환 참조·성능 병목을 정리해줘.
Grok

무료: Grok 4.1 / SuperGrok $30/mo

Spring '서비스 레이어 패턴' vs Quarkus·Micronaut·Ktor의
동일 기능 구현을 2026년 한국 채용 시장 기준으로
솔직히 비교해줘.

⭐ 이것만 기억하세요
서비스 레이어 패턴 이 3가지만 확실히 잡으세요
1.서비스에 모든 로직을 넣으면 서비스가 비대해지고 테스트가 어렵습니다
2.도메인 로직은 도메인 객체에, 트랜잭션 관리는 서비스에, 외부 연동은 인프라 계층에 분리합니다
3.다음 챕터에서 JPA 엔티티 설계를 심화 학습합니다


공유하기
진행도 51 / 69