Today I Learned
🔥 오늘은 알고리즘을 1문제 풀고, Chapter 1. 개인 프로젝트 진행 및 Redis를 공부하였다.
현재 Chapter 1. 개인 프로젝트 과제를 진행 중에 있는데, "필수 기능 3"을 구현하는데 하루가 걸렸다.. 물론 튜터님의 도움을 받아서 빠르게 해결하고 넘어갈 수 있는 문제지만, 현재 배움의 과정 속에 있는 만큼 비록 시간이 오래 걸리더라도 스스로 해결하고 넘어가고 싶다는 고집이 있었다ㅎ
"필수 기능 3"을 구현하는데 비록 시간이 오래 걸렸지만 문제없이 완성하고, Postman을 사용하여 검증을 시도해 봤는데 에러가 발생하였다. 완성된 코드를 몇 번을 다시 돌려보고, 몇 번을 다시 만들어 봤는지 모르겠다..😭 그러다 포기를 하고 싶어질 때쯤 문제를 발견하였는데, 코드에 문제가 있던게 아니라, 실수로 Postman에 값을 잘 못 보내고 있는 내 모습을 발견했다.
"productIds" 라고 변수를 만들어 두고, Postman에서는 "productId"로 값을 보내고 있었다. 누구나 할 수 있는 실수라고 생각하지만 이런 실수는 하고 정말 싶지 않다. 그럼에도 타인의 도움을 받지 않고 "필수 기능 3"을 구현한 스스로가 자랑스럽다.
오늘의 느낀 점은 컴퓨터는 죄가 없다. 기계는 거짓말을 하지 않는다. 잘못은 사람이 저지른다.
[ DBMS와 Redis ]
상용 서비스에 주로 활용되는 관계형 데이터베이스는 영속성을 제공하는데 목적을 두고 있습니다. 이는 데이터가 사라지지 않게 하기 위해 파일시스템(흔히 말하는 SSD 또는 HDD)에 저장한다는 의미이며, 컴퓨터가 종료되어도 데이터가 사라지진 않지만 기본적으로 데이터를 읽고 쓰는데 오래걸립니다.
이 문제를 해결하기 위해 우리는 Redis를 공부해야 합니다.
[ Redis ]
Key - Value (dictionary)의 형태로 데이터를 저장할 수 있게 해주는 In-Memory Database이다.
- In-Memory: 컴퓨터의 주기억장치인 RAM에 데이터를 올려서 사용하는 방법
[ Redis 특징 ]
- Redis는 메모리, RAM에 데이터를 저장하기 때문에, 복잡한 입출력 과정이 필요하지 않습니다.
- 휘발성: 일반적인 관계형 데이터베이스에 비해 더 빠르게 동작하는 대신, 언제든 사라질 수 있는 데이터를 다룬다는 차이를 가지고 있습니다.
- 데이터 유실: 인메모리 데이터 저장소의 특성상, 서버에 장애가 발생했을 경우 데이터 유실이 발생할 수 있습니다.
- ex) 특정 게시글의 조회수와 같이 빠르게 업데이트되는 데이터, 또는 사용자 세션, 장바구니와 같은 시간이 지나면 삭제되는 데이터등을 저장하기 위해서 가장 많이 사용되어온 데이터베이스 입니다.
[ Redis의 활용 사례 ]
Redis는 NoSQL 중에서도 Key-Value 형식으로 작동하는 인메모리 데이터베이스이며, 지연이 적은 읽기, 쓰기 성능을 가졌습니다. 그렇기 때문에 일시적인 데이터, 변경이 잦은 데이터를 다뤄야 되는 상황에서 많이 활용됩니다.
- Session Clustering: 여러 애플리케이션 인스턴스에서 같은 세션 정보를 사용할 수 있도록 도와줍니다.
- Caching: 자주 사용되는 데이터를 저장해두어, 데이터베이스 조회를 줄이고 전반적인 응답속도를 개선합니다.
- 지원하는 다양한 자료구조를 바탕으로 리더보드, 방문수 트래킹, 좌표 기반 검색 등의 기능을 쉽게 구현할 수 있게 해줍니다.
[ NoSQL ]
- Redis는 대표적인 NoSQL 데이터베이스 입니다. NoSQL은 데이터베이스를 만드는 접근법의 일종으로, Not only SQL을 의미합니다.
- 일반적인 관계형 데이터베이스가 약점을 가진 확장성, 유연성, 성능에 대한 문제를 해결하기 위해 사용되는 경우가 많으며, 컴퓨터 기술의 발전과 웹의 활성화로 인해 비정형 데이터를 더 높은 성능으로 사용하는데 초점이 맞춰진 경우가 많습니다.
- 관계를 기준으로 데이터를 다루지 않기 때문에 스키마를 만들지 않고, 그렇기 때문에 비정형 대규모 데이터를 매우 빠르게 다룰 수 있습니다.
[ NoSQL 종류 ]
'해피 코딩 > Today I Learned' 카테고리의 다른 글
[TIL 8] @ManyToOne, @OneToMany 정복하기 (1) | 2024.08.10 |
---|---|
[TIL 7] 부족한 부분 채워 나가기 (0) | 2024.08.08 |
[TIL5] MSA 마무리 (0) | 2024.08.06 |
[TIL 4] 보안 구성 Gateway를 통한 Security이해하기 (0) | 2024.08.05 |
[TIL 3] CircuitBreaker와 Resilience4j (0) | 2024.08.02 |