본문 바로가기
반응형

전체 글414

데이터베이스 커넥션 풀 미사용 시 발생 문제 애플리케이션과 데이터베이스가 통신을 하기 위해서는 데이터베이스 커넥션이 필요하다.데이터베이스 커넥션의 생애주기 :데이터베이스 드라이버를 사용하여 데이터베이스에 연결데이터 읽기/쓰기를 위한 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.
2025-03-18 (화) require를 사용하면 입력 검증을 간결하게 처리할 수 있다.filter는 결과 리스트 반환, any는 조건 만족 여부만 확인하므로 목적에 따라 선택해야 한다.apply는 객체 설정, run은 연산 결과를 반환하는 용도로 구분하면 코드가 더 명확해진다.1️⃣ require 사용법require(condition)는 주어진 조건이 false일 경우 IllegalArgumentException을 발생시킨다.이를 활용하면 함수의 입력 검증을 간결하게 처리할 수 있다.fun createReport(name: String) { require(name.isNotBlank()) { "Report name must not be blank" } println("Report created: $name")}cre.. 2025. 3. 18.
동기 방식으로 외부 서비스 호출 시 장애 조치 방안 외부 서비스 장애로 인해 응답이 오래 걸린다고 했을 때 외부 API 응답으로 대기하는 자원들이 운영 서버 내부에 쌓이면서 성능에 악영향을 줄 수 있다.이를 해결하기 위한 가장 기본적인 방법: 타임아웃 설정커넥션 타임아웃리드 타임아웃HTTP 커넥션 풀 타임아웃특정 서비스의 장애가 전체 서비스에 영향을 주는 경우 해결 방안 예시1. A 서비스, B 서비스, C 서비스 연동 코드가 HTTP 커넥션 풀을 공유한다.2. A 서비스의 장애로 응답 시간 지연이 발생하는 경우 2-1. 풀에 남은 커넥션이 점점 줄어든다. 2-2. 풀에서 커넥션을 구하는 대기 시간이 증가한다. 2-3. B, C 서비스에 대한 연동도 함께 대기한다.이 경우는 벌크헤드 패턴을 적용해 볼 수 있다.벌크헤드 패턴: 기능의 종류마.. 2025. 3. 18.
@Component, Controller, @Service, @Repository 차이점 각각의 클래스를 특정 역할을 수행하는 Spring Bean으로 등록할 때 사용된다. 각 애너테이션은 클래스가 어떤 역할을 하는지를 명시적으로 나타내며, Spring의 @ComponentScan 기능을 통해 자동으로 Bean으로 등록된다. 모두 내부적으로 @Component 어노테이션을 사용하고 있특징과 용도@Component는 가장 일반적인 형태의 어노테이션으로, 특정 역할에 종속되지 않는 일반적인 Spring Bean을 나타낸다. 공통 기능을 제공하는 유틸리티 클래스나, 특정 계층에 속하지 않는 일반적인 컴포넌트를 정의할 때 사용된다.@Service는 비즈니스 로직을 수행하는 클래스에 사용되며 서비스 레이어의 Bean을 나타낸다.@Controller는 Spring MVC에서 웹 요청을 처리하는 컨트롤러.. 2025. 3. 17.
728x90
반응형