Spring boot

블로그 6 - 글 상세보기(조회) API 구현

ryeonng 2024. 10. 2. 17:11
BlogService 파일에 게시글 조회 로직 추가 - 1
package com.tenco.demo._domain.blog.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.tenco.demo._domain.blog.dto.ArticleDTO;
import com.tenco.demo._domain.blog.entity.Article;
import com.tenco.demo._domain.blog.repository.PostRepository;
import com.tenco.demo.common.ApiUtil;
import com.tenco.demo.common.errors.Exception400;

import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
@Service // IoC (빈으로 등록)
public class BlogService {
	
	@Autowired // DI
	private final PostRepository postRepository;
	
	@Transactional // 쓰기 지연 처리 까지
	public Article save(ArticleDTO dto) {
		// 비즈니스 로직이 필요하다면 작성
		return postRepository.save(dto.toEntity());
	}
	
	// 전체 게시글 조회 기능
	public List<Article> findAll() {
		List<Article> articles = postRepository.findAll();
		return articles;
	}
	
	// 상세보기 게시글 조회
	public Article findById(Integer id) {
		// Optional<T>는 Java8 에서 도입된 클래스 이며,
		// 값이 존재할 수도 있고, 없을 수도 있는 상황을 명확히 처리하기 위해 사용된다.
		// Optional 타입에 대해 직접 조사하고 숙지하자.(테스트 코드 작성해보기)
		return postRepository.findById(id).orElseThrow( () -> new Exception400("해당 게시글이 존재하지 않습니다."));
	
	
	}

	
	
}

Optional<T> (Optional을 사용하여 null 처리를 안전 처리하기 위함)

  • 값이 존재할 때 : Optional 안에 값이 포함되어 있으며, 이 값을 안전하게 꺼내어 사용할 수 있다.
  • 값이 없을 때 : Optional이 비어 있으며, 이를 통해 null을 직접 처리하는 대신, 다양한 메서드를 사용하여 비어있는 상황을 처리할 수 있다.

 

도전 과제

Optional<T>의 주요 메서드를 확인하고 테스트 코드를 직접 만들고 숙지하라.

예시 - isPresent(), get(), orElse(), orElseThrow(), map()