Spring boot 46

스프링 부트- 익명 블로그 만들기 버전6 (OSIV 와 댓글 목록 만들어 보기)

Open Session in View (OSIV) 란?HTTP 요청 시작부터 응답 완료까지 데이터베이스 세션(연결)을 유지하는 패턴입니다. HTTP 요청 시작 ↓데이터베이스 세션 열기 ↓Controller 실행 ↓Service 실행 (트랜잭션 시작/종료) ↓View 렌더링 (DB 세션 유지) ← 지연 로딩 가능! ↓데이터베이스 세션 닫기 ↓HTTP 응답 완료 OSIV가 없다면?// Service에서 트랜잭션 종료 시 DB 연결도 종료Board board = boardService.findByIdWithReplies(id, sessionUser);// 뷰 렌더링 중 지연 로딩 시{{#board.replies}} // LazyInitializationException 발생..

Spring boot 2025.07.31

스프링 부트- 익명 블로그 만들기 버전6 (댓글 저장과 양방향 맵핑 설정)

단방향 매핑이란?단방향 매핑은 한쪽 엔티티에서만 다른 엔티티를 참조하는 관계입니다. 현재 우리 프로젝트의 단방향 매핑 예시// Reply 엔티티 (댓글)public class Reply { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "board_id") private Board board; // 댓글 → 게시글 참조 (단방향) @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id") private User user; // 댓글 → 사용자 참조 (단방향)}// Board 엔티티 (게시글)public class Board { @ManyToOne(..

Spring boot 2025.07.31

스프링 부트- 익명 블로그 만들기 버전6 (댓글 엔티티 설계 및 샘플 데이터)

Replypackage com.tenco.blog.reply;import com.tenco.blog.board.Board;import com.tenco.blog.user.User;import com.tenco.blog.utils.MyDateUtil;import jakarta.persistence.*;import lombok.Builder;import lombok.Data;import lombok.NoArgsConstructor;import org.hibernate.annotations.CreationTimestamp;import java.sql.Timestamp;@Data@NoArgsConstructor@Table(name = "reply_tb")@Entitypublic class Reply { @..

Spring boot 2025.07.30

스프링 부트- 익명 블로그 만들기 버전5 (Service 계층)

Service 계층이란?Service 계층은 Spring MVC 아키텍처에서 비즈니스 로직을 담당하는 계층입니다. Controller와 Repository 사이에 위치하여 실제 업무 처리를 담당합니다. BoardServicepackage com.tenco.blog.board;import com.tenco.blog._core.errors.exception.Exception403;import com.tenco.blog._core.errors.exception.Exception404;import com.tenco.blog.user.User;import com.tenco.blog.utils.Define;import jakarta.servlet.http.HttpSession;import lombok.Requir..

Spring boot 2025.07.30

스프링 부트- 익명 블로그 만들기 버전5 (JPARepository)

JpaRepository란?Spring Data JPA에서 제공하는 인터페이스로, 기본적인 CRUD 메서드들을 자동으로 제공합니다.기존의 EntityManager를 직접 사용하는 방식에서 더 간편한 방식으로 발전findAll(), save(), findById(), deleteById() 등의 메서드를 자동 제공복잡한 쿼리는 @Query 어노테이션으로 직접 작성 가능 UserJpaRepositorypackage com.tenco.blog.user;import org.springframework.data.jpa.repository.JpaRepository;import org.springframework.data.jpa.repository.Query;import org.springframework.data...

Spring boot 2025.07.30

REST API 란?

1. REST API의 탄생REST는 Representational State Transfer라는 용어의 약자로서 2000년도에 로이 필딩 (Roy Fielding)의 박사학위 논문에서 최초로 소개되었습니다. 로이 필딩은 HTTP의 주요 저자 중 한 사람으로 그 당시 웹(HTTP) 설계의 우수성에 비해 제대로 사용되어지지 못하는 모습에 안타까워하며 웹의 장점을 최대한 활용할 수 있는 아키텍처로써 REST를 발표했다고 합니다. 2. REST 구성쉽게 말해 REST API는 다음의 구성으로 이루어져있습니다.자원(RESOURCE) - URI행위(Verb) - HTTP METHOD표현(Representations) 1) URI는 정보의 자원을 표현해야 한다. (리소스명은 동사보다는 명사를 사용) GET /mem..

