분류 전체보기99 JPA 즉시 로딩, 지연 로딩 즉시 로딩, 지연 로딩 JPA를 사용하면 즉시 로딩과 지연 로딩을 선택해서 사용할 수 있습니다. fetch = FetchType.LAZY = 지연 로딩 fetch = FetchType.EAGER 둘의 차이점은 즉시 로딩은 연관관계로 매핑되어 있는 상황이라면 join을 통해서 한 번의 SELECT를 통해서 데이터를 가져옵니다. 반대로 지연 로딩은 하나의 객체만을 SELECT를 통해서 데이터를 가져오고 연관관계로 매핑되어 있는 객체는 Proxy 객체로 가져오고 해당 객체에 대해 getter 메서드등을 통해서 값을 가져올 때 SELECT를 날려서 데이터를 가져옵니다. 지연 로딩으로 데이터를 가져올 시 주의할 점 회원의 주요 정보가 담겨있는 User 객체와 부가 정보가 담겨있는 UserDetail은 OneToO.. DB/JPA 2023. 1. 20. @PrePersist... Entity를 DB에 적용하기 전, 후로 커스텀 콜백을 요청하는 어노테이션이 있습니다. @PrePersist @PostPersist @PostLoad @PreUpdate @PostUpdate @PreRemove @PostRemove 어노테이션 이름으로 유추해 보아도 무슨 역할을 하는지 알 수 있습니다. 하나씩 살펴보겠습니다. @PrePersist & @PostPersist @Slf4j @Entity @Builder @Getter @Table(name = "postMst") public class Post extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long postCode; @NotNull .. DB/JPA 2023. 1. 14. JPA Auditing Auditing? 우리가 JPA 등 ORM을 사용하여 Entity 객체를 DB 테이블에 매핑할 때 무조건 필요하거나 다른 객체에서도 매핑이 필요한 컬럼들이 존재할 수 있습니다. 대표적으로 생성날짜, 수정날짜등이 있습니다. 이러한 생성일/수정일/생성자/수정자를 자동화되게끔 해주는 것이 JPA Auditing입니다. JPA에서 사용하기 위해서는 @EnableJpaAuditing 어노테이션이 필요합니다. 보통 Springboot를 실행시키는 클래스에 작성합니다. @EnableJpaAuditing @SpringBootApplication public class InstagramApplication { public static void main(String[] args) { SpringApplication.run.. DB/JPA 2023. 1. 7. JPA @Entity @Entity @Builder @Getter @Table(name = "postMst") public class Post { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long postCode; @NotNull @Column(name = "postContent") private String content; @Temporal(TemporalType.TIMESTAMP) private Date createDate; @Temporal(TemporalType.TIMESTAMP) private Date updateDate; } @Table 엔티티와 매핑할 테이블을 지정합니다. 생략하면 매핑한 엔티티의 이름을 테이블 이름으로 사용합니다. @Ent.. DB/JPA 2023. 1. 6. Javascript this Binding 자바스크립트를 하면서 this를 어떻게 사용하면 원하는 값이 나오질 않고 어떻게 하면 나올 때가 있어 찾아보고 정리를 했습니다. this Binding 함수가 호출되는 방식에 따라 자바스크립트에서 this가 참조하는 것이 다릅니다. 이것을 this 바인딩이라고 합니다. Defailt Binding (기본 바인딩) 기본적으로 this는 전역객체를 가리킵니다. node환경에서는 global 객체를, 브라우저에서는 window 객체를 가리킵니다. 또한 함수 내부에서 this를 호출하여도 window 객체를 가리킵니다. console.log(this);// window 객체 let a = 10; window.b = 20; function log() { console.log(this.a);// undefined .. Javascript 2023. 1. 4. Javascript 와 JQuery 이번 인스타그램 클론 코딩을 진행하면서 JQeury를 사용해보면서 JQeury문법을 익히며 사용할 수 있게끔 학습 목표로 잡았습니다. 하지만 처음에는 어디부터가 Javascript이고 어디까지가 JQeury인지 명확하게 구분을 짓지 못하여 찾아보고 사용해 보며 정리를 하려고 합니다. Javascript 자바스크립트는 웹브라우저에서 작동하는 스크립트언어입니다. 동적인 화면 구현과 기능 등을 구현함에 있어서 필요로 합니다. JQeury 제이쿼리 또한 자바스크립트입니다. 하지만 다른 점이라면 자바스크립트로 자주 사용하는 기능들을 함축적인 코드로 구현할 수 있게끔 만들어진 라이브러리입니다. 자바스크립트를 사용하면 DOM객체를 가져와서 작업을 하는 경우가 많은데 이러한 DOM작업을 쉽게 처리할 수 있도록 도움을 .. Javascript 2023. 1. 3. JPA DTO Mapping JPA를 사용하면서 원하는 데이터를 받기 위해서 NativeQuery를 작성하고 싶었는데 객체가 연관관계가 포함이 되어있어서인지 필요 없는 컬럼들도 추가를 해줘야 하는 상황이 되어버려서 다른 방법을 찾는 도중에 DTO로 바로 Mapping 시킬 수 있는 방법을 찾았습니다. @SqlResultSetMapping, @NamedNativeQuery 를 이용해서 DTO로 받기 @SqlResultSetMapping( name = "followingListMapping", classes = @ConstructorResult( targetClass = ReadFollowListResponseDto.class, columns = { @ColumnResult(name = "followCode", type = Intege.. DB/JPA 2022. 12. 29. JPA 더티 체킹(Dirty Checking) 이번에 Mybatis 대신해서 JPA로 개인 프로젝트를 진행하려고 해서 JPA에 대해서 공부 중입니다. JPA는 Mybatis와 다르게 ORM(Object-Relational-Mapping)입니다. ORM(Object-Relational-Mapping)? ORM은 객체(Object)와 DB 테이블을 Mapping 함으로써 RDM 테이블을 객체지향적으로 관리할 수 있게 해 줍니다. 객체와 RDB의 중간에서 ORM이 매핑을 해주기 때문에 별도의 쿼리문을 작성하지 않습니다. 하지만 복잡한 쿼리문이 필요한 경우에는 직접 작성해서 사용 가능합니다. Mybatis는 SQL Mapper로 객체를 매핑하는 것이 아닌 쿼리를 매핑합니다. 즉 우리가 작성한 쿼리문이 필요합니다. 더티 체킹(Dirty Checking)? J.. DB/JPA 2022. 12. 25. WITH RECURSIVE 쿼리 성능 개선 https://dhmk47.tistory.com/91 WITH RECURSIVE 쿼리로 구현한 대댓글 WITH RECURSIVE 쿼리를 이용해서 게시글의 대댓글을 구현했습니다. 기존에 등록되어있는 댓글 목록 응답받은 데이터입니다. haveReplyFlag의 부울값을 통해서 답글이 있는 댓글인지 없는 댓글인지 구분 dhmk47.tistory.com 위의 글에서 사용한 쿼리문을 사용하기 전에 작성한 쿼리문이 있습니다. 처음에는 그 쿼리문을 사용하다가 성능 문제가 생길 것 같다는 생각이 들어 고민하면서 쿼리문을 성공적으로 수정하였습니다. 처음 작성한 쿼리문 WITH recursive CTE AS( select id, user_code, COMMENT, parent_id, parent_user_code, cre.. DB/SQL 2022. 12. 22. WITH RECURSIVE 쿼리로 구현한 대댓글 WITH RECURSIVE 쿼리를 이용해서 게시글의 대댓글을 구현했습니다. 기존에 등록되어있는 댓글 목록 응답받은 데이터입니다. haveReplyFlag의 부울값을 통해서 답글이 있는 댓글인지 없는 댓글인지 구분 지었습니다. 답글 보기를 눌렀을 때 대댓글 목록을 보여줍니다. 대댓글은 누구에게 답글을 달았는지 보여주기 위해서 상위 댓글의 닉네임을 가져와서 보여줍니다. 대댓글에 답글 달기 대댓글에 답글을 등록하면 상위 댓글의 하위로 들어가서 보여줍니다. 쿼리문 WITH recursive CTE AS( select id, user_code, COMMENT, parent_id, parent_user_code, create_date, 0 AS depth, CONCAT(path) AS path from commen.. DB/SQL 2022. 12. 22. Unit Test - Repository https://dhmk47.tistory.com/88 Unit Test - Controller Web Layer 중 컨트롤러 영역에 대한 Unit Test를 해보겠습니다. Given-When-Then 패턴으로 사용합니다. Given 테스트에서 구체화하고자 하는 행동을 시작하기 전에 테스트 상태를 설명하는 부분 When 구체화 dhmk47.tistory.com https://dhmk47.tistory.com/89 Unit Test - Service 저번글에 이어서 이번에는 Service 계층의 단위 테스트를 진행하겠습니다. 진행 과정 @RequiredArgsConstructor @Service public class ProductService { private final ProductRepository p.. Spring boot/기본 정리 2022. 12. 21. Unit Test - Service https://dhmk47.tistory.com/88 Unit Test - Controller Web Layer 중 컨트롤러 영역에 대한 Unit Test를 해보겠습니다. Given-When-Then 패턴으로 사용합니다. Given 테스트에서 구체화하고자 하는 행동을 시작하기 전에 테스트 상태를 설명하는 부분 When 구체화 dhmk47.tistory.com https://dhmk47.tistory.com/90 Unit Test - Repository https://dhmk47.tistory.com/88 Unit Test - Controller Web Layer 중 컨트롤러 영역에 대한 Unit Test를 해보겠습니다. Given-When-Then 패턴으로 사용합니다. Given 테스트에서 구체화하고자 .. Spring boot/기본 정리 2022. 12. 21. 이전 1 2 3 4 ··· 9 다음