반응형 Back-End71 공유 락과 배타 락 DBMS에서 트랜잭션을 특별한 제어 없이 병행 수행을 허용한다면 데이터의 일관성과 무결성을 보장하기 어려울 수 있다. 이때, 병행 수행되는 트랜잭션들을 제어하기 위해서 락을 사용할 수 있다. DBMS에서 락은 크게 공유 락과 배타 락으로 분류할 수 있다.공유 락(Shared Lock)공유 락(Shared Lock) 은 읽기 락(Read Lock) 이라고 부르며, 공유 락이 걸린 데이터에 대해서 다른 트랜잭션에서도 공유 락을 획득할 수 있지만, 배타 락은 획득할 수 없다.즉, 공유 락을 사용하면 트랜잭션 내에서 조회한 데이터가 변경되지 않는다는 것을 보장한다.SELECT * FROM table_name WHERE id = 1 FOR SHARE;배타 락(Exclusive Lock)배타 락(Exclusive .. 2025. 3. 21. TCP 3-way handshake TCP 3-way handshake는 TCP/IP 네트워크에서 안정적이고 연결 지향적인 통신을 설정하기 위해 사용되는 절차를 말한다. 이 절차는 클라이언트와 서버 간에 신뢰할 수 있는 연결을 설정하기 위해 세 개의 메시지(세그먼트) 를 교환하는 과정을 포함한다. 클라이언트는 서버에 연결을 요청하는 SYN 세그먼트를 전송한다.> 세그먼트에는 초기 순서 번호(Sequence Number) 와 윈도우 크기(Window Size) 정보 포함 2. 이후 서버는 클라이언트의 요청을 수락하고, SYN과 ACK 플래그가 설정된 세그먼트를 클라이언트에 보낸다. > 세그먼트에는 서버의 초기 순서 번호와 클라이언트의 초기 순서 번호에 대한 응답(ACK=클라이언트의 초기 순서 번호 + 1) 포함 3. 클라.. 2025. 3. 19. 동기 방식으로 외부 서비스 호출 시 장애 조치 방안 외부 서비스 장애로 인해 응답이 오래 걸린다고 했을 때 외부 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. 동일성과 동등성의 차이 동일성과 동등성은 객체를 비교할 때 중요한 개념이다. 자바에서는 이 두 개념을 equals() 메서드와 == 연산자를 통해 구분할 수 있습니다.equals() 와 == 의 차이equals() 객체의 내용 비교== 객체의 참조(레퍼런스)를 비교 따라서 두 객체의 내용이 같더라도 서로 다른 객체라면 equals() 는 true 를 반환할 수 있지만, == 는 false 를 반환한다.동등성(Equality) 란?동등성은 논리적으로 객체의 내용이 같은지를 비교하는 개념이다. 자바에서는 equals() 메서드를 사용하여 객체의 동등성을 비교한다.Apple 클래스를 예시로 보면, Object.equals 메서드를 오버라이딩하여 객체의 실제 데이터를 비교한다. 그래서 apple과 anotherApple은 다른 객체이.. 2025. 3. 14. equals와 hashCode를 함께 재정의 해야하는 이유 equals와 hashCode 메서드는 객체의 동등성 비교와 해시값 생성을 위해서 사용할 수 있다. 하지만, 함께 재정의하지 않는다면 예상치 못한 결과를 만들 수 있다. 가령, 해시값을 사용하는 자료구조(HashSet, HashMap..)을 사용할 때 문제가 발생할 수 있다.class EqualsHashCodeTest { @Test @DisplayName("equals만 정의하면 HashSet이 제대로 동작하지 않는다.") void test() { // 아래 2개는 같은 구독자 Subscribe subscribe1 = new Subscribe("team.maeilmail@gmail.com", "backend"); Subscribe subscribe2 .. 2025. 3. 13. JPA ID 생성 전략 JPA에서 ID를 생성하기 위해서는 직접 할당과 자동 할당을 사용할 수 있다.직접 할당: @Id어노테이션만을 사용하여 Id값을 직접 할당하는 방식자동 할당: @Id와 @GeneratedValue를 함께 사용해서 원하는 키 생성 전략을 선택하는 방식 @GeneratedValue의 strategy 옵션을 통해 생성 전략을 설정할 수 있는데, 여기에 올 수 있는 값인 GenerationType는 다음과 같다.@Target({ElementType.METHOD, ElementType.FIELD})@Retention(RetentionPolicy.RUNTIME)public @interface GeneratedValue { GenerationType strategy() default GenerationType.A.. 2025. 3. 12. 로그와 메트릭 로그서버가 동작할 때 서버의 상태와 동작 정보를 시간 경과에 따라 기록된 결과이다.시스템의 오류와 문제들을 쉽게 찾아낼 수 있도록 도와준다.메트릭반면, 메트릭은 시스템의 성능과 상태에 대한 통계적인 정보를 의미한다.메트릭을 잘 수집하면 시스템의 현재 상태를 손쉽게 파악할 수 있고, 사업 현황에 관한 유용한 정보를 얻을 수 있다.가령, 메트릭은 DAU, Retension, CPU 사용량, 메모리 사용량 등이 있습니다.수집 경험 예시스프링 부트 액추에이터를 사용해 메트릭을 생성하고 프로메테우스에 저장한 다음 그라파나로 시각화한 경험로깅 LogBack 사용Grafana Loki 에 7일동안 보관하도록 설정로그 추적을 위해 MDC 사용수집한 지표 및 해당 메트릭 수집 이유CPU, 메모리, JVM 힙 사용량서비스.. 2025. 3. 11. 데이터베이스 인덱스 인덱스는 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조로 백과사전의 색인과 같다.저장되는 컬럼의 값을 사용하여 항상 정렬된 상태를 유지하는 것이 특징이다.이러한 특징으로 인해 인덱스는 INSERT, UPDATE, DELETE의 성능이 희생된다는 것이 단점을 가지고 있다.인덱스 자료 구조 (MySQL InnoDB 기준)B+Tree와 같은 변형 B-Tree 자료구조를 이용해서 인덱스를 구현한다.기본 토대는 B-Tree 인덱스이기 때문에, 컬럼의 값을 변형하지 않고 인덱스 구조체 내에서 항상 정렬된 상태로 유지합니다.B-Tree(Balanced-Tree)B-Tree(Balanced-Tree)에서는 크게 3가지 노드가 존재한다.최상위에 하나의 루트 노드가장 하위 노드인 리프 노드실제 데이터 레코드를.. 2025. 3. 10. 이전 1 2 3 4 5 ··· 8 다음 728x90 반응형