꾸준히 하자
close
프로필 사진

꾸준히 하자

github: @jiho5993

  • 전체 (11)
    • NodeJS (0)
      • NestJS (0)
      • Javascript & Typescript (0)
    • 데이터베이스 (5)
      • DB 기술 (3)
      • Redis (2)
    • 인프라 (0)
    • 네트워크 (2)
    • 운영체제 (0)
    • 보안 (0)
    • 블록체인 (0)
    • 인공지능 (4)
  • Github
  • 이전 블로그
TypeORM getOne과 getMany의 차이점, 그리고 Lock의 범위

TypeORM getOne과 getMany의 차이점, 그리고 Lock의 범위

개요작성 기준 TypeORM 버전은 0.3.28이다. 보통 쿼리 빌더를 작성하는 이유는 raw 쿼리보다 더 가독성이 있고, 파라미터를 기반으로 처리하기 때문에 Sql Injection등에 강하다. 또한, orm 메서드만큼 안전하며 복잡한 쿼리를 작성할 때 사용한다는 특징이 있기 때문에 많이 사용한다. 하지만, TypeORM의 쿼리 빌더의 getOne()과 getMany() 함수를 사용할 때 주의할 점이 있다.바로 쿼리 생성 결과와 내부 로직에 대한 차이가 있다. 필자는 이것을 MySQL Skip Locked로 이것저것 테스트하다가 알아냈다. 테이블 Row 1개씩 Skip Locked를 걸어두어 처리하는 배치 프로그램을 실행하는데, 약 10대의 멀티 인스턴스를 띄워 실행하고자 했다. 예상한 동작은 각 인스..

  • format_list_bulleted 데이터베이스/DB 기술
  • · 2026. 1. 12.
MySQL Skip Locked에서 Producer/Consumer으로 이사가기 (with Redis Streams)

MySQL Skip Locked에서 Producer/Consumer으로 이사가기 (with Redis Streams)

개요이전 포스팅을 보면 MySQL Skip Locked를 활용해서, 여러 개의 프로세스가 자원에 접근할 때 Deadlock이나 동시성 이슈가 발생하지 않도록 했다. 전체 실행 시간이 단축된 것은 덤이며, 별도의 인프라를 더 추가할 것도 없이 간단한 방법으로 쉽게 문제를 해결하고 개선할 수 있었다.2025.12.29 - [데이터베이스/DB 기술] - MySQL Skip Locked로 데이터를 멋있게 다루기 MySQL Skip Locked로 데이터를 멋있게 다루기개요가끔 스케줄러를 실행하는데, 너무 성능이 느려 인스턴스를 여러 대 늘릴 수도 있다. 예를 들어, 쿠폰 발급이나 알림을 전송하는 속도가 너무 느리다는 것이 그 이유가 될 수 있다. 인스턴스jiho5993.tistory.com 하지만 내용을 보다보면..

  • format_list_bulleted 데이터베이스/Redis
  • · 2026. 1. 5.
MySQL Skip Locked로 데이터를 멋있게 다루기

MySQL Skip Locked로 데이터를 멋있게 다루기

개요가끔 스케줄러를 실행하는데, 너무 성능이 느려 인스턴스를 여러 대 늘릴 수도 있다. 예를 들어, 쿠폰 발급이나 알림을 전송하는 속도가 너무 느리다는 것이 그 이유가 될 수 있다. 인스턴스가 1대에서 N대로 늘었기 때문에 처리 속도는 빨라질 수 있지만, 데이터베이스 자원에 접근하는 프로세스도 여러 개가 되기 때문에, 같은 자원을 중복 처리한다던지, 아니면 락 점유 시간이 길어져 데드락이 발생할 수도 있다. 내가 프로젝트로 진행한 와글와글(WaggleWaggle)은 실시간 인구 혼잡도 API를 통해 혼잡도 정보를 가져오고, 데이터를 가공하여 DB에 저장한다. 약 5분 간격으로 혼잡도 정보를 갱신한다. 여기서, 인스턴스 수를 늘렸을 때 MySQL에서 제공하는 Skip Locked로 중복 처리(동시성) 문제..

  • format_list_bulleted 데이터베이스/DB 기술
  • · 2025. 12. 29.

