오늘도 기록하는 중 GitHub

전체 글 197

Ansible, 해줘의 정석

Ansible?Ansible은 레드햇이 개발하고 관리하는 오픈소스 IT 자동화 도구로, 에이전트리스(agentless) 구조를 통해 대상 서버에 추가 소프트웨어를 설치하지 않고도 소프트웨어 설치, 인프라 구성, 보안 패치 적용, 복잡한 워크플로우 자동화 등을 효율적으로 처리할 수 있으며, 대규모 환경에서 반복적이고 일관된 작업을 지원하여 운영 비용을 절감하고 오류를 최소화하는 역할을 한다. Agentless?Ansible이 관리하는 노드에 따로 소프트웨어를 설치할 필요가 없다. 인벤토리 파일(inventory.ini)로 관리대상을 식별한다. 그러니 리소스를 잡아먹는 에이전트(agent)는 필요 없다(less)는 의미다. 그럼 관리 대상인 노드에 어떻게 접근하는가?SSH 프로토콜을 사용해 관리 대상과 연결..

Cloud/IaC 09:51:01

Base64

Base64란 무엇인가Base64는 이진 데이터를 64개의 ASCII 문자로 변환하는 인코딩 방식이다. 이 방식은 8비트 이진 데이터를 문자 코드에 영향을 받지 않는 공통 ASCII 문자로 바꾸어, HTTP나 이메일 등의 텍스트 기반 시스템에서 안전하게 전송할 수 있게 한다. 주로 이메일 첨부나 HTML에 이미지를 포함할 때 사용되며, 데이터 크기가 약 33% 증가하지만 플랫폼 간 호환성을 보장한다.Base64는 바이너리 데이터의 손실을 막기 위해 개발되었다. ASCII는 7비트 인코딩인데, 시스템마다 나머지 1비트를 다르게 처리하거나 제어 문자 코드가 달라 문제가 발생할 수 있다. Base64는 안전한 64개 문자(A-Z, a-z, 0-9, +, /)만 사용해 이러한 문제를 해결한다. 예를 들어, AP..

Linux 2025.08.25

Access denied for user - Base64의 함정(?)

문제2025-08-12T15:59:30.088Z WARN 1 --- [ main] o.m.jdbc.message.server.ErrorPacket : Error: 1698-28000: Access denied for user 'root'@'192.xxx.x.xxx' 쿠버네티스 클러스터 내에서 ArgoCD로 배포를 진행하는 와중에 특정 서비스에서 저런 에러 로그가 발생했다.말 그대로 DB 연결이 안된다는 의미다. 처음에는 "뭐지? 환경 변수가 잘못됐나?" 싶어서 Base64로 인코딩된 변수들을 직접 디코딩해보았다. 문제가 없었다! 값은 잘 있다.그래서 다음엔 DB 계정의 아이디, 비밀번호, 권한 순으로 찾아보았다. 이 또한 잘못된 것은 없었다.Deployment yaml 파일이 잘못 작성되었나 싶었다. 물..

Problems 2025.08.19

Docker, 보안, 그리고 이미지 최적화

배경프로젝트 진행 중에 컨테이너 이미지 보안에 관련해서 지적을 받았기에 조치를 진행하고 있었다. 문득 이보다 더 효율적으로 만들 수 있지 않나 싶었다. 이미지 크기를 줄이고 캐시까지 적용하면 CI 빌드 시간을 생각보다 단축할 수도 있을 것 같았다. 따라서 이미지 최적화를 진행하고자 했다.이 글을 볼 사람들에게 미리 알려주자면 Github actions를 사용해 컨테이너 빌드를 진행한다. SpringDockerGithub actions 이미지 최적화진행 중인 프로젝트에서 Dockerfile의 변화가 어떻게 진행됐는지 보면서 설명하겠다.첫 번째 버전은 다음과 같다. FROM gradle:8.14.2-jdk21 AS buildWORKDIR /appCOPY gradlew .COPY gradle ./gradleC..

Java Virtual Thread

가상 스레드(Virtual Thread)?최근에 진행중인 프로젝트에서 맡은 거래 엔진 자원의 효용성을 높이기 위해 이것저것 공부하고 있다. 그러던 중 한 1년에 알게 된 Virtual Thread를 다시 공부하게 됐다. 이번엔 이를 다뤄보고 적용할 수 있지 없을지 판단해보겠다.자바 전통의 플랫폼 스레드(OS 스레드)는 생성·전환 비용이 높고, 스택이 고정(1MB ±)이라 메모리도 많이 소모한다. I/O-blocking 중심의 웹 서버처럼 “대기 시간이 긴 짧은 작업”이 수천 ~ 수만 개 쌓이면 플랫폼 스레드 방식은 금세 한계에 부딪힌다.이를 해결하기 위해 JDK 21부터 가상 스레드가 정식 도입되었다. 가상 스레드는 JVM 안에서 스케줄링되는 초경량 스레드로, 필요한 순간에만 소수의 캐리어(플랫폼) 스레..

기록/Language 2025.07.14

2025년 상반기 회고 - SAA, SQLD 합격 후기

