[Back-End] DBMS에서 동시성을 제어하는 방법
·
Back-end
매일메일을 통해하루하루 CS 공부하기! DBMS의 대표적인 데이터 동시성 제어 방식으로는 MVCC(Multi-Version Concurrency Control)와 LBCC(Lock-Based Concurrency Control)이 있다. 처음 들어보는 말들이다.. 차근차근히 정리하며 공부해보자. 동시성 제어동시성 제어가 뭔지부터 파악할 필요가 있다. 동시성 제어란 DBMS가 다수의 사용자 사이에서 동시에 작용하는 다중 트랜잭션의 상호간섭 작용에서 DB를 보호하는 것이다. 일반적으로, 동시성을 허용하면 일관성이 낮아지게 된다. (반비례 관계) DBMS는 동시성 제어를 위해 Lock 기능과 SET TRANSACTION 명령어를 이용해 트랜잭션의 격리성 수준을 조정하는 기능도 제공한다. 동시성 제어는 동시에 ..
[Back-End] 웹사이트에 처음 접근했을 때 발생하는 일련의 과정
·
Back-end
매일메일을 통한하루하루 CS 공부하기! 사용자가 웹페이지를 접속할 때 무수히 많은 작업들이 일어난다.이 부분에 대해 정확히 짚고 넘어가는 것이 네트워크 공부에 많은 도움이 될 것이다. 웹 페이지 접속 플로우예를 들어, 사용자가 www.google.com을 입력하면, 브라우저는 HTTP 프로토콜을 사용해 구글 웹서버와 통신하려고 한다.HTTP는 OSI 7계층 중 애플리케이션 계층에서 동작하는 프로토콜이다. 이때, 브라우저는 도메인 네임에 대한 IP 주소를 알아야하기 때문에, DNS (Domain Name System) 서버에 요청을 보낸다.이 질의 과정 또한 Application Layer에서 이루어지며, DNS 서버는 해당 도메인에 대한 IP주소를 응답한다. IP 주소를 얻은 후, 브라우저는 구글 서버와..
[Back-End] 스레드, 프로세스, 코어의 수는 많을수록 좋을까요?
·
Back-end
매일메일을 통한하루하루 CS 공부하기!  스레드, 프로세스, 코어의 수가 많을수록 시스템 성능이 향상된다고 생각할 수 있지만, 실제로는 그렇지 않을 확률이 크다. 스레드가 많으면?OS가 스레드 간 Context Switching을 자주 수행하여 CPU 리소스가 스레드 관리에 많이 소모됨스레드가 많아지면 Synchronization이나 State 관리가 복잡해짐 → 버그 발생률 증가실제 작업 수행 효율이 떨어질 수 있으며, 많은 스레드가 동시에 실행될 경우 Memory, Cache, Lock 등의 자원을 경쟁하게 되어 성능 저하나 Dead Lock 발생 가능. 프로세스가 많으면?각 프로세스는 독립적인 메모리 공간을 가짐따라서 많은 프로세스가 동시 실행 시 Memory Utilization이 급격하게 증가...
[Back-End] Shared Lock과 Exclusive Lock 이란?
·
Back-end
매일메일을 통해하루하루 CS 공부하기! 공유 락과 배타 락은 데이터 일관성과 무결성을 위해 사용되는 락 유형이다. 공유 락 (Shared Lock)이란?읽기 락 (Read Lock)이라고 부르며, 공유 락이 걸린 데이터는 SELECT 연산만 가능하며, 쓰기 (UPDATE, DELETE) 연산은 불가능하다. 공유 락이 걸린 데이터에 대해서 다른 트랜잭션에서도 Shared Lock을 획득할 수 있지만, Exclusive Lock은 획득할 수 없다. 즉, 공유 락을 사용하면 트랜잭션 내에서 조회한 데이터의 무결성을 보장. SELECT * FROM table_name WHERE id = 1 FOR SHARE;  배타 락 (Exclusive Lock)이란?쓰기 락 (Write Lock)이라고 부르며, 배타 락을 ..
[Back-End] Sync와 Async 그리고 Blocking와 Non-Blocking?
·
Back-end
매일메일을 통해하루하루 CS 공부하기! 먼저, Block과 non-block, sync와 async 개념을 이해하기 위해서는 다음의 두 용어를 짚고 넘어가야 한다.제어권제어권은 자신(함수)의 코드를 실행할 수 있는 권한이다. 제어권을 가진 함수는 자신의 코드를 끝까지 실행한 후, 자신을 호출한 함수에게 돌려준다. (하나의 프로세스가 CPU를 점거하는 것과 비슷한 맥락)결괏값A 함수에서 B 함수를 호출했을 때, A 함수가 B 함수의 결과값을 기다리느냐의 여부를 의미한다. 동기와 비동기의 차이동기와 비동기는 호출하는 함수의 결괏값을 기다리는지 여부의 차이가 있다. Synchronous함수를 호출한 곳에서 응답받는 것 함수 A가 동기로 함수 B를 호출하면 A는 B의 작업이 완료될 때까지 기다려야 하므로, 작업..
[Back-End] 로그와 메트릭에 대해 설명해봐라!
·
Back-end
매일메일에서 온 두 번째 메일 포스팅이다. 로그와 메트릭을 설명해주세요. 로그는 말 그대로 서버의 상태나 동작 정보를 시간에 따라 기록한 것이고, 메트릭은 상태 지표에 대한 기준이라고 알고 있다.흠 정확하게 얘기하기가 힘든거 보니 완벽하게 정리할 필요가 있을 것 같다. 로그로그는 서버가 동작할 때 서버의 상태와 동작 정보를 시간 경과에 따라 기록된 결과.시스템의 오류와 문제들을 쉽게 찾아낼 수 있도록 도와줌. 메트릭시스템의 성능과 상태에 대한 통계적인 정보시스템의 현재 상태를 손쉽게 파악할 수 있고, 사업 현황에 관한 유용한 정보를 얻을 수 있다.예시DAUREtensionCPU UtilizationMemory Utilization 로그와 메트릭을 수집해본 적이 있는가?위 질문에 로그를 보기는 했지, 수집..
[Spring] Spring Data JPA에서 새로운 Entity인지 판단하는 방법?
·
Back-end/Spring
요즘 백엔드 관련한 내용을 매일마다 질문해주는 Maeil-Mail이라는 서비스를 사용하여 하루하루 지식을 체크중이다. (이거 생각보다 재밌을지도?) 오늘의 주제는 바로 Spring Data JPA이다. 항상 인터페이스처럼 편하게 JPQL을 사용하게 해주는 녀석... 하지만 EntityManager를 사용한 영속성 컨텍스트 관리를 한다는 것 말고는 제대로 동작 방식을 알고 있었을까? 위 질문(제목에 게시)에 뭐 영속성 컨텍스트가 새로운 엔티티를 판별하겠지? 만 생각이 들고 정확한 동작 관리를 알지 못했다.  ... 아직 갈 길이 멀다. Spring Data JPA 뜯어보기. 바로 시작해보도록 하자 Spring Data JPA란? 우선 JPA란 무엇일까?JPA란 Java Persistentce API의 약자..
[Spring] AWS SageMaker 엔드포인트 연결 시도하기
·
Back-end/Spring
문제 상황기존 방식대로 Spring WebFlux 에서 HTTP Client로 사용되는 비동기적으로 작동하는 모듈인 WebClient를 활용하여 SageMaker 엔드포인트에 POST 요청을 시도했다. 그런데 CloudWatch에서 요청 시도에 대한 로깅은 찍히는데, 웹서버로 리턴이 들어오지 않는 상황이었다. 알고 보니, AWS SageMaker는 사용하는 IAM에 대한 정보를 바탕으로 AWS Signature를 Header에 담아 전송해야하는 것이었다. 이를 해결하기 위해 Spring에서는 aws sagemaker-runner 라이브러리를 사용해야 한다. 해결 1. build.gradle에 다음과 같은 라이브러리를 추가한다.implementation 'io.awspring.cloud:spring-clo..