Spring boot 89

2024.10.18 Blog 프로젝트 만들기(JPA) @SessionAttribute 와 HttpSession을 멤버 필드로 주입받는 것의 문제점

@SessionAttribute 사용 권장 안함@SessionAttribute는 주로 세션에 저장된 모델 속성을 뷰에서 다시 사용할 때 활용됩니다.인증 정보를 관리하는 용도로는 적합하지 않으며, 세션에 해당 속성이 없을 경우 예외가 발생할 수 있습니다HttpSession을 멤버 필드로 주입받는 것의 문제점이 발생 될 수 있음Spring MVC 컨트롤러는 기본적으로 싱글톤(하나의 인스턴스)으로 관리됩니다.HttpSession을 멤버 필드로 주입받으면 여러 요청 사이에 공유될 수 있어 쓰레드 안전성 문제가 발생할 수 있습니다.세션은 각 사용자마다 별도로 관리되어야 하므로, 멤버 필드로 주입받는 것은 적절하지 않습니다.메서드 파라미터로 HttpSession을 받아 사용하는 것의 장점HttpSession을 메서..

Spring boot 2024.10.18

2024.10.17 Blog 프로젝트 만들기(JPA) 게시글 삭제 오류 해결 (미완성)

마이콜로 로그인 후 삭제 요청 해보기   오류 발생 확인     fk 제약 조건 때문에 게시글을 삭제하면 댓글이 참조하는 게시글이 사라지기 때문에 삭제가 될 수 없음. 어노테이션을 이용해서 도움 받기댓글의 FK에 값을 NULL로 변경하고 게시글 삭제댓글을 먼저 삭제하고, 게시글 삭제 cascade 설정 하기 Board.java 수정// 해당 게시글이 삭제되면 종속되어 있던 댓글들을 먼저 삭제해라. @OneToMany(mappedBy = "board", fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)private List replies = new ArrayList();더보기package com.tenco.blog_v1.board;import com.tenc..

Spring boot 2024.10.17

2024.10.16 Blog 프로젝트 만들기(JPA) 댓글 테이블 설계 (엔티티)

학습 목표 1. JPA를 사용하여 데이터베이스 테이블과 자바 객체 간의 매핑을 정확하게 구현할 수 있다2. 다대일(Many-to-One) 관계를 설정하여 엔티티 간의 연관성을 표현할 수 있다.3. 데이터베이스에 저장할 필요가 없는 필드를 효과적으로 관리할 수 있다.   Reply.java더보기package com.tenco.blog_v1.reply;import com.tenco.blog_v1.board.Board;import com.tenco.blog_v1.user.User;import jakarta.persistence.*;import lombok.*;import org.hibernate.annotations.CreationTimestamp;import java.time.LocalDateTime;@Ge..

Spring boot 2024.10.16

2024.10.15 Blog 프로젝트 만들기(JPA) Service 레이어 만들기

학습 목표 1. Service 레이어의 개념과 필요성을 알고 있다. 2. 트랜잭션 관리 이해 및 코드에 적용해 보기 3. Controller에서 Service 사용으로 코드 리팩토링 해보기 Service 레이어는 애플리케이션의 비즈니스 로직을 담당하는 계층입니다.Controller는 클라이언트의 요청을 받고 응답을 반환하는 역할을 하며, Repository는 데이터베이스와의 상호작용을 담당합니다. 이 두 계층 사이에 Service 레이어를 도입함으로써 여러 이점을 얻을 수 있습니다. userDTO.javatoEntity에 role 추가더보기package com.tenco.blog_v1.user;import lombok.Data;@Datapublic class UserDTO { // 정적 내부 클래스..

Spring boot 2024.10.15

2024.10.14 Blog 프로젝트 만들기(JPA) JPARepository 란?

학습 목표 Spring Data JPA에서 제공하는 JPARepository의 개념과 그 활용을 알아 보자.  JPARepository란?Spring Data JPA는 Repository 인터페이스를 통해 데이터 접근 계층을 간편하게 구현할 수 있도록 도와주는 프레임워크입니다. 개발자가 직접 DAO(Data Access Object) 클래스를 작성하지 않고도, JpaRepository를 상속받는 인터페이스에 메서드를 정의함으로써 데이터베이스와의 상호작용을 처리할 수 있습니다.  주요 메서드 확인save(S entity): 엔티티를 저장하거나 업데이트합니다.findById(ID id): ID로 엔티티를 조회합니다.findAll(): 모든 엔티티를 조회합니다.deleteById(ID id): ID로 엔티티를..

Spring boot 2024.10.14

2024.10.14 Blog 프로젝트 만들기(JPA) 리팩토링

학습 목표 1. User 엔티티를 단방향 매핑으로 변경할 수 있다. 2. 인증과 인가(권환) 처리에 대해서 알아 보자. User.java User 엔티티 수정 - 자신만에 정보를 참조 더보기package com.tenco.blog_v1.user;import jakarta.persistence.*;import lombok.*;import org.hibernate.annotations.CreationTimestamp;import java.sql.Timestamp;@Getter@Setter@NoArgsConstructor@AllArgsConstructor@Entity@Table(name = "user_tb")@Builderpublic class User { @Id @GeneratedValue(st..

Spring boot 2024.10.14

2024.10.11 Blog 프로젝트 만들기(JPA) 인터셉터 만들어 보기

학습 목표1. 인터셉터의 개념을 활용해서 기능을 개발 할 수 있다. 인터셉터(Interceptor)스프링 MVC에서 제공하는 기능으로, 클라이언트의 요청을 처리하는 과정에서 특정 작업을 수행할 수 있도록 도와줍니다. 인터셉터는 컨트롤러의 메서드(URI)에 접근하는 과정에서 요청을 가로채어 전처리(pre-processing) 및 후처리(post-processing)를 할 수 있습니다.필터(Filter)와의 차이점필터는 서블릿 레벨에서 동작하며, 모든 요청에 대해 작동합니다.인터셉터는 스프링 MVC 레벨에서 동작하며, 특정 핸들러(컨트롤러)로의 요청에만 작동합니다.인터셉터를 통해 로그인 여부 확인, 권한 검사, 로깅, 요청 시간 측정 등 다양한 작업을 효율적으로 처리할 수 있습니다. 로그인 인터셉터 만들기로..

Spring boot 2024.10.11

2024.10.11 Blog 프로젝트 만들기(JPA) 에러 컨트롤러 및 커스텁 익셉션 만들기

학습 목표커스텀 예외의 필요성 이해기본 예외 처리 방식의 한계를 인식하고, 커스텀 예외를 통해 보다 세밀한 에러 관리를 이해한다.커스텀 예외 클래스 생성다양한 상황에 맞는 사용자 정의 예외 클래스를 생성하는 방법을 학습한다.글로벌 예외 처리기(Global Exception Handler) 구현@ControllerAdvice와 @ExceptionHandler를 활용하여 전역적으로 예외를 처리하는 방법을 익힌다.  common.errors 패키지를 생성 Exception400.java 외 4개를 아래와 같이 만든다.  Exception400.javapackage com.tenco.blog_v1.common.errors;public class Exception400 extends RuntimeException..

Spring boot 2024.10.11