반응형
반응형

[MSSQL] update 구문 여러개를 실행하고 그 결과 row의 총 개수를 구하라

DECLARE @TotalAffectedRows INT = 0; -- 총 영향을 받은 행을 저장할 변수

-- 첫 번째 UPDATE 구문
UPDATE your_table
SET column1 = 'value1'
WHERE condition1;

SET @TotalAffectedRows = @TotalAffectedRows + @@ROWCOUNT; -- 영향을 받은 행 수 누적

-- 두 번째 UPDATE 구문
UPDATE your_table
SET column2 = 'value2'
WHERE condition2;

SET @TotalAffectedRows = @TotalAffectedRows + @@ROWCOUNT; -- 영향을 받은 행 수 누적

-- 세 번째 UPDATE 구문
UPDATE your_table
SET column3 = 'value3'
WHERE condition3;

SET @TotalAffectedRows = @TotalAffectedRows + @@ROWCOUNT; -- 영향을 받은 행 수 누적

-- 최종 결과 출력
SELECT @TotalAffectedRows AS TotalAffectedRows;
반응형
반응형

2025년을 위한 7개의 데이터베이스

 

 

 

https://news.hada.io/topic?id=18153

 

2025년을 위한 7개의 데이터베이스 | GeekNews

다양한 문제를 해결하기 위해 주목할 가치가 있는 DB 7개를 소개이는 "최고의 DB" 목록이 아닌, 새롭고 유용한 관점을 제공하는 도구들2025년엔 이들 각 DB에 대해 일주일씩 투자해보길 바람(7 DBs in

news.hada.io

Table of Contents

  1. PostgreSQL
  2. SQLite
  3. DuckDB
  4. ClickHouse
  5. FoundationDB
  6. TigerBeetle
  7. CockroachDB
  • 다양한 문제를 해결하기 위해 주목할 가치가 있는 DB 7개를 소개
  • 이는 "최고의 DB" 목록이 아닌, 새롭고 유용한 관점을 제공하는 도구들
  • 2025년엔 이들 각 DB에 대해 일주일씩 투자해보길 바람(7 DBs in 7 Weeks)

1. PostgreSQL: 기본 데이터베이스

  • PostgreSQL은 기본적으로 사용되는 안정적인 기술
    • "Just use Postgres"라는 문구는 널리 알려진 밈이자 신뢰성을 상징하는 표현임
    • ACID를 준수하며 물리적 및 논리적 복제를 포함한 강력한 기능을 제공함
    • 주요 벤더들 간에 광범위한 지원을 받고 있는 안정적 데이터베이스임
  • PostgreSQL의 가장 큰 매력: 확장성
    • 확장 기능(Extensions)을 통해 독창적인 기능을 추가 가능함
    • 주요 확장 기능 예시:
      • AGE: 그래프 데이터 구조와 Cypher 쿼리 언어 지원
      • TimescaleDB: 시계열 데이터 작업 지원
      • Hydra Columnar: 열 기반 스토리지 엔진 제공
    • 확장 기능은 PostgreSQL을 타 데이터베이스와 차별화시키는 핵심 요소임
  • PostgreSQL의 유용성과 확장성
    • 다양한 생태계를 갖추고 있으며, 기본 설정이 합리적이고 사용자 친화적임
    • 비 PostgreSQL 서비스에서도 Postgres 와이어 프로토콜을 사용해 클라이언트 호환성을 제공함
    • WebAssembly(Wasm) 환경에서도 설치 가능할 정도로 가벼움
  • PostgreSQL 학습 권장
    • PostgreSQL의 가능성과 한계를 이해하기 위해 시간을 투자할 가치가 있음
    • 예: MVCC(Multi-Version Concurrency Control)의 복잡성 이해
    • 간단한 CRUD 애플리케이션 개발, PostgreSQL 확장 기능 작성 등을 추천함

2. SQLite: 로컬-우선 데이터베이스

  • SQLite는 "로컬 우선" 데이터베이스로 독립적으로 실행 가능
    • 클라이언트-서버 모델을 벗어나 애플리케이션과 같은 환경에서 실행됨
    • 예시: WhatsApp과 Signal은 기기 내부에 SQLite를 사용하여 채팅 데이터를 저장함
  • SQLite의 발전된 활용 사례
    • 기본 ACID 준수 데이터베이스 이상의 창의적인 사용 가능
    • 새로운 도구와 확장 기능:
      • Litestream: SQLite의 스트리밍 백업 제공
      • LiteFS: 분산 액세스를 지원하여 더욱 유연한 토폴로지 구현
      • CR-SQLite: CRDT(Conflict-free Replicated Data Types)를 사용해 변경 세트를 병합할 때 충돌 해결 필요성을 제거
  • SQLite의 인기 재조명
    • Ruby on Rails 8.0 덕분에 다시 주목받고 있음
    • 37signals: SQLite를 기반으로 Rails 모듈(Solid Queue 등)을 개발
      • Rails의 다중 SQLite 데이터베이스 관리 지원 (database.yml)
    • Bluesky: 개인 데이터 서버(Personal Data Servers)로 사용자마다 개별 SQLite 데이터베이스 사용
  • SQLite 활용 학습 권장
    • SQLite를 이용한 로컬 중심 아키텍처 실험
    • 기존의 PostgreSQL 기반 클라이언트-서버 모델을 SQLite로 대체할 수 있는지 시도

3. DuckDB: 모든 것을 질의할 수 있는 데이터베이스

  • DuckDB는 OLAP에 특화된 임베디드 데이터베이스
    • SQLite처럼 애플리케이션과 함께 작동하지만 OLTP 대신 OLAP 작업에 중점
    • 데이터 분석 및 쿼리 중심으로 설계된 시스템
  • DuckDB의 "쿼리-애니씽(Query-Anything)" 특성
    • 다양한 데이터 소스를 직접 SQL로 쿼리 가능:
      • CSV, TSV, JSON 등 일반 파일 형식
      • Parquet 등 고급 파일 형식 지원
    • 이 기능은 유연성을 제공하며, 예: Bluesky의 데이터 스트림 분석
  • 확장성 및 생태계
    • DuckDB에도 확장 기능이 존재하나, Postgres만큼 풍부하지 않음 (상대적으로 젊은 프로젝트)
    • 커뮤니티 기여 확장이 많이 있으며, gsheets(Google Sheets 연동)가 주목할 만함
  • DuckDB 활용 학습 권장
    • Python 노트북이나 Evidence를 통해 데이터 분석 및 처리 실험
    • SQLite와 결합: SQLite 데이터베이스의 분석 쿼리를 DuckDB로 위임해 성능 향상

4. ClickHouse: 컬럼형 데이터베이스

  • ClickHouse는 OLAP 작업에 특화된 데이터베이스
    • OLTP는 PostgreSQL, OLAP는 ClickHouse라는 조합이 이상적임
    • 대규모 분석 워크로드를 처리하며, 수평 확장과 샤딩을 통해 높은 데이터 삽입 속도를 지원함
  • ClickHouse의 주요 특징
    • 계층형 스토리지 지원:
      • "핫 데이터"와 "콜드 데이터"를 분리해 저장 가능
      • 예: GitLab 문서에서 이를 활용한 사례를 자세히 다룸
    • 대규모 데이터셋 처리 및 실시간 분석:
      • DuckDB로는 처리하기 어려운 크기의 데이터셋에 적합
      • 실시간 분석이 필요한 상황에서 강력한 성능 제공
  • 운영의 편리함
    • 배포, 확장, 백업 등 운영 관련 문서가 체계적이며 상세함
    • 예: 적절한 CPU 설정 방법까지 다룬 문서 제공
  • ClickHouse 학습 권장
    • 대규모 분석 데이터셋 실험 또는 DuckDB로 작업한 분석을 ClickHouse로 변환
    • ClickHouse의 임베디드 버전인 chDB를 활용해 SQLite와 더 직접적으로 비교 가능

5. FoundationDB: 레이어드 데이터베이스

  • FoundationDB는 "데이터베이스의 기반" 역할을 하는 독특한 시스템
    • 키-값 저장소로 설계되었으나 단순한 데이터베이스라기보다는 데이터베이스를 구축하는 "기초"로 작동
    • 애플, Snowflake, Tigris Data와 같은 주요 기업에서 사용
  • 주요 특징 및 한계
    • 제한사항:
      • 트랜잭션 데이터는 10MB를 초과할 수 없음
      • 트랜잭션은 첫 번째 읽기 이후 5초를 넘길 수 없음
    • 이러한 제한으로 인해 대규모 환경에서도 완전한 ACID 트랜잭션 지원 가능
      • 예: 100TiB 이상의 클러스터 운영 사례
  • FoundationDB의 설계와 테스트
    • 특정 워크로드에 최적화되어 설계됨
    • 시뮬레이션 테스트를 통해 안정성과 확장성을 입증:
      • Antithesis 및 다른 데이터베이스에서도 동일한 테스트 방법론 사용
      • 관련 참고 자료: Tyler Neely와 Phil Eaton의 문서
  • "레이어드" 데이터베이스로서의 FoundationDB
    • 스토리지 엔진과 데이터 모델 간 결합이 느슨함:
      • 다양한 레이어에서 스토리지 엔진을 재매핑 가능
      • 예: Record 레이어, Document 레이어 (FoundationDB 조직에서 제공)
    • Tigris Data에서 작성한 레이어 설계 사례가 참고할 만함
  • FoundationDB 학습 권장
    • 튜토리얼을 진행하며 RocksDB 같은 시스템을 대체할 가능성 탐색
    • 설계 방법(Design Recipes)과 관련 논문 읽기
    • Anti-Features와 Features 문서를 통해 사용 제한과 해결 가능한 문제 이해

6. TigerBeetle: 철저하게 정확한 데이터베이스

  • TigerBeetle는 금융 트랜잭션에 특화된 단일 목적 데이터베이스
    • 범용 데이터베이스와 달리 특정 목적, 특히 금융 거래에 초점
    • 오픈 소스로 제공되며, 높은 수준의 신뢰성과 정확성을 목표로 설계
  • 철저한 정확성을 위한 설계 철학
    • NASA의 Power of Ten Rules  프로토콜 인지 복구(Protocol-Aware Recovery) 구현
    • 엄격한 직렬화(strict serialisability)  Direct I/O 사용으로 커널 페이지 캐시 관련 문제 회피
    • 안전성 문서(Safety doc)와 독특한 프로그래밍 방식 "Tiger Style"에서 철저함을 확인 가능
  • Zig 언어로 구현된 혁신적 접근
    • Zig는 시스템 프로그래밍 언어로 비교적 신생이지만, TigerBeetle의 목표에 이상적으로 부합
    • 간결성과 성능을 극대화하는 데 Zig의 장점을 활용
  • TigerBeetle 학습 및 활용 제안
    • 로컬 배포 환경에서 금융 계좌 모델링 실험:
      • Quick Start를 따라 설치 및 사용
    • 시스템 아키텍처 문서(System Architecture docs)를 참고하여 범용 데이터베이스와 결합 가능성 탐구
    • 예: PostgreSQL 또는 FoundationDB와 함께 통합해 사용 사례 확장

7. CockroachDB: 글로벌 데이터베이스

  • CockroachDB는 글로벌 분산 데이터베이스
    • PostgreSQL 와이어 프로토콜과 호환되며, 수평 확장과 강한 일관성을 지원
    • Google Spanner에서 영감을 받은 설계로, 다중 지역에 걸친 데이터베이스 확장을 가능케 함
  • CockroachDB의 주요 기술적 특징
    • 시간 동기화 기술:
      • Google Spanner는 원자 시계와 GPS 시계를 사용하지만, CockroachDB는 일반 하드웨어에서도 동작하도록 설계
      • NTP 기반 동기화 지연 보정, 노드 간 클록 드리프트 비교 및 최대 오프셋 초과 시 멤버 종료
    • 다중 지역 구성:
      • 테이블 로컬리티(Table Localities) 기능을 통해 읽기/쓰기 트레이드오프에 따른 최적화 가능
      • 데이터가 사용자 지리적 위치에 맞게 분산되어 성능과 지연 시간을 개선
  • CockroachDB 활용 학습 제안
    • MovR 예제 재구현:
      • 원하는 언어와 프레임워크를 사용해 MovR(분산 애플리케이션 예제)을 구현
    • CockroachDB의 다중 지역 및 스케일링 전략을 활용하여 글로벌 애플리케이션 설계 실험
  • CockroachDB 선택 이유
    • DynamoDB와 같은 다른 분산 데이터베이스와 달리 로컬 환경에서 무료로 실행 가능
    • 강한 일관성과 글로벌 분산 지원이라는 차별화된 특성 제공

Wrap Up

  • 소개된 데이터베이스는 각기 다른 문제와 요구 사항을 해결하기 위해 설계됨
  • 2025년엔 이 데이터베이스들을 학습하며 더 흥미롭고 창의적인 문제 해결 방법을 탐구해보세요!

 

반응형
반응형

2024년 꼭 봐야 할 기술관련 TED 강연들 (ted.com) 

 

Must-watch tech talks of 2024

 

https://www.ted.com/playlists/853/must_watch_tech_talks_of_2024

 

Must-watch tech talks of 2024 | TED Talks

In this compelling collection of tech-focused talks, visionary speakers explore the frontiers of innovation — from AI-powered coding and entertainment to vertical farming, limitless energy, robotics and how to govern emerging technologies.

www.ted.com

  • 오디오 컴퓨터 세계에 오신 것을 환영합니다 - Jason Rugolo
  • AI는 어떻게 화면을 벗어나 현실 세계로 나올까요? - Daniela Rus
  • 이제 AI와 함께라면, 누구나 코더가 될 수 있습니다 - Thomas Dohmke
  • 마이크로 로봇을 통해 몸 속을 들여다보는 방법 - Alex Luebke, Vivek Kumbhari
  • 무한한 에너지의 비밀스러운 힘? 레이저 - Tammy Ma
  • AI의 발전이 멈춰 있나요? - Jennifer Golbeck
  • 수직 농업의 달콤한 미래 - Hiroki Koga
  • 엔터테인먼트의 AI 업그레이드 - Kylan Gibbs
  • 태양에 닿는 임무를 수행하는 탐사선 - Nour E. Rawafi
  • 예측하기 어려운 AI를 통제하는 방법 - Helen Toner

반응형
반응형

OAuth 제공자에게 - 잘못된 OAuth 토큰 설계 모음

  • Github: 오류 처리에 200 대신 400, 401 상태 코드를 보내주세요.
  • Facebook: 오류 토큰의 error 속성을 객체 대신 문자열로 바꿔주세요.
  • Tiktok: client_key 인자를 client_id로 바꿔주세요.
  • Strava: scope 인자에 반점(,)이 아닌 띄어쓰기(%20)로 바꿔주세요.
  • Naver: 토큰 만기 일자를 문자열로 만들지 말아주세요.
  • AWS Cognito: PKCE를 사용할 때도 HTTP Basic 인증을 사용할 수 있게 만들어주세요.
  • 42, Atlassian, Box, Coinbase, Dribble, Facebook, Kakao, Line, Linear, LinkedIn, Naver, osu!, Patreon, Shikimori, Start.gg, Strava, Tiltify, Twitch, VK, WorkOS: 클라이언트 인증에 client_secret 인자 말고 HTTP Basic 인증을 사용해주세요.

https://pilcrowonpaper.com/blog/dear-oauth-providers/

 

pilcrow

pilcrow's personal website

pilcrowonpaper.com

반응형
반응형

[python] Generate OTP using python

 

Here’s how you can generate a one-time password (OTP) using Python:

import random

def generate_otp(length=6):
    """
    Generates a numeric OTP of the given length.
    Default length is 6.
    """
    if length <= 0:
        raise ValueError("Length must be greater than zero")
    otp = ''.join([str(random.randint(0, 9)) for _ in range(length)])
    return otp

# Example usage
otp = generate_otp(6)
print(f"Your OTP is: {otp}")

 

 

Your OTP is: 583920

반응형
반응형

https://pypi.org/project/rich/

 

rich

Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal

pypi.org

Rich is a Python library for rich text and beautiful formatting in the terminal.

The Rich API makes it easy to add color and style to terminal output. Rich can also render pretty tables, progress bars, markdown, syntax highlighted source code, tracebacks, and more — out of the box.

python -m pip install rich

 

from rich.progress import Progress
import time

def main():
    with Progress() as progress:
        task1 = progress.add_task("[cyan]Downloading...", total=100)
        task2 = progress.add_task("[magenta]Processing...", total=200)

        while not progress.finished:
            time.sleep(0.03)  # Simulate some work
            progress.update(task1, advance=1)
            progress.update(task2, advance=0.5)

if __name__ == "__main__":
    main()

 

 

from rich.progress import Progress
import time

def main():
    # Create a progress bar
    with Progress() as progress:
        # Add a task
        task = progress.add_task("[cyan]Processing...", total=100)
        
        # Update progress
        for i in range(100):
            time.sleep(0.05)  # Simulate some work
            progress.update(task, advance=1)  # Advance the progress bar by 1

if __name__ == "__main__":
    main()
반응형

+ Recent posts