본문 바로가기
반응형

전체 글416

로그와 메트릭 로그서버가 동작할 때 서버의 상태와 동작 정보를 시간 경과에 따라 기록된 결과이다.시스템의 오류와 문제들을 쉽게 찾아낼 수 있도록 도와준다.메트릭반면, 메트릭은 시스템의 성능과 상태에 대한 통계적인 정보를 의미한다.메트릭을 잘 수집하면 시스템의 현재 상태를 손쉽게 파악할 수 있고, 사업 현황에 관한 유용한 정보를 얻을 수 있다.가령, 메트릭은 DAU, Retension, CPU 사용량, 메모리 사용량 등이 있습니다.수집 경험 예시스프링 부트 액추에이터를 사용해 메트릭을 생성하고 프로메테우스에 저장한 다음 그라파나로 시각화한 경험로깅 LogBack 사용Grafana Loki 에 7일동안 보관하도록 설정로그 추적을 위해 MDC 사용수집한 지표 및 해당 메트릭 수집 이유CPU, 메모리, JVM 힙 사용량서비스.. 2025. 3. 11.
2025-03-10 (월) 📌 오늘 배운 핵심 요약✅ select, selectNew, selectFrom의 차이를 이해하고 적절한 상황에서 사용✅ like와 containOrNull의 차이를 구분하여 null 안전성 고려✅ EmbeddedId 내부 필드 접근 시 path(EmbeddedId, Field) 방식 활용✅ JDSL과 JPQL의 차이점을 비교하여 JDSL의 장점을 이해✅ KProperty1, KFunction1을 활용하여 프로퍼티 및 메서드 참조하는 방법 숙지✅ :: 연산자를 활용한 프로퍼티, 함수, 생성자 참조 활용법 학습1️⃣ select, selectNew, selectFrom 차이점JDSL에서 데이터를 조회할 때 사용하는 select, selectNew, selectFrom의 차이점을 정리하면 다음과 같다.se.. 2025. 3. 10.
데이터베이스 인덱스 인덱스는 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조로 백과사전의 색인과 같다.저장되는 컬럼의 값을 사용하여 항상 정렬된 상태를 유지하는 것이 특징이다.이러한 특징으로 인해 인덱스는 INSERT, UPDATE, DELETE의 성능이 희생된다는 것이 단점을 가지고 있다.인덱스 자료 구조 (MySQL InnoDB 기준)B+Tree와 같은 변형 B-Tree 자료구조를 이용해서 인덱스를 구현한다.기본 토대는 B-Tree 인덱스이기 때문에, 컬럼의 값을 변형하지 않고 인덱스 구조체 내에서 항상 정렬된 상태로 유지합니다.B-Tree(Balanced-Tree)B-Tree(Balanced-Tree)에서는 크게 3가지 노드가 존재한다.최상위에 하나의 루트 노드가장 하위 노드인 리프 노드실제 데이터 레코드를.. 2025. 3. 10.
2025-03-07 (금) 🚀 최종 정리✅ Serializable → JPA에서 복합 키 사용 시 필수✅ @EmbeddedId + @Embeddable → MySQL 복합 키 설정 시 권장 방식✅ require → 매개변수 검증을 간결하게 처리할 때 사용✅ Set?.orEmpty() → null 방지 및 안정적인 코드 작성 가능✅ optimizeReadOnlySet() → 메모리 최적화를 위해 사용✅ first() vs any() → 첫 번째 요소 조회 vs 요소 존재 여부 확인1. Serializable (직렬화)Serializable은 객체를 바이트 스트림으로 변환하여 저장하거나 네트워크로 전송할 때 사용된다.JPA에서 @EmbeddedId 또는 @IdClass를 사용할 때, 복합 키 클래스는 반드시 Serializable을.. 2025. 3. 7.
일급 컬렉션 일급 컬렉션(First-Class Collection)하나의 컬렉션을 감싸는 클래스를 만들고, 해당 클래스에서 컬렉션과 관련된 비즈니스 로직을 관리하는 패턴아래 코드 중에서 Order의 List 자료구조를 감싼 Orders가 일급 컬렉션의 예시입니다.컬렉션을 Wrapping 하면서, 그 외 다른 멤버 변수가 없는 상태// 일급 컬렉션public class Orders { private final List orders; public Orders(List orders) { validate(orders); // 검증 수행 ... } public void add(Order order) { if (order == null) { thro.. 2025. 3. 7.
2025-03-06 (목) 💡 정리API를 설계할 때 DELETE 요청은 Request Body를 허용하지 않으므로, Path Variable 또는 Query Parameter를 활용해야 함PUT 요청에서는 변경할 데이터를 명확히 전달하도록 JSON Body를 포함하는 것이 일반적데이터베이스 설계 시, 특정 테이블 간의 연관 관계에 따라 일부 데이터만 삭제하고 일부는 유지하는 전략을 고려해야 함API 명세 작성특정 데이터를 삭제하는 DELETE API를 설계할 때,경로 변수(Path Variable)로 ID 리스트를 전달할 경우 DELETE /resource/{ids} 형태로 처리단일 ID만 전달하는 경우 DELETE /resource/{id} 사용PUT 요청에서는 경로 변수로 ID를 받고, JSON Body로 수정할 데이터를 .. 2025. 3. 6.
Java Checked, Unchecked Exception Checked Exception컴파일 시점에 확인되며, 반드시 처리해야 하는 예외다.자바에서는 IOException, SQLException 등이 이에 속한다.Checked Exception을 유발하는 메서드를 호출하는 경우, 메서드 시그니처에 throws를 사용하여 호출자에게 예외를 위임하거나, 메서드 내에서 try-catch를 사용하여 해당 예외를 반드시 처리해야합니다.사용처정답이 없는 영역이므로, 자신의 주관을 만들면서 학습!외부 환경과의 상호작용에서 발생할 가능성이 높은 예외에 적합하다.ex) 파일 입출력, 네트워크 통신 등에서 발생할 수 있는 예외를 처리한다.이러한 예외는 예측 가능하며, 호출하는 쪽에서 적절히 처리할 수 있는 여지가 있다.Unchecked Exception런타임 시점에 발생하는.. 2025. 3. 6.
2025-03-05 (수) ✅ 오늘의 핵심 정리N+1 문제는 패치 전략과 관계없이 발생할 수 있으며, fetch join 또는 EntityGraph로 해결할 수 있다.반복 주기에 따른 데이터 구조를 최적화하고, 필수/선택 필드를 명확히 정의해야 한다.쉼표로 구분된 데이터를 저장할 때, 길이 계산을 통해 적절한 VARCHAR 크기를 설정해야 한다.다양한 유형의 ID가 포함될 경우, 이를 구분할 타입 필드를 추가하는 것이 유지보수에 유리하다.RESTful API 명세를 작성할 때, 요청 구조, 필터링, 페이지네이션, 응답 데이터, 에러 핸들링을 철저히 설계해야 한다.1️⃣ N+1 문제와 Fetch Join글로벌 패치 전략(EAGER, LAZY)과 관계없이 N+1 문제는 발생할 수 있다.EAGER의 경우, JPQL 실행 시 연관된 엔티.. 2025. 3. 5.
엔티티 매니저 엔티티 매니저에 대해 알기 위해선 영속성 컨텍스트에 대해 알아야 한다.영속성 컨텍스트는 엔티티를 영구 저장하는 환경으로 1차 캐싱, 쓰기 지연, 변경 감지를 통해 영속 로직을 효율적으로 할 수 있게 해준다. 이러한 효율적인 영속 로직 수행을 위해서 엔티티는 영속성 컨텍스트에 관리되어야 한다. 이런 작업을 도와주는 것이 바로 엔티티 매니저다.엔티티 매니저는 엔티티의 상태를 변경하고, 영속성 컨텍스트와 상호작용함으로써 영속 로직을 수행하는 역할을 가지고 있다.엔티티 매니저의 역할persist, merge, remove, close 메서드로 엔티티 상태(비영속, 영속, 준영속, 삭제) 변경 가능영속성 컨텍스트의 1차 캐시로부터 엔티티 조회 가능쓰기 지연 저장소에 있는 쿼리들을 flush 하여 DB 와 동기화 .. 2025. 3. 4.
728x90
반응형