2026 18
MySQL(InnoDB) 락 정리 이 글은 MySQL 8.0 공식 레퍼런스 매뉴얼 중 InnoDB 락(Lock) 관련 챕터를 정리한 노트다. 여러 커넥션이 같은 행을 동시에 읽고 쓸 때 dirty read(커밋 전 데이터를 읽는 문제)나 lost update(동시 갱신 중 한쪽이 사라지는 문제)가 생기지 않도록, InnoDB가 어떤 종류의 락을 언제 걸고 격리 수준이 그 범위를 어떻게 바꾸는지를 다룬다. [!NOTE] 사전 지식트랜잭션·커밋/롤백·ACI... Argo CD 정리 — GitOps 지속적 배포와 App of Apps Argo CD는 Kubernetes 클러스터의 배포를 Git 저장소로 관리하는 선언적(declarative) GitOps 지속적 배포(Continuous Delivery, CD) 도구입니다. Git에 선언한 매니페스트를 클러스터의 실제 상태와 계속 비교하고 둘이 어긋나면(drift) 자동으로 되돌립니다. 배포 파이프라인을 코드로 선언하고 클러스터 변경 이력을 Git 커밋으로 남기며 수백 개 클러스터·환경을 하나의 제어 지... Orca: 병렬 코딩 에이전트 오케스트레이션 ADE 이 글은 오픈소스 병렬 코딩 에이전트 오케스트레이션 도구 Orca(stablyai/orca)의 공식 문서(onorca.dev/docs)와 GitHub 저장소, 독립 리뷰 자료를 근거로 아키텍처와 기능을 정리한 노트입니다. [!NOTE] 전제 지식git worktree와 Claude Code·Codex 같은 CLI 기반 코딩 에이전트를 사용해 본 경험이 있다고 가정합니다. 두 개념이 낯설다면 아래 “핵심 메커니즘” 절의 ... 멀티-DRM 표준 정리 멀티-DRM은 암호화된 콘텐츠 한 벌로 세 DRM(Digital Rights Management, 디지털 저작권 관리) 시스템 — Widevine·FairPlay·PlayReady — 을 동시에 지원하는 방식이다. Apple·Google·Microsoft 생태계를 한 번에 커버하면서도 콘텐츠를 DRM마다 따로 암호화하지 않게 하는 것이 CENC·CMAF·EME 같은 공개 표준이다. 이 글은 그 공개 표준과 세 DRM의 공... Apache Airflow 정리 Apache Airflow는 워크플로우를 Python 코드로 정의하고 스케줄·모니터링하는 오케스트레이션 플랫폼이다. 태스크 사이의 실행 순서(의존성)를 코드로 표현하고, 스케줄러가 그 순서대로 태스크를 돌린다. 데이터 파이프라인(ETL/ELT)·ML 파이프라인·배치 작업을 다룰 때 쓴다. [!NOTE] 버전 기준이 글은 Apache Airflow 공식 문서를 정리한 노트이며, 2025년 4월 GA된 Airflow 3.x... OpenClaw: 자기 호스팅 멀티채널 개인 AI 비서 프레임워크 이 글은 OpenClaw 공식 README·아키텍처 문서·Skills/Nodes 문서, Cloudflare의 Moltworker 공식 저장소, Microsoft 보안 블로그를 근거로 OpenClaw의 아키텍처·확장 모델·보안 설계와 짧은 이름 변경 이력을 정리한 노트입니다. [!NOTE] 전제 지식Node.js 기반 서버 프로세스(데몬)와 WebSocket 통신을 기본 개념으로 알고 있다고 가정합니다. 메신저 봇이나 개... cladding — spec-driven 거버넌스 하네스 cladding(클래딩)은 코드를 직접 작성하지 않는다. 코드 작성은 언제나 host LLM(Claude Code · Codex · Gemini · Cursor)의 몫이고, cladding은 그 LLM을 감싸는 거버넌스 외피다. host LLM이 일을 시작하기 전(BEFORE) 프로젝트의 의도를 주입하고, 끝낸 뒤(AFTER) 그 결과가 스펙과 어긋나지 않았는지 검증한다. 이 글은 cladding 공식 문서 7편(개요·아... Kubernetes Operator 패턴 정리 Operator는 CustomResourceDefinition(CRD)으로 새 API 종류를 등록하고, 그 CRD를 대상으로 “원하는 상태(spec)”와 “관측된 상태(status)”를 끊임없이 비교·수렴시키는 컨트롤러를 붙입니다. 이렇게 사람 운영자가 갖고 있던 애플리케이션별 운영 지식(배포·백업·업그레이드·장애 대응)을 코드로 인코딩하는 패턴입니다.이 글은 kubernetes.io 공식 문서, Kubebuilder B... 노드의 컨테이너 이미지 저장·계층 공유·GC Kubernetes 노드가 컨테이너 이미지 레이어를 디스크에 어떻게 저장하고, 이미지·컨테이너 사이에서 어떻게 공유하며, 언제 정리하는지를 정리한 노트다. Kubernetes·containerd·OverlayFS 공식 문서와 OCI 스펙의 내용을 옮긴 것이다.전체를 관통하는 사실 하나는 이렇다. 이미지 캐시는 노드 로컬이다. 클러스터 전체가 공유하는 이미지 저장소는 기본적으로 없다. 이 한 문장이 레이어 재사용의 원리(같... 컨테이너 이미지 포맷과 Pull 프로토콜 컨테이너 이미지는 하나의 파일이 아니라, JSON 문서 몇 개와 파일시스템 tar 묶음들이 콘텐츠 해시로 서로를 가리키는 작은 그래프입니다. 이 하나의 설계 결정 — 모든 조각을 자기 바이트의 해시로 식별하는 것 — 이 태그와 digest의 차이, 멀티아키텍처 이미지의 동작, Kubernetes의 imagePullPolicy 기본값, 레지스트리 pull 프로토콜까지 관통합니다.이 글은 OCI(Open Container I... AWS VPC 정리 - 4 이 글은 Amazon VPC를 다른 VPC와, 온프레미스 네트워크와, 그리고 AWS 서비스에 사설로 연결하는 7가지 기본 수단을 AWS 공식 문서 기준으로 정리한 노트입니다. 대상은 VPC Peering, Transit Gateway, VPC Endpoint(Gateway·Interface), AWS PrivateLink, Site-to-Site VPN, Direct Connect, VPC DNS(Route 53 Reso... 컨테이너 런타임 실행 경로 정리 Kubernetes에 Pod를 하나 띄우면, 그 명세는 노드 위의 Linux 프로세스 하나가 됩니다. 그 사이에는 여러 계층이 있습니다. kubelet이 Pod를 조율하고, CRI(Container Runtime Interface)라는 gRPC 인터페이스가 kubelet과 런타임을 잇고, containerd 또는 CRI-O가 이미지를 받고 컨테이너를 준비하며, shim이나 conmon이 컨테이너를 감독하고, 맨 아래에서 ... AWS VPC 정리 - 3 이 글은 Amazon VPC의 두 가지 패킷 필터링 방화벽인 Security Group과 Network ACL을 AWS 공식 문서(Amazon VPC User Guide, Amazon EC2 User Guide) 기준으로 정리한 노트입니다. 두 메커니즘은 네트워크 경로의 서로 다른 지점에서 동작하며 stateful/stateless 차이가 규칙 작성 방식을 다르게 만듭니다. 각각의 기본값·평가 방식·한도·예외를 공식 표와... nvidia-smi 정리 이 글은 NVIDIA 공식 문서(nvidia-smi 레퍼런스, MIG User Guide, Driver Persistence, DCGM, NVIDIA Container Toolkit)의 내용을 정리한 노트입니다. nvidia-smi의 기본 출력 필드, 스크립트용 쿼리 모드, 모니터링 루프, 관리 명령, MIG, 토폴로지, 종료 코드까지를 다룹니다.nvidia-smi는 NVIDIA GPU를 확인하고 설정을 바꾸는 명령줄 도... AWS VPC 정리 - 2 이 글은 Amazon VPC User Guide와 Amazon EC2 User Guide(2026년 6월 기준)를 읽고 정리한 노트입니다. VPC 기초 편에 이어, 트래픽이 VPC의 경계(“엣지”)를 넘나드는 메커니즘을 정리합니다. Internet Gateway, NAT Gateway, Egress-only Internet Gateway, Elastic IP, Elastic Network Interface, 그리고 Pri... Argo Workflows 고급 운영 패턴 정리 - 2 Argo Workflows를 프로덕션에서 운영하려면 워크플로우를 정의하는 것 이상이 필요합니다. 스텝이 실패했을 때 어떻게 재시도할지, 동시에 몇 개까지 돌릴지, 비싼 연산 결과를 어떻게 캐시할지, 누구에게 어떤 권한을 줄지, 컨트롤러가 대규모 부하에서 버티도록 어떻게 튜닝할지 — 이런 운영 관심사가 별도의 설정 레이어로 존재합니다.이 글은 Argo Workflows 공식 문서의 운영 패턴을 정리한 노트입니다. 재시도·오... AWS VPC 정리 - 1 VPC(Virtual Private Cloud)는 AWS 계정 전용으로 논리적으로 격리된 가상 네트워크입니다. 온프레미스 네트워크에 대응하는 소프트웨어 정의 네트워크이며 그 위에서 서브넷(Subnet)·라우트 테이블(Route Table)·게이트웨이가 IP 대역과 트래픽 경로를 결정합니다.이 글은 AWS VPC 공식 문서(docs.aws.amazon.com/vpc)에서 VPC·서브넷·라우트 테이블의 동작·한도·예약 규칙을... Argo Workflows 핵심 아키텍처 정리 - 1 Argo Workflows는 Kubernetes 위에서 컨테이너 기반 워크플로우를 실행·오케스트레이션하는 오픈소스 엔진입니다. 여러 컨테이너 잡을 순차·병렬로 엮어 하나의 파이프라인으로 돌릴 때, 그 실행 순서·의존관계·데이터 전달·재시도·스케줄을 Kubernetes 리소스로 선언해 관리합니다. ML 파이프라인, 배치 데이터 처리, CI/CD처럼 병렬 잡 실행이 필요한 도메인에서 널리 쓰입니다.핵심 설계는 두 가지로 요약...
2025 30
CPU 스케줄링 CPU 스케줄링 운영체제가 Ready Queue에 있는 프로세스들에게 CPU 자원을 할당하는 것 CPU 스케줄링 알고리즘에 따라 프로세스에서 해야 하는 일을 스레드 단위로 CPU에 할당함선점 스케줄링 다른 프로세스가 CPU를 사용 중이더라도, 운영체제가 프로세스로부터 자원을 빼앗아 다른 프로세스에 할당하는 방식 우선순위가 높은 프로세스를 빠르게 처리할 수 있다. 라운드 로빈, SRT, 멀티 큐, 멀티 피드백 큐 ... 메모리 계층 구조 메모리 계층 구조“CPU에 얼마나 가까운가” 를 기준으로 각기 다른 용량과 성능의 저장 장치들을 계층적으로 나타낸 구조각 계층은 성능, 용량, 가격 측면에서 차이가 있으며, 이를 효율적으로 활용하여 최적의 성능을 달성할 수 있음메모리 계층 구조의 원리 CPU와 가까울수록 빠르다 CPU 바로 옆에 있는 레지스터와 캐시 메모리는 매우 빠른 속도를 제공하지만, 용량이 작고 가격이 비쌉니다. 반면, R... 명령어 집합 구조(ISA), CISC vs RISC 명령어 집합 구조(ISA)CPU가 이해하고 실행할 수 있는 명령어들의 집합즉, ISA는 CPU의 언어이자 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속CPU 마다 ISA가 다르기 때문에, 인텔 CPU(x86)를 사용하는 프로그램은 ARM 기반 아이폰에서 실행되지 않음즉, ISA의 차이는 소프트웨어 호환성에도 영향을 미치며, 동일한 프로그램을 다른 ISA에서 실행하려면 별도의 변환이 필요CISCCISC는 Complex... 명령어 병렬 처리 기법 (파이프 라이닝, 슈퍼스칼라) 명령어 병렬 처리 기법CPU의 가용성을 최대화하기 위해 명령어를 동시에 처리하는 기법이는 CPU 자원의 효율적인 활용을 통해 실행 시간을 단축하고, 처리량(TPS)를 증가시키는 목적을 가짐대표적인 병렬 처리 기법에는 명령어 파이프 라이닝, 슈퍼스칼라, 비순차적 명령어 처리가 있음명령어 파이프 라이닝명령어를 처리하는 단계를 분리하여 각 단계가 독립적으로 실행될 수 있도록 하는 방식. 일반적으로 명령어 인출(Fetch), 해... [프로그래머스/Level2] 다리를 지나는 트럭 - JAVA[자바] 난이도 : Level 2유형: 큐 / 구현 / 시뮬레이션구현 시간 : 30분링크: https://school.programmers.co.kr/learn/courses/30/lessons/42583🔗 프로그래머스 - 다리를 지나는 트럭문제 풀이우선 해당 문제는 문제에 대한 설명이 부족하다.예제를 보면 추측이 가능한데 아래 2가지 조건을 추가해야 한다. 트럭은 1초에 1씩 전진한다. 트럭은 1초에 1대씩 다리에 올라갈 수... MongoDB와 MySQL의 이기종 트랜잭션 문제 해결 문제 상황채팅 데이터베이스를 MySQL에서 MongoDB로 이전하며 트랜잭션이 적용되지 않는 문제가 발생했습니다.Spring은 @Transactional 어노테이션을 통해 AOP를 사용하여 트랜잭션을 제어하며, 트랜잭션은 TransactionManager을 통해 관리됩니다.Spring Boot는 등록된 라이브러리를 통해 자동으로 스프링 컨테이너에 트랜잭션에 등록됩니다.그러나 MongoDB 트랜잭션은 선택 사항이기 때문에,... MongoDB LocalDateTime 저장 시 UTC로 저장되는 문제 문제 상황Spring Boot 환경에서 MongoDB에 LocalDateTime을 저장할 때, Date 컬럼이 자동으로 UTC로 변환되어 저장되는 문제가 발생했습니다.예를 들어, 한국 시간(KST) 기준 18시 36분에 전송한 채팅 메시지가 국제 표준 시간(UTC) 기준 09시 36분으로 저장됩니다. 그러나 데이터를 다시 Spring Boot 애플리케이션에서 조회하면, 시스템 기본 시간대(KST)로 변환되어 정상적으로 출... [BOJ/Gold4] 12869번 뮤탈리스크 - JAVA[자바] 난이도: 골드 4유형: BFS / DFS / DP링크: BOJ 12869번 뮤탈리스크구현 시간: 30분문제 풀이이 문제는 BFS / DFS 알고리즘의 유형으로, 뮤탈리스크는 한 번의 공격에서 세 개의 SCV에 각각 9, 3, 1의 피해를 줄 수 있으며, 세 개의 공격 순서를 자유롭게 선택할 수 있습니다.즉, 모든 가능한 공격 순서를 고려하여 최소 공격 횟수를 찾아야 하는 문제입니다.얼핏 보면 SCV 체력을 내림차순으로 정... WebSocket 채팅 서비스 구현 (4) — 성능 개선·부하 테스트 들어가며야구 직관 서비스 CATCH-Mi 프로젝트에서 실시간 채팅 서비스를 구현한 경험을 기록하고 복습하기 위해 본 글을 작성합니다. 이번 포스팅에서는 현재 CATCH-Mi 채팅 서비스의 문제점과 잠재적인 장애 요소를 고민하고, 이에 대한 성능 개선 과정과 Jmeter를 통한 성능 테스트 결과를 비교해 보겠습니다.SpringBoot와 웹소켓을 통해 채팅 서비스 구현과정이 궁금하신 분은 이전 글을 참고해 주세요!🔗 [Spr... [프로그래머스/Level2] 구명 보트 - JAVA[자바] 난이도 : Level 2유형: 그리디 / 투 포인터구현 시간 : 1시간 (못 품)링크: https://school.programmers.co.kr/learn/courses/30/lessons/42885🔗 프로그래머스 - 구명 보트문제풀이이 문제는 그리디 알고리즘 유형으로, 최소한의 구명보트 개수로 모든 사람을 태우는 문제이다.처음에는 A라는 사람의 무게가 주어지면 남은 사람들 중 구명보트의 무게 제한을 넘지 않는 최대값이... [BOJ/Gold1] 1700번 멀티탭 스케줄링 - JAVA[자바] 난이도 : 골드 1유형 : 그리디 / 구현링크 : https://www.acmicpc.net/problem/1700구현 시간 : 1시간문제 풀이이 문제는 그리디 알고리즘 유형으로, 멀티탭에 꽂힌 전기용품 중 어떤 것을 제거해야 하는지 결정하는 문제입니다.멀티탭의 상태를 관리하기 위해 삭제 및 삽입이 용이한 List 자료구조를 사용하여 구현하였습니다. 현재 멀티탭이 비어있거나 빈 구멍이 있는 경우 새로운 ... Redis Cache를 적용한 조회 성능 개선 들어가며현재 진행 중인 프로젝트의 채팅 기능에서 채팅 내역 조회가 빈번하게 발생하고 있습니다. 사용자가 매번 채팅을 조회할 때마다 데이터베이스에 직접 접근한다면, 사용자가 많아질 경우 데이터베이스에 큰 부하가 가해져 전체적인 서비스 성능이 저하될 수 있습니다. 특히, 채팅 서비스는 실시간으로 데이터가 생성되고 조회되는 특성을 가지고 있기 때문에, 데이터베이스의 부하를 줄이고 빠른 응답 속도를 제공하는 것이 중요합니다.이러... No Offset 적용한 페이징 성능 개선 - MongoDB 들어가며CATCH-Mi 서비스의 성능 개선을 진행하면서, No Offset Pagination을 통해 페이징 기능을 효과적으로 개선할 수 있다는 것을 알게 되었습니다. 이번 글에는 기존 Offset 방식과 No Offset 방식의 장단점을 비교하고, 실제 서비스에 No Offset 방식을 어떻게 적용했는지 코드와 함께 그 과정을 정리해보고자 합니다. [!note] 페이지네이션이란?페이지네이션(Pagination)은 대량... [BOJ/Silver2] 18353번 병사 배치하기 - JAVA[자바] 난이도 : 실버 2유형 : 동적 계획법 / LIS링크 : https://www.acmicpc.net/problem/18353구현 시간 : 30분문제 풀이이 문제는 ‘가장 긴 감소하는 부분 수열’을 찾는 문제로, LIS(가장 긴 증가하는 부분 수열) 알고리즘을 변형해서 해결할 수 있습니다.DP 테이블은 각 위치에서 끝나는 가장 긴 감소하는 부분 수열의 길이를 저장합니다. 예를 들어, dp[i]는 i번째 숫자를 마지막으로 포... MySQL → MongoDB 마이그레이션 과정 들어가며이번 포스팅에서는 MySQL로 구현된 채팅 데이터베이스를 MongoDB로 마이그레이션 하고, bwildvogel 라이브러리를 사용하여 스프링 내장 MongoDB를 띄워 테스트 코드를 구현하는 과정을 다뤄보겠습니다.이미 JPA로 구현된 엔티티를 MongoDB로 마이그레이션 하는 이유는 데이터베이스의 스키마가 자주 변경되어 유연성이 필요하거나 관계형 데이터베이스가 필요 없는 경우 등 여러 가지가 있을 수 있습니다.기존... WebSocket 채팅 서비스 구현 (3) — STOMP 실시간 채팅 들어가며야구 직관 서비스 캐치미 프로젝트에서 실시간 채팅 서비스를 구현한 내용을 기록 및 복습의 목적으로 본 글을 포스팅합니다. 이번 포스팅에서는 STOMP 프로토콜과 스프링 내장 메시지 브로커를 사용해서 실제 채팅 애플리케이션을 구현하는 과정을 다뤄보려고 합니다. 캐치미 서비스의 채팅 도메인 규칙과 채팅 ERD 설계 과정이 궁금하신 분은 이전 글을 참고해주세요!🔗 [Spring boot] WebSocket 을 사용하여 ... [프로그래머스/Level3] 블록 이동하기 - JAVA[자바] 난이도 : Level 3유형: BFS / 구현구현 시간 : 1시간링크: https://school.programmers.co.kr/learn/courses/30/lessons/60063🔗 프로그래머스 - 블록 이동하기문제 설명로봇개발자 “무지”는 한 달 앞으로 다가온 “카카오배 로봇경진대회”에 출품할 로봇을 준비하고 있습니다. 준비 중인 로봇은 2 x 1 크기의 로봇으로 “무지”는 “0”과 “1”로 이루어진 N x N 크... WebSocket 채팅 서비스 구현 (2) — 채팅 DB 설계 들어가며야구 직관 서비스 캐치미 프로젝트에서 실시간 채팅 서비스를 구현한 내용을 기록 및 복습의 목적으로 본 글을 포스팅합니다. 이번 포스팅에서는 캐치미 채팅 서비스의 도메인 규칙에 따라 채팅 데이터베이스를 설계한 경험을 다뤄보려고 합니다. 소켓과 웹소켓, STOMP 프로토콜에 대한 개념, HTTP 통신과의 차이점의 차이점을 알고 싶은 분은 이전 글을 참고해 주세요!🔗 [Spring boot] WebSocket 을 사용하... [BOJ/Gold5] 15686번 치킨 배달 - JAVA[자바] 난이도 : 골드 5유형 : 조합 / 구현 / 백트래킹링크 : https://www.acmicpc.net/problem/15686구현 시간 : 30분문제풀이위 문제의 핵심은 M개의 치킨집의 조합에 따라 최소 치킨 거리는 달라진다. 이 말이 무슨 뜻이냐면 항상 작은 치킨 거리의 합을 가지는 경우를 선택하면 안되므로 그리디 알고리즘은 사용할 수 없다. 예를 들어 6개의 치킨집 중 하나의 치킨집을 폐업시킬 때는 6개의 치킨집을 ... [프로그래머스/Level3] 기둥과 보 설치 - JAVA[자바] 난이도 : Level 3유형 : 구현 / 시뮬레이션구현 시간 : 2시간 (못품)링크 : 프로그래머스 - 기둥과 보 설치문제풀이위 문제는 많은 조건을 생각해야하는 빡구현 문제다. 주어진 좌표에 기둥과 보를 설치하는 구현은 정말 쉽지만, 기둥과 보를 삭제할 때 고려해야할 경우의 수는 매우 많다. 해당 경우의 수에 대해서 설명해보겠다. 나는 처음 구현할 때, 설치, 삭제 모두 전부 경우의 수를 고려해서 코드를 구현했는데 복잡한... [프로그래머스/Level3] 자물쇠와 열쇠 - JAVA[자바] 난이도 : Level 3유형 : 구현 / 시뮬레이션구현 시간 : 1시간링크 : https://school.programmers.co.kr/learn/courses/30/lessons/60059🔗 프로그래머스 - 자물쇠와 열쇠문제풀이위 문제는 2차원 배열에 대한 높은 이해도가 필요하다. 제한사항을 자세히 보면, Key와 Lock의 크기가 3에서 최대 20으로 작은 것을 보니 완전탐색을 이용해서 풀 수 있다. 나는 (Lock... [프로그래머스/Level2] 문자열 압축 - JAVA[자바] 난이도 : Level 2유형 : 문자열 / 구현구현 시간 : 1시간링크 : 프로그래머스 - 문자열 압축문제풀이 주어진 문자열을 1 ~ 문자열의 절반 길이까지 잘라가며 압축된 문자열의 길이를 비교한다. 문자열을 자를 땐, 잘라진 앞부분(target) 을 설정하고 그 뒤로 남은 문자열을 자르며 비교한다. 만약 target 과 다음으로 자른 문자열(compare)이 같다면 cnt 를 1 증가시키고, 다음 문자열로 넘어간다... WebSocket 채팅 서비스 구현 (1) — 웹소켓·STOMP 이해 들어가며야구 직관 서비스 캐치미 프로젝트에서 실시간 채팅 서비스를 구현한 내용을 기록 및 복습의 목적으로 본 글을 포스팅합니다. 이번 포스팅에서는 소켓과 웹소켓, STOMP 프로토콜에 대한 개념, HTTP 통신과의 차이점을 알아보려고 합니다. 채팅에 관련된 채팅방, 채팅 데이터 테이블의 ERD 설계부터 실제 코드 구현, MongoDB로 마이그레이션을 통한 성능 개선까지 실제 프로젝트를 참여하며 겪었던 고민들에 대해 이야기... [BOJ/Gold3] 1005번 ACM Craft - JAVA[자바] 난이도 : 골드 3유형 : 위상 정렬 / 동적 계획법링크 : https://www.acmicpc.net/problem/1005구현 시간 : 1시간 (못품)문제풀이위상 정렬 알고리즘을 공부하고 나서 처음으로 풀어본 문제이다. 노드의 방문 순서를 구현하는건 쉬웠지만, 특정 건물마다 필요한 최대 시간을 구하는 방법을 생각해내지 못했다 ㅜindegree[] 배열을 이용해 노드의 진입 차수를 저장하고, 방문마다 해당 노드의 진입 ... [BOJ/Gold3] 11779번 최소비용 구하기 2 - JAVA[자바] 난이도 : 골드 3유형 : 최단 경로 / 다익스트라링크 : https://www.acmicpc.net/problem/11779구현 시간 : 30분문제풀이해당 문제를 해결하기 위해서 다익스트라 알고리즘을 사용하여 출발 도시에서 각 노드(도시)까지의 최소 시간을 구하고, 동시에 이전 방문 노드를 저장해야 한다.이를 위해 인접한 노드를 방문하며 최소 시간을 distance[] 배열에 갱신하고, 이와 함께 이전 노드를 preN[... [BOJ/Silver1] 2156번 포도주 시식 - JAVA[자바] 난이도 : 실버 1유형 : DP(동적 계획법)링크 : 백준 2156번 - 포도주 시식구현 시간 : 1시간문제풀이이 문제를 풀기 위해 DP의 Bottom-Up 방식을 사용하며, 9465번 스티커 문제와 같이 이전 선택에 따라 다음 선택이 제한된다.연속 세 잔의 포도주를 마실 수 없기 때문에 마지막 잔의 앞 잔, 앞앞 잔의 값이 크다면 마지막 잔을 마시지 않을 수도 있다는 점도 고려해야 한다.따라서 N 번째 잔의 최대값을 구... [BOJ/Silver1] 9465번 스티커 - JAVA[자바] 난이도 : 실버 1유형 : DP(동적 계획법)링크 : https://www.acmicpc.net/problem/9465구현 시간 : 30분문제풀이이 문제를 풀기 위해 DP의 Bottom-Up 방식을 사용하며, 문제 해결의 핵심은 이전 선택에 따라 다음 선택이 제한된다는 점이다.특정 행의 스티커를 선택할 때, 바로 이전 행의 대각선 방향 스티커만 선택 가능하고, 따라서 N 번째 행의 스티커를 선택할 경우, 이전 선택 결과를... [BOJ/Silver3] 2193번 이친수 - JAVA[자바] 난이도 : 실버 3유형 : DP(동적 계획법)링크 : https://www.acmicpc.net/problem/2193구현 시간 : 30분문제풀이위 문제는 전형적인 DP 문제 유형이다. 풀이는 반복문을 사용한 Bottom-Up 방식으로 해결하였다.이 문제를 해결하기 위해서는 이친수의 규칙을 파악해야 한다.이진수가 0으로 끝나는 수는 다음 자리 숫자일 때, 0과 1로 생성되고, 1로 끝나는 수는 0으로 생성된다.예를 들면,... [BOJ/Silver3] 2579번 계단 오르기 - JAVA[자바] 난이도 : 실버 3유형 : DP(동적 계획법)링크 : https://www.acmicpc.net/problem/7569구현 시간 : 30분문제풀이위 문제는 전형적인 DP 문제 유형이다. 풀이는 반복문을 사용한 Bottom-Up 방식으로 해결하였고, Top-Down 방식은 다른 분들의 코드를 참조하여 작성했다.우선 위 문제를 풀기 위해서는 점화식을 정의해야한다.DP[i] 번째의 최대 점수를 구하기 위해서는 DP[i-2] (... [프로그래머스/Level4] 지형 이동 - JAVA[자바] 난이도 : Level 4유형 : BFS / 우선순위 큐구현 시간 : 1시간 20분 (못품)링크 : https://school.programmers.co.kr/learn/courses/30/lessons/62050🔗 프로그래머스 - 지형 이동문제풀이위 문제는 Summer/Winter Coding(2019) 기출 문제로 처음으로 풀어보는 레벨 4의 문제였다. 확실히 비슷한 BFS 문제인 경주로 건설보다는 어렵게 느껴졌다. 1...
2024 17
그래프 탐색 알고리즘 - 너비 우선 탐색 [BFS] 너비 우선 탐색(BFS, Breadth-First Search)BFS는 그래프 탐색 알고리즘 중 하나로, 시작 노드와 거리가 가장 가까운 노드를 우선하여 방문하는 방식의 알고리즘이다.BFS는 최단 경로를 찾는 알고리즘으로도 많이 쓰이곤 하는데, 시작 노드로부터 직접 간선으로 연결된 모든 노드를 먼저 방문하기 때문이다. 쉽게 말해 문제에 대한 답이 많은 경우 너비 우선 탐색은 이 답 중에서도 가장 가까운 답을 찾을 때 유용... [BOJ/Gold5] 7569번 토마토 - JAVA[자바] 난이도 : 골드 5유형 : BFS / 큐링크 : https://www.acmicpc.net/problem/7569구현 시간 : 1시간문제풀이 토마토 박스를 3차원 배열에 저장한다. 1번 과정에서 빈칸의 개수, 익은 토마토의 개수를 저장한다. (총 배열의 크기 - 빈칸의 개수) 가 익은 토마토의 개수와 같다면 0 을 출력하고 종료한다. 익은 토마토가 있는 좌표를 Queue에 저장한다. Qu... [프로그래머스/Level3] 경주로 건설 - JAVA[자바] 난이도 : Level 3유형 : BFS / 큐구현 시간 : 1시간 (못품)링크 : https://school.programmers.co.kr/learn/courses/30/lessons/67259🔗 프로그래머스 - 경주로 건설문제풀이위 문제는 2020 카카오 인턴십 코딩 테스트에 출제된 문제로 현재까지 풀어본 BFS 문제와는 다르게 생각이 많이 필요했다.최단 경로를 구한다고 하더라도 그 경로가 가장 저렴한 비용이 들지 않... [프로그래머스/Level2] 미로탈출 - JAVA[자바] 난이도 : Level 2유형 : BFS / 큐구현 시간 : 30분링크 : 프로그래머스 - 미로 탈출문제풀이위 문제는 BFS 탐색 알고리즘을 사용하여 최단 경로를 찾는 문제이다. 앞서 백준을 통해 BFS / DFS 문제를 많이 연습해두었기에 알고리즘을 구현하는 것은 오래 걸리지 않았지만 BFS 를 총 2번 실행하는 과정에서 데이터 초기화에 문제를 겪었다. 시작점, 레버, 도착지의 위치 정보 저장 시작점 -> 레버까... 그래프 탐색 알고리즘 - 깊이 우선 탐색 [DFS] 깊이 우선 탐색(DFS, Depth-First Search)DFS는 그래프 탐색 알고리즘 중 하나로, 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘이다.시작 노드부터 탐색을 시작하여 간선을 따라 최대 깊이 노드까지 이동하여 차례대로 탐색하는 알고리즘이다.DFS는 주로 스택(Stack)을 통해 구현하거나, 재귀문을 통하여 구현한다.DFS 작동 원리 탐색 시작 노드를 스택에 삽입하고 방문 처리를 한다. 스택의 최상단... [BOJ/Gold4] 3190번 뱀 - JAVA[자바] 난이도 : 골드 4유형 : 구현 / 시뮬레이션 / 큐링크 : https://www.acmicpc.net/problem/3190구현 시간 : 1시간문제풀이앞서 풀었던 시뮬레이션 / 구현 문제인 로봇 청소기보다 구현하는데 오랜 시간이 걸린 것 같다. 뱀의 길이는 조건에 따라 늘어나고, 늘어나는 뱀의 몸을 저장할 자료구조를 생각하는게 특히 고민할 부분이였던 것 같다.🔗 [BOJ/Gold5] 14503번 로봇 청소기 - JAVA... [BOJ/Gold5] 14503번 로봇 청소기 - JAVA[자바] 난이도 : 골드 5유형 : 구현 / 시뮬레이션링크 : https://www.acmicpc.net/problem/14503문제풀이로봇 청소기의 규칙대로 알고리즘을 차례대로 구현했다.구현에 대한 고민은 크게 어렵지 않았다. 로봇 청소기의 방향은 Map 자료구조를 사용해서 저장했다.1차 시도 - 통과import java.io.BufferedReader;import java.io.IOException;import java.io.... [BOJ/Silver3] 1966번 프린터 큐 - JAVA[자바] 난이도 : 실버 3유형 : 구현 / 시뮬레이션링크 : 백준 1966번 - 프린터 큐문제풀이 문서 출력 인덱스, 우선순위를 저장할 PrintJob 클래스 구현 우선순위 비교 (현재 PrintJob 보다 높은 우선순위가 있는지 확인) 2번에서 현재 PrintJob 보다 높은 우선순위가 있다면 현재 문서를 다시 큐의 맨 뒤로 삽입 현재 PrintJob 의 우선순위가 제일 높다면 ... [BOJ/Silver5] 1417번 국회의원 선거 - JAVA[자바] 난이도 : 실버 5유형 : 그리디 / 구현 / 우선순위 큐링크 : https://www.acmicpc.net/problem/1417문제 풀이 후보의 수가 1 이하일 경우 0 반환 1번(다솜이) 득표수 저장, 이외 다른 후보들의 득표수 저장 각 후보 득표수들의 최대 득표수 저장 및 후보 인덱스 저장 다솜이의 득표수가 최대 득표수보다 크다면 반복문 탈출 아니라면 최대 득표자의 득표수를 -1, 다솜이 득표수 +11차 ... [BOJ/Silver3] 1213번 팰린드롬 만들기 - JAVA[자바] 난이도 : 실버 4유형 : 문자열 / 그리디 / 구현링크: https://www.acmicpc.net/problem/1213문제 풀이 문자열의 길이가 홀수인 경우 팰린드롬을 만들기 위해서는 개수가 홀수인 알파벳이 정확히 하나여야 함 개수가 홀수인 알파벳이 하나가 아닌 경우 디폴트 메시지(“I’m Sorry Hansoo”)를 출력 팰린드롬 구현 홀수인 알파벳... Spring Security Filter Chain 자세히 알아보기 1. Spring Security Filter Chain 이란? Spring Security의 실제적인 구현은 서블릿 필터를 통해 이루어진다. 서블릿 필터는 웹 요청을 가로챈 후 전처리 또는 후처리를 수행하거나, 요청 자체를 리다이렉트 하기도 한다. FilterChainProxy 세부 내용은 WebSecurityConfigurerAdapter 추상 클래스를 상속하는 구현체에서 설정한다 (보통... Spring Security 시작하기 1. 인증(Authentication)과 인가(Authorization)의 개념웹 애플리케이션을 개발하다 보면 ‘인증’과 ‘인가’라는 용어를 자주 접하게 된다. 이 두 가지 개념은 보안 시스템에서 매우 중요한 부분으로, 쉽게 설명하자면 인증은 ‘누가 누구인지 확인하는 것’, 인가는 ‘무엇을 할 수 있는지 확인하는 것’이다. 지금부터 이 두 가지 개념을 간단하게 알아보자.인증(Authentication) 이란?인증은 사용자... REST(ful) API 정리 REST 란? REST(Representational State Transfer) 는 월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식이다. 로이 필딩(Roy Fielding)의 2000년 박사학위 논문에서 소개되었고, 필딩은 HTTP의 주요 저자 중 한 사람 엄격한 의미로 REST는 네트워크 아키텍처 원리의 모음 ‘네트워크 아키텍처 원리’란 자원을 정의하고 자원에 대한 주소를 ... 스택(Stack) 정리 스택(Stack) 이란?스택(Stack)은 자료를 순서대로 쌓아 올릴 수 있는 자료구조로, Stack 이라는 단어의 어원은 “쌓다”라는 의미에서 유래했다. 이 자료구조의 핵심은 선입후출(FILO: First In, Last Out)이라는 규칙에 있다. 즉, 먼저 들어간 데이터가 마지막에 나오는 구조다.스택의 동작 원리스택은 일종의 리스트와 비슷한데, 데이터를 추가하거나 제거하는 방식이 제한적이다. 오직 한쪽 끝(보통 ‘t... 자주 사용하는 명령어 모음 깃 초기 설정% git init // 깃 시작하기% git config --global user.name {이름} // 전역 이름 설정 % git config --global user.email {깃이메일} // 전역 이메일 설정% git remote add {원격저장소별명} {깃주소} // 깃 원격 저장소 연결% git pull {원격저장소별명} {브랜치이름} // 업데이트% git push {원격저... Loggig 과 Logback 설정, 그리고 SLF4J 1. LoggingLogging이란?로깅이란 시스템이 작동할 때 발생하는 다양한 정보를 기록하는 과정을 말한다. 이 기록은 시스템의 작동 상태를 모니터링하거나, 사용자의 행동 패턴을 분석하는 데 유용하다. 시스템의 동작을 분석하고, 문제를 진단하는 데도 로깅은 필수적이다. 간단히 말해, 시스템에서 발생하는 모든 주요 이벤트를 기록으로 남기는 것을 로깅이라고 한다. 출처: 네이버 지식백과로그 사용의 장점 쓰레드 정보, ... application.properties 및 Profile 설정 1. application.properties 파일 설정application.properties application.properties는 Spring Framework와 Spring Boot에서 애플리케이션 설정을 관리하기 위해 사용되는 주요 구성 파일이다. 이 파일을 통해 애플리케이션이 실행될 때 필요한 환경 설정 값들을 정의할 수 있다. 예를 들어, 데이터베이스 연결 정보, 서버 포트 설정, 로깅 레벨 등 다양한...