본문 바로가기

전체 글103

메모리 누수 분석 메모리 이슈 발생파일 업로드, 파일 다운로드 시 비정상적으로 메모리가 오르는 일이 생김 (1.4GiB 이상)JVM 옵션 설정-server -Xms512m -Xmx512m -XX:MetaspaceSize=400m -XX:MaxMetaspaceSize=400m -Xms: Java heap 초기 크기 -XmX : Java heap 최대 크기 -XX:MetaspaceSize : 가비지 컬렉션을 처음 초과할 때 트리거할 할당된 클래스 메타데이터 크기 -XX:MaxMetaspaceSize : 클래스 메타데이터에 할당할 수 있는 최대 네이티브 메모리 양HeapDump 분석MAT(Memory Analyzer Tool)으로 메모리 분석DB에 연결할 때 SSLSocketImpl에서 메모리 누수가 발생하는 것을 확인Data.. 2024. 7. 28.
전략 패턴 (Strategy Pattern) 인터페이스를 정의하고, 각 행위를 클래스별로 캡슐화하여 특정 기능을 자유롭게 변경하여 사용하는 패턴이다. 객체의 행위를 동적으로 바꾸고 싶은 경우 직접 행위를 수정하지 않고 전략을 바꿔주기만 하며 유연하게 확장하는 방법으로 정책 패턴(Policy Pattern)이라고도 한다. 전략 패턴(Strategy Pattern) 또는 정책 패턴(Policy Pattern)은 실행 중에 알고리즘을 선택할 수 있게 하는 행위 소프트웨어 디자인 패턴이다. 전략 패턴은 특정한 계열의 알고리즘을 정의하고, 각 알고리즘을 캡슐화하며, 이 알고리즘들을 해당 계열 안에서 상호 교체가 가능하게 만든다. 위키피디아 Strategy.java public interface Strategy { public void run(); } Str.. 2024. 1. 14.
템플릿 메서드 패턴 (Template Method Pattern) 템플릿 메서드 패턴은 핵심 기능과 부가 기능을 분리하여 단일 책임 원칙(SRP)을 지켜 변경 지점을 하나로 모아 변경에 쉽게 대처할 수 있게 만드는 구조이다. 상속과 오버라이딩을 통한 다형성으로 부모 클래스에 부가 기능(템플릿)을 정의하고 핵심 기능을 자식 클래스에 정의한다. 작업에서 알고리즘의 골격을 정의하고 일부 단계를 하위 클래스로 연기한다. 템플릿 메서드를 사용하면 하위클래스가 알고리즘의 구조를 변경하지 않고도 알고리즘의 특정 단계를 재정의할 수 있다. 템플릿 메서드 패턴은 자식 클래스를 여러개 만들어줘야 하는 단점이 있다. 이런 단점을 보완하기 위해 익명 내부 클래스를 사용한다. 익명 내부 클래스를 구현하면 객체 인스턴스를 생성하면서 동시에 생성할 클래스를 상속 받은 자식 클래스를 정의할 수 .. 2024. 1. 14.
레이어드 아키텍처(Layered Architecture) 레이어드 아키텍처 패턴은 고전적으로 대중적인 아키텍처 패턴이며 프로젠테이션 계층, 비즈니스 계층, 퍼시스턴트 계층으로 구성된다. 각 계층이 역할에 따라 독립적으로 나뉘어 코드의 확장성이 높고 코드의 구조를 파악하기 쉽고 재사용이 가능하다. Top-Down 방식으로 하위 계층으로 단방향 의존성을 가진다. Presentation Layer 클라이언트 시스템과 연결되는 부분으로 백엔드 API에서는 앤드포인트 부분에 해당하고 웹사이트에서는 UI에 해당 REST API의 엔드포인트를 정의하고 HTTP 요청을 읽는 로직을 구현 Business Layer 비즈니스 로직을 구현하는 부분으로 실제 시스템에서 처리 되어야하는 로직을 구현 Persistence Layer 데이터베이스와 관련된 로직을 구현하며 데이터 CRUD.. 2024. 1. 10.
[Git] mac os 업데이트 후 오류 mac os 업데이트 후 Intellij IDEA 에서 git을 사용 하려는데 다음과 같은 문제가 발생했다. 문제 해결을 위해 command line developer tools을 설치해준다. xcode-select --install 터미널에서 다음 명령어를 입력해주면 다음과 화면이 나온다. 2023. 11. 5.
너비 우선 탐색(BFS: Breadth First Search) 너비 우선 탐색(BFS)란? 시작 정점으로부터 가까운 정점을 먼저 방문하고 멀리 떨어져 있는 정점을 나중에 방문하는 순회 방법 큐를 이용해서 지금 위치에서 갈 수 있는 곳을 모두 큐에 넣는 방식 큐에 넣을 때 방문했다고 체크 모든 가중치가 1일때 최단 거리를 구하는 알고리즘 너비 우선 탐색 알고리즘 breadth_first_search(v) v를 방문되었따고 표시; 큐 Q에 정점 v를 삽입; while (not is_empty(Q)) do Q에서 정점 w를 삭제; for all u ∈ (w에 인접한 정점) do if (u가 아직 방문되지 않았으면) then u를 큐에 삽입; u를 방문되었다고 표시; 2023. 3. 24.