몰랐던거(53)
-
[Spring JPA] 비관적 락, 낙관적 락 공부하기
비관적 락, 낙관적 락 이란? 비관적 락 비관적 락은 충돌이 일어날 것이다 비관적으로 생각해서 미리 락을 걸어주는 방법입니다. 하나의 트랜잭션이 자원에 접근 시 락을 걸고 다른 트랜잭션이 접근하지 못하게 합니다. 이 때 Shared Lock과 Exclusive Lock 두 가지를 걸 수 있습니다. Shared Lock은 다른 트랜잭션에서 읽기만 가능하고 다른 트랜잭션의 Shared Lock과 자원을 공유합니다. 하지만 Exclusive Lock은 접근할 수 없습니다. Exclusive Lock은 읽기, 쓰기 다 공유하지 않습니다. 장점 충돌이 많은 경우 롤백 횟수를 줄여 성능적인 측면에서 좋습니다. 데이터 일관성과 무결성을 보장하는 수준이 매우 높습니다. 단점 읽기 작업이 많은 로직의 경우엔 동시성이 떨..
2023.04.11 -
[Transaction] 트랜잭션과 트랜잭션 격리성 공부하기
트랜잭션이란? 트랜잭션은 DB의 상태 변화를 위해 수행되는 가장 작은 더 이상 쪼개질 수 없는 작업 단위입니다. 하나의 트랜잭션이 가진 작업들은 한 몸처럼 동작해야 하기 때문에 실패하면 전부 다 없던 작업으로 처리(RollBack)하고 성공하면 DB에 반영(Commit)합니다. 트랜잭션의 특성 트랜잭션은 아래의 4가지 특성을 가집니다. 원자성 (Atomicity) : 더 이상 쪼개지지 않는 최소 작업의 단위입니다. 일관성 (Consistency) : 일관된 DB에서 트랜잭션이 성공된 후에도 DB가 일관되어야 합니다. 트랜잭션의 결과로 DB가 모순되면 안됩니다. 격리성 (Isolation) : 실행 중인 트랜잭션의 중간결과를 다른 트랜잭션이 접근할 수 없습니다. 영속성 (Durability) : 트랜잭션이..
2023.04.11 -
[Lock] DB 락에 대해서 공부하기
DB Lock이란? DB는 여러 사용자들이 동시에 같은 데이터에 접근하는 경우 데이터의 무결성과 일관성을 지키기 위해서 락을 사용합니다. 락은 트랜잭션 처리의 순차성을 보장하기 위한 방법입니다. Lock의 범위 (Level) DB에는 Lock이 걸리는 범위를 설정할 수 있습니다. 모두 아래와 같습니다. 데이터 베이스 : 전체 DB에 락을 설정하고 거의 사용되지 않습니다. 주요 DB 업데이트에 사용됩니다. (DB 소프트웨어 버전 업그레이드) 파일 : 테이블, 로우 등의 실제 데이터가 쓰여지는 물리적인 저장소에 락을 설정하고 잘 사용되지 않습니다. 테이블 : 테이블에 락을 설정하고 주로 DDL 구문과 같이 전체 테이블에 영향을 주는 변경을 수행 시 유용합니다. 페이지와 블록 : 페이지와 블록에 락을 설정하고..
2023.04.11 -
[프로그래머스] 입국심사 (Java)
더보기 🔗 https://school.programmers.co.kr/learn/courses/30/lessons/43238 문제 정보 ※ 자세한 문제에 대한 정보의 위의 링크를 참조해주세요! 제한 사항 입국심사를 기다리는 사람은 1명 이상 1,000,000,000명 이하입니다. 각 심사관이 한 명을 심사하는데 걸리는 시간은 1분 이상 1,000,000,000분 이하입니다. 심사관은 1명 이상 100,000명 이하입니다. 문제 요약 해당 문제에서는 아래와 같이 말합니다. 🗨️ 가장 앞에 서 있는 사람은 비어 있는 심사대로 가서 심사를 받을 수 있습니다. **하지만** 더 빨리 끝나는 심사대가 있으면 기다렸다가 그곳으로 가서 심사를 받을 수도 있습니다. 모든 사람이 심사를 받는데 걸리는 시간을 최소로 하고..
2023.03.31 -
[프로그래머스] 빛의 경로 사이클 (Java)
더보기 🔗 https://school.programmers.co.kr/tryouts/74944/ 문제 정보 ※ 자세한 문제에 대한 정보의 위의 링크를 참조해주세요! 제한 사항 1 ≤ grid의 길이 ≤ 500 1 ≤ grid의 각 문자열의 길이 ≤ 500 grid의 모든 문자열의 길이는 서로 같습니다. grid의 모든 문자열은 'L', 'R', 'S'로 이루어져 있습니다. 문제 요약 문제에서 요구한 사항을 요약하면 다음과 같습니다. 격자에 ‘S’가 있으면 이전 방향 그대로 직진. 격자에 ‘L’이 있으면 좌회전. 격자에 ‘R’이 있으면 우회전. 격자 밖으로 나가면 0으로 이동 (순환되는 구조). 이러한 요구 사항이 주어졌을 때, 순환되는 경로의 길이를 배열로 받아서 오름차순으로 정렬 후 반환해야합니다. 문..
2023.03.28 -
[ 프로그래머스 ] 사라지는 발판 (Java)
🔗https://school.programmers.co.kr/learn/courses/30/lessons/92345문제 정보※ 자세한 문제에 대한 정보의 위의 링크를 참조해주세요!제한 사항1 ≤ board 의 가로, 세로 길이 ≤ 5board 원소는 0 or 10 = 발판 없음, 1 = 발판 있음좌측 상단 좌표 = (0, 0), 우측 상단 좌표 = (board 세로 - 1, board 가로 - 1)플레이어 초기 위치는 무조건 보드 내부에 있음.상대 플레이어가 있는 칸으로 이동 가능.문제 요약문제에서 요구한 사항을 요약하면 다음과 같습니다.무조건 A부터 게임을 시작한다.양 플레이어는 최적의 플레이를 한다. 이길 ‘수’ 있는 플레이는 최대한 빨리 승리하도록 플레이 → 최대한 적게 움직임.질 ‘수밖에’ 없는 ..
2023.03.22