전체 글 (86) 썸네일형 리스트형 Redis를 이용한 세션 구현 1. 세션이란? 세션은 연결에 필요한 메타 데이터 + 시간을 뜻하고, 어디에 적용되느냐에 따라 조금씩 다른 뜻을 가진다. 일반적인 세션은 네트워크 상에서 두 개 이상의 통신장치 간에 유지되는 상호 연결을 뜻한다. 연결된 일정 시간 동안의 유지 정보를 나타낸다. Web 로그인 세션은 웹에서 특정 유저가 로그인했음을 나타내는 정보이다. 브라우저는 Cookie를 서버는 해당 Cookie의 세션 정보를 저장한다. 유저가 로그아웃하거나 세션이 만료될 때까지 해당 유저의 서비스가 가능하다. 1.1 로그인 과정 먼저 ID, Password를 입력해서 DB로부터 유저 정보가 일치한 지 확인한다. 일치하면 유저 정보를 세션으로 저장하고 연관된 SessionId를 반환한다. Session ID를 HTTP Header의 s.. Redis 적용 및 다양한 DataType 1. Redis 설치 소스와 바이너리 형태로 제공하며, 주로 리눅스에서 설치해 사용한다. 물론 Redis는 OS에 상관없이 어디든 사용 가능하다. window 설치, Mac 설치 링크를 참고. 편의를 위해서 이 포스팅에서는 Docker에서 Redis를 간편히 설치하겠다. 도커 설치는 공식 홈페이지를 확인하면 된다. docker pull redis docker run --name my-redis -d -p 6379:6379 redis redis 이미지를 가져와서 my-redis라는 이름으로 6379 포트에 실행한다. docker ps 명령어를 통해 redis 컨테이너가 실행됨을 확인할 수 있다. 2. Redis 실습 도커 컨테이너 안에서 실행되게끔 만들었다. Redis 모듈의 구조는 위의 사진과 같다. r.. Redis 소개 및 사용 이유 1. Redis란? Remote Dictionary Server. 애플리케이션에 유용한 기능을 제공하는 미들웨어의 역할을 하며, 전통적인 DBMS 역할을 수행하고, 데이터 저장소이다. 2009년 Salvatore Sanfilippo가 개발했고, 오픈소스화 이후 캐시 기술로서 많은 인기를 얻게 된다. 2015년부터 Redis Labs이 지원하고, 다양한 언어에서 Redis를 지원하고 많은 라이브러리가 존재한다. Redis는 아주 빠른 데이터 저장소로 활용되고, 분산된 서버들간의 커뮤니케이션이 가능하며, 내장된 자료구조를 활용하여 기능을 구현할 수 있다. 가장 손쉽게 사용할 수 있는 In-memory 저장소라 높은 성능을 가지고, 현대 서버 구조에 세션 관리나 캐시는 빠질 수 없는 구성 요소이다. 현대 서비.. MongoDB Query Language 1. SQL VS MQL SQL(Structured Query Language)은 구조화된 질의어로 보통 DB에서 사용한다. 반면 MongoDB는 MQL(MongoDB Query Language)를 사용하고, SQL과의 차이점은 함수형 인자를 사용한다. 참고로 몽고 shell은 자바스크립트 기반으로 됐다. 그래서 자바 스크립트 명령어가 가능하다. 아래는 SQL과 MQL의 차이 예시다. SQL SELECT * FROM people MQL db.people.find() SQL SELECT id, user_id, status FROM people MQL db.people.find( {}, {user_id:1,status:1} ) SQL SELECT user_id, status FROM people MQL db.. Replica Set 구축하기 1. Atlas와 On-Premises의 차이 Atlas는 mongoDB 클라우드 제품을 뜻하며, 비용을 제공해야 한다. 반면 On-premises는 자체적으로 보유하고 있는 서버에 직접 설치하고 운영하는 방식이다. 비용을 아낄 수 있지만, 몽고 DB를 직접 관리하고 운영해야 한다. 편의를 위해서 Atlas를 사용하였다. 2. Replica Set 구축 위의 형태로 Replica Set을 구축해 보겠다. 1) 데이터 구축 MongoDB Shell을 사용해서 구현해보겠다. 먼저 Replica Set을 구현하기 위해 폴더들을 위의 사진처럼 만들어야 한다. ./mongodb --replSet rs1 --port27017 --bind_ip "0.0.0.0" dbpath "경로/data1" --oplogSize .. 웹 서비스 아키텍처의 발전 (네트워크 관점) 1. 웹 서비스의 기본 구조 웹 서비스의 기본 흐름은 위의 그림과 같다. HTTP 트래픽은 Socket 수준에서 이뤄지고, Stream 단위로 전송한다. 웹 기술의 핵심은 HTTP와 HTML 문서이다. 웹 서비스의 흐름을 더 자세히 나타내면 아래와 같다. 2. 웹 서비스의 발전과정 1) 연결과 통신 TCP/IP로 연결하고, HTTP로 통신한다. HTTP는 STATELESS라는 특성을 가지고 있으며 현재에는 이런 특성이 각광받는 추세이다. 2) HTML 전송 URL에 입력을 하면 DNS를 통해 IP 주소를 물어보고, 그 IP 주소를 통해서 접속. 그다음 TCP 연결을 시도하고, 그 연결을 기반으로 HTTP 통신을 한다. 그러면 Request를 하는 데 GET 문서를 한다. Web Server는 reques.. 웹 서버가 필요한 이유 & 발전 & 대용량 시스템 1. DB는 왜 중간에 응용 프로그램이 필요할까? 위의 형태로 다이렉트로 DB에 커넥션 하는 게 불가능할까? 결론적으로 가능하긴 하다. 기본적으로 안드로이드가 제공하는 SQL Lite라는 DB가 연결될 수 있고, 네트워크로 DB를 잡을 수가 있다. 그런데 두 가지 이유 때문에 이렇게 사용하지 않는다. DB 커넥션을 폰에서 Direct로 했을 때 아래의 문제점들이 발생하기 때문이다. 1) 보안의 취약성 앱 소스는 오픈된다고 보면 된다. 난독화라는 기술도 있어서 어느 정도 보안이 된다. 그러나 소스가 열렸을 때 DB 커넥션 하는 서버의 모든 정보(서버 IP, 유저의 PW 등)가 앱 소스 안에 있어야 한다. 그러다보니까 노출이 돼서 좋을 게 없다. 2) 고정된 IP를 앱 소스에 넣지 않아도 된다. 서버 IP로.. MongoDB의 배포 형태 (2/2) 1. 배포 형태의 중요성 운영 중인 서비스에서 서버를 내려야 하는 상황이 온다면 어떻게 될까? 서버를 내리면 DB에 작업을 할 수 없다. 서비스 자체가 내려가는 문제가 발생한다. 위의 용도는 사실상 Study를 하거나 Test를 할 때만 사용할 수 있다. 하지만 Replica Set을 사용하면 이런 형태로 배포를 만들 수가 있다. 몽고 DB를 3개 설치하여 복제를 시켜서 동일하게 유지한다. 현업에서 가장 많이 사용하는 방식으로 이러면 HA(High Availability). 고가용성이 보장된다. Scale up을 통해 스토리지 용량을 늘릴 수 있지만, 이 방식도 한계가 있을 수가 있다. 데이터와 트래픽에 관한 분산을 해야돼서 scale out으로 확장해야 하는데. 이걸 몽고 DB에서 Sharded Clu.. 이전 1 2 3 4 5 ··· 11 다음