이번에는 저번시간에 이어 CategoryService를 계속 살펴보겠습니다. 저번 시간에는 read 메서드를 알아봤는데요, 이어서 create를 알아보겠습니다. CategoryService @RequiredArgsConstructor @Service @Transactional(readOnly = true) public class CategoryService { private final CategoryRepository categoryRepository; public List readAll() { List categories = categoryRepository.findAllOrderByParentIdAscNullsFirstCategoryIdAsc(); return CategoryDto.toDtoList(..
로그인 기능을 완성하였으니 이제 게시판 기능을 구현해보겠습니다. 요구 사항 먼저 게시판 기능에 대한 요구사항을 정리하고 넘어가겠습니다. 게시판 기능에는 다음과 같은 항목들이 요구됩니다. 계층형 카테고리 물품 판매 게시글 CRUD 게시글 조건 검색 계층형 대댓글 게시글 별 쪽지 송수신 페이지 번호를 이요한 페이징 처리(게시글 조회) 무한 스크롤을 이용한 페이징 처리(쪽지 및 매매 내역 조회) 게시판 기능의 최종 목표는 회원들이 게시글을 작성하고 댓글을 달아 소통할 수 있도록 하는 것입니다. 계층형 카테고리 카데고리는 계층형 구조 입니다. 각각의 카테고리는 하위 카테고리를 가질 수 있습니다. Category Entity 생성 @Entity //JPA Entity임을 나타내는 어노테이션 @Getter // C..
이번 시간에는 저번 시간에 구현한 JWT 관련 기능을 사용하는 TokenService와 이를 활용한 SignService를 만들어 보겠습니다. TokenService application.yml 설정 먼저 TokenService에서 사용할 설정 값들을 application.yml에 추가하겠습니다. spring: ... profiles: active: local include: secret 이렇게 설정하면 profile이 local로 활성화가 되고, secret을 include하여 application-sercret.yml 파일에 있는 값을 읽을 수 있습니다. application-secret.yml 파일에는 다음과 같이 작성합니다. jwt: key: access: tmpAccessKey refresh: ..
이번에는 Entity를 생성하고 변경하는 시간을 추가해보고, 이전 게시글에서 만들었던 Member와 Role에 대해서 Repository를 생성해보겠습니다. EntityDate추가 먼저 생성 시간과 업데이트 시간을 담고있는 EntityDate 클래스를 생성해줍니다. @EntityListeners(AuditingEntityListener.class) @MappedSuperclass @Getter public abstract class EntityDate { @CreatedDate @Column(nullable = false, updatable = false) private LocalDateTime createdAt; @LastModifiedDate @Column(nullable = false, updata..
프로젝트를 생성했으니 이번에는 로그인 기능을 구현해보겠습니다. 로그인 기능은 Json Web Token을 이용한 토큰 인증 방식을 사용하는데, 이 부분은 아직 공부중이라 학습한 내용을 같이 정리해가면서 구현을 해보겠습니다. 프로젝트 계층 구조 요구 사항 회원 가입을 할 때 필요한 정보는 다음과 같다. email : 중복 x, password : encoding 할 것 username nickname : 중복 x, 변경 가능 role : 여러 개의 권한 가질 수 있음 생성할 클래스는 Member.java Role.java MemberRole.java RoleType.java Member와 Role은 각각 MemberRole 1대N 관계를 가진다. 구현 Member.java @Entity @Getter @N..
Spring Security는 Spring Framework에서 인증과 권한 부여를 수행하는 데 사용되는 강력한 보안 프레임워크입니다. Spring Security는 Spring Framework에서 자체적으로 보안 구성을 제공하며, 다양한 보안 기능을 제공하는 다양한 확장 모듈을 제공합니다. 이번 글에서는 Spring Security를 사용하여 웹 보안을 구성할 때 사용하는 @EnableWebSecurity 어노테이션에 대해 알아보겠습니다. 1. @EnableWebSecurity 어노테이션 @EnableWebSecurity 어노테이션은 Spring Security를 사용하여 웹 보안을 구성할 때 사용하는 어노테이션입니다. 이 어노테이션을 사용하면 Spring Security와 관련된 구성을 할 수 있습..
@OnDelete 어노테이션은 JPA에서 제공하는 어노테이션 중 하나로, 연관된 엔티티를 삭제할 때 어떻게 처리할 것인지를 지정할 때 사용됩니다. 이번 글에서는 @OnDelete 어노테이션에 대해 자세히 알아보겠습니다. @OnDelete 어노테이션 @OnDelete 어노테이션은 연관된 엔티티가 삭제될 때 어떻게 처리할 것인지를 지정할 때 사용됩니다. 이 어노테이션을 사용하면 다른 엔티티와의 관계를 가진 엔티티가 삭제될 때, 그 관계가 끊어진 후 어떤 동작을 수행할지 지정할 수 있습니다. @Entity public class Order { @ManyToOne @OnDelete(action = OnDeleteAction.CASCADE) private Customer customer; // ... } 위의 예..
Spring Framework은 개발자들이 데이터베이스와 상호작용하기 위해 사용되는 다양한 기능을 제공합니다. 그 중에 @Query 어노테이션은 JPA(Java Persistence API)를 사용할 때 유용하게 쓰이며, 데이터베이스 쿼리를 정의하고 실행할 때 사용됩니다. 이번 글에서는 @Query 어노테이션에 대해 자세히 알아보겠습니다. @Query란? @Query 어노테이션은 JPA에서 제공하는 어노테이션 중 하나로, 데이터베이스 쿼리를 직접 작성하고 실행할 때 사용됩니다. 이 어노테이션을 사용하면 Spring Framework에서 제공하는 Repository 인터페이스를 구현할 때 쿼리를 간편하게 작성하고 사용할 수 있습니다. @Query 어노테이션 사용하기 @Query 어노테이션은 다음과 같이 사..
Spring Framework는 자바 기반의 오픈 소스 애플리케이션 프레임워크로, 의존성 주입(Dependency Injection) 기능을 제공하여 객체 간의 결합도를 낮추고, 유연하고 확장 가능한 애플리케이션을 만들 수 있도록 도와줍니다. Spring Framework에서 @Autowired 어노테이션은 이러한 의존성 주입 기능을 간단하게 사용할 수 있도록 지원해줍니다. @Autowired 어노테이션이란? @Autowired 어노테이션은 스프링에서 제공하는 어노테이션 중 하나로, 스프링 컨테이너에 등록된 빈(bean) 중에서 자동으로 의존성을 주입해주는 역할을 합니다. @Autowired 어노테이션을 사용하면, 의존성을 주입하려는 대상이 스프링 컨테이너에서 관리하는 빈이라면, 해당 빈을 자동으로 주입..
문제 처음 JPA 학습을 시작할 때 Entity 작성 -> Repository 작성 -> test 작성 순으로 코드를 작성하다보면 test 작성에서 다음과 같은 에러를 마주칠 때가 있다. org.springframework.dao.InvalidDataAccessApiUsageException: No EntityManager with actual transaction available for current thread - cannot reliably process 'persist' call; nested exception is javax.persistence.TransactionRequiredException: No EntityManager with actual transaction available fo..