일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 삭제 이상
- 데이터베이스
- 네트워크
- Kotlin
- Spring
- AWS
- null
- Redis
- ocp
- 3-way handshaking
- 비관적 락
- 스레드 풀
- gatway
- buildSrc
- HTTP
- 자료구조
- 정규화
- 페이지네이션
- JPA
- Kafka
- java
- 캐시 오염
- 자바
- 갱신 이상
- Dirty Checking
- well-know port
- 삽입 이상
- 낙관적 락
- MSA
- DB
- Today
- Total
728x90
목록
728x90
DB (10)
어 나 갱수.

데이터베이스에 접근해서 데이터를 수정할 때 동시에 수정이 일어나게 되면 충돌이 발생하게 됩니다. 충돌이 발생 안 하려면 어떻게 해야 할까요? 저희는 데이터베이스의 락(Lock)을 사용해서 충돌을 방지할 수 있습니다.이러한 동시성 문제는 데이터의 일관성과 무결성을 위협할 수 있습니다. 따라서 동시에 데이터에 접근하려는 다양한 요청들을 잘 제어하는 것은 필수적인 작업입니다. 동시성 제어를 위한 두 가지 핵심적인 방법에 대해 알아보겠습니다.발생할 수 있는 동시성 문제상품 재고 수량이 맞지 않는 경우 사용자 A가 재고가 5개인 상품을 조회하고 재고를 하나 차감하는 트랜잭션을 실행사용자 B가 전체 상품을 조회, 사용자 A가 실행시킨 트랜잭션이 커밋되지 않았기 때문에 5개가 조회사용자 A가 실행한 트랜잭션이 커밋됨..

