전체 글 120

[Spring]heapdump를 이용해서 메모리 누수(Memory Leak) 찾아보기 feat. Eclipse Memory Analyzer

들어가며Spring 서버에서 메모리 누수가 있는지 확인하는 방법을 공부해서 정리해봤습니다. 메모리 누수(Memory Leak)??동적으로 할당하여 사용한 메모리가 해제될 수 없는 상태가 된 것을 누수라고 표현하곤합니다.쓸모 없는 데이터가 계속 쌓이니까 어느 순간 실제 필요한 데이터를 불러와야하지만 꽉차서 여러 오류가 발생합니다.그걸 해결하기 위한 대표적인 해결책이 가비지 콜렉터이나 이 방법으로 해결하지 못하는 경우도 많습니다.그럴 땐 직접 메모리힙을 보면서 뭐가 지금 누수가 생긴 지 확인해야 합니다.heapdump를 사용해서 분석하면 더욱 더 편하게 할 수 있습니다.Heapdump가 뭐에요?애플리케이션이 실행 중인 특정 시점에서 JVM의 힙 메모리 영역을 스냅샷으로 캡처하여 저장한 파일입니다.힙 메모리라..

[Kotlin]코루틴(Kotlin Coroutine)에 대해 알아보자

들어가며코틀린 비동기 처리에서 사용하는 코루틴에 대해 공부한 내용들을 정리해보았습니다. 코틀린 코루틴이 뭔가요?비동기적으로 실행되는 코드를 간소화하기 위한 동시성 설계 패턴의 일종입니다.비동기 처리는 보통 동시성이나 병렬성을 높이기 위해 사용됩니다.여러 코드를 활용하는 병렬 처리를 위해 다중 스레드를 사용하기도 하지만, 코루틴은 주로 하나의 스레드에서 여러 작업을 번갈아 처리할 수 있는 동시성을 매우 효율적으로 다루기 위해 설계되었습니다.하지만 코루틴은 스레드와 달리 시스템 리소스를 거의 차지하지 않습니다. 따라서 수 천개, 수 만 개의 코루틴을 생성해도 전혀 문제가 없는 겁니다.그런데도 동시 작업을 효율적으로 처리할 수 있는 거죠 어떻게 스레드와 달리 시스템 리소스를 거의 차지 않게 만든 건가요?코루틴..

[백준]1039 - 교환 문제 풀이(자바,Java)

