전체 글 227

프로젝트+도메인 이관 생존기 (아임웹(imwe) -> 가비아 , 아임웹 -> railway)

도메인 이관 생존기 imweb 빌더로 운영하던 사이트를 코드로 다시 짜서 Railway로 옮기던 중, 도메인 하나로 . 인증코드부터 캐시 전파까지, 헷갈렸던 용어들과 함께 정리했다. 이관 완료: imweb → Gabia | 승인 소요: 약 2일 | 체감 장애: 0건01. 개요외주 고객 요청은 이렇게 시작됐다.현재 상태: imweb 빌더로 운영 중인 사이트 — 코드가 따로 없는 노코드 빌더 도구원하는 것: 같은 화면을 코드로 재현해서 Railway 같은 클라우드 서버로 이전전제 조건: 기존 imweb에서 구매한 도메인은 그대로 계속 사용고객의 요청은 명확했다. imweb 빌더로 운영 중인 사이트를 자체 코드베이스로 다시 만들어서 클라우드(Railway)로 옮기고 싶다는 것. imweb은 빌더 도구라 코드..

회고/회사 2026.08.14

(JAVA) GC 동작 원리와 튜닝 가이드 *유튜브 쉬운코드

쉬운코드 라이브 강의 + 추가 심화 내용 통합 정리 이전 편(JVM 구조)에서 ClassLoader, JIT, JVM 메모리 구조를 다뤘다면 이번 편은 그 위에서 동작하는 GC 자체를 깊게 파고들고, GC가 왜 탄생했는지부터, 어떤 테크닉을 쓰는지, 어떻게 튜닝하는지까지 한 번에 정리 해보려고 합니다.최대한 정리를 하였지만, 명강의 선생님을 따라 갈 수 없기에 유튜브 멤버십을 통하여 강의를 꼭 들어보시기를 추천드립니다!! https://www.youtube.com/@ezcd목차GC가 탄생한 이유: C++ vs Java 메모리 관리GC의 장단점GC의 역할: OS ↔ JVM Heap ↔ ApplicationGC의 주요 테크닉언제 GC 선택과 튜닝이 중요한가왜 GC 선택과 튜닝이 중요한가 (Amdahl's L..

자바/자바 2026.04.02

(JAVA) GC JVM의 기초 정리 (JVM구조) *유튜브 쉬운코드

쉬운코드 라이브 강의 + 추가 심화 내용 통합 정리GC를 제대로 이해하려면 JVM이 어떤 구조로, 왜 이렇게 동작하는지를 먼저 꿰고 있어야 한다.최대한 정리를 하였지만, 명강의 선생님을 따라 갈 수 없기에 유튜브 멤버십을 통하여 강의를 꼭 들어보시기를 추천드립니다!!https://www.youtube.com/@ezcd 목차JVM이 탄생한 이유: Write Once, Run AnywhereJava 실행 파이프라인: .java → 프로세스ClassLoader와 Lazy LoadingJVM이 바이트코드를 실행하는 두 가지 방식/bin/java 실행 후 main() 호출까지의 흐름JVM 프로세스 메모리 구조 (Virtual Address Space 전체 그림)GC 공부를 위한 핵심 연결 고리1. JVM이 탄생..

자바/자바 2026.03.30

[개인프로젝트] 개인 서버 해킹 회고 정리 ( 브루트포스 , 루트킷) with claude

