본문 바로가기

분류 전체보기200

트랜잭션 전파 REQUIRES_NEW 활용 로그 저장 로직에서 에러가 터지는데, 왜 회원 가입도 안되는거지?로그 저장 로직의 성공 여부에 상관 없이 회원 가입을 하고 싶은데 어떻게 하지? 아래의 글은 김영한님의 Spring DB V2 강의를 참고해서 작성했습니다.   이번 글은 아래와 같은 상황을 가정하고, 해결하는 방법을 다루는 글입니다.신입 개발자 A씨는 회원 가입과 회원 가입 이력 로그 저장을 구현하는 업무를 맡았습니다.A씨는 데이터 정합성을 보장하기 위해 두 작업을 하나의 트랜잭션으로 묶어 처리했습니다.그러던 어느 날, 고객들로부터 회원 가입이 되지 않는다는 항의가 쏟아지기 시작했습니다.이상을 감지한 A씨가 원인을 확인해본 결과, 회원 가입 이력 로그 저장 과정에서 오류가 발생하면서,같은 트랜잭션 내에 포함된 회원 정보 저장 로직까지 롤백.. 2025. 2. 15.
[프로그래머스] Lv3 단속 카메라 접근 방식최소한의 카메라로 모든 차량을 단속하려면, 가장 많은 차량이 겹치는 종료 지점에 카메라를 설치해야 합니다.이를 위해, 먼저 차량의 이동 범위를 "끝 지점" 기준으로 정렬합니다. 정렬된 이동 범위를 기준으로, 가장 먼저 종료되는 지점부터 카메라를 배치하면 최소 개수의 카메라로 모든 차량을 단속할 수 있습니다. 왜 자동차의 끝지점을 기준으로 정렬해 주어야 할까요? 자동차의 이동 범위를 끝 지점을 기준으로 오름차순 정렬하면, 가장 먼저 종료되는 차량부터 고려할 수 있습니다.즉, 가장 먼저 끝나는 자동차를 단속하는 위치에 카메라를 설치하면, 이후의 자동차들도 최대한 많이 커버할 수 있습니다. 왜 하필 끝 지점인가요? 시작지점은 안되나요? 상황을 예시로 들겠습니다. A자동차가 이동하는 범위는 [1,4] .. 2025. 2. 15.
[네트워크] TCP 제어 방법 "TCP가 신뢰성을 보장하기 위해 어떻게 할까요?" 이번 글은 TCP 제어 방법에 대해 정리한 글입니다.아래의 내용은 "기술 면접 대비 CS 전공 핵심 요약집"의 내용을 공부하고 정리한 내용입니다. TCP는 신뢰성을 보장하기 위해 어떻게 할까요? TCP 제어 방법TCP는 신뢰성을 보장하기 위해 흐름 제어, 혼잡 제어, 오류 제어를 합니다. 흐름제어가 뭘까요? 흐름 제어흐름 제어는 송신부와 수신부 사이에 생기는 데이터 처리 속도의 차이로 인해 생기는 데이터 손실을 방지하는 방법입니다.쉽게 말해, 이름 그대로 흐름을 제어하는 것입니다. 흐름제어의 방법은 뭐가 있을까요? 흐름제어 방법은 크게 정지 대기(stop-wait), 슬라이딩 윈도우(sliding window) 방식이 있습니다. 정지 대기(stop-wa.. 2025. 2. 15.
[프로그래머스] Lv3 섬 연결하기 접근 방식문제를 다른말로 해석하면, 문제가 모든 정점을 연결하는 간선들의 최소 비용 집합을 구하는 것입니다.이 문제는 최소 신장 트리(MST, Minimum Spanning Tree)를 찾는 문제라고 판단을 했습니다. 최소 신장 트리를 찾는 방법은 크게 크루스칼 알고리즘과 프림 알고리즘이 있습니다.프림 알고리즘이 크루스칼 알고리즘보다 비교적 더 쉽다고 판단이 되어 프림 알고리즘을 선택했습니다. 프림 알고리즘의 흐름은 어떻게 될까요?1. 시작 정점을 선택2. 우선순위 큐에서 가장 가중치가 작은 간선을 선택3. 해당 간선이 연결하는 정점이 MST에 포함되지 않았다면 추가4. 새로운 정점에서 갈 수 있는 간선들을 우선순위 큐에 삽입5. MST가 완성될 때까지 반복 예제를 분석하며 프림 알고리즘이 합당한지 보겠.. 2025. 2. 14.
트랜잭션 전파(REQUIRES_NEW) 내부 트랜잭션에 롤백이 발생해도 외부 트랜잭션을 커밋 하는 방법은 없을까?  이번 글은 트랜잭션 전파 옵션 중 REQUIRES_NEW에 대해 소개하고, 예제 코드를 통해 알아보겠습니다.아래의 글은 김영한님의 Spring DB V2 강의를 참고해서 작성했습니다. REQUIRES_NEW 옵션은 무엇일까요? REQUIRES_NEW 옵션REQUIRES_NEW 옵션은 외부 트랜잭션과 내부 트랜잭션을 완전히 분리해서 각각 별도의 물리 트랜잭션을 사용하는 방법입니다. 그래서 커밋과 롤백도 REQUIRES 옵션과 다르게 각각 실행합니다. 내부 트랜잭션에 롤백이 발생해도 외부 트랜잭션에 영향을 주지 않게 됩니다. 반대로 외부 트랜잭션에 롤백이 발생해도 내부 트랜잭션에 영향을 주지 않게 됩니다. 별도의 트랜잭션을 사용하기.. 2025. 2. 14.
[프로그래머스] Lv2 - 구명 보트 접근 방식이 문제는 짝짓기 문제 유형이라고 생각합니다.정렬을 해서 순차적으로 몸무게가 가벼운 사람들끼리 짝을 짓게 되면 틀리는 문제입니다.반례는 다음과 같습니다. (단, 보트가 실을 수 있는 최대 무게는 100 입니다.)people : [30,30,70,70,40]answer : 3 제일 몸무게가 적게 나가는 사람들끼리 묶어주는 방식으로 풀게 되면 아래와 같이 됩니다.(30,30), (40), (70), (70) 보트가 4개가 필요하게 됩니다. 하지만 최소의 보트 갯수는 3개 이므로, 정답이 아닙니다. 선택한 두 사람의 무게의 합이 보트가 실을 수 있는 최대 무게에 근접하도록 짝지어야 합니다.(30,70), (30,70), (40) 이렇게 짝을 지어주면 3개의 보트로 모든 사람을 나를 수 있습니다. 어떤.. 2025. 2. 13.
트랜잭션 전파(REQUIRED) ROLLBACK 편 트랜잭션 전파시 ROLLBACK이 발생되면 어떻게 될까?  이번글은 외부 트랜잭션, 내부 트랜잭션에서 롤백이 발생하는 경우와 코드 예제를 통해 흐름을 알아보겠습니다.트랜잭션 전파 옵션은 여러개가 있지만, REQUIRED를 기준으로 했고, 김영한님의 Spring DB V2 강의를 참고해서 작성했습니다. 내부 트랜잭션이 커밋되고 외부 트랜잭션이 롤백되면 어떻게 될까요? 내부 트랜잭션 커밋 & 외부 트랜잭션 롤백내부 트랜잭션을 커밋해도, 외부 트랜잭션이 롤백되면 내부 트랜잭션의 데이터도 전부 롤백됩니다. 예시 코드로 확인해보겠습니다.@Testvoid outer_transaction_rollback() { log.info("outer 트랜잭션 시작"); TransactionStatus outerSta.. 2025. 2. 13.
프로세스와 스레드 "프로세스와 스레드의 차이가 뭘까?" 이번글은 프로세스와 스레드에 대해 정리한 글입니다.아래의 내용은 "기술 면접 대비 CS 전공 핵심 요약집"의 내용을 참고했습니다. 프로세스란 무엇일까요? 프로세스컴퓨터에서 실행 중인 하나의 프로그램을 의미하고, 특정 작업을 수행하기 위한 명령어의 집합입니다.OS는 프로그램을 실행하면, 디스크에 저장된 데이터를 메모리로 로드합니다.  프로세스는 OS로부터 독립된 메모리 영역인(코드, 데이터, 스택, 힙)을 할당받고 다른 프로세스의 메모리 영역에 접근할 수 없습니다. 프로세스에 할당된 메모리 영역은 아래 그림과 같습니다. 프로세스 메모리 영역 구조는 아래 그림과 같습니다.각 영역은 어떤 역할을 할까요? 스택은 지역 변수, 함수의 매개변수, 반환되는 주소 값 등이 저장됩니.. 2025. 2. 12.
트랜잭션 전파(REQUIRED) COMMIT편 진행중인 트랜잭션 내부에 또 다른 트랜잭션을 실행하면 어떻게 될까? 아래의 내용은 김영한님의 Spring DB V2 강의를 참고해서 작성했습니다. 이번글은 트랜잭션 전파에 대한 개념과 코드 예제를 통해 흐름을 알아보겠습니다.트랜잭션 전파 옵션은 여러개가 있지만, REQUIRED를 기준으로 작성했습니다. 트랜잭션 내부에 또 다른 트랜잭션을 실행하는 경우, 기존 트랜잭션을 사용해야할까요? 아니면 새로운 트랜잭션을 시작해야할까요? 트랜잭션 전파트랜잭션 전파는 현재 실행 중인 트랜잭션이 있을 때, 새로운 트랜잭션을 생성할지 기존 트랜잭션을 그대로 사용할지를 결정하는 방식입니다. 트랜잭션 전파는 어떠한 방식으로 사용될까요? 외부 트랜잭션이 수행중인 상태에서 내부 트랜잭션이 추가 수행되는 상황을 가정합니다. 왜 외.. 2025. 2. 12.