본문 바로가기

datasource30

[redis] 트랜잭션(Transaction) - 이론편 안녕하세요. 오늘은 redis의 트랜잭션에 대한 이론에 대해서 알아보도록 하겠습니다. 그리고 이후 포스팅에서 실제로 Spring Data Redis를 이용하여 redis의 트랜잭션을 실습해보도록 하겠습니다. 트랜잭션과 Redis 트랜잭션이란 무엇인가요 ? [데이터베이스] 트랜잭션과 격리성 포스팅에서 이전에 저는 트랜잭션에 대해서 별도 포스팅을 한적이 있습니다. 간단하게 말씀드리면 트랜잭션은 나누어지지 않는 최소한의 단위로 만들어 All Or Nothing 전략을 취할 수 있도록 해주는 단위입니다. 즉, 트랜잭션으로 묶게 되면 트랜잭션 내부에서 하나의 로직이 실패하여 오류가 나게되면 모두 취소시키며 그렇지 않으면 모두 성공시키는 것입니다. Redis는 Key / Value 형태의 NoSQL입니다. [Red.. 2021. 7. 18.
[database] 낙관적 락(Optimistic Lock)과 비관적 락(Pessimistic Lock) 안녕하세요. 오늘은 낙관적 락과 비관적 락의 개념에 대해서 알아보는 시간을 가져보도록 하겠습니다.DB 충돌 상황을 개선할 수 있는 방법database에 접근해서 데이터를 수정할 때 동시에 수정이 일어나 충돌이 일어날 수 있습니다. 우리는 이런 상황을 해결할 수 있도록 코딩을 진행해야합니다. 어떻게 해결할 수 있을까요 ?첫번째, 테이블의 row에 접근시 Lock을 걸고 다른 Lock이 걸려 있지 않을 경우에만 수정을 가능하게 할 수 있습니다.두번째, 수정할 때 내가 먼저 이 값을 수정했다고 명시하여 다른 사람이 동일한 조건으로 값을 수정할 수 없게 하는 것입니다.비관적 락(pessimistic lock)비관적 락은 Reeatable Read 또는 Serializable 정도의 격리성 수준을 제공합니다. D.. 2021. 7. 9.
[database] mysql과 mariaDB 중 어떤 DB가 나에게 맞을까? 안녕하세요. 오늘은 mysql과 mariaDB에 대한 차이점을 알아보고 어떤것을 사용하면 개인에게 그리고 팀에게 적합할지 알아보는 시간을 가져보도록 하겠습니다. 히스토리 mariaDB는 mysql의 개발자가 나와서 만들었다는 사실은 다들 익히 알고 계실껍니다. 저도 여기까지는 어디선가 들어가 이미 알고 있던 정보입니다. 그렇습니다. mariaDB의 개발자인 Monty는 회사를 나와 MontyProgram AB라는 회사를 차리면서 mariaDB를 만들게 된것입니다. mysql을 기반으로 fork하여 자체적으로 개발하는 서비스로 mariaDB 뿐만이 아니라 PerconaServer도 있다고 합니다. 이들간의 관계를 한번 보도록 하겠습니다. 그렇습니다. mariaDB는 mysql의 엔진에 PerconaServ.. 2021. 5. 26.
[elasticsearch + Spring] elasticsearch를 Java Spring에서 사용해보자 - 기본적인 검색 만들기 안녕하세요. 오늘 실습해볼 내용은 elasticsearch를 이용하여 Spring에 빠른 검색을 적용해 보는 것입니다. 이전시간까지 우리는 아래 포스팅을 통해서 환경설정, index를 만들고 document의 CRUD를 적용해보는 것에 대해서 실습해 보았습니다. [elasticsearch + Spring] elasticsearch를 Java Spring에서 사용해보자 - 환경설정과 Index 만들기 [elasticsearch + Spring] elasticsearch를 Java Spring에서 사용해보자 - Document CRUD 만들기 ElasticSearch를 사용한다는 것은 일반적으로 빠른 검색 서비스를 이용하기 위한 목적을 가지고 계실 것입니다. 이전까지는 검색을 하기위해 데이터를 쌓는 부분에 .. 2021. 4. 23.
[elasticsearch + Spring] elasticsearch를 Java Spring에서 사용해보자 - Document CRUD 만들기 안녕하세요. 오늘은 이전 시간에 이어서 elasticsearch를 java Spring에서 사용하는 방법에 대해서 코드로 알아보도는 시간을 가져보도록 하겠습니다. 오늘 알아볼 내용은 Java Spring을 이용하여 ElasticSaerch와 기본적인 Document의 CRUD 작업을 하는 방법입니다. Document는 ElasticSearch에 저장되는 실제 데이터입니다. RDB로 치자면 Table의 row에 해당한다고 볼 수 있습니다. 주의사항 제가 사용하는 ElasticSearch 버전은 7.9.3 버전입니다. Java High Level REST Client SDK 같은 경우 버전에 종속적이기 때문에 만약 버전을 꼭 맞추시고 사용하시기를 권장드립니다. 대표적인 예로 6 버전에는 Type 이라는 In.. 2021. 3. 23.
[elasticsearch + Spring] elasticsearch를 Java Spring에서 사용해보자 - 환경설정과 Index 만들기 안녕하세요. 오늘은 Elastic에서 제공하는 SDK를 이용하여 Java에서 ElasticSearch에 통신히여 결과를 가져올 수 있도록 해보겠습니다. ElasticSearch의 이론적인 내용에 대해서는 추후에 별도 포스팅으로 여러분들께 공유드리도록 하겠습니다. ElasticSearch API 종류 Elastic에서 제공하는 Java SDK는 2가지 종류가 있습니다. 첫번째는 Low Level SDK이며 두번째는 Hight Level SDK 입니다. 저희가 이번에 사용할 SDK는 Hight Level SDK입니다. Java Low Level REST Client ElasticSearch에서 제공하는 Low Level Java 통신 SDK 입니다. http 요청을 만들 수 있는 라이브러리입니다. Elast.. 2021. 3. 10.
[Cache & Redis] 캐싱 전략 (Cashing Strategies) 안녕하세요. Redis와 같은 Caching을 이용한다면 RDB 보다 빠른 write와 read를 경험 할 수 있게 됩니다. 이런 장점을 극대화하기 위한 전략들이 몇가지 존재합니다. 이를 활용하여 우리는 Redis를 다양한 상황에서 사용할 수 있습니다. 오늘은 Redis를 이용한 캐싱 전략(Caching Strategies)에 대해서 알아보도록 하겠습니다. 오늘 포스팅은 아마존의 ElasticCache docs를 번역 및 가공 한 것으로 원문을 보기 원하시는 분들은 Link를 참조해 주시기 바랍니다. 레이지 로딩(Lazy Loading) 이름에 나타나듯이 레이지 로딩은 클라이언트에게서 데이터가 필요로 해질 때 Cache에 로딩하는 전략입니다. DB나 외부 API에 접근하기 전 Cache를 먼저 확인 한 .. 2021. 1. 30.
[Redis] Hashes을 이용하여 매핑 만들기 ( Strings VS Hashes ) 안녕하세요. 우리는 저번시간에 [Redis] Redis 자료구조 알아보기 포스팅을 통해 Redis가 가지고 있는 유용한 자료구조와 그 사용법 및 활용되는 곳에 대해서 간단히 알아보았습니다. 오늘은 이어서 제가 토이 프로젝트에 사용한 방법에 대해서 여러분들께 공유드리는 포스팅을 한번 진행해보려고 합니다. 오늘 여러분들께 보여드릴 것은 Hashes 자료구조를 이용하여 매칭되는 서로의 Key와 Value를 뒤집어서도 매핑할 수 있게하는 것입니다. 문제 상황 기존에 프로젝트에서 Tag를 저장하고 있는 테이블이 있었습니다. 이 테이블은 primary key인 id 값과 그 이름인 value 값을 가지고 있습니다. id와 value는 1 대 1 대응이되고 있었습니다. 사용하는 곳은 여느 태그들과 마찬가지입니다. 만.. 2020. 12. 31.
[Redis] Redis 자료구조 알아보기 안녕하세요. 이전 [Redis] Redis의 기본 명령어 포스팅에서 Redis의 기본적인 명령어와 이와 연관된 자료구조에 대해서 간단하게 알아본적이 있습니다. Redis는 다양한 자료구조를 기본적으로 제공하고 있는데 상당히 높은 생산성을 제공합니다. Redis 자료구조를 잘 알고 적절하게 사용한다면 생산성 및 퍼포먼스도 얻을 수 있습니다. 따라서 오늘은 여러분들과 Redis의 자료구조에 대해서 알아보는 시간을 여러분들과 가져보려고합니다. redis.io에 소개되고 있는 자료구조 Redis는 아래의 자료구조를 공식적으로 지원하고 있습니다. Strings : Vinary-safe한 기본적인 key-value 구조 Lists : String element의 모음, 순서는 삽입된 순서를 유지하며 기본적인 자료구.. 2020. 12. 24.
[데이터베이스] MySQL의 Lock과 트랜잭션 모델 안녕하세요. 이전 포스팅, [DataBase] Lock에 대해서 알아보자 - 기본편에서 우리는 Lock이란 어떤 것이고 DBMS에서는 Lock을 어떤 경위로 사용는지에 대해서 자세하게 알아보았습니다. 도움이 되셨을까요? 포스팅에서도 말했다시피 Lock은 DBMS마다 조금씩 구현하는 요소들이 다릅니다. 대표적인 예로 MySQL은 읽는것에 대해서도 Lock(공유 락)을 잡는 반면 Oracle에서는 Lock을 전혀 잡지 않습니다. 오늘은 Mysql의 Lock과 트랜잭션에 대해서 공식문서를 보며 한번 파헤쳐보도록 하겠습니다. 이번 포스팅은 Lock에 대해서 기본적인 지식이 있다라는 것을 전제로 만들어 졌습니다. 혹시 개념이 없으시거나 미흡하다고 생각되시는 분들은 Lock에 대한 포스팅및 트랜잭션 및 격리성에 대.. 2020. 11. 4.
[데이터베이스] Lock에 대해서 알아보자 - 기본편 안녕하세요. 오늘은 DataBase의 Lock에 대해서 알아보고 정리해보는 시간을 가져보도록 하겠습니다.DataBase는 데이터를 영속적으로 저장하고 있는 시스템입니다. 이런 시스템은 같은 자원(데이터)에 대해서 동시에 접근하는 경우가 생길 수 밖에 없습니다. 이럴 경우 데이터가 오염 될 수 있는데 그렇게 되지 않도록 데이터의 일관성과 무결성을 유지해야할 필요가 있습니다. 예를 들어 수강신청 시스템에서 1명만이 정원으로 남게되었습니다. 여기서 2사람이 거의 동시에 버튼을 눌렀습니다. 성공은 1명만 되야합니다. 이런 상황에서 DBMS(DataBase Management System)가 사용하는 공통적인 방법이 Lock이라는 것입니다.LockLock이란 트랜잭션 처리의 순차성을 보장하기 위한 방법입니다. 트.. 2020. 10. 29.
[데이터베이스] 트랜잭션과 격리성 안녕하세요. 평소에 포스팅하던 내용과는 조금 떨어진 이론적인 내용을 포스팅하고자 합니다. DB는 트랜잭션 단위로 처리된다고 합니다. 유명한 All Or Nothing이 DB의 트랜잭션에서 나온 이야기입니다. 오늘은 여러분들께 DB를 이용할 때의 트랜잭션과 그리고 한발 더 나아가 격리성(Isolation)에 대해서 알아보는 시간을 가지도록 하겠습니다. 트랜잭션(Transaction) 만들고 있는 프로젝트의 로직중에 DB table에 정보를 insert하는 로직이 있습니다. table은 정규화 되어있으며 A, B, C 테이블에 차례대로 테이터를 insert한다고 하겠습니다. 테이블이 쪼개져 있으므로 테이블간의 데이터 정합성을 유지하는게 중요합니다. 만약 A, B에는 insert하고 C에 insert 하기전 .. 2020. 10. 4.