일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- caching
- 연관관계
- cache
- 의존관계
- 웹
- 코딩
- 전략패턴
- 봇
- Sprign
- redis
- java
- 백엔드
- backend
- jpa
- 프로그래밍
- 다자인패턴
- 웹개발
- IT
- Web
- 자바
- 집합관계
- Programming
- 객체지향
- OOP
- 클래스다이어그램
- 디자인패턴
- spring data jpa
- 개발
- Spring
- 서버개발
- Today
- Total
목록Programming (5)
괴발나라

해당 글은 강대명님의 "우아한레디스" 강연을 참조해 쓴 글입니다. (https://www.youtube.com/watch?v=mPB2CZiAkKM&t=2051s) 내용에 오류가 존재할 수 있으니 참고 바라며 건설적인 지적은 정말 환영하겠습니다 😀 Redis Redis는 메모리를 사용하는 키-값 데이터 저장소이다. 싱글쓰레드로 동작하기 때문에 연산에 Atomic함이 보장된다. 여러 활용 방안이 있다고 하는데, 현재 필자가 개발중인 서비스에서는 캐싱을 위해 사용한다. Redis 활용 시 크게 세가지를 주의해야 한다고 한다. 1. 메모리 관리 - Redis는 인메모리 데이터 저장소이기 때문에, 메모리 관리가 중요하다. 2. O(N) 명령어 주의 - Redis는 싱글쓰레드로 동작하기 때문에 실행 시간이 긴 명령..

N + 1 문제 A, B 엔티티 = 1:N 관계 A 엔티티는 B엔티티와 @OneToMany(fetch=FetchType.EAGER) 로 관계 맺어져 있음. em.find(A.class, 1L); 실행 -> JOIN 쿼리 한번으로 A, B 둘다 조회함 JPQL로 select a from A a 실행 시 select * from a 실행 JPA에서 A와 B가 FetchType.EAGER로 관계돼있는 것을 확인 (B도 전부 가져와야함) 조회된 A가 10개의 B와 관계 맺어져 있다면 해당 B 조회하는 쿼리 10번 실행됨 -> 성능 저하 대안 일반적으로 FetchType을 LAZY로 설정한 뒤 fetch join을 사용하는게 좋다고 한다. FetchType.LAZY : B의 실제 값을 사용할때 B에 대한 sele..

낙관적 락 & 비관적 락 낙관적 락 JPA가 제공하는 버전 관리 기능 사용 (@Version) 즉, 애플리케이션 단에서 구현된 락 엔티티의 버전과 DB의 버전이 다르면 예외 발생 비관적 락 데이터베이스가 제공하는 락 기능 사용 락 걸렸을때 타임아웃 설정 가능 ex) select for update 용도 -> JPA는 DB 트랜잭션 격리수준을 READ COMMITED 정도로 가정하나, 더 높은 격리 수준이 필요할때 사용 JPA 락 옵션 (javax.persistance.LockModeType) NONE 락 X OPTIMISTIC 낙관적 락 OPTIMISTIC_FORCE_INCREMENT 낙관적 락 + 버전정보 강제 증가 PESSIMISTIC_READ 비관적 락, 읽기 락 PESSIMISTIC_WRITE 비..

트랜잭션의 격리 수준과 문제점 문제점 DIRTY READ 세션 A : 로우 업데이트 중 .. 세션 B : 업데이트 중인 로우 조회 세션 A : 로우 수정 롤백 ! 세션 B : 조회했던 로우가 실제로 존재하지 않는 로우가 되어버림. .. NON-REPEATABLE READ 세션 A : 로우 조회 중 .. 세션 B : 같은 로우 수정 & 커밋 세션 A : 로우 다시 조회하면 결과가 다름 .. PHANTOM READ 세션 A : 여러 로우 조회 중 .. 세션 B : 로우 추가 ! 세션 A : 로우들 다시 조회하면 결과에 하나가 추가됨 .. 격리 수준 READ UNCOMMITED DIRTY READ, NON-REPEATABLE READ, PHANTOM READ 허용 READ COMMITED NON-REPEATA..

객체 지향 시스템 안에서는 여러 클래스들이 서로 긴밀한 관계를 맺으며 기능을 수행한다.클래스들은 다양한 방법으로 다른 클래스들과 관계를 맺는다.이 관계들의 종류에는 여러가지가 있는데,이번에는 비슷하면서도 다른 연관 관계와 의존 관계의 차이에 대해서 설명한다.연관관계와 의존관계의 공통점이 두 관계는 모두 한 클래스가 다른 클래스의 기능을 사용할 때를 나타낸다.이해가 잘 되지 않는다면, 실세계의 예시를 통해 이해해보자!당신은 친구에게 문자를 보내고 싶다.친구에게 문자를 보내려면 핸드폰을 사용해야 한다.구체적으로는 핸드폰의 문자 전송 기능을 사용해야 한다.당신은 핸드폰과 연관관계 혹은 의존관계를 맺는 것이다.당신이 친구에게 문자를 보내는 상황을 코드로 작성하면 다음과 같을 것이다.// 당신class Perso..