| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- BFS
- 백준
- Algorithm
- PYTHON
- jpa
- javascript
- nosql
- 트러블슈팅
- spring
- 운영체제
- CS
- DFS
- Docker
- Data structure
- CSS
- It
- OS
- db
- 자료구조
- redis
- 프로그래머스
- HTML
- 영속성 컨텍스트
- 트랜잭션
- websocket
- 데이터베이스
- mysql
- 완전탐색
- 알고리즘
- java
- Today
- Total
목록DB (12)
If at first you don't succeed, try again
* 개요저번 글에 lock에 대해 개념과 실습을 진행했었다. [DB] Lock의 개념 및 테스트이번 글에서는 비관적 락과 낙관적 락에 대해 정리할 예정이다.예시는 좋아요 수와 관련하여 들도록 하겠다! * 비관적 락(Pessimistic Lock)비관적 락은 데이터 접근 시에 항상 충돌이 발생할 가능성이 있다고 가정한다.(비관적 관점)데이터를 보호하기 위해 항상 락을 걸어 다른 트랜잭션 접근을 방지한다.다른 트랜잭션은 락이 해제될 때까지 대기하는데, 락을 오래 점유하면 성능 저하 또는 deadlock으로 인한 장애가 발생한다.지난 글에서 살펴봤던 record lock은 비관적 락에 해당한다.비관적 락을 구현할 수 있는 방법은 크게 2가지로 나뉜다. * 비관적 락 - 방법 11. 트랜잭션 시작transact..
* 개요좋아요 수와 관련해서 개발 공부를 진행하다가 동시성 문제에 대해 고민을 하게 되었다.동시성 문제를 처리하는 것에는 다양한 방법이 있는데, 이 중 락(lock)에 대해 공부한 것을 정리하고자 한다. * Record LockRecord(=Row) : 테이블의 행 데이터Lock(잠금) : 여러 프로세스 또는 스레드가 자원에 동시에 접근하는 경쟁 상태를 방지하기 위해 제한을 거는 것Record Lock(=Row Lock) : 레코드에 락을 거는 것, 동일한 레코드를 동시에 조회 또는 수정할 때 데이터의 무결성을 보장하고 경쟁 상태를 방지하고자 하는 것 * Record Lock 테스트lock 테스트를 위한 lock_test 테이블을 만들고, (id = 1234, content = 'test') 레코드를 삽..
* 개요타 RDBMS보다 NoSQL인 redis의 속도가 훨씬 빠르다길래 궁금해서 한번 실습을 해보았다.Framework는 Spring Boot를 사용, 더미 데이터는 100만 건을 넣었고, 간단한 게시글 조회로 실습을 진행하였다.조회 속도 확인은 Postman을 통해 진행하였다. * Repository 구현import org.springframework.data.domain.Page;import org.springframework.data.domain.Pageable;import org.springframework.data.jpa.repository.JpaRepository;import org.springframework.stereotype.Repository;@Repositorypublic inter..
* 개요https://cyr0331.tistory.com/99 [DB] Index 실습(대용량 데이터 처리)* 개요얼마 전 대용량 시스템 공부를 진행하면서, DB에 약 700만건의 테스트 데이터를 삽입하였다.그 후 페이징 처리를 하기 위해서 조회를 하였는데, 다음과 같은 결과가 나왔다.select * from articlecyr0331.tistory.com지난 게시글을 통해 Index 실습을 진행하였다.인덱스를 생성함으로써 약 700만개의 데이터를 조회하는 시간을 17초에서 0.02초로 줄일 수 있었다.그런데 과연 인덱스를 사용함으로써 문제는 전부 다 해결되었을까? * 뒷 페이지 조회문제가 전부 해결됐는지 확인하기 위해 이번엔 50000페이지를 조회해보도록 하겠다.select * from article ..
* 개요얼마 전 대용량 시스템 공부를 진행하면서, DB에 약 700만건의 테스트 데이터를 삽입하였다.그 후 페이징 처리를 하기 위해서 조회를 하였는데, 다음과 같은 결과가 나왔다.select * from article where board_id = 1 order by created_at desc limit 30 offset 90;1번 게시판의 91번 게시글에서 120번 게시글까지 가져오는 데에 17초 이상이 걸린다.실제로 사용자가 페이지를 조회하고자 한다면 불편함을 토로할 것이다.explain 명령어를 통해 쿼리 플랜을 확인해보았다.explain select * from article where board_id = 1 order by created_at desc limit 30 offset 90;쿼리 타..
* Redis 캐싱Redis 캐싱이란, redis 캐시에서 접근해서 데이터를 빠르게 가져오는 방식이다. * Cache Aside 전략Cache Aside 전략은 look aside 전략 또는 lazy loading 전략이라고 부른다.예시를 통해 cache aside 전략의 작동 방식을 알아보자.- 게시판 서비스 배포처음 게시판 서비스를 배포했기 때문에 DB와 redis에는 데이터가 저장이 되어있지 않다.user가 들어와 게시글 작성을 함으로써 데이터를 저장한다. 이 데이터는 DB에 저장된다. 여기서 주의할 점은 redis에는 저장이 되지 않는다는 점이다.사용자가 데이터를 조회하려고 요청한다. 이 때, DB로부터 조회를 하기 전, redis에 데이터가 존재하는지 먼저 확인한다.redis에 데이터가 없는 것..
* 데이터 저장 명령어 set# set [key 이름] [value]$ set member:name "James Brook" # 띄어쓰기를 해서 저장하려면 ""으로 묶어줘야 함$ set member:nickname wanda * 데이터 조회 명령어 get# get [key 이름]$ get member:name$ get member:nickname * 저장된 모든 key 조회$ keys * * key를 통해 데이터 삭제# del [key 이름]$ del member:name$ get member:name # 삭제되었는지 확인 * 데이터 저장 시 만료시간(TTL) 정하기Redis는 RDBMS와는 다르게 데이터 저장 시 만료시간을 설정할 수 있다. 즉, 영구적으로 데이터를 저장하지 않고 일정 시간이 되면 데이..
* Redis란?레디스는 "키-값" 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터베이스 관리 시스템이다. 또한 레디스는 데이터 처리 속도가 매우 빠른 In-Memory 기반의 NoSQL 데이터베이스이다. * Redis의 장점레디스는 인메모리에 모든 데이터를 저장한다.따라서 데이터의 처리 성능이 굉장히 빠르다. * Redis의 기능캐싱세션 관리실시간 분석 및 통계메시지 큐지리공간 인덱싱속도 제한실시간 채팅 및 메시징
* 트랜잭션(Transaction)이란?트랜잭션은 데이터베이스에서 논리적인 작업의 단위를 의미한다. 여러 작업이 하나의 단일 작업처럼 수행되도록 보장하여 데이터의 일관성과 무결성을 유지하는 역할을 한다. * 트랜잭션의 4가지 특성(ACID)원자성 (Atomicity)모든 작업이 완전히 수행되거나 전혀 수행되지 않아야 함중간에 오류가 발생하면 모든 작업이 롤백(Rollback)예: 송금 시, 돈을 보내는 작업과 받는 작업이 모두 성공하거나 둘 다 취소됨일관성 (Consistency)트랜잭션 전후로 데이터베이스의 상태가 일관되어야 함예: 은행 계좌에서 출금 후에도 총 잔액은 변하지 않음격리성 (Isolation)동시에 수행되는 트랜잭션이 서로 영향을 미치지 않도록 보장예: 두 사용자가 동시에 같은 상품을 구..
먼저 https://www.postgresql.org 에 접속한다.그 후 Download 버튼을 입력한다.해당 사진과 같이 자신의 PC에 맞는 운영체제과 버전을 골라 설치하면 된다.다 설치했다면 환경변수 설정을 해야한다.windows 검색창에 "시스템 환경 변수 편집"이라고 검색한다. 검색했다면 이러한 창이 나타나게 될 것이다.환경 변수 버튼을 누른 다음, path 변수를 편집한다. 편집 버튼을 누른다면 이러한 창이 나타난다."새로 만들기" 버튼을 클릭 후 PostgreSQL을 설치한 경로를 입력해주면 된다.필자의 경우에는 C:\Program Files\PostgreSQL\11\bin 이 설치한 경로였다.경로까지 입력했다면 적용을 하고 확인 버튼을 누르면 된다.그 후에는 cmd창으로 가서 잘 설치가 되었..