2026 1
Argo Workflows 구조 정리 이 글은 Argo Workflows 공식 문서를 읽으며 핵심 구조를 학습하고 정리한 노트입니다.사전지식으로는 CRD(Custom Resource Definition)와 Operator 패턴를 알고 있으면 좋습니다.1. Argo Workflows란Argo Workflows는 쿠버네티스 위에서 컨테이너 단위 잡을 순서·병렬로 엮어 실행하는 엔진입니다. 핵심은 새 프로세스를 띄우는 게 아니라 CRD를 등록하면 컨트롤러가 알아서...
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) - 채팅 데이터베이스 설계하기 들어가며야구 직관 서비스 캐치미 프로젝트에서 실시간 채팅 서비스를 구현한 내용을 기록 및 복습의 목적으로 본 글을 포스팅합니다. 이번 포스팅에서는 캐치미 채팅 서비스의 도메인 규칙에 따라 채팅 데이터베이스를 설계한 경험을 다뤄보려고 합니다. 소켓과 웹소켓, 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) - 웹소켓(WebSocket), 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에서 애플리케이션 설정을 관리하기 위해 사용되는 주요 구성 파일이다. 이 파일을 통해 애플리케이션이 실행될 때 필요한 환경 설정 값들을 정의할 수 있다. 예를 들어, 데이터베이스 연결 정보, 서버 포트 설정, 로깅 레벨 등 다양한...