문제1039번: 교환들어가며완전 탐색 기법으로 문제를 풀었습니다.다만, dfs를 처음 이용했는데 메모리 초과로 계속해서 못풀었습니다.겨우 답지보고 bfs 접근을 해야 함을 깨달았습니다.풀이 코드import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.*;public class 백준1039_교환 { static int k; static String originalNum; static int result = Integer.MIN_VALUE; public static void main(String[] args) throws IOException { ..

[Spring]부하테스트 후 서버 성능 개선해보기(feat. Valkey)

들어가며안녕하세요. 현재 크래프톤 정글에서 "넌! 런"이라는 러닝앱을 개발하고 있습니다. 핵심 기능 개발이 끝나고 나서 서버 성능 테스트를 해보고 한계를 확인하고 이를 개선하고자 공부한 내용을 글로 남기고자 합니다. 초기 아키텍처초기엔 개발이 급선무였기에 최대한 아키텍처를 잘 짜고 싶다는 사심을 배제해서 구성했습니다. 단일 인스턴스로 구축되었으며 HTTPS SSL/TLS 통신은 nginx가 담당하고 있었습니다. CI/CD는 Github Actions을 이용해서 Develop 브랜치에 코드가 머지가 되면 AWS ECR에 Docker Image를 저장하고 인스턴스에 ssh 접속해서 pull 해서 컨테이너를 올리는 방식으로 진행했습니다. 이 과정 속에서 nginx 또한 관리해야하므로 Docker Compose..

[Spring]Google Static Maps API 적용기(지도 로딩 속도 최적화하기)

들어가며안녕하세요. 현재 크래프톤 정글에서 "넌! 런"이라는 러닝앱을 개발하고 있습니다. GPS 경로를 저장하고 이미지로 보여줘야 하는 문제로 Google Static Maps API를 사용하게 되었습니다. 그 과정 속에서 겪었던 문제에 대해 적어봤습니다.Google Static Maps API 사용하기 이전엔.. https://namamim.tistory.com/114 [Spring]지도 경로 로딩 최적화 문제 해결하기 (feat. PostGIS, Ramer-Douglas-Peucker)들어가며안녕하세요. 현재 크래프톤 정글에서 "넌! 런"이라는 러닝앱을 개발하고 있습니다. GPS를 많이 사용하는 러닝앱 특성상 수많은 좌표들을 최적화하는 문제에 직면하여 고생한 내용을 글namamim.tistory.co..

[백준]1033 - 칵테일 문제 풀이(자바,Java)

문제https://www.acmicpc.net/problem/1033들어가며bfs로 접근하는 것까진 성공했지만 최소 공배수, 최대 공약수를 어떻게 구해야 하는지 잊어먹어서 못 풀었다. 풀이 코드import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.*;public class 백준1033_칵테일 { private static ArrayList> arr = new ArrayList(); private static long[] amount; private static ArrayList ratio = new ArrayList(); public static ..

[Spring]지도 경로 로딩 최적화 문제 해결하기 (feat. PostGIS, Ramer-Douglas-Peucker)

들어가며안녕하세요. 현재 크래프톤 정글에서 "넌! 런"이라는 러닝앱을 개발하고 있습니다. GPS를 많이 사용하는 러닝앱 특성상 수많은 좌표들을 최적화하는 문제에 직면하여 고생한 내용을 글로 남기고자 합니다. 어떤 문제가 있었나요?저희 앱에 지정된 경로들을 사용자에게 제시해주고 그중 하나를 선택하여 그걸 경로 안내와 함께 달리고 랭킹을 세우는 기능이 있었습니다.이 기능을 위해 지도의 경로를 리스트형식으로 띄워야 했습니다. 딱 이 기능을 구상했을 때, 정말 쉬울 거라고 생각했습니다. 경로는 위경도 좌표들의 배열이니까.. 배열로 저장하면 되지 않을까..??근데 잠깐만 이러면 DB Table을 어떻게 구성해야 하는 거지?? 그렇습니다.첫 번째 난관: 어떻게 수많은 좌표들을 DB에 저장하는가? 단순하게 생각해 ..

[백준]14502 - 연구소 문제 풀이(자바,Java)

문제https://www.acmicpc.net/problem/14502 들어가며오랜만에 푸는 문제라 숨 막혔다.그리고 배열 복제하는 등의 테크닉도 배운 문제라 좋았다.풀이 코드package solved.ac.maraton;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.*;public class 백준14502 { static int[][] arr; static int[][] map; static int n, m; static boolean[][] visited = new boolean[n][m]; static int[][] dirs = ..

[AWS] EC2 구매 옵션 정리

들어가며인프라를 대여하는 클라우드 특성상 비용은 정말 중요합니다. (사실 인프라 구축에서 비용이 안중요한 곳이 없긴 하죠..)많은 AWS 서비스 그 중에서 대중적인 EC2 관련으로 구매 옵션들을 정리해보았습니다.25.06.17일 기준으로 작성됨을 미리 알려드립니다. 구매옵션 요약구매 옵션할인율특징On-Demand Instances(시간 단위로 컴퓨팅 용량에 대해 비용)0%(이후 할인율 기준)보편적인 방식으로 인스턴스를 켜놓은 시간에 따라 금액을 지불합니다.(요금은 고정, 실행 1분 후부터 측정)Reserved (1 & 3 years)최대 72%긴 시간을 정해두고 인스턴스를 대여하는 방식입니다.인스턴스 유형 및 리전을 포함하여 일관된 인스턴스 구성을 예약하여 사용합니다.Saving Plans (1 & 3 ..

[AWS]보안 그룹(Security Groups)

보안 그룹(Security Groups)??AWS에서 인프라를 다룰 때 가장 기본적이면서도 중요한 보안 요소 중 하나로 간단히 말해, EC2 인스턴스를 위한 가상 방화벽입니다. EC2 인스턴스에 적용해서 어떤 트래픽이 인스턴스로 들어오고(인바운드, Inbound), 어떤 트래픽이 인스턴스에서 나갈 수 있는지(아웃바운드, Outbound)를 제어하는 역할을 합니다. 서비스의 가장 앞단에서 네트워크 보안을 책임지는 기본적인 기술입니다.보안 그룹은 규칙들의 모음이다.각 규칙에는 다음과 같은 요소를 지정할 수 있습니다.1. 프로토콜 : TCP, UDP, ICMP 등 트래픽의 종류2. 포트 범위 : 허용할 포트 번호3. 소스/대상 : 트래픽을 허용할 IP 주소 범위 또는 다른 보안 그룹 기본적으로 인바운드 규칙,..