본문 바로가기

전체 글56

[Java] Jstack 을 활용한 스레드(Thread) 덤프, 리소스 모니터링 Spring boot 기반 프로젝트 내에서 Java Thread를 활용한 로직을 활용 도중 특정 스레드 에서의 병목현상이 발생하였고 해당 병목 현상을 해결하는 과정에서의 스레드 덤프를 활용하였고 많은 도움이 되었습니다. 스레드 덤프를 뜨기 위한 Jstack에 대한 기본 사용법과 활용법을 공유하고자 합니다. Jstack?? Jstack이란 JDK와 함께 제공되는 유틸리티로 Java Thread Dump를 생성하는 데 사용됩니다. Windows와 Linux에서 jstack.exe로 Thread Dump 생성하기 ${jdk설치경로}\bin target 경로에서 jstack.exe를 활용해서 전체 Thread Dump를 추출합니다. 사전 시나리오 EndPoint @RestController public clas.. 2023. 7. 9.
[Java] ImmutableList vs Collections.unmodifiableList 무엇이 다를까? Java로 개발을 하다 보면 Immutable 한 Collection을 다뤄야 하는 상황이 종종 발생한다. 그렇다면 Google Guava의 ImmutableList와 java.util.Collections의 unmodifiableList()를 각각 비교하며 각각 사용 시나리오와 장단점에 대해서 알아보자. 1. 각각의 자료구조를 사용하는 차이점 ImmutableList Guava 라이브러리의 일부로 제공되며, 불변 리스트를 생성하고자 할 때 사용합니다. ImmutableList 객체는 생성 시점부터 불변이며, 원본 리스트로부터 변경되지 않습니다. ImmutableList는 다양한 정적 팩토리 메서드를 제공하여 객체 생성을 용이하게 합니다. (of(), copyOf() 등) @Test public void.. 2023. 4. 30.
[PostgreSQL] PostgreSQL 데이터 추출 - CSV, JSON 및 스키마 덤프 뜨는법. PostgreSQL를 사용하다 보면 데이터를 특정 형식에 맞춰서 파일로 추출해야 하는 경우가 생기기도 하고, 데이터 덤프가 아닌 스키마를 덤프 떠야 하는 상황도 생깁니다. PostgreSQL 데이터베이스에서 테이블 데이터를 CSV와 JSON 형식으로 추출하고, 테이블 스키마를 덤프 하는 방법을 알아보도록 하겠습니다. 테이블 데이터를 CSV 형식으로 추출하기 PostgreSQL에서 테이블 데이터를 CSV 형식으로 추출하려면 COPY 명령어를 사용할 수 있습니다. 예를 들어, 테이블 이름이 your_table이고, 조건, 정렬 값, 파일 경로를 지정하여 데이터를 추출하려면 다음과 같이 작성합니다. COPY (select * from your_table where your_condition = your_con.. 2023. 4. 30.
[MongoDB] MongoDB란? 특징과 장단점을 예제로 확인해보자. 몽고디비는 대용량 데이터를 처리할 때 우수한 성능을 발휘하는 NoSQL 데이터베이스입니다. 그러나 트랜잭션 처리의 엄격성이 상대적으로 떨어지며, 네이티브 조인을 지원하지 않는 등 모든 용도에 적합하지 않을 수 있습니다. 이 글에서는 몽고디비의 장단점과 함께 자세한 예시로 확인해보도록 하겠습니다. MongoDB MongoDB는 고성능, 고가용성 및 쉬운 확장성을 제공하는 NoSQL, Document 지향 데이터베이스입니다. 데이터를 배열 및 중첩 Document와 같은 복잡한 데이터 유형을 효율적으로 저장할 수 있는 유연한 JSON과 유사한 형식인 BSON(Binary JSON)으로 저장합니다. Database, Collection 및 Document Document MongoDB에서의 기본 데이터 단위로.. 2023. 4. 16.
[JPA] JPA 상속 관계 매핑 전략 : 조인, 단일 테이블, 구현 클래스별 테이블 비교 및 주요 어노테이션 사용법 JPA 상속 관계 매핑 전략과 주요 어노테이션에 대해 알아보고, 조인 전략, 단일 테이블 전략, 구현 클래스별 테이블 전략을 비교하여 각각의 장단점을 설명확인해 보도록 합니다. 더 자세한 정보는 https://www.inflearn.com/course/ORM-JPA-Basic 김영한님 강의나 http://www.yes24.com/Product/Goods/19040233 책을 확인하시는 것이 좋습니다. 상속 관계 매핑 관계형 데이터베이스는 상속 관계가 없다. 관계형 디비 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사 상속관계 매핑 : 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 왼쪽 논리모델 공통적인 속성 공통적인 데이터는 물품으로 두고 각각 음반 영화 책으로 서브타입으로 두는 .. 2023. 4. 15.
[Docker] Docker Image와 Image 생성하기, Tag 붙이기, 점진적 빌드하기 Docker Image는 코드, 런타임, 시스템 도구, 라이브러리, 설정 등 소프트웨어를 실행하는 데 필요한 모든 것을 포함하는 경량의 독립 실행형 소프트웨어 패키지입니다. Docker 이미지를 효율적으로 생성하고 관리하는 방법을 알아봅니다. Base Image, Layers, Dependencies, Hexadecimal IDs, Dockerfile 작성법과 Image 관리등을 살펴봅시다!!. Docker Image Base Image Base Image는 Docker 이미지를 만들기 위한 시작점입니다. Base Image는 특정 소프트웨어 패키지가 설치된 최소한의 pre-configured os입니다. Base Image는 소프트웨어 공급업체에서 제공하는 official 이미지 또는 커뮤니티에서 유지.. 2023. 4. 9.
[PostgreSQL] PostgreSQL로 보는 Database 실행 계획 & Explain Option 데이터베이스 실행 계획(Database Execution Plan) 또는 쿼리 실행 계획(Query Execution Plan)은 가능한 가장 효율적인 방법으로 데이터를 검색하거나 조작하기 위해 database management system's (DBMS) query optimizer에서 생성하는 일련의 단계입니다. 데이터베이스 실행 계획과 Explain 명령어에 대해서 알아보도록 하겠습니다. PostgreSQL 데이터베이스 실행 계획 PostgreSQL의 맥락에서 실행 계획은 쿼리 처리 파이프라인의 중요한 구성 요소로, 시스템이 쿼리를 빠르고 효율적으로 수행할 수 있도록 도와줍니다. PostgreSQL 쿼리 실행 프로세스는 여러 단계로 구성됩니다. PostgreSQL Query Process Pipe.. 2023. 4. 8.
[JPA] JPA 연관관계 매핑 - 단방향, 양방향, 주인 설정 및 mappedBy 속성 활용하기 JPA에서 연관관계 매핑의 중요 개념들, 단방향 및 양방향 연관관계, 양방향 연관관계에서의 주인 설정, mappedBy 속성, 객체 지향과 관계형 디비 두 가지 다른 패러다임 간에 오는 차이점등을 살펴봅니다. 그리고 그를 통해서 JPA를 사용한 객체 관계 매핑에 대해 효율적으로 접근해보도록 하겠습니다. 연관관계가 필요한 이유 ‘객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다.’ 조영호(객체지향의 사실과 오해) teamId → 외래키를 그대로 가져와버림 Team team = new Team(); team.setName("TeamA"); em.persist(team); Member member = new Member(); member.setUsername("memeber1"); memb.. 2023. 4. 3.
[Spring] SpringWebFlux에서의 효과적 Error처리와 백프레셔(BackPressure) Reactive Programming에서 백프레셔(Backpressure) 처리 전략을 이해하고, Spring WebFlux를 활용하여 구현하는 방법을 알아보도록 합니다. Project Reactor의 예제 코드를 활용하여 Publisher 와 Consumer 측에서의 백프레셔(Backpressure) 전략을 확인해 봅니다. traditional try-catch traditional 한 명령형 프로그래밍에서 오류 처리는 일반적으로 try-catch 블록을 통해 처리됩니다. try { // 예외를 발생시킬 수 있는 작업 수행 int result = performOperation(); System.out.println("Result: " + result); } catch (ArithmeticExceptio.. 2023. 4. 1.