<feed xmlns="http://www.w3.org/2005/Atom"> <id>https://imkh817.github.io/</id><title>개발 노트</title><subtitle>네트워크, Java, Spring, Redis 등 백엔드 개발을 공부하며 배운 것들을 기록합니다.</subtitle> <updated>2026-04-03T15:43:55+09:00</updated> <author> <name>kunhee</name> <uri>https://imkh817.github.io/</uri> </author><link rel="self" type="application/atom+xml" href="https://imkh817.github.io/feed.xml"/><link rel="alternate" type="text/html" hreflang="ko-KR" href="https://imkh817.github.io/"/> <generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator> <rights> © 2026 kunhee </rights> <icon>/assets/img/favicons/favicon.ico</icon> <logo>/assets/img/favicons/favicon-96x96.png</logo> <entry><title>MySQL 구조</title><link href="https://imkh817.github.io/posts/mysql-%EA%B5%AC%EC%A1%B0/" rel="alternate" type="text/html" title="MySQL 구조" /><published>2026-04-03T12:04:00+09:00</published> <updated>2026-04-03T12:04:00+09:00</updated> <id>https://imkh817.github.io/posts/mysql-%EA%B5%AC%EC%A1%B0/</id> <content type="text/html" src="https://imkh817.github.io/posts/mysql-%EA%B5%AC%EC%A1%B0/" /> <author> <name>kunhee</name> </author> <category term="개념 정리" /> <category term="MySQL" /> <summary>MySQL 구조 여태까지 MySQL을 사용하면서 단순히 “쿼리 날리면 결과 나오는 DB”로만 생각했다. 근데 Real MySQL이라는 책으로 MySQL을 공부해보니 흥미로운 점이 많았다. MySQL의 내부를 들여다보면 구조가 정교하게 나뉘어져 있다. 크게 보면 MySQL은 3덩어리로 나눌 수 있다. MySQL 엔진: 쿼리를 분석하고, 최적화하고, 어떻게 실행할지 판단하는 영역 스토리지 엔진: 실제 데이터를 디스크에 쓰고 읽는 영역 OS &amp;amp; 하드웨어: 스토리지 엔진의 요청을 받아 실제 I/O를 처리하는 물리 계층 비유하자면 MySQL 엔진은 뇌(지휘소), 스토리지 엔진은 몸(실무진) 이다. 뇌가 “이 데이터 가져와”라고 명령하면, 몸이 실제로 움직여서 데이터를 가져온...</summary> </entry> <entry><title>[심화편] Docker</title><link href="https://imkh817.github.io/posts/%EA%B3%A0%EA%B8%89%ED%8E%B8-Docker/" rel="alternate" type="text/html" title="[심화편] Docker" /><published>2026-03-31T15:46:00+09:00</published> <updated>2026-03-31T15:46:00+09:00</updated> <id>https://imkh817.github.io/posts/%EA%B3%A0%EA%B8%89%ED%8E%B8-Docker/</id> <content type="text/html" src="https://imkh817.github.io/posts/%EA%B3%A0%EA%B8%89%ED%8E%B8-Docker/" /> <author> <name>kunhee</name> </author> <category term="개념 정리" /> <category term="Docker" /> <summary>기본편까지는 개발 환경에서 Docker를 쓰는 방법을 알아봤다. 이번엔 실제 실무에서 마주칠 수 있는 문제들과 그 해결 방법을 알아보려고 한다. 1. 멀티스테이지 빌드 문제: 이미지가 너무 크다 기초편에서 작성한 Dockerfile을 다시 보자. FROM openjdk:21-jdk-slim WORKDIR /app COPY build/libs/*.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"] 이 방식은 로컬에서 ./gradlew bootJar로 미리 빌드한 뒤, jar만 컨테이너에 넣어서 실행하는 구조다. 빌드 -&amp;gt; 로컬 실행 -&amp;gt; 컨테이너 근데 CI/CD 환경에서는 빌드도 컨테이너 안에서 해야 할 때가...</summary> </entry> <entry><title>[기본편] Docker</title><link href="https://imkh817.github.io/posts/%EA%B8%B0%EB%B3%B8%ED%8E%B8-Docker/" rel="alternate" type="text/html" title="[기본편] Docker" /><published>2026-03-31T15:04:00+09:00</published> <updated>2026-03-31T15:04:00+09:00</updated> <id>https://imkh817.github.io/posts/%EA%B8%B0%EB%B3%B8%ED%8E%B8-Docker/</id> <content type="text/html" src="https://imkh817.github.io/posts/%EA%B8%B0%EB%B3%B8%ED%8E%B8-Docker/" /> <author> <name>kunhee</name> </author> <category term="개념 정리" /> <category term="Docker" /> <summary>기초편에서 컨테이너 하나를 띄우는 방법을 알아봤다. 이번엔 실제 서비스처럼 여러 컨테이너를 함께 운영하는 방법을 알아본다. Docker Compose 왜 필요한가? 기초편에서 MySQL 컨테이너를 띄울 때 이렇게 했다. docker run -d \ --name my-mysql \ -e MYSQL_ROOT_PASSWORD=1234 \ -e MYSQL_DATABASE=testdb \ -p 3306:3306 \ mysql:8.0 Spring Boot 컨테이너도 따로 띄워야 하고, Redis가 추가되면 또 따로 띄워야 한다. MySQL 따로, Spring Boot 따로, Redis까지 붙이기 시작하면 명령어 치다가 진짜 현타 온다. 이러한 문제를 해결하기 위해 등장한게 Doc...</summary> </entry> <entry><title>Docker 포트 매핑 동작 원리</title><link href="https://imkh817.github.io/posts/Docker-%ED%8F%AC%ED%8A%B8-%EB%A7%A4%ED%95%91-%EC%9B%90%EB%A6%AC/" rel="alternate" type="text/html" title="Docker 포트 매핑 동작 원리" /><published>2026-03-31T12:00:00+09:00</published> <updated>2026-03-31T12:00:00+09:00</updated> <id>https://imkh817.github.io/posts/Docker-%ED%8F%AC%ED%8A%B8-%EB%A7%A4%ED%95%91-%EC%9B%90%EB%A6%AC/</id> <content type="text/html" src="https://imkh817.github.io/posts/Docker-%ED%8F%AC%ED%8A%B8-%EB%A7%A4%ED%95%91-%EC%9B%90%EB%A6%AC/" /> <author> <name>kunhee</name> </author> <category term="개념 정리" /> <category term="Docker" /> <summary>Docker 포트 매핑은 내부적으로 어떻게 동작할까? 기초편에서 -p 8080:8080 옵션으로 포트를 연결했는데, 이게 내부적으로 어떻게 동작하는지 살펴보자. docker run 실행 순간 (세팅 단계) [ 개발자 ] ↓ docker run -p 8080:1122 ↓ ┌─────────────────────── 호스트 OS ───────────────────────┐ │ │ │ 1) 컨테이너 생성 │ │ ┌──────── 컨테이너 ────────┐ │ │ ...</summary> </entry> <entry><title>[기초편] Docker</title><link href="https://imkh817.github.io/posts/%EA%B8%B0%EC%B4%88%ED%8E%B8-Docker/" rel="alternate" type="text/html" title="[기초편] Docker" /><published>2026-03-30T19:08:21+09:00</published> <updated>2026-03-31T15:17:44+09:00</updated> <id>https://imkh817.github.io/posts/%EA%B8%B0%EC%B4%88%ED%8E%B8-Docker/</id> <content type="text/html" src="https://imkh817.github.io/posts/%EA%B8%B0%EC%B4%88%ED%8E%B8-Docker/" /> <author> <name>kunhee</name> </author> <category term="개념 정리" /> <category term="Docker" /> <summary>Docker가 왜 필요할까? “내 컴퓨터에서는 되는데요” 문제 개발을 하다 보면 한 번쯤 이런 상황을 겪게 된다. 로컬에서는 잘 됐는데, 서버에 올리니까 왜 안되지? 이런 문제는 진짜 흔한데, 막상 원인을 찾으려면 시간을 꽤 잡아먹는다. 나도 실제로 운영 환경과 내 로컬 환경의 MySQL 버전이 달라서 하루를 날린적이 있다. 이 문제의 대부분은 결국 환경 차이 때문이다. 환경이 다르면 결과도 달라진다 예를 들어 팀 상황이 이렇다고 해보자. 항목 개발자 A 로컬 개발자 B 로컬 운영 서버 OS macOS 14 Windows 11 Ubuntu 22.04 ...</summary> </entry> </feed>
