전체 글 118

[백준]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 주소 범위 또는 다른 보안 그룹 기본적으로 인바운드 규칙,..

[Database] 인덱스(Index) (feat. Mysql)

들어가며데이터베이스의 성능, 특히 데이터 검색 속도를 높이기 위해 만들어진 것이 인덱스(Index)라고 합니다. 이 글에선 전반적인 인덱스의 개념과 동작 원리에 대해 설명합니다. 인덱스?? 사실 인덱스라는 개념은 책에 있는 목차, 즉 인덱스와 매우 비슷한 개념입니다. 책의 앞 부분엔 목차 페이지가 있습니다. 원하는 내용을 찾을 때 색인을 먼저 보고, 해당 페이지로 바로 이동하는 것처럼, 데이터베이스에서도 인덱스를 활용하면 테이블 전체를 처음부터 끝까지 읽지 않고도 원하는 데이터를 빠르게 찾을 수 있습니다.인덱스 구조와 종류가장 널리 사용되는 인덱스 구조는 B+ Tree입니다. 이 외에도 Hash 인덱스, 비트맵 인덱스 등 다양한 방식이 있습니다. 이 글에선 자주 사용되는 B+ Tree 기준으로 설명드리겠..

[백준] 14501 - 퇴사 문제 풀이(자바,Java)

문제https://www.acmicpc.net/problem/14501 들어가며dp 를 잘못 생각해서 못 푼 문제이다. 풀이 코드package solved.ac.maraton;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class 백준14501_퇴사 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(ne..