전체 글

전체 글

    무중단 배포 전략

    서비스 운영 중 가장 중요한 요소 중 하나는 "배포 시 서비스가 중단되지 않는 것"이다. 이를 위해 무중단 배포 전략이 필요하며, 이는 사용자의 서비스 경험을 해치지 않으면서도 안전하게 새로운 코드를 적용하기 위한 기법이다.다양한 환경과 요구사항에 따라 선택할 수 있는 대표적인 무중단 배포 전략들에 대해 알아보자.1. 블루/그린 배포 (Blue/Green Deployment)개념두 개의 독립된 환경(Blue, Green)을 구성한다. 현재 서비스 중인 환경(예: Blue) 외에 동일한 구성의 새로운 환경(Green)에 새 버전을 배포하고, 준비가 완료되면 전체 트래픽을 Green으로 전환한다.예시전환 전사용자 → 로드밸런서 → Blue (운영 중) → Green (대기 중)..

    RDBMS의 DB 락 이해하기

    데이터베이스 락은 동시성 환경에서 데이터 무결성과 일관성을 보장하기 위해 사용된다. 특히 MySQL과 같은 RDBMS에서는 여러 사용자가 동시에 데이터에 접근할 때 충돌을 방지하기 위해 다양한 락 메커니즘을 제공한다.1. 락의 필요성여러 트랜잭션이 동일한 데이터를 동시에 수정하거나 조회하면서 발생할 수 있는 문제를 방지한다. 대표적으로 아래와 같은 문제가 있다.더티 리드(Dirty Read): 한 트랜잭션이 커밋되지 않은 데이터를 읽음으로써 발생하는 문제비반복 읽기(Non-repeatable Read): 같은 쿼리를 두 번 수행했을 때 결과가 달라지는 문제팬텀 리드(Phantom Read): 조건에 부합하는 새로운 행이 다른 트랜잭션에 의해 추가되면서 생기는 문제2. 락의 종류2.1 테이블 레벨 락테이블..

    Transaction Application Flow

    트랜잭션이란?트랜잭션(Transaction)은 데이터베이스에서 여러 작업을 하나의 작업 단위로 묶어 처리하는 개념이다. 이때 ACID 특성을 만족해야 한다.Atomicity (원자성): 작업이 전부 수행되거나, 전혀 수행되지 않아야 한다.Consistency (일관성): 트랜잭션이 실행되기 전과 후의 데이터는 항상 유효한 상태를 유지해야 한다.Isolation (고립성): 동시에 실행되는 트랜잭션들은 서로 간섭해서는 안된다.Durability (지속성): 커밋된 트랜잭션 결과는 영구적으로 보존되어야 한다.Transaction Application Flow란?Transaction Application Flow는 하나의 비즈니스 유즈케이스에서 여러 단계의 작업을 트랜잭션으로 묶어 처리하는 흐름이다. 일부 단..

    Clean Architecture in Python

    https://youtu.be/C7MRkqP5NRI?si=NHG-qDp1cweFg7ue 이 글은 위의 영상을 정리하기 위해 필자의 개인적인 생각과 함께 작성된 글입니다.소프트웨어 아키텍처를 설계하고 이를 개발해 나갈 때 아래와 같은 고민을 하게 된다."어떻게 하면 변화에 강하고 확장 가능한 시스템을 만들 수 있을까?"이에 대한 답변으로 영상에서는 Clean Architecture를 위한 "The Golden Rule"을 제시한다. 이는 의존성 역전 원칙(Dependency Inversion Principle, DIP)을 바탕으로 시스템을 내부와 외부로 명확히 구분하여 유연성과 확장성을 극대화해야 한다는 원칙을 담고 있다고 생각한다.Clean Architecture우선, Clean Architecture를..

    [프로그래머스 Lv.3] 경주로 건설 (Python)

    문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/67259 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이처음에 문제를 풀 때, 최소 거리가 최소 비용을 보장하지 않을 것으로 판단되어서 DFS로 풀이하였다. 하지만, 일부 테스트 케이스에서 시간 초과가 발생하여 다른 방법으로 풀이해야 했다. (풀이를 검색해 보니 DFS + 메모이제이션 방식으로 풀이할 수 있다고도 한다.)###### DFS 방식으로 풀이, 시간 초과로 인해 실패 ######def solution(board): dirs = [(1, 0, False), (-1, 0,..

    [프로그래머스 Lv.2] 게임 맵 최단거리 (Python)

    문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/1844 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이2차원 지도에서 출발지로부터 목적지까지의 최단거리를 알아내는 작업이므로, 전형적인 BFS 문제라고 할 수 있다. 따라서 풀이 자체도 특히 어려운 부분 없이 출발지부터 BFS를 진행하여, 목적지에 도착할 때 몇 칸 움직인 상태인지를 출력하면 되기에 간단한 편이다. 다만, 주의해야 할 점은 목적지에 도달하지 못한 경우에는 -1을 출력해야 한다는 점이다. 처음에 필자는 목적지에 도달하지 못하는 조건을 생각할 때, 단순히 목적지의 왼쪽과 ..

    Github autoSetupRemote 설정

    Github origin에 새로 판 브랜치를 push 하려고 하면, 아래와 같은 에러 메시지와 함께 원하는 대로 push가 안 되는 경우가 있다.fatal: The current branch test-branch has no upstream branch.To push the current branch and set the remote as upstream, use git push --set-upstream origin test-branchTo have this happen automatically for branches without a trackingupstream, see 'push.autoSetupRemote' in 'git help config'.자세하게 에러 메시지를 읽어보면, test-b..

    [프로그래머스 Lv.3] 단어 변환 (Python)

    문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/43163 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이BFS를 사용한 풀이이다. 풀고 나니 원래 보통 BFS라고 할 때 사용하는 while과 deque를 사용한 구조로 풀이되진 않았으나.. 어찌 됐든 한 단계씩 진행되는 BFS 구조를 사용하여 문제 풀이를 진행했다. 문제에 적힌 대로 주어진 단어의 한 글자씩 변환하며, 변환된 단어가 words 배열에 있는지 체크하고, 또 동시에 이전에 이미 변환을 진행했던 단어가 아닌지 확인하였다. 확인을 통과한 새로운 단어들을 모아 새로운 단계에서..

    [프로그래머스 Lv.2] 괄호 변환 (Python)

    문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/60058 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이DFS와 구현이 섞인 문제로 볼 수 있다. 흔히 볼 수 있는 DFS 문제와 다르긴 하나, 재귀를 사용해 한 문장 p의 끝까지 들어가며 특정 로직을 적용하기에 DFS 문제라고 생각한다.구현 부분은 어려운 알고리즘을 사용하는 게 아니다 보니, 문제에 주어진 대로 그저 한 단계씩 구현하면 된다. 한 단계씩 구현해 나가고, 재귀적으로 다시 실행해야 하는 부분은 DFS를 통해 진행하면 비교적 쉽게 풀 수 있다.  처음에는 p의 길이가 10..

    [프로그래머스 Lv.3] 여행경로 (Python)

    문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/43164 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이DFS를 활용한 문제이다. dictionary를 활용하여 전체 티켓들을 사용해 마치 graph와 같은 구조를 완성하고, 이를 DFS로 순회하면 된다. DFS로 순회하며, 더 이상 이동할 수 없는 경우가 되면 그 때 위치하는 공항을 answer 배열에 저장한다.다만 주의해야할 점이 있는데, 가능한 경로가 2개 이상일 땐 알파벳 경로가 앞서는 경우를 반환하라고 했기 때문에 그래프를 완성할 때 정렬이 필요하다는 점을 고려하며 구현해야 ..