프로젝트를 하면서 캐싱 기능을 추가해 보기로 했습니다. Spring에서는 @Cacheable, @CachePut, @CacheEvict 어노테이션을 통해서 캐시를 구현할 수 있습니다. Spring에서 캐시를 사용하려면 캐싱 기능을 사용할 스프링부트 애플리케이션에@EnableCaching이라는 어노테이션을 붙여준다. 이 어노테이션을 붙여주면 이제 해당 애플리케이션에서 캐싱 기능을 활성화시켜서 캐시를 통해 데이터를 불러올 수 있습니다.@SpringBootApplication@EnableCachingclass V2Application{ val log = LoggerFactory.getLogger(this::class.java.name)!! @PostConstruct fun timeZone() { TimeZo..

Cache란많은 시간이나 연산이 필요한 일에 대한 결과를 저장해 두는 것한번 읽은 데이터를 임시 저장, 필요에 따라 전송, 갱신, 삭제하는 기술임시로 저장해 두고 같은 데이터를 불러올 때 빠르게 불러옴Cache의 문제점캐시를 사용하게 된다면 데이터 정합성 문제가 발생할 수 있습니다.데이터 정합성문제란 간단하게 말하면 캐시에 있는 데이터의 값과 데이터베이스에 있는 데이터의 값이 다른다는 것을 의미합니다.캐시를 사용하지 않았을 때는 그냥 데이터베이스에서 값을 가져오면 되기 때문에 정합성 문제가 발생하지 않았지만 캐시에 데이터가 있다면 캐시에서 데이터를 가져오기 때문에 캐시와 데이터베이스에 값이 다르다면 데이터 정합성 문제가 발생할 수 있습니다.Cache 전략캐싱 전략은 웹 서비스 환경에서 시스템 성능 향상을..

JOIN JOIN의 종류는 크게 INNER JOIN OUTER JOIN으로 나뉘는데 거기서도 OUTER조인은 LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN으로 구분할 수 있습니다. INNER 조인은 어떤 테이블을 먼저 읽어도 결과가 같기 때문에 MySQL 옵티마이저가 JOIN의 순서를 조절해서 다양한 방법으로 최적화를 수행할 수 있습니다. 하지만 OUTER 조인은 어떤 테이블을 먼저 읽느냐에 따라 결과가 달라지기 때문에 조인 순서를 MySQL 옵티마이저가 선택할 수 없습니다. INNER JOIN A테이블 B테이블 이렇게 두개의 테이블이 있다고 가정하면, INNER JOIN은 A와 B의 교집합을 말합니다. 간단하게 말하면 서로 연관된 내용만 검색하는 조인입니다...

정규화란 ? 정규화는 테이블 간에 중복된 데이터를 허용하지 않기 위해 정해놓은 정의 같은 것입니다. 중복된 데이터를 허용하지 않음으로써 무결성을 유지할 수 있으며, DB의 저장 공간 또한 줄일 수 있습니다. 결과적으로, 정규화를 하는 목적은 데이터들을 조금 더 효율적으로 관리하기 위함입니다. 정규화의 목적 중복을 허용하지 않으며 삽입, 삭제, 갱신 이상의 발생을 감지한다. 데이터를 삽입하거나 수정할 때 릴레이션의 재구성을 최소화하는 것을 목표로 하고 있다. 각 릴레이션에 중복된 종속성을 여러 개의 릴레이션으로 분할한다. 정보의 중복 한 릴레이션에 여러 엔티티의 애트리뷰트들이 존재하면 정보가 중복 저장된다. 저장 공간 낭비 갱신 이상 발생 정규화 과정 정규화는 제1 정규화부터 제5 정규화까지 있지만, 실질..

오늘은 Index에 대해 알아보겠습니다. 인덱스(Index)란 ? 인덱스란 추가적으로 저장 공간을 만들어서 데이터베이스 테이블의 검색 속도를 향상하기 위한 자료구조입니다. 예를 들어 만약 책에서 원하는 내용을 찾는다면 책의 모든 페이지를 하나하나 확인하면서 책의 원하는 내용을 찾는 거는 너무 비효율적인 방법입니다. 이런 비효율을 막기 위해 책의 맨 앞에 목차를 두고 원하는 위치에서 정보를 얻을 수 있도록 하고 있는데요. 정리하면 데이터는 책의 내용, 인덱스는 책의 목차, 데이터의 물리적인 주소는 책의 페이지라고 생각하면 됩니다. 특정 칼럼(필드)에 대한 인덱스를 생성하게 되면 해당 칼럼의 데이터들을 정렬해서 별도의 메모리에 저장합니다. 인덱스를 활용하면 검색속도가 빨라진다는데 어떻게 빨라진다는 걸까요 ?..

안녕하세요, 오늘은 DBCP(데이터베이스 커넥션 풀)에 대해 알아보겠습니다. Client로부터 웹 애플리케이션에 요청이 들어올 때마다 데이터베이스 연결을 수립하고, 해재하는 것은 굉장히 비효율적이라고 생각합니다. 여러 개의 DB Connection을 미리 생성해 놓고, 필요할 때마다 DB Connection을 가져다가 사용하는 방식을 사용한다면 더 효율적인 방식이라고 생각합니다. WAS는 기본적으로 DB Connection이 필요할때 DB Connection을 직접 생성하지 않고 DB Connection Pool에 있는 Connection 객체를 가져다가 사용하고, 다 사용한 Connection 객체는 반환합니다. connection Pool에 대해 다시 정리해 보겠습니다. Connection Pool에..

좋은 데이터베이스를 설계한다. 좋은 데이터베이스를 설계한다는 것은 이상 현상(Anomaly)이 생기지 않도록 고려해 설계하는 것입니다. 이상 현상은 테이블을 설계할 때 잘못 설계해서 데이터를 삽입, 삭제, 수정하는 과정에서 오류가 발생하는 것을 의미합니다. 이상 현상은 갱신 이상(Modification Anomaly), 삽입 이상(Insertion Anomaly), 삭제 이상(Deletion Anomaly)으로 구성됩니다. 위의 사진과 같이 설계한 데이터베이스 테이블이 있습니다. 테이블의 이름은 학생테이블이고 테이블의 필드로는 학번, 이름, 나이, 성별, 강의명, 전화번호 등이 있습니다. 1. 삽입 이상 자료를 삽입할 때 의도하지 않은 자료까지 삽입을 해야 자료를 테이블에 추가가 가능한 현상 강의를 아직..