CS/DB
[Redis] Redis 사용방법, 세션 불일치 해결
* 개요게임방의 상태를 보여주기 위해 게임방별로 멤버들의 정보를 담을 저장소가 필요하다.이를 어디에 저장할것인가를 결정한다.저장소는 세션 불일치 문제를 해결해야한다.복잡성이 적어야 한다. * 세션 불일치 해결방법sticky session로드밸런서가 사용자1의 요청을 해당 세션을 가지고있는 서버로 매핑시켜주는 방법set-cookie = SERVERID=서버1 이런형식매번 set-cookie를 해야해서 번거롭다.최악의경우 로드밸런싱이 무의미하다. (특성 서버로 요청이 몰리는경우)장애발생시 정보를 모두 잃게된다.방법2 : 세션 클러스터링단점 : 세팅이복잡하다. 복제 직전에 조회하는경우 데이터 정합성이 깨질수있다. 네트워크 비용증가. 방법3 : 세션 스토리지 (Disk, 인메모리)Disk 방식장점 : 유실이 되..
[Redis] Redis를 이용한 우아한 조회수 증가
* 조회수 증가 구현의문 : 조회수가 +1 될때마다 db에 update 를 하는게 좋은가?사용자가 100명일때 한게시물을 조회하는 경우 -> 100개의 db update 쿼리 critical 한 정보가 아니기때문에 얻는 이득대비 db 비용이 크다고 생각한다.개선 : 레디스캐시에 조회수를두고 여기에 업데이트한다.5분마다 db에 업데이트 쿼리를 날린다.5분에 1번만 db에 update 쿼리를 날린다. 우분투에 redis설치* 리눅스서버의 redis 연결config참고로 host에 192로 시작하는 내부ip를 입력해야 작동한다. dotenv.config해야 제대로 .env 파일의 내용을 불러온다.import { createClient } from 'redis';import * as dotenv from 'do..
[DB] db에 데이터넣기, 인덱스
* db에 데이터 넣기초안문제 : connection timeout error-- User 테이블 생성CREATE TABLE IF NOT EXISTS `User` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `nickname` VARCHAR(30) NOT NULL, `rank` INT NOT NULL CHECK (`rank` BETWEEN 1 AND 10), `money` BIGINT NOT NULL CHECK (`money` BETWEEN 1 AND 99999999), `start_date` DATE NOT NULL, `last_login` DATETIME);-- 인덱스 생성CREATE INDEX idx_user_rank ON `User`(`rank`);CREATE..
24.9.10. 개발일지 // 인증미들웨어, 트랙잭션, 암호화
* 인증 미들웨어목표 : 로그인전에 req에 id, pw가 있는지 확인하고싶다.login 전 미들웨어로 checkBody를 적어주면 된다.this.router .route('/') .get(this.loginHome) //홈화면(로그인하기, 회원가입하기) .post(this.checkBody,this.login); //로그인전에 req에 id, pw 있는지 확인!checkBody= async(req, res, next) => { if(!req.body.loginId || !req.body.password){ return res.status(400).json({ status : 'fail', message : 'Missing id o..
[DB] db관점 정렬 학습 by.line
https://techblog.lycorp.co.jp/ko/about-atlassian-jira-ranking-algorithm-lexorank Jira의 이슈 정렬 방식이 Integer 방식이 아니라고?!들어가며 안녕하세요. LINE+ Contents Service Engineering 조직에서 백엔드 개발을 하고 있는 김한솔, 문다정, 이현동, 조강훈입니다. 저희 조직에서는 그룹...techblog.lycorp.co.jp들어가며 안녕하세요. LINE+ Contents Service Engineering 조직에서 백엔드 개발을 하고 있는 김한솔, 문다정, 이현동, 조강훈입니다. 저희 조직에서는 그룹 구성원의 기술 성장을 돕고 향상된 능력을 적재적소에 활용할 수 있도록 Tech Group이라는 조직 내 ..
[DB] DATETIME 타입에 DEFAULT 값으로 현재 시간 입력
출처 : https://spiderwebcoding.tistory.com/3 [MYSQL] DATETIME 타입에 DEFAULT 값으로 현재 시간 입력개요 평소 DB 테이블을 생성할 때 날짜에 대한 부분은 Type 값을 DATETIME으로 주고 Service단 (또는 DB를 컨트롤하는 로직, 모듈) 에서 현재 날짜에 대한 부분을 변수에 담아 해당 변수를 INSERT 또는 UPDATspiderwebcoding.tistory.com 개요평소 DB 테이블을 생성할 때 날짜에 대한 부분은 Type 값을 DATETIME으로 주고Service단 (또는 DB를 컨트롤하는 로직, 모듈) 에서 현재 날짜에 대한 부분을 변수에 담아 해당 변수를INSERT 또는 UPDATE 해주었다.하지만, 현재 날짜로 들어가는 regD..
[CS] 멘토링 24.8.27. // db, redis, kafka
* 세션dbrediselastic search => text, 자연어 검색, 게시글 검색mysql을 이용한 게시글검색구현 : 주로 like를 씀 => 한글지원x, 잘안돌아감 (-)게시글검색, 장바구니 기능은 es를 쓰자. * kafka, rabbitMQ, AWS SQS웹 구조웹서버(정적요청 처리, was 사망시 오류처리)was(동적요청 처리, db에 연결해서 데이터가져옴, 고급인력)db+ message Queue => 회원가입 email 발송 등 * 클라우드가 안전한 이유?구글 클라우드에서 오류나서 사과한뉴스가 있나? -> 그만큼 안전하다이유 : 분산저장, 3copy단점 : 백업서버는 I/O작업만 함 -> cpu가 놀고있음해결 : 기억이안남 ㅜㅜ * Line 동작원리redis => 실시간 msg 응답ha..