지난 반 년 간내가 작성한 2024년 회고에 2025년에는 무엇을 하겠다고 했는지 다시 보았다.올해는 새롭게 무언가를 시작하고, 성장하고 발전하여 어엿한 사회구성원이 되는 게 목표다.사실상 목표는 3가지였다.새로운 활동엔지니어로써 성장취업이 중 1개는 달성했다고 생각한다. 1개는 달성 중이다. 1개는 아직이다.뭐가 됐든, 반 년 간 열심히 달려왔다. 벌써 반 년이다. 이 정도나 달려왔다는 게 되돌아보면 신기하다. 조금씩 스스로 발전하고 있다는 것도 알 수 있다.이번에는 지금까지 무엇을 했고, 앞으로 무엇을 할 건지 내 생각과 함께 정리해보고자 한다. 취미에 집중하자재작년부터 블로그에 개발 외적인 것을 담으려고 하진 않았는데 취미가 내 발전에 많은 도움이 됐기에 담아보자고 생각했다. 벌크업을 목표로 원..

Remembrance 2025.06.29

가상 메모리 - 페이징

가상 메모리 관리 기법현대 컴퓨터 시스템이 여러 프로그램(프로세스)을 동시에 매끄럽게 실행할 수 있는 비결은 무엇일까? 그 중심에는 한정된 물리 메모리(RAM)를 수많은 프로세스들이 나눠 쓸 수 있도록 하는 메모리 관리 기술이 있다. 그중에서도 페이징(Paging)은 가장 핵심적인 가상 메모리 관리 기법으로, 메모리 공간을 낭비하는 외부 단편화 문제를 근본적으로 해결하고, 각 프로세스가 마치 자신만의 거대한 메모리를 독차지한 것처럼 느끼게 해주는 안정적인 환경을 제공한다.페이징의 기본 원리: 페이지와 프레임페이징의 핵심 아이디어는 물리 메모리를 조각내어 프로세스에 비연속적으로 할당하는 것이다. 마치 책의 내용을 여러 페이지에 나누어 담고, 이 페이지들을 책장 여기저기에 꽂아두지만 목차를 통해 순서대로 찾..

CS/OS 2025.06.27

동기화

프로세스 동기화프로세스 동기화는 현대 멀티프로세싱 시스템에서 가장 중요한 개념 중 하나다. 여러 프로세스가 동시에 실행되는 환경에서 공유 자원에 대한 안전한 접근을 보장하기 위해 반드시 필요한 기술이다. 동기화는 단순히 프로세스 간의 실행 순서를 제어하는 것을 넘어서, 데이터의 일관성과 시스템의 안정성을 보장하는 핵심적인 역할을 수행한다.동기화란 무엇인가동기화(Synchronization)는 시스템 프로세스 간 정보를 공유하는 행위로 정의할 수 있다. 보다 구체적으로 말하면, 여러 프로세스나 스레드가 공유 자원에 접근할 때 발생할 수 있는 문제를 예방하고 올바른 실행 순서를 보장하는 메커니즘이다. 현대 컴퓨터는 다중 프로그래밍 시스템으로 여러 프로세스가 동시에 실행되며, 이러한 환경에서 동기화는 필수불가..

CS/OS 2025.06.10

프로세스, 그리고 스레드

프로세스와 스레드웹이든 앱이든 관계없이 개발을 해본 사람이라면 스레드에 대해 배우거나 들었을 것이다. 오늘은 CS에 대한 이해를 위해 운영체제에 관련된 내용 중 프로세스와 스레드에 대해 정리하려고 한다. 스레드에 관한 내용은 이전에도 올렸지만 이번에는 총체적으로 담아보려고 한다!아래는 내가 이전에 정리한 스레드 관련 글이다.2024.07.08 - [CS/OS] - 스레드 Thread (1) - 하드웨어와 소프트웨어프로세스?프로세스는 실행 중인 프로그램을 의미한다.응용 프로그램은 보조 기억 장치(하드 디스크, SSD 등)에 저장되어 있다가, 사용자가 해당 프로그램을 실행하는 순간 메모리에 적재되면서 '프로세스'가 된다. 컴퓨터는 수많은 프로세스들을 동시에 생성하고, 사용이 끝나면 메모리에서 삭제함으로써 메..

CS/OS 2025.06.08

커널 Kernel

커널?이 한 달 동안 배웠던 부분은 장기기억으로 넘기고, 부족한 부분은 채우기 위해서 공부하고 있다. 이번엔 운영체제의 중요 요소인 커널에 대해서 기록하려고 한다.운영체제의 핵심 요소커널은 운영체제의 가장 핵심적인 부분으로, 컴퓨터 시스템의 모든 것을 완전히 제어하는 컴퓨터 프로그램이다. 하드웨어와 소프트웨어 구성 요소 간의 상호작용을 관리하고, 항상 메모리(RAM)에 상주하면서 운영체제 코드의 일부분 역할을 한다. 커널은 운영체제를 구성하는 가장 중요한 부분으로, 어떻게 구성하느냐에 따라 컴퓨터 전체의 성능이 달라진다.커널의 메모리 보호커널의 핵심 코드는 응용 소프트웨어나 운영체제의 다른 중요하지 않은 부분들로부터 접근이 차단된 별도의 메모리 영역에 로드된다. 이 영역을 _커널 영역_이라고 부른다. 이..

CS/OS 2025.06.04
반응형