WebSocket과 Socket.IO의 Handshake

개요흔히 Socket.IO는 Websocket에서 Room 기능이 추가되고, 자동 재연결, Broadcasting 등 편의 기능을 추가하여 더 쉽게 실시간 통신을 구현한다고 알려져 있다. 하지만, Websocket 기반이기 때문에 Handshake도 같다고 생각할 수 있는데, 조금 다르다.이 차이점을 알아두어야, 나중에 Socket.IO 기반 서버를 확장할 때 실수없이 잘 다룰 수 있을 것이다.1. WebSocket Handshake처음에는 HTTP로 Handshake를 한 후 Websocket으로 프로토콜을 변경한다.이때 응답으로 받는 HTTP Status Code는 101 Switching Protocols이다. 101 Switching Protocols 상태 코드는 MDN에서 다음과 같이 설명한다...

  • format_list_bulleted 네트워크
  • · 2025. 12. 6.

DB 정규화

데이터는 다음과 같은 예시로 정규화에 대해 설명한다.idnamehobby1user1'축구'2user2'야구'3user3'야구, 클라이밍, 배드민턴' 1. 제1정규화한 컬럼에 다수의 데이터가 들어갈 수 없음 -> 컬럼 하나엔 데이터 하나만 1-1. 제1정규화를 만족하지 않을 경우1. 데이터 검색이 불편해짐select * from user where hobby like '%배드민턴%'; 2. 데이터 수정이 까다로워짐ex) hobby를 '축구, 배드민턴, 야구'에서 '축구, 클라이밍, 야구'라고 변경하려면,'축구', '야구' 데이터를 불필요하게 기억(메모리 어딘가에 저장)해야할 필요가 생김 1-2. 제1정규화 결과그래서 아래와 같이 한 컬럼에 하나의 데이터만 들어가도록 처리한다.idnamehobby1user..

  • format_list_bulleted 데이터베이스/DB 기술
  • · 2025. 11. 25.

JSON RPC 2.0이란

1. 개요JSON RPC는 Stateless한 원격 프로시저 호출 프로토콜이다.구체적인 기술에 의존하지 않고 Socket, HTTP 또는 다양한 네트워크 기술에 적용될 수 있는 통신 규약이다.단지 표현을 하는 수단이 JSON인 것이다. 2. JSON RPC 2.0 상세 스펙2-1. 요청할 때블록체인 RPC 호출을 예시로 설명한다.{ "jsonrpc": "2.0", "id": 1, "method": "eth_getTransactionByHash", "params":[ "0x4490d094678327faf1107078fe85e7e455a1f715d88be5415e26ad31832122a6" ]}jsonrpcJSON-RPC의 버전을 나타낸다. 반드시 "2.0" 값을 가진..

  • format_list_bulleted 네트워크
  • · 2025. 10. 27.
  • navigate_before
  • 1
  • 2
  • navigate_next
공지사항
  • About Me
전체 카테고리
  • 전체 (11)
    • NodeJS (0)
      • NestJS (0)
      • Javascript & Typescript (0)
    • 데이터베이스 (5)
      • DB 기술 (3)
      • Redis (2)
    • 인프라 (0)
    • 네트워크 (2)
    • 운영체제 (0)
    • 보안 (0)
    • 블록체인 (0)
    • 인공지능 (4)
인기 글
전체 방문자
오늘
어제
Copyright © 7124918823 모든 권리 보유.
SKIN: Copyright © 쭈미로운 생활 All rights reserved. Designed by JJuum.
and Current skin "dev-roo" is modified by Jin.

티스토리툴바