| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- list 컬렉션
- 혼자 공부하는 C언어
- stream
- Stack
- C 언어 코딩 도장
- 메모리구조
- datastructure
- coding test
- JSON
- buffer
- s
- Graph
- insertion sort
- C programming
- Serialization
- 윤성우 열혈자료구조
- 알기쉬운 알고리즘
- Algorithm
- 이스케이프 문자
- 윤성우의 열혈 자료구조
- ㅅ
- 이것이 자바다
- R
- Selection Sorting
- Today
- Total
목록Server (103)
Engineering Note
fetch join을 사용하는 이유fetch join은 JPA에서 지연로딩으로 설정되어 있는 연결된 엔티티를 지연로딩으로 조회하지 않고 한 번에 조회하기 위해 사용. fetch join의 한계일대다 컬렉션으로 연관관계를 맺고 있는 엔티티의 경우 페이지네이션이 불가능하다. 왜 페이지네이션이 적용이 안되나?RDBMS는 두 개의 테이블을 조인할 때, Cartesian Product(카테시안 곱)이 일어나는데 이때 데이터 중복이 발생한다. 예를 들면, 하나의 게시글에 3개의 댓글이 달렸다고 할 때, Post(게시글 테이블)과 Comment(댓글 테이블)을 조인하면 3개의 Row가 생긴다. Post 테이블post_idtitle1JPA 공부중 Comment 테이블comment_idpost_idcontents11..
분산 트랜잭션 처리 패턴- 여러 개읜 분산된 서비스를 하나의 일관된 트랜잭션으로 묶는 것 분산 트랜잭션 처리를 위한 전통적인 방법- 2단계 커밋- 원자성을 유지하기 위해 분산 데이터베이스 트랜잭션에 포함돼 있는 모든 노드가 커밋(commit)되거나 롤백(rollback)하는 메커니즘- 단점 : 각 서비스에 잠금(lock in)이 걸려 발생하는 성능 문제 탓에 효율적인 방법이 아니다. 사가 패턴- 일관성 유지가 필요한 트랜잭션을 모두 묶어 하나의 트랜잭션으로 처리하는 것이 아니라, 각 로컬 트랜잭션으로 분리해 순차적으로 처리하는 방법.- 롤백이 필요한 경우 보상 트랜잭션으로 데이터의 일관성을 유지한다. 보상 트랜잭션- 어떤 서비스에서 트랜잭션 처리에 실패할 경우 그 서비스의 앞선 다른 서비스에서 처리..
고아 객체JPA에서 부모 엔티티와 연관관계가 끊어진 자식 엔티티. 참조가 제거된 엔티티 고아 객체 제거부모 엔티티와 연관관계가 끊어진 자식 엔티티를 자동으로 삭제하는 기능. 또는 부모가 제거되면 자식이 제거되는 기능(부모를 제거하면 자식은 참조가 끊기기 때문. CascadeType.REMOVE 설정과 같은 역할을 함.)이 기능을 사용하면 부모 엔티티의 컬렉션에서 자식 엔티티의 참조만 제거할 때 자식엔티티가 삭제된다.참조하는 곳이 하나일 때만 사용할 수 있다. => @OneToOne, @OneToMany에만 사용할 수 있다. //예제 8.19 고아 객체 제거 기능 설정@Entitypublic class Parent { @Id @GeneratedValue private Long id; @OneToMan..
8.4 영속성 전이 CASCADE부모의 엔티티를 저장할 때 자식 엔티티도 저장할 것인지 설정하게 해주는 기능 8.4.1 영속성 전이: 저장 //예제 8.14 부모 엔티티@Entitypublic class Parent { @Id @GeneratedValue private Long id; @OneToMany(mappedBy = "parent") private List children = new ArrayList();}//예제 8.15 자식 엔티티@Entitypublic class Child { @Id @GeneratedValue private Long id; @ManyToOne private Parent parent;} 영속성 전이 설정을 하지 않고 Entity를 저장하는 예제private stat..
Spring AOP(Aspect-Oriented Promgramming)프레임워크가 메서드 메서드 호출을 가로채고 그 메서드의 실행을 변경할 수 있는 방법 AOP가 사용되는 예- 트랜잭션 Self-Invocation 이슈- 클래스 내부에서 메서드가 자기 자신의 다른 메서드를 호출하면서 AOP가 적용되지 않는 문제
주문내력 조회 기능 구현 과정 중 발생한 N+1문제 해결과정을 정리한 글입니다. 문제 정의 JPA 사용시 연관관계가 복잡한 Entity N+1문제네트워크 오버헤드 및, 과도한 데이터베이스 쿼리로 인한 데이터베이스 부하 증가페이지네이션 문제, 다수의 데이터 조회시 필요한 페이징처리에서 일대다 조인으로 발생하는 Cartesian Product 문제.Order 기준 페이징 처리와 OrderItem 기준 페이징 처리 방식이 사용자에게 보여지는 데이터의 신뢰성 문제가 발생 주문 내역 조회는 여러 정보를 한 번에 보여주어야 하는 기능으로 Order Entity, Item Entity, OrderItem Entity, ItemImg Entity의 정보를 조합해서 응답해주어야 합니다. 이 과정에서 발생한 N+1문제..
Query ParameterURL 뒤에 물음표와 함께 붙는 키-값(key-value)쌍입니다. 여러개의 Query Parameter 전달 방법여러개의 Query Parameter를 전달하는 방법은 파라미터 사이에 앰퍼센드(&)를 추가해서 쿼리 파라미터를 구분해서 전달 할 수 있습니다. 4가지의 Query Parameter를 전달하는 예시paymentType, orderId, paymentKey, amount Query Parameter 사용 용도API 요청API 엔드포인트에 Query Parameter를 붙여서 결과를 조회하거나, 필터링하는데 사용합니다.토스페이먼츠 API에서는 Query Parameter로 조회기간(startDate, endDate)을 설정해서, 특정 기간동안의 거래 결과를 요청받을..
낙관적 락(Optimistic Lock)어플리케이션 레벨에서 동시성 문제를 해결할 수 있는 방법. DB 충돌 상황에서 데이터를 수정할 때 데이터에 대한 버전을 관리하여 다른 트랜잭션이 값을 수정할 수 없게 관리하는 제어 방법. 이 방법은 DBMS가 자체적으로 제공해주는 락 방법이 아니라, 데이터베이스의 version 컬럼을 추가해, row 값을 변경할 때 기록함으로서 read 시점과 write 시점의 version 변경을 체크하여 version이 변경되었다면 데이터를 수정하지 않음으로서 동시성 문제를 해결합니다.