전체 글 96

백준6593: 상범 빌딩(Java)

https://www.acmicpc.net/problem/6593 6593번: 상범 빌딩 당신은 상범 빌딩에 갇히고 말았다. 여기서 탈출하는 가장 빠른 길은 무엇일까? 상범 빌딩은 각 변의 길이가 1인 정육면체(단위 정육면체)로 이루어져있다. 각 정육면체는 금으로 이루어져 있어 www.acmicpc.net 3차원 배열의 그래프 탐색 문제였다. 특별한 알고리즘은 없었고 차원 하나만 더해주면 되는 단순한 탐색 문제였다. 문제푸는데 넘 오래걸린다,, package BOJ; import java.io.*; import java.util.*; public class BOJ6593 { private static final char WALL = '#'; private static final char ESCAPE = ..

플밍/문제풀이 2024.03.13

홈서버 구축 일기1 - 하이퍼바이저?

개인 플젝 진행을 위해 서버가 한 대 필요했음 처음에는 클라우드 서버로 편하게 사용하려고 AWS 프리티어로 알아봤는데, 돈이 청구된다고 하더라 이게 완전 무료가 아니고 어디까지 범위는 무료고, 사용하는 서비스가 많아질수록 또 청구되는 금액이 발생하는 모양인데, 그거를 알아보고 완벽하게 관리하기가 너무 어려워보였음 그래서 일반적인 클라우드 서버의 월간 사용료를 알아보니, 최소 사양으로 월평균 6-7만원 정도 나오더라,,, 아직 모아야 할 돈이 많은 사회 초년생인 나에게 저정도 고정지출은 꽤나 타격이 클거라고 생각했음. (넉넉잡아 연 100만원이니,,, 일본을 한 번 더 다녀올 수 있는 금액이었다 ㅡ.ㅡ) 어차피 고사양이 필요한 것도 아니고, 아직까지는 개인 공부용 플젝이기 때문에 집에서 놀고있는 노트북을 ..

개발/네트워크 2024.03.13

Spring에서 외부 API 호출하기(WebClient 사용)

이번에 클라이언트와 내부 서버들의 통신을 위한 중간 서버를 만들기 위해 Spring기반의 서버 내부에서 타 서버로의 API 호출이 필요했다. 가장 최근에 도입된 WebClient 활용 그거 말고는 아래 방식들이 있음 1. HttpURLConnection 스프링이나 외부 라이브러리가 아닌 Java 표준에서 제공하는 HTTP Connection 클래스이다. URLConnection을 상속받고있음 옛날옛적에 사용하던거 2. RestTemplate Spring 3.0부터 도입된 클래스로, 동기적인 HTTP 통신을 위해 쓰인다. 3. WebClient 비동기/논블로킹 방식을 지원 리액티브 프로그래밍이 가능하며 데이터 스트림을 효과적으로 처리할 수 있음 등등... 프로젝트 구조는 다음과 같이 잡아보았다 common..

개발/BE 2024.03.12

[Java] Heap Memory 누수 분석기4 : dump파일 분석(MAT)

