스프링 부트

spring/게시판 api

Spring boot 게시판 API 서버 제작 (21) - 게시글 - 삭제

이번에는 게시글 삭제 기능을 구현해 보겠습니다. File 삭제 -> Post 삭제 -> Post Controller 요청 순으로 진행하겠습니다. File 삭제 LocalFileService @Override public void delete(String filename) { new File(location + filename).delete(); } 파라미터로 filename을 받아 file을 삭제합니다. Post 삭제 PostService @Transactional public void delete(Long id){ Post post = postRepository.findById(id).orElseThrow(PostNotFoundException::new); deleteImages(post.getImag..

spring/게시판 api

Spring boot 게시판 API 서버 제작 (20) - 게시글 - 조회

이번에는 게시글 API 조회 기능을 구현해보겠습니다. PostRepository 게시글을 조회할때는 작성자의 정보도 포함해서 조회할 것이기 때문에 Post를 조회할 때 Member를 함께 조회하는 쿼리를 작성해줍니다. public interface PostRepository extends JpaRepository { @Query("select p from Post p join fetch p.member where p.id = :id") Optional findByIdWithMember(@Param("id") Long id); } 쿼리의 실행 결과는 Post Entity와 연관된 Member Entity를 함께 가져오며, 이를 통해 게시물과 회원 정보를 모두 조회할 수 있습니다. DTO 다음으로 데이터를 ..

spring/게시판 api

Spring boot 게시판 API 서버 제작 (19) - 게시글 - 생성

이번에는 게시글 생성 기능을 구현해 보겠습니다. 서비스 로직부터 API생성까지 진행하겠습니다. DTO 먼저 서비스 로직을 요청할 때 필요한 요청클래스 PostCreateRequest와 반환클래스 PostCreateResponse를 만들어 보겠습니다. PostCreateRequest @ApiModel(value = "게시글 생성 요청") @Data @NoArgsConstructor @AllArgsConstructor public class PostCreateRequest { @ApiModelProperty(value = "게시글 제목", notes = "게시글 제목을 입력해주세요.", required = true, example = "my title") @NotBlank(message = "게시글 제목을 ..

spring/게시판 api

Spring boot 게시판 API 서버 제작 (18) - 게시글 - Entity 설계

이번에 시간부터 게시글 기능을 구현해 보도록 하겠습니다. 먼저 게시글 기능을 위한 Entity 설계부터 해보겠습니다. Entity 생성 Post @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Post extends EntityDate { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "post_id") private Long id; @Column(nullable = false) private String title; @Column(nullable = false) @Lob private String content; @ManyToOn..

spring/게시판 api

Spring boot 게시판 API 서버 제작 (17) - Member <- Entity Graph 적용

Authorization 헤더에 access token 정보를 주고 API 요청을 보낼 때, Member를 조회하는 과정에서 불필요한 쿼리 호출이 이루어지는 부분을 살펴보고 Entity Graph를 적용해서 해결해 보도록 하겠습니다. JwtAuthenticationFilter @RequiredArgsConstructor public class JwtAuthenticationFilter extends GenericFilterBean { private final TokenHelper accessTokenHelper; private final CustomUserDetailsService userDetailsService; @Override public void doFilter(ServletRequest req..

spring/study

[spring] Entity Graph에 대해 알아보자

Entity Graph란? Entity Graph는 JPA(Java Persistence API)에서 제공하는 기능으로, 엔티티 객체를 가져올 때 연관된 엔티티 객체들을 함께 가져오는 방법을 지정하는 기능입니다. 일반적으로 JPA에서는 지연 로딩(lazy loading) 방식을 사용하여 연관된 엔티티 객체를 필요할 때 가져옵니다. 그러나 이 경우에는 연관된 엔티티 객체를 가져오는 쿼리가 지연 로딩 수행 시 매번 실행되어 성능상의 이슈가 발생할 수 있습니다. Entity Graph는 이러한 성능상의 이슈를 해결하기 위해, 한 번의 쿼리로 필요한 모든 엔티티 객체를 함께 가져오기 위한 방법을 제공합니다. 따라서 연관된 엔티티 객체를 여러 번 가져오지 않아도 되므로 성능상의 이점을 얻을 수 있습니다. Enti..

spring/게시판 api

Spring boot 게시판 API 서버 제작 (16) - 중간 정리 & 카테고리 API

프로젝트를 진행하면서 중간중간 수정 작업이 있었지만 대부분 게시글 주제와는 거리가 좀 있어 설명을 생략했습니다. 이번에 수정했던 부분들을 짚어보면서 개념 정리도 다시 해보고 로그인 기능 구현 후 Swagger로 API 추가 했던 작업을 카테고리에서도 동일하게 해보겠습니다. Entity 수정 먼저 Member와 Role 을 이어주는 MemberRole Entity를 수정하겠습니다. [Before] MemberRole @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter public class MemberRole { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id..

spring/study

[Spring] @IdClass에 대해서 알아보자

spring에서 지원하는 JPA에서는 각 Entity 클래스에서 기본 키(Primary Key, PK)를 지정해야 합니다. 이때, 복합적인 기본 키를 사용하는 경우가 있습니다. spring에서는 @IdClass 어노테이션을 사용하여 복합적인 기본 키를 지정할 수 있습니다. @IdClass @IdClass 어노테이션은 복합적인 기본 키를 사용하는 엔티티 클래스에서 기본 키를 정의할 때 사용됩니다. 이 어노테이션을 적용한 클래스는 복합 키를 구성하는 여러 필드를 포함하고 있습니다. 예를 들어, Person 클래스에서 id와 name 필드를 복합 키로 사용하려면, PersonId 클래스를 정의하고 이를 @IdClass 애노테이션으로 마크업합니다. public class PersonId implements Se..

spring/study

[Spring] @Embeddable에 대해서 알아보자

spring이 지원하는 JPA에서는 여러 개의 Entity로 구성된 객체 모델을 관계형 데이터베이스 테이블로 매핑합니다. 이 때, 객체 모델의 필드 중에는 복합적인 값을 가지는 경우가 있습니다. 예를 들어서 Address라는 객체가 있는데, Address는 ciry, street, zipCode 필드로 구성됩니다. 이러한 복합적인 값을 가지는 필드를 매핑하기 위해 @Embeddable을 사용합니다. @Embeddable @Embeddable 애노테이션은 복합적인 값을 가지는 객체를 정의할 때 사용됩니다. 이 애노테이션을 적용한 클래스는 엔티티의 필드로 사용될 수 있습니다. 예를 들어, Address 클래스를 정의하고 이를 @Embeddable 애노테이션으로 마크업하면, 다른 엔티티 클래스에서 Addres..

spring/error

[에러 해결] e = Content type 'text/plain;charset=UTF-8' not supported

Postman에서 API 요청시에 발생하는 에러입니다. 원인 Content-type이 text/palin으로 넘어가서 파싱 과정에서 발생하는 문제 해결 해결법은 간단합니다. Content-type를 application/json으로 변경해줍니다.

얼킴
'스프링 부트' 태그의 글 목록