JPA - 일정관리 앱 만들기
·
TIL
과제 내용이번 과제는 JPA를 활용하여 일정관리 앱을 만드는 것이였습니다. 이번에는 각각의 API마다 정리를 했으니 블로그 봐주세요 !!https://haseung22.tistory.com/ haseung22의 블로그haseung22 의 블로그 입니다.haseung22.tistory.com  과제를 하며 있었던 트러블 슈팅배경과제의 요구사항 중 일정 담당 유저 (매니저)와 일정의 연관관계를 N:M으로 하라는 요구사항이 있었는데이걸 어떻게 할지 고민하다가 처음에는 User와 Todo 테이블 이외에 일정 담당 유저를 관리하는 Manger 테이블과 일정과 그 Manager 테이블을 N:M으로 연관 짓기 위하여 Management라는 테이블을 하나 또 만들어서 연관관계를 맺어줬었다.근데 코드를 계속 보다 보니 ..
JPA - 회원가입 로그인
·
TIL
저번 포스팅에 올렸던  JwtUti를 이용하여 회원가입과 로그인을 구현하였다. 1. 엔티티 생성일정과 일정 담당유저와의 연관관계를 맺으라는 요구사항이 있어 OneToMany를 이용하여 1:N관계를 맺었다.@Entity@Getter@Table(name = "user")@NoArgsConstructor(access = AccessLevel.PROTECTED)public class User extends AuditingDate { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false, unique = true) private String email; @Col..
JPA - JWT와 필터 구현하기
·
TIL
JwtUtil이번 과제에서는 JWT 토큰을 이용한 인증, 인가를 구현해야한다. 그렇기 때문에 JWT 토큰 생성만을 위한 Util 클래스를 만들었다.@Componentpublic class JwtUtil { public static final String AUTHORIZATION_HEADER = "Authorization"; public static final String AUTHORIZATION_KEY = "auth"; public static final String BEARER_PREFIX = "Bearer "; private final long ACCESS_TOKEN_TIME = 60 * 60 * 1000L; // 60분 @Value("${jwt.secret.key}") ..
영속성 컨텍스트
·
TIL
영속성 컨텍스트란?영속성 컨텍스를 쉽게 표현하자면 Entity를 객체를 효율적으로 쉽게 관리하기 위해 만들어진 공간입니다.JPA에서는 테이블과 매핑되는 Entity 객체 정보를 영속성 컨텍스트를 통해 애플리케이션 내에서 오래 지속되도록 보관합니다.영속성 컨텍스트에 접근하여 Entity 객체들을 조작하기 위해서는 EntityManager가 필요합니다. 영속성 컨텍스트 기능1차 캐시쓰기 지연 저장소객체 동일성 보장 1차캐시 영속성 컨텍스트는 내부적으로 캐시 저장소를 가지고 있는데 이를 1차 캐시라고 부릅니다.캐시 저장소는 Map 자료구조 형태로 Key에는 @Id로 매핑한 기본키를,Value에는 Entity 객체를 저장합니다.em.persist(memo); // 메서드 호출 시 memo Entity 객체를 ..
페이징 조회 - Pageble / PageRequest
·
TIL
일정을 Spring Data JPA의 Pageable과 Page 인터페이스를 활용하여 페이지네이션을 구현페이지 번호와 페이지 크기를 쿼리 파라미터로 전달하여 요청하는 항목을 나타냅니다. 할일 제목, 할일 내용, 댓글 개수, 일정 작성일, 일정 수정일, 일정 작성 유저명 필드를 조회합니다.디폴트 페이지 크기는 10으로 적용합니다. 일정의 수정일을 기준으로 내림차순 정렬합니다.페이징 조회를하기위해 Spring Data JPA에서 제공하는 Pageble 인터페이스와 PageRequest 클래스를 사용하였습니다. PageblePageable은 데이터를 페이지 단위로 검색하고 제어하는 인터페이스입니다.Pageable은 페이지 처리에 필요한 정보만 전달하는 용도이며, 실제 객체를 생성할 때는PageRequest 클..
JPA - Entity
·
TIL
EntityEntity란 JPA에서 관리되는 클래스 즉 객체를 의미합니다.데이터베이스와의 상호작용을 위한 매핑 정보도 포함되어있습니다. @EntityJpa가 관리할 수 있도록 테이블과 매핑할 클래스에는 필수로 달아주어야한다. @Entity 어노테이션이 붙은 클래스는 JPA가 관리하게 되며, 이를 엔티티라고 부릅니다.@Entity // JPA가 관리할 수 있는 Entity 클래스 지정public class Memo { ...}name 속성을 이용하여 엔티티 클래스 이름을 지정할 수 있습니다. (default : 클래스 명)@Entity(name = "Memo") // JPA가 관리할 수 있는 Entity 클래스 지정public class Memo { ...}주의사항JPA가 Entity 클래스를 인스턴스화 ..
JPA - 댓글 CRUD
·
TIL
생성한 일정에 댓글을 남길 수 있습니다.댓글과 일정은 연관관계를 가집니다.댓글을 저장, 조회, 수정, 삭제할 수 있습니다.댓글은 아래와 같은 필드를 가집니다.댓글 내용, 작성일, 수정일, 작성 유저명 필드 댓글은 특정 게시글에 남기는 것이므로 컨트롤러에서  요청을 받을 때 일정의 고유값인 todoId를 같이 받도록하였다. Controller@RestController@RequestMapping("/api/comment")@RequiredArgsConstructorpublic class CommentController { private final CommentService cmtService; @GetMapping("/{todoId}") public ResponseEntity> findBy..
JPA - 일정 CRUD
·
TIL
저번 과제는 JDBC를 이용한 일정관리 앱을 만드는거였는데 이번 과제는 JPA를 이용하여일정관리 API를 만드는 것이다. 이번에는 한 단계 한 단계 차근차근 나가보려고한다.일단 1단계인 일정 CRUD의 요구사항은 아래와 같다.키워드@Entity: 데이터베이스 테이블과 매핑되는 클래스에 사용합니다.@Id: 해당 필드를 기본 키로 지정합니다.@GeneratedValue: 기본 키 생성 전략을 설정합니다.@Repository: DAO(Data Access Object) 클래스에 사용하여 데이터 접근을 명시합니다.어노테이션일정을 저장, 조회, 수정, 삭제할 수 있습니다.일정은 아래 필드를 가집니다.작성 유저명, 할일 제목, 할일 내용, 작성일, 수정일 필드삭제의 경우일정을 삭제할 때 일정의 댓글도 함께 삭제이 ..