이전 글에서 이어집니다 : [Java] Heap Memory 누수 분석기3 : 누수 원인을 분석해보자 - jmap, jhat 그래서 메모리 누수 원인은 뭐였을까? MAT를 통해 뜬 덤프 파일을 분석해보았다. .hprof 파일을 열면 다음과 같이 확인해볼 수 있다. 딱 봐도 저 파란 부분이 메모리를 왕 잡아먹고 있는 것으로 보인다. Leak Suspects라는 탭을 클릭하면 메모리 누수 원인을 MAT가 예측해준다. 역시나 Finalizer가 문제였던 것으로 보인다. 그래서 Finalizer는 뭐냐 ? 메모리 해제/GC를 담당하는 객체이다. (참고링크 : https://ivvve.github.io/2019/06/05/java/ETC/fileiostream-finalizers/) finalize() 메서드가 ..

개발/BE 2024.03.11

[Java] Heap Memory 누수 분석기3 : 누수 원인을 분석해보자 - jmap, jhat

이전 포스팅에서 이어집니다. : [Java] Heap Memory 누수 분석기2 : 모니터링 환경 구축하기 - VisualVM 그래서 VisualVM을 이용하면 로컬 환경에서는 테스트해볼 수 있었는데 사실 그것만으로는 상용 환경에서의 메모리 누수 원인을 확정하기에는 근거가 너무 부족했다. 그래서 jmap 명령어를 이용해서 Heap Dump파일을 생성해보기로 하였다. Heap Dump Heap Dump 뜨는 방법으로 jmap 과 jcmd 가 있음 jmap : GC를 동반하지 않고, 죽은 객체까지 포함하여 인스턴스의 점유율을 보여준다. jcmd 와 같이 full GC를 발생시키고싶으면 -live 옵션을 붙이면 된다 jcmd : Full GC를 발생시킨 후 살아있는 인스턴스의 점유율만 보여줌 처음에는 이 명령..

개발/BE 2024.03.01

백준9934 - 완전 이진 트리(Java)

https://www.acmicpc.net/problem/9934 9934번: 완전 이진 트리 상근이는 슬로베니아의 도시 Donji Andrijevci를 여행하고 있다. 이 도시의 도로는 깊이가 K인 완전 이진 트리를 이루고 있다. 깊이가 K인 완전 이진 트리는 총 2K-1개의 노드로 이루어져 있다. (아래 www.acmicpc.net 재귀 문제를 풀어보았다. 문제는 길지만 정리하면 완전 이진 트리의 값이 주어지고, 이 트리를 레벨별로 출력하는 문제였다. 입력이 항상 완전 이진트리임이 보장되기 때문에, 전위 순회를 진행시키고 방문 순서대로 StringBuilder에 append하는 방식으로 풀어주었다. 높이가 4인 완전 이진 트리를 예시로 생각해보자 전체 노드의 개수는 2^4 - 1 개이다. 루트 노드의..

플밍/문제풀이 2024.03.01

[Java] Heap Memory 누수 분석기2 : 모니터링 환경 구축하기 - VisualVM

이전 글에서 이어집니다 : [Java] Heap Memory 누수 분석기1 : JVM이란 ? 그래서 JVM이 뭔지 대략적으로 알았으니 내 프로그램에서 이 JVM이라는 녀석이 어떻게 돌아가고 있는지 확인해보려고 한다. 일단 여러가지 모니터링 툴이 있다고 해서 써봤는데, 분석이 쉽지 않았다. (첨에는 InteliJ에 내장되어있는 Profiler를 통해서 보려고 했으나 서비스 프로세스에 부하 좀만 주면 프로세스 다운 전에 InteliJ 자체의 메모리가 터져서 죽어버렸다 ;;;) 가장 간편한 방법은 바로 힙 덤프를 떠서 확인해보는거였지만, 고객들에게 제공되고있는 서비스였기때문에 막 덤프 떠버리기는 좀 부담이 있었다. 특히 구글링 중 봤던 아래 문구때문에 힙덤프는 마지막 후순위로 미루고싶었음 ❗주의!! 힙 히스토..

개발/BE 2024.02.28

백준12919 : A와 B 2

https://www.acmicpc.net/problem/12919 12919번: A와 B 2 수빈이는 A와 B로만 이루어진 영어 단어 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수빈 www.acmicpc.net 어제 재귀를 풀고 맛이 들렸다. 첨엔 S에 문자열을 붙여가면서 T를 찾아갔는데, 시간초과가 났다. A개수 B개수 세가면서 플래그를 주다가,, 그냥 T에서 조건절에 따라서 문자열을 제거하며 S를 찾아주면 불필요한 문자열의 탐색 없이 빠르게 찾을 수 있겠구나를 깨달았다. package BOJ; import java.util.*; public class BOJ1..

플밍/문제풀이 2024.02.27

[Java] Heap Memory 누수 분석기1 : JVM이란 ?

구축해둔 모니터링 시스템 통해 간헐적으로 알림이 오기 시작했다. 서버 구동한지 한달정도 지나니 초기에 40%정도였던 힙메모리 사용률이 지속적으로 70%대를 돌파하고있었다. 왜 그런고 하니,,, 대충 이런 모양새였다 (마우스패드로 그려서 이상함) minorGC가 일어나면서 간헐적으로 메모리 영역이 줄어들지만 메모리가 제대로 해제되지 못한(=누수가 일어나는 부분의) 객체들이 차지하는 메모리가 지속적으로 쌓이면서 평균적인 메모리 사용률이 올라가게 된 것이다. 하지만 기존에 구축되어있던 모니터링 도구로는 어떤 객체가 메모리를 잡아먹는지나,, 상세한 시간대별 힙메모리 소모율 등등은 볼 수 없었다. 그래서 모니터링 환경을 추가적으로 구축하려고 했다. 대충 알아보니 다음과 같은 방법들이 있더라 VisualVM He..

개발/BE 2024.02.27

백준9184: 신나는 함수 실행(Java)

https://www.acmicpc.net/problem/9184 9184번: 신나는 함수 실행 입력은 세 정수 a, b, c로 이루어져 있으며, 한 줄에 하나씩 주어진다. 입력의 마지막은 -1 -1 -1로 나타내며, 세 정수가 모두 -1인 경우는 입력의 마지막을 제외하면 없다. www.acmicpc.net 문제 조건 제대로 안보고 풀어서,,, 겁나 틀렸다 ㅠ 오랜만에 재귀 푸니까 재밌당 package BOJ; import java.io.*; import java.util.*; public class BOJ9184 { private static int[][][] arr = new int[21][21][21]; public static void main(String[] args) throws IOExcep..

플밍/문제풀이 2024.02.27
728x90