CS/DB

    24.9.10. 개발일지 // 인증미들웨어, 트랙잭션, 암호화

    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 값으로 현재 시간 입력

    [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

    [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..

    [DB] Connection Pool

    [DB] Connection Pool

    * 의문 : https://sidorares.github.io/node-mysql2/docs/examples/connections/create-connection createConnection | QuickstartFor queries please see the Simple Queries and Prepared Statements examples.sidorares.github.io공식문서 연결방법에 createConnection vs createPool 두 방법이 있길래, 비교해보고자 한다.* create Connection의 단점 db 연결비용은 매우 비싸다.이를 요청이올때마다 연결을시작하고요청이 끝나면 연결을 끊고 ... 반복하는게 너무 비효율적이고 비싸다. * 해결 : 커넥션 풀 * 개념커넥션 풀 ..

    [DB] char VS varchar 선택기준

    [DB] char VS varchar 선택기준

    https://www.inflearn.com/course/lecture?courseSlug=real-mysql-part-1&unitId=226561&tab=curriculum 학습 페이지 www.inflearn.com* 잘못된상식 : 무조건 varchar이 좋다. * varchar로 저장 && 업데이트 하는경우ABCD 를 ABCDE로 수정 -> db는 implace로 해당자리그대로 수정가능한지 체크 -> 불가능하면 delete marking && 새로운 빈공간탐색후 저장단점 : 단편화문제 * 해결 : char(10) 으로 선언미리 10칸이 할당되므로 그대로 해당자리에 ABCDE로 수정가능함. * 결론 길이가 제한적이고 (7~10자) && 자주 변경되는 컬럼의경우(ex: indexed 컬럼)char로 선언..

    where IN 절의 한계, 해결

    where IN 절의 한계, 해결

    * 한계 : 100개가 넘는경우, 풀스캔을함* 해결 : In절에 담는 값을 Promise.all을 이용해 분할처리(20개씩) ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ이전과는 달리 이번에는 where id in (ID) 에 포함되는 ID의 개수가 100개를 초과해서 인덱스를 사용하지 못하고 테이블 풀 스캔을 하는 쿼리의 문제였습니다.위 쿼리는 장바구니, 구매완료, 결제페이지 등에서 신청하는 강의들의 정보를 가져오는 쿼리입니다.(수강바구니)이 쿼리가 평소에는 문제가 없었지만, 이번 이벤트의 경우 125개의 강의를 100% 할인하는 것이 원인이 되었습니다.한번에 125개 강의를 모두 담아서 일괄 결제 (어차피 0원이니) 하는 수강생분들이 급증했기 때문입니다.이 문제..