Spring boot 2025.07.30

스프링 부트- 익명 블로그 만들기 버전4 (인증검사와 권한 확인 구분 하기)

인증검사는 로그인 여부를 확인하고, 권한 확인은 해당 리소스의 소유자인지를 확인하는 개념입니다.인증검사는 인터셉터에서 일괄 처리하고, 권한 확인은 컨트롤러에서 개별적으로 처리합니다. 게시글 수정 화면 요청@GetMapping("/board/{id}/update-form")public String updateForm(@PathVariable("id") Long id, HttpServletRequest request, HttpSession session) { User sessionUser = (User) session.getAttribute("sessionUser"); Board board = boardRepository.findById(id); // 권한 체크: 본인이 작성한..

Spring boot 2025.07.29

스프링 부트- 익명 블로그 만들기 버전4 (intercepter 활용 - 인증검사 공통 처리)

1. intercepter란 뭘까?인터셉터는 Spring MVC의 핵심 기능 중 하나로, 웹 애플리케이션에서 공통적인 처리를 재사용할 수 있게 해주는 강력한 도구입니다.인터셉터(Interceptor)는 들어오는 요청과 나가는 응답을 가로채어 특정 로직을 수행할 수 있게 해주는 매커니즘을 제공합니다. 이는 AOP(Aspect-Oriented Programming)의 일종으로 볼 수 있으며, 컨트롤러(Controller)로 요청이 도달하기 전, 후 또는 완료된 후에 추가적인 처리를 하기 위해 사용됩니다.인터셉터 구현 방법먼저 딱 2가지만 기억해 봅시다.동작 시키고자 하는 인터셉터 기능을 클래스로 만들어 준다. 단, 만들고 자 하는 해당 클래스에 HandlerInterceptor 인터페이스를 구현하거나 Han..

Spring boot 2025.07.29

스프링 부트- 익명 블로그 만들기 버전4 (예외 처리 중앙 집중화)

로그 레벨설정 확인 (-dev)# 2칸 공백, 탭키 절대 사용 금지!# 로그 설정 (개발환경용)# 로그 레벨의 개념# ERROR > WARN > INFO > DEBUG > TRACElogging: level: root: INFO com.tenco.blog: DEBUG # 개발 시 모든 로그 확인 #com.tenco.blog.user: INFO # User 패키지만 INFO (선택사항) 로그 레벨설정 확인 (-prod)# 2칸 공백, 탭키 절대 사용 금지!# 로그 설정 (개발환경용)# 로그 레벨의 개념# ERROR > WARN > INFO > DEBUG > TRACElogging: level: root: WARN com.tenco.blog: INFO ..

Spring boot 2025.07.29

스프링 부트- 익명 블로그 만들기 버전4 (에러 컨트롤러 및 커스텀 예외 처리 - @ControllerAdvice 활용)

@ControllerAdvice 개념: 전역 예외 처리의 중앙 집중화커스텀 예외 클래스: HTTP 상태 코드별 예외 정의@ExceptionHandler: 예외 타입별 처리 메서드 매핑예외 처리 흐름: 예외 발생 → 핸들러 → 에러 페이지 샘플 코드로 개념 확인// 전통적인 방식 (각 컨트롤러마다 try-catch)@Controllerpublic class BoardController { @GetMapping("/board/{id}") public String detail(@PathVariable Long id) { try { Board board = boardRepository.findById(id); return "board/deta..

Spring boot 2025.07.29