BaseEntity의 작성
·
JPA 게시판/JPA
수정되거나, 생성된 날짜를 기록하는 컬럼이 중복되는데, 엔티티마다 이것을 작성하는 것보다,BaseEntity를 작성해서, 중복되는 컬럼을 처리해보자 //BaseEntity.java @MappedSuperclass @EntityListeners(value = AuditingEntityListener.class) @Getter abstract class BaseEntity { @CreatedDate @Column(name = "regdate",updatable = false) private LocalDateTime regDate; @LastModifiedDate @Column(name = "moddate") private LocalDateTime modDate; }@MappedSuperclass와 @Enti..
@ManyToOne의 설정방법
·
JPA 게시판/JPA
@Entity @Getter @ToString(exclude = "memberId")//꼭, 다른 엔티티에 의존하는 컬럼을 tostring에서 제외시킬것 public class Order extends BaseEntity{ @Id @GeneratedValue @Column(name = "order_id") private Long orderId; //targetEntity로 어떤 엔티티에 의존할지 설정하고, fetch로 지연조회 설정할것 //지연조회를 설정하지 않으면, 멤버가 필요하지 않은 상황에서도 함께 조회하게 됨 //그래서 지연 조회를 설정하고 필요할 때만 즉시조회 설정하는게 성능상 이득임 @ManyToOne(targetEntity = Member.class,fetch = FetchType.LAZY)..
SpringJpa리포지토리의 작성
·
JPA 게시판/JPA
단순한 쿼리는 SpringJpa에서 제공해주는 JpaRepository 를 사용하기로 했다.public interface MemberJpaRepository extends JpaRepository { }여기에는 DI 등록용 @Repository 어노테이션을 붙일 필요가 없다. 상속받고있는 클래스에 이미 있기때문이다. 테스트를 작성한다. @SpringBootTest @Transactional @Commit class MemberJpaRepositoryTest { @Autowired private MemberJpaRepository memberJpaRepository; @Test public void 멤버저장테스트(){ IntStream.rangeClosed(1,100).forEach(i->{ Member ..
연관관계 설정
·
JPA 게시판/JPA
https://www.youtube.com/watch?v=bEtTpCviSc4&ab_channel=SKplanetTacademy 김영한 선생님의 세미나 내용중 연관관계 매핑에 대한 이야기가 있어서, 그걸 토대로 머리속을 정리해 보려고 한다. 테이블과 똑같이 연관관계를 설정했을 경우 (ID-외래키만 가져오기)테이블에 FK만 가져와서 TeamId 이런식으로 저장하는 방식객체를 참조하기 보다 외래키를 가져와서 저장하고 있는 방식이다.조회를 할 때, 두번 따로 조회를 해야한다(쿼리가 두 번 나간다.)데이터지향적인 방법이다(객체지향적인 방법이 아니다.) 단방향 매핑위의 TeamId를 Team타입의 객체로 변경사실상 데이터베이스는 위와 같은데, 객체를 참조하고 있다는게 다른 점이다.위에서 teamId를 찾아서 db..
@ModelAttribute 기본값 설정하기
·
SPRING
@ModelAttribute는 form이나, 쿼리스트링에 담긴 키 밸류 값을 dto 형식으로 받기위해 존재한다.그러나, 가끔 쿼리에 널값이나 빈값이 들어갈 때가 존재한다. 그럴때를 위해서 기본값을 지정해야하는데,DTO의 생성자에 기본값을 지정하면, null이 들어갈 때가 있다.(지원하지 않는 타입의 변수값이 들어감)ex) int값의 변수 name에 문자가 들어가던지, 빈String(””)이 들어갈 때, null로 처리되게 된다.이 때, Setter에서 if 문을 통해, null값이 들어왔을때의 기본값을 지정해주면, 빈값이 들어오더라도, 기본값으로 설정할 수 있고, 굳이 항목 하나하나 defaultValue를 입력하고 변수를 나눠줄 필요없이 dto로 받을 수 있게 된다. Uploaded by N2T
스프링 시큐리티와 jwt, Oauth2
·
JPA 게시판/Spring Security
스프링 시큐리티를 위한 사전 지식세션유저가 웹 브라우저를 키고 주소창에 www.naver.com처럼 입력(GET요청)서버에서 메서드에 따라서 html파일을 반환해줌html파일에는 헤더와 바디가 있는데, 헤더에 쿠키라는 것을 넣어서 반환해줌(SESSION ID에 아이디가 담겨서 옴)클라이언트의 두 번째 요청부터는 그 세션아이디가 요청에 담겨서 가게됨서버는 돌대가리라서 세션아이디가 없으면 처음왔는지 두번왔는지 기억을 못함 ㅋㅋ서버는 세션아이디를 발급할 때마다 그 목록을 생성해야함(누가 어떤 세션아이디를 가지고있는지 알기위함) 세션이 제거되는 때는 서버에서 제거하거나, 사용자 브라우저가 전부 종료되거나, 시간이 지나면 삭제된다. 단점클라이언트가 엄청 많을때 로드밸런싱이 일어나는데, 이때 서버는 여러개가 된다...
프로젝트 작성시 순서 정리
·
SPRING
내가 작업할 때 생각나는 것부터 하는 경향이 있다.주먹구구식에서 탈피하기 위해 순서를 정해둘 생각이다.지금은 JPA에 다시 익숙해지기 위해서 연습 프로젝트를 깃헙에 생성중인데,생성한 깃헙의 커밋 순서를 보고 정리한 후, 그 순서를 보면서 프로젝트를 만들어나갈 예정이다. 순서가 일단 정해저있으면 어떤걸 만들지 라는 생각을 하지 않아도 되고, 즉 코드를 쓸 때 좀 더 코드에만 집중할 수 있기 때문에 순서를 정하고 작업해 나가기로 했다. https://github.com/cvcvcx/jpaPrectice002이 깃헙 링크의 작업 순서를 정리한다.intelliJ의 설정에 있는 Build - gradle - Java 설정을 해주어야 한다. (boot3.0 버전부터 자바17이전버전지원안함)따라서, gradle에 j..
데이터베이스 설계
·
JPA 게시판/JPA게시판 만들기
일단 이전에 설계했던 데이터베이스는 아래와 같다.상품과 멤버, 오더,카트아이템 우선적으로 구현하기로 했다.오더와 카트아이템의 관계는 주문하나에 여러개의 상품이 있을 수 있기 때문에, 일대 다로 설정했다. 카트아이템은 상품을 구매한 것이므로 1:1관계가 된다. 상품이 사이즈를 바로 일대 다 관계로 만들고 있는데, 색상이 들어갈 경우에는 달라진다.상품이 여러 색상을 가질 수 있으므로, 상품과 색상이 1대다 관계가 된다.그리고, 색상에 여러 사이즈가 있으므로, 색상과 사이즈가 1:N 관계가 된다.  상품은 카테고리와 다대 다 관계가 형성된다. 왜냐하면 쇼핑몰의 카테고리에 여러 상품이 들어있고,상품은 여러 카테고리에 속할 수 있기 때문이다. 위와 같은 형태가 되도록 엔티티를 구성한다.BaseEntity의 작성 ..