| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- s
- C programming
- 이스케이프 문자
- datastructure
- Stack
- ㅅ
- 알기쉬운 알고리즘
- list 컬렉션
- buffer
- coding test
- 혼자 공부하는 C언어
- Selection Sorting
- Graph
- JSON
- stream
- insertion sort
- 윤성우의 열혈 자료구조
- Serialization
- 윤성우 열혈자료구조
- 이것이 자바다
- 메모리구조
- C 언어 코딩 도장
- Algorithm
- R
- Today
- Total
목록Tech (603)
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..
**조회 시점에 실제로 데이터베이스 수준의 락을 거는 방식은 '비관적 락(Pessimistic Lock)'**입니다. 낙관적 락은 그 이름과 달리 실제로는 '락'을 걸지 않는다는 점이 가장 큰 차이점이에요.혼동하기 쉬운 두 개념을 명확하게 정리해 드릴게요.1. 비관적 락 (Pessimistic Lock)"데이터 수정이 빈번할 거야. 충돌이 날 게 뻔하니 미리 문을 잠가두자!"* 작동 방식: 데이터를 조회할 때 SELECT ... FOR UPDATE 같은 구문을 사용하여 데이터베이스 로우(Row)에 직접 락을 겁니다.* 특징: 다른 트랜잭션은 해당 락이 풀릴 때까지 대기해야 합니다.* 장점: 데이터 무결성을 강력하게 보장하며, 충돌이 잦은 환경에서 재시도 로직이 필요 없습니다.* 단점: 성능(동시성)이 저..
Spring AOP(Aspect-Oriented Promgramming)프레임워크가 메서드 메서드 호출을 가로채고 그 메서드의 실행을 변경할 수 있는 방법 AOP가 사용되는 예- 트랜잭션 Self-Invocation 이슈- 클래스 내부에서 메서드가 자기 자신의 다른 메서드를 호출하면서 AOP가 적용되지 않는 문제
캐시는 '속도 차이'를 줄이기 위해, 버퍼는 '처리 속도 불일치'를 해결하기 위해 존재 1. 캐시(Cache)데이터에 더 빠르게 접근하기 위해 사용하는 임시 저장소 목적 동일한 데이터를 반복해서 읽을 때 멀리 있는 저장소까지 가지 않고, 가까운 곳에서 빠르게 가져오는 것(성능 향상)한 번 읽은 데이터나 자주 쓰일 것 같은 데이터를 미리 복사해둡니다.예시 : 브라우저 웹 캐시, CPU 캐시(L1, L2, L3) 2. 버퍼(Buffer)두 장치 사이에서 데이터를 주고 받을 때, 전송 속도의 차이를 완충하기 위해 사용하는 임시 공간 목적데이터를 보내는 쪽과 받는 쪽의 속도 차이를 조절하여 데이터가 유실되거나 장치가 대기하는 시간을 줄이는 것(흐름 제어)버퍼는 비동기적(Asynchronous) 처리를 가능하게..
동시성 제어테스트를 위한 멀티쓰레드 코드 흐름 파악하기private int 주문_동시요청(int 요청개수) throws InterruptedException { ExecutorService executor = Executors.newFixedThreadPool(10); CountDownLatch latch = new CountDownLatch(요청개수); AtomicInteger exceptionCount = new AtomicInteger(0); for (int i = 0; i { try { orderService.placeOrder(userId, productId, 1); } catch (OutOfStockExc..