반응형 전체 글372 데이터베이스 시스템 동시성 제어 방법 MVCC(Multi-Version Concurrency Control)MVCC는 데이터의 여러 버전을 유지하여 트랜잭션이 동시에 데이터를 읽고 쓸 수 있도록 하는 방식이다. 각 트랜잭션은 자신만의 일관된 스냅샷을 기반으로 데이터를 읽어, 다른 트랜잭션의 변경 사항에 영향을 받지 않는다.데이터의 각 버전을 유지하여 읽기 작업이 쓰기 작업과 독립적으로 이루어질 수 있다. 트랜잭션은 시작 시점의 스냅샷을 기반으로 데이터를 읽어, 다른 트랜잭션의 변경 사항을 보지 못한다.또한 읽기 작업 시 잠금을 사용하지 않아 높은 동시성을 제공한다. 읽기 작업이 잠금에 의해 지연되지 않아, 읽기 중심의 애플리케이션에서 우수한 성능을 보인다. 읽기 작업 시 잠금을 사용하지 않으므로, 쓰기 작업과의 충돌이 줄어든다. 하지만 여러.. 2025. 4. 2. HTTP 메서드 멱등성 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 멱등성이라고 한다. HTTP 메서드의 멱등성은 동일한 요청을 한번 보내는 것과 여러번 보내는 것이 서로 동일한 효과를 지니며, 서버의 상태도 동일하게 남을 경우에 멱등하다고 이야기할 수 있다. 대표적으로 멱등한 메서드는 GET, HEAD, PUT, DELETE, TRACE, OPTIONS 가 있다.멱등성 활용모종의 이유로 전송 커넥션이 끊어졌을 때, 멱등성은 클라이언트가 다시 같은 요청을 해도 되는가에 대한 판단 근거가 될 수 있다. 멱등하다면 요청을 재시도할 때 같은 서버의 상태를 보장하기 때문에 문제가 없다. 반면, 멱등하지 않다면 재시도 요청시 중복 요청을 보내 문제를 발생 시킬 수 있다. 예를 들어, 사용자가 결제하는 시점에 타임아웃으로 인.. 2025. 4. 1. 웹사이트 처음 접근 시 일련의 과정 사용자가 www.google.com을 입력한다고 가정한다.브라우저는 HTTP 프로토콜을 사용해 구글 웹 서버와 통신하려고 한다.HTTP는 OSI 7계층 중 애플리케이션 계층에서 동작하는 프로토콜이때 브라우저는 요청한 도메인 이름(www.google.com)에 대한 IP 주소를 알아야 하기 때문에 DNS(Domain Name System) 서버에 질의한다.이 질의 과정 또한 애플리케이션 계층에서 이루어지며, DNS 서버는 해당 도메인에 대한 IP 주소(예를 들어, 142.250.190.78)를 응답한다.IP 주소를 얻은 후, 브라우저는 구글 서버와 통신을 시작한다. HTTP는 TCP/IP를 기반으로 작동하므로, 데이터를 주고받기 전에 TCP 3-Way Handshake 과정이 필요하다.이 단계는 전송 계층.. 2025. 3. 31. 데이터베이스 커넥션 풀 미사용 시 발생 문제 애플리케이션과 데이터베이스가 통신을 하기 위해서는 데이터베이스 커넥션이 필요하다.데이터베이스 커넥션의 생애주기 :데이터베이스 드라이버를 사용하여 데이터베이스에 연결데이터 읽기/쓰기를 위한 TCP 소켓 열기소켓을 통한 데이터 읽기/쓰기연결 종료소켓 닫기커넥션 풀이 없다면 애플리케이션에서 데이터베이스에 접근해야하는 요청을 처리할 때마다 커넥션을 새로 생성하여 연결하고 해제하는 과정을 반복해야 한다. 이 과정은 비용이 상당히 많이 들기 때문에 요청의 응답시간이 길어진다.또 동시에 많은 요청이 들어올 경우 매번 새로운 커넥션을 생성하게 되는데, 데이터베이스의 최대 연결 수를 초과할 수 있다. 데이터베이스는 일반적으로 동시에 처리할 수 있는 요청 개수에 제한이 있는데, 이 제한을 초과하면 요청이 거부되어 사라지거.. 2025. 3. 28. 스레드, 프로세스, 코어 수 증가에 따른 성능 스레드, 프로세스, 코어의 수가 많을수록 시스템 성능이 향상된다고 생각할 수 있지만, 실제로는 그렇지 않을 확률이 크다.스레드가 많으면?스레드가 지나치게 많아지면 운영체제가 스레드 간 컨텍스트 스위칭을 자주 수행해야 하여 CPU 자원이 스레드 관리에 소모된다. 이로 인해 실제 작업 수행 효율이 떨어질 수 있으며, 많은 스레드가 동시에 실행될 경우 메모리나 캐시, 락 등의 자원을 경쟁하게 되어 성능 저하나 데드 락이 발생할 가능성이 높아진다. 또한, 스레드가 많아지면 동기화와 상태 관리가 복잡해져 버그 발생 가능성도 커진다.프로세스가 많으면?각 프로세스는 독립된 메모리 공간을 가진다. 그래서 많은 프로세스가 동시에 실행되면 메모리 사용량이 급격히 증가할 수 있다. 또한, 프로세스를 생성하고 관리하는 데는 .. 2025. 3. 25. 단위 테스트와 통합 테스트의 차이 단위 테스트소프트웨어의 가장 작은 단위, 즉 개별 메서드나 함수의 기능을 검증하는 테스트특정 기능이 올바르게 동작하는지 확인하기 위함이며 독립적이고 빠르게 실행된다.통합 테스트개별 모듈들이 결합되어 전체 시스템이 올바르게 동작하는지 검증하는 테스트모듈 간의 상호작용이 올바르게 동작하는지 확인하기 위함이며 실제 데이터베이스, 네트워크 등의 외부 시스템과의 통합을 테스트한다.슬라이스 테스트특정 레이어(ex. controller, service, repository)에 대한 테스트애플리케이션의 특정 슬라이스가 올바르게 동작하는지 확인하기 위해 작성한다.스프링의 특정 컴포넌트만 로드하여 테스트하므로 상대적으로 빠르게 실행된다.관련된 어노테이션으로는 @WebMvcTest, @DataJpaTest 가 있다.테스트 .. 2025. 3. 24. 공유 락과 배타 락 DBMS에서 트랜잭션을 특별한 제어 없이 병행 수행을 허용한다면 데이터의 일관성과 무결성을 보장하기 어려울 수 있다. 이때, 병행 수행되는 트랜잭션들을 제어하기 위해서 락을 사용할 수 있다. DBMS에서 락은 크게 공유 락과 배타 락으로 분류할 수 있다.공유 락(Shared Lock)공유 락(Shared Lock) 은 읽기 락(Read Lock) 이라고 부르며, 공유 락이 걸린 데이터에 대해서 다른 트랜잭션에서도 공유 락을 획득할 수 있지만, 배타 락은 획득할 수 없다.즉, 공유 락을 사용하면 트랜잭션 내에서 조회한 데이터가 변경되지 않는다는 것을 보장한다.SELECT * FROM table_name WHERE id = 1 FOR SHARE;배타 락(Exclusive Lock)배타 락(Exclusive .. 2025. 3. 21. 2025-03-20 (목) 🚀 오늘 배운 것isNotEmpty()는 길이 체크, isNotBlank()는 공백 여부까지 체크.launch는 단순 실행, async는 await()로 결과 반환 가능.runBlocking은 스레드 차단, CoroutineScope는 비동기 실행.🔹 isNotEmpty() vs isNotBlank()Method 대상 동작 방식isNotEmpty()String & Collection문자열 또는 컬렉션이 비어있지 않으면 trueisNotBlank()String공백(' ', '\\\\t', '\\\\n')을 제외한 문자가 하나라도 있으면 true📌 예제val str1 = " "val str2 = "abc"println(str1.isNotEmpty()) // trueprintln(str1.isNotBl.. 2025. 3. 20. TCP 3-way handshake TCP 3-way handshake는 TCP/IP 네트워크에서 안정적이고 연결 지향적인 통신을 설정하기 위해 사용되는 절차를 말한다. 이 절차는 클라이언트와 서버 간에 신뢰할 수 있는 연결을 설정하기 위해 세 개의 메시지(세그먼트) 를 교환하는 과정을 포함한다. 클라이언트는 서버에 연결을 요청하는 SYN 세그먼트를 전송한다.> 세그먼트에는 초기 순서 번호(Sequence Number) 와 윈도우 크기(Window Size) 정보 포함 2. 이후 서버는 클라이언트의 요청을 수락하고, SYN과 ACK 플래그가 설정된 세그먼트를 클라이언트에 보낸다. > 세그먼트에는 서버의 초기 순서 번호와 클라이언트의 초기 순서 번호에 대한 응답(ACK=클라이언트의 초기 순서 번호 + 1) 포함 3. 클라.. 2025. 3. 19. 이전 1 2 3 4 ··· 42 다음 728x90 반응형