전체 글
CS 지식 및 알고리즘 풀이
-
저번 DeadLock 과 Redis 대기열(1) 포스팅에서 DeadLock 해결법에 여러가지가 있다고 한 것중에 트랜잭션의 격리 수준을 조절하는 방법이 있다고 했는데, 이 때 트래잭션의 격리 수준에 대해서 알아보도록 하겠습니다. 트랜잭션 격리수준(isolation level)이란 동시에 여러 트랜잭션이 처리될 때, 트랜잭션끼리 얼마나 서로 고립되어 있는지를 나타내는 것이다. 또한, 데이터베이스 관리 시스템에서 여러 개의 동시 실행되는 트랜잭션들 간에 어떻게 데이터의 일관성과 격리를 유지할지를 정의하는 개념입니다. 격리 수준은 아래와 같이 4가지로 나뉩니다. 1.Read Uncommitted(레벨 0) 가장 낮은 격리 수준이며, 트랜잭션에서 변경된 내용이 커밋되지 않더라도 다른 트랜잭션에서 해당 내용을 읽..
트랜잭션의 격리수준(Isolation level)저번 DeadLock 과 Redis 대기열(1) 포스팅에서 DeadLock 해결법에 여러가지가 있다고 한 것중에 트랜잭션의 격리 수준을 조절하는 방법이 있다고 했는데, 이 때 트래잭션의 격리 수준에 대해서 알아보도록 하겠습니다. 트랜잭션 격리수준(isolation level)이란 동시에 여러 트랜잭션이 처리될 때, 트랜잭션끼리 얼마나 서로 고립되어 있는지를 나타내는 것이다. 또한, 데이터베이스 관리 시스템에서 여러 개의 동시 실행되는 트랜잭션들 간에 어떻게 데이터의 일관성과 격리를 유지할지를 정의하는 개념입니다. 격리 수준은 아래와 같이 4가지로 나뉩니다. 1.Read Uncommitted(레벨 0) 가장 낮은 격리 수준이며, 트랜잭션에서 변경된 내용이 커밋되지 않더라도 다른 트랜잭션에서 해당 내용을 읽..
2023.09.01 -
앞서 1번 포스팅에서는 DeadLock에 대해서 알아봤습니다. 이번에는 Redis가 무엇인지 그리고 Redis Cluster, Replication, 대기열에 대해서 알아보도록 하겠습니다. 🧐 Redis Redis(Remote Dictionary Storage, 레디스)는 모든 데이터를 메모리에 저장하고 조회하는 인메모리 데이터베이스, 메모리 기반의 key-value 구조의 데이터 관리 시스템이다. Redis는 인메모리 데이터 스토어로서 매우 빠른 데이터 액세스와 처리를 제공하는 오픈 소스 데이터베이스 시스템입니다. 주로 캐싱, 세션 관리, 메시지 브로커 등 다양한 용도로 사용됩니다. Redis의 다양한 특징들 1. In-Memory 데이터 저장 데이터를 메모리에 저장하여 매우 빠른 읽기 및 쓰기 작업을..
DeadLock과 Redis 대기열 사용하기 - (2)앞서 1번 포스팅에서는 DeadLock에 대해서 알아봤습니다. 이번에는 Redis가 무엇인지 그리고 Redis Cluster, Replication, 대기열에 대해서 알아보도록 하겠습니다. 🧐 Redis Redis(Remote Dictionary Storage, 레디스)는 모든 데이터를 메모리에 저장하고 조회하는 인메모리 데이터베이스, 메모리 기반의 key-value 구조의 데이터 관리 시스템이다. Redis는 인메모리 데이터 스토어로서 매우 빠른 데이터 액세스와 처리를 제공하는 오픈 소스 데이터베이스 시스템입니다. 주로 캐싱, 세션 관리, 메시지 브로커 등 다양한 용도로 사용됩니다. Redis의 다양한 특징들 1. In-Memory 데이터 저장 데이터를 메모리에 저장하여 매우 빠른 읽기 및 쓰기 작업을..
2023.08.31 -
이번에는 저번 구글 I/O Extended 2023 백엔드에서 들었던 GDG Incheon 백엔드 양일표 개발자님께서 강연해주셨던 DeadLock과 Redis 대기열 사용하기에서 새로 알게 된 내용과 깨달은 점을 정리해보려고합니다. 🧐 DeadLock 우선 DeadLock이란 둘 이상의 프로세스가 다른 프로세스가 점유하고 있는 자원을 서로 기다릴 때 무한 대기에 빠지는 상황을 일컫습니다. 이 때 DeadLock에 대한 해결법이 여러가지가 있는데 강연 중 소개해주신 해결법들은 트랜잭션의 크기, 방향, Lock, 격리 수준, 쿼리 튜닝, @Retryable 등과 같은 요소들을 고려하는 방법입니다. 1. 트랜잭션 크기 조절 트랜잭션 분할: 큰 트랜잭션을 작은 단위로 분할하여 실행하면, 더 적은 자원을 점유하므..
DeadLock과 Redis 대기열 사용하기 - (1)이번에는 저번 구글 I/O Extended 2023 백엔드에서 들었던 GDG Incheon 백엔드 양일표 개발자님께서 강연해주셨던 DeadLock과 Redis 대기열 사용하기에서 새로 알게 된 내용과 깨달은 점을 정리해보려고합니다. 🧐 DeadLock 우선 DeadLock이란 둘 이상의 프로세스가 다른 프로세스가 점유하고 있는 자원을 서로 기다릴 때 무한 대기에 빠지는 상황을 일컫습니다. 이 때 DeadLock에 대한 해결법이 여러가지가 있는데 강연 중 소개해주신 해결법들은 트랜잭션의 크기, 방향, Lock, 격리 수준, 쿼리 튜닝, @Retryable 등과 같은 요소들을 고려하는 방법입니다. 1. 트랜잭션 크기 조절 트랜잭션 분할: 큰 트랜잭션을 작은 단위로 분할하여 실행하면, 더 적은 자원을 점유하므..
2023.08.30 -
문제 구름 심시티를 하고 있는 플레이어는 한 변의 길이가 N인 정사각형 모양의 마을 M을 만들고 있다. r번째 행, c번째 열에 해당하는 칸에는 숫자 M(r,c)가 적혀 있다. M(r,c)는 0또는 1중 하나이며, 각 숫자가 의미하는 바는 아래와 같다. - 0이면 아무것도 없는 칸이다. - 1이면 집이 있는 칸이다. 마을에 있는 집에 전력을 공급하기 위해선 그 집에 발전기를 설치하거나, 상하좌우로 인접한 집 중 하나가 전력을 공급받고 있으면 된다. 플레이어가 모든 집에 전력을 공급하기 위해서 설치해야 할 발전기의 최소 개수를 구해보자. 코드 from sys import stdin as s from collections import deque def bfs(si,sj): global count v[si][..
구름톤 챌린지 3주 차 학습 일기(Day 02)문제 구름 심시티를 하고 있는 플레이어는 한 변의 길이가 N인 정사각형 모양의 마을 M을 만들고 있다. r번째 행, c번째 열에 해당하는 칸에는 숫자 M(r,c)가 적혀 있다. M(r,c)는 0또는 1중 하나이며, 각 숫자가 의미하는 바는 아래와 같다. - 0이면 아무것도 없는 칸이다. - 1이면 집이 있는 칸이다. 마을에 있는 집에 전력을 공급하기 위해선 그 집에 발전기를 설치하거나, 상하좌우로 인접한 집 중 하나가 전력을 공급받고 있으면 된다. 플레이어가 모든 집에 전력을 공급하기 위해서 설치해야 할 발전기의 최소 개수를 구해보자. 코드 from sys import stdin as s from collections import deque def bfs(si,sj): global count v[si][..
2023.08.29 -
8월 26일 토요일에 인천 스타트업파크에서 구글 IO에서 발표한 기술과 개발자들의 열정, 지식을 나누는 자리인 I/O Extended에 갔다왔습니다! 우선 세션은 Web, Backend, Flutter, Android, Machine Learning 등이 있었는데 저는 Backend분야에 관심이 있어 해당 강의를 들었어요. 위에는 백엔드 세션 시간표인데 각 교시마다 개발자분들이 나와서 주제와 관련된 내용을 강연해주시는 방식이었습니다. 여기서 들은 내용들 중에 저는 메세지 큐와 Redis, Feature Flag, 모놀리스 등등 인상 깊었던 주제들에 관해서 추후 알게 된 점을 포스팅할 예정입니다. 그리고 라인 개발자 분이신 김인제 개발자님이 강연해주신 이벤트 루프는 NETTY와 ARMERIA를 모르는 상태..
[TIL]23.08.26(토) - I/O Extended 2023 Incheon8월 26일 토요일에 인천 스타트업파크에서 구글 IO에서 발표한 기술과 개발자들의 열정, 지식을 나누는 자리인 I/O Extended에 갔다왔습니다! 우선 세션은 Web, Backend, Flutter, Android, Machine Learning 등이 있었는데 저는 Backend분야에 관심이 있어 해당 강의를 들었어요. 위에는 백엔드 세션 시간표인데 각 교시마다 개발자분들이 나와서 주제와 관련된 내용을 강연해주시는 방식이었습니다. 여기서 들은 내용들 중에 저는 메세지 큐와 Redis, Feature Flag, 모놀리스 등등 인상 깊었던 주제들에 관해서 추후 알게 된 점을 포스팅할 예정입니다. 그리고 라인 개발자 분이신 김인제 개발자님이 강연해주신 이벤트 루프는 NETTY와 ARMERIA를 모르는 상태..
2023.08.28 -
문제 구름-그라운드 게임에는 통증이라는 시스템이 있다. 통증 수치가 높다면 게임에서 승리하기 어려워지므로, 아이템을 적절히 사용해 통증 수치를 으로 유지하는 것이 중요하다. 게임 안에는 통증 수치를 감소시켜 주는 아이템이 종류가 있다. 아이템의 이름은 이고, 각 아이템을 사용 시 각각 만큼 통증 수치를 감소시켜 준다. 각 아이템은 원하는 만큼 획득할 수 있다. 플레이어는 적과의 전투에서 피해를 입어 현재 의 통증 수치를 가지고 있다. 플레이어가 통증 수치를 으로 줄이기 위해 필요한 아이템의 최소 개수를 구해보자. 단, 사용했을 때 통증 수치가 보다 작아지는 아이템은 사용할 수 없음에 유의하시오. 코드 from sys import stdin as s N = int(s.readline()) A, B = ma..
구름톤 챌린지 3주 차 학습 일기(Day 01)문제 구름-그라운드 게임에는 통증이라는 시스템이 있다. 통증 수치가 높다면 게임에서 승리하기 어려워지므로, 아이템을 적절히 사용해 통증 수치를 으로 유지하는 것이 중요하다. 게임 안에는 통증 수치를 감소시켜 주는 아이템이 종류가 있다. 아이템의 이름은 이고, 각 아이템을 사용 시 각각 만큼 통증 수치를 감소시켜 준다. 각 아이템은 원하는 만큼 획득할 수 있다. 플레이어는 적과의 전투에서 피해를 입어 현재 의 통증 수치를 가지고 있다. 플레이어가 통증 수치를 으로 줄이기 위해 필요한 아이템의 최소 개수를 구해보자. 단, 사용했을 때 통증 수치가 보다 작아지는 아이템은 사용할 수 없음에 유의하시오. 코드 from sys import stdin as s N = int(s.readline()) A, B = ma..
2023.08.28 -
크래프톤 정글 2기의 마지막 커리큘럼인 "나만의 무기 갖기" 단계에서 개발하면서 겪었던 기술적 챌린지를 정리하려고 합니다. 우선 우리의 서비스는 개발자의 GitHub 활동을 분석하여 개인화된 이력서 템플릿을 제공하며, 기업과 개발자 간의 채용 과정을 간편하고 효율적으로 만들어주는 시스템입니다. 개발자의 GitHub를 분석해야 하다 보니 많은 API 호출 및 GPT API를 호출하는 과정이 발생합니다. 처음에는 기능만 목표로 구현을 했기 때문에 동기적으로 데이터를 호출하고 데이터 베이스에 저장했습니다. 하지만 GitHub계정을 분석하는데 시간이 너무 오래 걸렸기 때문에 이 속도를 줄이기 위해 리액티브 프로그래밍인 Flux와 Mono를 사용해서 비동기 호출로 코드를 변경하였습니다. 아래는 관련 코드들 중 하..
메세지 큐를 활용한 트랜잭션 관리 - 기술적 챌린지크래프톤 정글 2기의 마지막 커리큘럼인 "나만의 무기 갖기" 단계에서 개발하면서 겪었던 기술적 챌린지를 정리하려고 합니다. 우선 우리의 서비스는 개발자의 GitHub 활동을 분석하여 개인화된 이력서 템플릿을 제공하며, 기업과 개발자 간의 채용 과정을 간편하고 효율적으로 만들어주는 시스템입니다. 개발자의 GitHub를 분석해야 하다 보니 많은 API 호출 및 GPT API를 호출하는 과정이 발생합니다. 처음에는 기능만 목표로 구현을 했기 때문에 동기적으로 데이터를 호출하고 데이터 베이스에 저장했습니다. 하지만 GitHub계정을 분석하는데 시간이 너무 오래 걸렸기 때문에 이 속도를 줄이기 위해 리액티브 프로그래밍인 Flux와 Mono를 사용해서 비동기 호출로 코드를 변경하였습니다. 아래는 관련 코드들 중 하..
2023.08.22 -
문제 구름 찾기 게임은 한 변의 길이가 인 격자 모양의 게임판에서 진행하는 게임이다. 게임판의 일부 칸에는 구름이 숨겨져 있고, 게임판에 숨겨진 모든 구름의 위치를 찾으면 게임에서 승리할 수 있다. 구름 찾기 게임의 제작자인 플레이어는 조금 더 쉽게 구름을 찾을 수 있도록 도와주는 깃발을 게임판 위에 설치하려고 한다. 깃발은 구름이 없는 칸이면서, 상하좌우와 대각선으로 인접한 여덟 칸 중 구름이 하나 이상 있는 칸에만 설치할 수 있다. 이렇게 설치한 깃발에는 인접한 여덟 칸 중 구름이 있는 칸의 개수에 해당하는 값이 적힌다. 플레이어는 깃발을 세울 수 있는 모든 칸에 깃발을 세워두었다. 문득, 플레이어는 깃발 중 값이 인 깃발이 몇 개나 있는지가 궁금해졌다. 여러분이 플레이어를 대신해 값이 인 깃발의 개..
구름톤 챌린지 2주 차 학습 일기(Day 02)문제 구름 찾기 게임은 한 변의 길이가 인 격자 모양의 게임판에서 진행하는 게임이다. 게임판의 일부 칸에는 구름이 숨겨져 있고, 게임판에 숨겨진 모든 구름의 위치를 찾으면 게임에서 승리할 수 있다. 구름 찾기 게임의 제작자인 플레이어는 조금 더 쉽게 구름을 찾을 수 있도록 도와주는 깃발을 게임판 위에 설치하려고 한다. 깃발은 구름이 없는 칸이면서, 상하좌우와 대각선으로 인접한 여덟 칸 중 구름이 하나 이상 있는 칸에만 설치할 수 있다. 이렇게 설치한 깃발에는 인접한 여덟 칸 중 구름이 있는 칸의 개수에 해당하는 값이 적힌다. 플레이어는 깃발을 세울 수 있는 모든 칸에 깃발을 세워두었다. 문득, 플레이어는 깃발 중 값이 인 깃발이 몇 개나 있는지가 궁금해졌다. 여러분이 플레이어를 대신해 값이 인 깃발의 개..
2023.08.22