프로그래밍(370)
-
Container With Most Water
2026-03-11오늘의 문제는 neetcode의 Container With Most Water이다heights의 배열이 주어지면 가장 큰 면적의 물을 담길 수 있는 크기를 리턴하면 된다. 이 문제를 풀 때 고려해야 하는 것은 양쪽 height가 다르다면 작은 수가 기준이 된다. 물을 해당 컨테이너에 넣는다고 가정하면 한쪽만 높아서 되는 게 아니기 때문이다. 브루트포스 방식으로 풀면 간단하지만 시간 복잡도가 O(n^2)이 된다.투 포인터를 사용하면 시간복잡도가 O(n)이며 효율적이게 값을 구할 수 있다.class Solution { public int maxArea(int[] heights) { int l = 0, r = heights.length - 1; int max ..
2026.03.11 -
3Sum
2026-03-10오늘 내가 기록할 알고리즘은 NeetCode의 Two Pointer 문제이다.인덱스의 3가지 수의 합이 0이 되어야 하는 모든 리스트를 리턴해야 하는데, 중복되는 수가 있으면 안된다. 처음 풀이는 brute force 방식으로 문제를 해결해 보았다.class Solution { public List> threeSum(int[] nums) { Set> list = new HashSet(); Arrays.sort(nums); for(int i = 0; i subList = Arrays.asList(nums[i], nums[j], nums[k]); list.add(subList); ..
2026.03.10 -
따끈따끈한 SAA-C03 자격증 합격 후기
시험 후기나는 부산에 위치한 앤아버 어학원 지하 1층 시험장에서 시험을 봤다. 시험 시간은 10시부터였지만 시험보는 사람이 나밖에 없어서 9시 반에 도착하자마자 시험을 봤다. 시험치기 전에는 소지품과 자켓을 락커에 보관하고, 동의서를 작성한 뒤 시험장에 들어가 시험을 쳤다. 시험 문제 절반 정도 가량은 덤프 문제와 동일했고 나머지는 처음보는 문제였다. 문제가 덤프 문제보다 지문 길이가 짧았지만 헷갈리는 문제가 많았던 것 같다. 다 풀고 나니 1시간 정도가 지났고 다시 한번 문제를 살펴보고 제출하니 1시간 반 정도 걸렸다. 여러 사람의 후기를 보니 당일날 시험 결과를 알 수 있대서 메일을 확인해보니 메일이 오지 않았다. 혹시나 하는 마음에 AWS 시험 결과 페이지에 들어가보니 '합격'이라는 시험 결과를 ..
2025.11.03 -
동기 처리와 비동기 처리의 차이, 그리고 서버 효율에 대한 이야기
백엔드 개발을 하다 보면 동기 처리와 비동기 처리에 대한 이야기를 자주 접하게 된다. 개발을 처음 시작했을 때에는 코드를 작성하는 것에만 집중했지만 서비스를 운영하고 관리를 하다보니 API 처리 방식과 서버 리소스 사용의 효율성에 대해 고민이 든다. 이번 글에서는 동기 처리와 비동기 처리의 차이, 쓰레드 풀과 Executor의 역할, 그리고 비동기 처리의 메모리 사용 이슈까지 정리해본다. 또한 프론트엔드와 백엔드의 처리 방식이 서로 다를 때 발생하는 상황도 함께 살펴본다. 동기 처리란?동기 처리란 요청을 보내고 응답이 올 때까지 작업 흐름이 멈추는 방식이다. 클라이언트가 서버에 API 요청을 보내면, 서버는 해당 요청을 처리하는 동안 쓰레드를 점유하고, 처리 완료 후에야 응답을 반환한다. 이 방식에서는 ..
2025.07.05 -
Docker를 사용할 때 Volume이란? 실무 경험으로 이해하기
1. Docker란?Docker는 애플리케이션을 컨테이너(container)라는 가벼운 단위로 패키징하고 실행할 수 있게 해주는 플랫폼이다.이 컨테이너는 애플리케이션 + 환경(라이브러리, 설정 등)을 하나로 묶어 배포하므로, "내 PC에선 잘 되는데?" 같은 환경 문제를 크게 줄여준다는 특징이 있다. 이러한 장점 때문에 윈도우, 리눅스 등 어떤 OS를 사용하든지 상관없이 배포할 수 있다.- 개발 → 배포 → 운영이 일관된 환경에서 이뤄짐- Dockerfile, docker-compose.yml 등을 이용해 손쉽게 빌드/실행 가능2. 그렇다면 Docker Volume은 무엇일까?Docker 컨테이너는 기본적으로 임시적인 파일 시스템을 사용한다. 즉, 컨테이너를 삭제하거나 재시작하면 내부에 있던 데이터는 모..
2025.06.24 -
Grafana + Loki + Promtail을 활용한 로그 수집 및 시각화 시스템 구축하기(1)
개요실제 운영 중인 Spring 애플리케이션에서 발생하는 로그를 수집하고, 시각화하여 모니터링할 수 있는 시스템을 구축했다. 이 시스템은 Grafana, Loki, Promtail 세 가지 도구를 활용하였고, GCP의 Ubuntu 서버 2대에 구성되었다. 아키텍처 구조서버 A (Spring 앱 실행 중)Spring 애플리케이션이 Docker 컨테이너에서 실행 중Promtail을 통해 컨테이너 로그 수집수집된 로그는 서버 B의 Loki로 전송서버 B (로그 저장 및 시각화)Loki: 로그 저장소 역할Grafana: 로그 시각화 대시보드Database: 별도 용도로 사용네트워크 구성3100 포트: Promtail이 Loki에 로그를 전송할 수 있도록 오픈3000 포트: Grafana UI 접속용 포..
2025.06.04