개인 프로젝트 서버(우분투 가정용 PC)를 운영하다 서로 다른 공격자에게, 서로 다른 방법으로 두 차례 침해당한 경험을 기록한다.한 번은 Monero 코인채굴, 한 번은 대역폭 판매. 같은 서버에서 동시에 서로 다른 돈벌이가 진행됐다.핵심 요약1차 공격 (PostgreSQL) — 5432 포트 브루트포스 → COPY TO PROGRAM으로 RCE → XMRig 코인채굴 + syscall 루트킷2차 공격 (Jenkins) — RCE 취약점 → 대역폭 판매 앱 4종 몰래 설치 → 80일간 미발견공공 원인 — UFW 미설정, 내부 서비스 포트 외부 노출, 모니터링 부재대응 — OS 재설치 없이 포트 차단 + 프로세스 kill + 악성 파일 제거로 수습 완료서버 환경OS: Ubuntu 22.04 LTS (홈서버..

[개인프로젝트] CI/CD 연동하기 *gitHube Actions

1.도입배경 - 개인프로젝트 서버가 확장되면서, 백앤드서버, 채팅서버, 카프카 ,리액트 등 코드 수정 후 배포의 번거로움이 늘어 CI/CD 연동의 필요성을 느꼈다. GitHub Actions는 별도의 도구 없이 GitHub 플랫폼 내에서 CI/CD 환경을 구축할 수 있게 해줍니다. 소스 코드 관리와 배포 자동화를 하나의 생태계에서 처리할 수 있다는 점이 가장 큰 장점이며, 이를 통해 개발 프로세스의 효율성을 극대화하고 팀원 간의 유기적인 협업을 가능하게 합니다. 2.파이프라인 2-1. GitHub Actions: CI/CD 파이프라인 엔진. GitHub Actions를 구성하는 5가지 핵심 요소GitHub Actions는 단순히 명령어를 나열하는 것이 아니라, 체계적인 컴포넌트들로 이루어져 있습니다..

[개인 프로젝트] Kafka 적용_아키텍처 확장과 실전 구현

1. 도입 배경과 시스템 설계 (Architecture)도입 배경 : 사실 제 개인 프로젝트에 카프카가 반드시 필요한 만큼의 트래픽은 발생하지 않습니다. 하지만 실무에서 대규모 데이터 처리와 시스템 확장을 고민할 때 Kafka는 선택이 아닌 필수라는 것을 알게 되었습니다. 단순히 이론으로만 아는 것과, 실제 내 프로젝트의 아키텍처를 뜯어고치며 발생하는 네트워크 설정, 메모리 최적화, 비동기 데이터 정합성 문제를 직접 해결해 보는 것은 큰 차이가 있다고 판단했습니다.그래서 기존의 단순한 구조를 과감히 버리고, **이벤트 기반 아키텍처(Event-Driven Architecture)**로 확장하는 도전을 시작했습니다.해결책 : Kafka를 브로커로 두어 각 서비스 간의 **의존성을 제거(Decoupling)..

[Java] 제네릭 와일드카드 완벽 정리 (feat. 공변과 반공변)

지난 포스팅에서 제네릭의 불공변성(Invariance) 때문에 발생하는 불편함에 대해 다뤘습니다.List는 List의 부모가 아니기 때문에 유연하게 사용할 수 없었죠.이를 해결하기 위해 등장한 것이 바로 **와일드카드(?)**입니다. 이번 글에서는 와일드카드의 핵심 개념과 3가지 종류, 그리고 이를 뒷받침하는 공변과 반공변의 원리까지 정리합니다.1. 와일드카드란? (Unknown Type Argument)와일드카드(?)는 말 그대로 **"알 수 없는 타입(Unknown Type)"**을 의미합니다. 정해지지 않은 타입을 나타내기 때문에 제네릭을 더 유연하게 사용할 수 있게 해줍니다.핵심 제약 사항Type Argument 위치에서만 사용 가능클래스나 메서드를 정의할 때(Box)는 쓸 수 없습니다. (T를 ..

자바/자바 2026.01.22

[Java] 제네릭은 왜 불변(Invariant)일까? (feat. 공변과 서브타입)

더보기 자바 개발자라면 List에 List을 대입할 수 없다는 사실을 한 번쯤 마주하게 됩니다. "String은 Object의 자식이니까 당연히 되어야 하는 거 아니야?"라는 의문이 들 수 있죠. 오늘은 배열과 제네릭의 차이, 그리고 제네릭의 서브타입 관계에 대해 정리해 봅니다.1. 기본 개념: Java의 타입 계층 구조우선 자바의 기본적인 상속 관계를 짚고 넘어가겠습니다.Integer는 Number의 서브타입입니다 (Integer Number는 Object의 서브타입입니다 (Number 따라서 Integer는 Object의 서브타입이기도 합니다.이 관계는 **Liskov Substitution Principle (리스코프 치환 원칙)**에 의해 자식 객체를 부모 타입 변수에 대입할 수 있게 해줍니다.2..

자바/자바 2026.01.21

(java) 패턴 매칭 instanceof 캐스팅 제거 (Flow Scoping 완벽 이해)

자바 개발을 하다 보면 특정 타입을 확인하고 그 타입의 메서드를 쓰기 위해 지겹게 반복하는 코드가 있습니다. 바로 instanceof로 확인하고 다시 (Casting)을 하는 과정이죠.오늘은 JDK 16부터 정식 도입되어 우리 코드를 훨씬 깔끔하게 만들어준 패턴 매칭(Pattern Matching) 기능과, 은근히 헷갈리는 스코프(Scope) 규칙을 정리해 보겠습니다.1. 우리가 그동안 작성하던 방식 (AS-IS)기존에는 객체의 타입을 확인한 뒤, 다시 명시적으로 캐스팅을 해줘야 했습니다.if (obj instanceof String) { String str = (String) obj; // 아... 이 코드를 또 써야 하나요? System.out.println(str.toUpperCase()..

자바/자바 2026.01.20

(자바) Apache Kafka 핵심 개념 (RabbitMQ <->Redis (Pub/Sub) <->Apache Kafka 차이 )

1. Apache Kafka란 무엇인가?Apache Kafka는 LinkedIn에서 개발하여 오픈소스로 공개한 **분산 이벤트 스트리밍 플랫폼(Distributed Event Streaming Platform)**입니다.기존의 메시징 시스템이 "메시지를 주고받는 것"에 집중했다면, Kafka는 **"데이터(이벤트)를 지속적으로 생성하고, 저장하고, 처리하는 것"**에 초점을 맞춥니다.핵심 특징높은 처리량(High Throughput): 초당 수백만 건의 이벤트를 처리할 수 있습니다.영속성(Persistence): 메시지를 메모리가 아닌 **디스크(Disk)**에 저장하여, 장애가 발생해도 데이터가 유실되지 않습니다.확장성(Scalability): 서버(Broker)를 수평적으로 늘려 성능을 확장하기 쉽습..

자바/자바 2025.12.15