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) 클래스에 사용하여 데이터 접근을 명시합니다.어노테이션일정을 저장, 조회, 수정, 삭제할 수 있습니다.일정은 아래 필드를 가집니다.작성 유저명, 할일 제목, 할일 내용, 작성일, 수정일 필드삭제의 경우일정을 삭제할 때 일정의 댓글도 함께 삭제이 ..
JPA
·
TIL
JPAJPA(Java Persistence Api)는 자바에서 제공하는 인터페이스로 ORM 기술에 대한 표준 명세이다.관계형 데이터베이스를 사용하는 방식을 나타내며 ORM이므로 자바 클래스와 DB table을 Mapping한다.ORM : Object - Relational Mapping(객체 관계 매핑)객체와 관계형 데이터베이스의 데이터를 매핑하는 기술ORM 프레임워크가 객체와 데이터베이스 중간에서 매핑객체와 테이블을 매핑하여 패러다임 불일치 문제 해결JPA 동작JPA는 애플리케이션과 JDBC 사이에서 동작한다.JPA는 JDBC API를 사용하여 데이터베이스와 데이터를 주고받게 된다.JPA를 사용하는 이유기존의 개발 방식은 SQL 중심적인 개발이였다.이런식의 개발은 직접 SQL문을 작성해야 DB에 접근할..
IoC & DI
·
TIL
IoC (Inversion of Control)란 ?IoC란 제어의 역전이라 부른다제어의 역전이란 메서드나 객체의 호출 작업을 개발자가 아닌 외부에서 결정되는 것을 의미한다.객체의 의존성을 역전시켜 객체 간의 결합도를 줄이고 유연한 코드를 작성할 수 있게하여가독성 및 코드 유지 보수를 편하게 할 수 있게 한다. DI (Dependency Injection)란 ?DI란 의존성 주입이라 부르며 객체를 직접 생성하는게 아닌 외부(IoC 컨테이너)에서 생성한 후 주입시켜주는 방식이다.DI를 사용한다면 의존성이 줄어들고 가독성이 높아지며 코드의 재사용성이 높아진다는장점이 있습니다. 의존성 주입 방식으로는 3가지가 있다.생성자 주입Set 메서드를 이용한 주입필드 주입 이 3가지 중에서 스프링에서 권장하는 의존성 주..