전체 글 21

6월 회고 — 인증부터 옷장 도메인까지

들어가기 전에 — OMO를 왜 만들게 됐나매일 아침 출근 준비할 때 날씨 앱부터 켰다. 정확히는 오늘 기온이 궁금해서가 아니라, 뭘 입어야 할지 정하기 위해서였다. 근데 회사에서 팀원들이랑 얘기해보니 다들 똑같았다. 아침마다 날씨 앱 켜서 숫자 보고, 그 숫자를 머릿속으로 "그래서 오늘 뭐 입지"로 한 번 더 변환하는 과정을 매일 반복하고 있었다. 그래서 처음 든 생각은 단순했다. 그냥 매일 아침 정해진 시간에 "오늘 이렇게 입으세요"라고 알림으로 알려주는 앱이 있으면 그 변환 과정을 안 거쳐도 되지 않을까 하는 거였다. 근데 조금 더 얘기하다 보니 다른 문제가 보였다. 같은 18도라도 누구는 가디건만 걸치고 나가고, 누구는 그 위에 자켓까지 입어야 한다. 추위나 더위를 타는 정도가 사람마다 다르기 때문..

OMO 2026.06.10

Docker Volume — 개념 + MySQL로 검증하기

컨테이너가 가진 근본적인 문제Docker는 프로그램을 업데이트할 때 기존 컨테이너를 수정하지 않는다. 새로운 컨테이너를 만들어 통째로 교체하는 방식으로 동작한다.문제는 여기서 발생한다. 컨테이너를 교체하면 기존 컨테이너 내부에 저장되어 있던 데이터도 함께 삭제된다. MySQL 컨테이너였다면 DB에 쌓아둔 데이터까지 전부 날아간다.데이터가 삭제되면 안 되는 상황이라면 볼륨(Volume) 을 활용해야 한다.Docker Volume이란?볼륨(Volume) 은 컨테이너의 데이터를 영속적으로 보존하기 위한 방법이다. 컨테이너 자체의 저장 공간을 쓰는 대신, 호스트 컴퓨터의 저장 공간을 컨테이너와 공유하는 형태로 동작한다.컨테이너가 삭제되더라도 데이터는 호스트에 그대로 남기 때문에, 새 컨테이너를 띄울 때 같은 경..

Docker 2026.05.13

컨테이너 내부 접속 + Redis 실습

컨테이너 내부에 접속하기 — docker exec -it앞서 컨테이너를 미니 컴퓨터라고 표현했다. 즉, 각 컨테이너는 자기만의 OS, 저장 공간, 프로그램 환경을 가지고 있다. 그렇다면 그 내부에 직접 들어가서 파일을 확인하거나 명령어를 실행할 수도 있어야 한다. 이때 사용하는 명령어가 exec -it다.# docker exec -it 컨테이너명[또는 컨테이너 ID] bash$ docker run -d nginx$ docker exec -it [컨테이너 ID] bash$ ls # 컨테이너 내부 파일 조회$ cd /etc/nginx$ cat nginx.conf 컨테이너 내부에서 빠져나오려면 exit 또는 Ctrl + D를 입력하면 된다.bash는 쉘(Shell)의 일종으로, 명령어를..

Docker 2026.04.30

컨테이너 조회 · 중지 · 삭제 · 로그 확인

컨테이너 조회 — docker ps실행 중인 컨테이너만 조회$ docker psps는 process status의 약자다. 모든 컨테이너 조회 (실행 중 + 정지된 컨테이너)$ docker ps -a-a는 all의 약자다.컨테이너 중지 — docker stop / docker kill$ docker stop 컨테이너명[또는 컨테이너 ID]$ docker kill 컨테이너명[또는 컨테이너 ID]stop과 kill은 둘 다 컨테이너를 멈추지만 방식이 다르다. stop은 컴퓨터의 정상 종료 버튼처럼 진행 중인 작업을 마무리하고 graceful하게 종료하고, kill은 전원 버튼을 강제로 눌러 즉시 종료하는 것과 같다. 일반적으로는 stop을 사용한다.컨테이너 삭제 — docker rm정지된 특정 컨테이너 삭제..

Docker 2026.04.30

컨테이너 생성과 실행 — create / start / run

컨테이너 생성 — docker create이미지를 바탕으로 컨테이너를 생성만 한다. 실행까지 이어지지는 않는다. 실제로 생성만 하고 멈추는 경우는 거의 없어서, 이 명령어 단독으로 쓰이는 일은 드물다.# docker create 이미지명[:태그명]$ docker create nginx$ docker ps -a # 모든 컨테이너 조회💡 로컬에 해당 이미지가 없으면 Docker Hub에서 자동으로 pull한 뒤 컨테이너를 생성한다.컨테이너 실행 — docker start정지되어 있는 컨테이너를 다시 실행할 때 사용한다.# docker start 컨테이너명[또는 컨테이너 ID]$ docker start 컨테이너명[또는 컨테이너 ID]$ docker ps # 실행 중인 컨테이너 조회 실습 후 정리가 필요하..

Docker 2026.04.30

Docker 전체 흐름 느껴보기 (Nginx 설치 및 실행)

Docker는 어떻게 조작할까?Docker는 터미널에서 명령어(CLI) 를 입력하는 방식으로 조작한다.Nginx가 처음이라면Nginx는 다양한 기능을 가진 서버 중 하나다. 대표적인 기능은 아래와 같다.웹 서버 — HTML 웹 페이지를 브라우저에 렌더링하는 역할을 한다.로드 밸런싱 (지금은 몰라도 괜찮다.)리버스 프록시 (지금은 몰라도 괜찮다.)무작정 따라하며 Docker 사용해보기💡 아래 명령어가 지금 당장 이해되지 않아도 괜찮다. 다음 섹션에서 하나씩 차근차근 살펴볼 예정이다. 1. Nginx 이미지 다운로드Docker Hub에 공식 Nginx 이미지가 등록되어 있다. 아래 명령어로 로컬에 내려받는다.👉 nginx - Official Image | Docker Hub$ docker pull ngi..

Docker 2026.04.29

Docker 입문: 컨테이너와 이미지

Docker란?Docker는 컨테이너(Container) 기술을 기반으로, 각각의 프로그램을 분리된 환경에서 실행하고 관리할 수 있게 해주는 도구다.컨테이너(Container)란?Windows를 사용해본 적 있다면, 하나의 컴퓨터를 여러 사용자 계정으로 나눠 쓸 수 있다는 걸 알 것이다. 각 계정은 서로 독립된 환경을 가지기 때문에, 필요한 프로그램을 계정마다 따로 설치해야 한다.컨테이너도 이와 비슷한 개념이다. 하나의 컴퓨터 안에서 여러 개의 독립적인 미니 컴퓨터 환경을 만들고, 각 환경에 프로그램을 별도로 설치·실행할 수 있다. Docker에서는 이 미니 컴퓨터 환경 하나하나를 컨테이너(Container) 라고 부른다.💡 컨테이너를 이해할 때는 '미니 컴퓨터'를 머릿속에 떠올리면 편하다. 컨테이너를..

Docker 2026.04.29

Redis와 Spring Batch로 만든 하이브리드 랭킹 아키텍처

목차 TL;DR 일별 랭킹은 Redis ZSET으로 실시간 처리하고, 주별/월별 랭킹은 Spring Batch로 집계해 Materialized View 테이블에 적재하는 하이브리드 구조를 선택했다. 기간별 특성(실시간 vs 집계 정확성)이 달라 단일 저장소로는 두 요구사항을 동시에 만족할 수 없었기 때문이다. 1. 들어가며 — "기간별로 저장소가 달라야 하나?"일별, 주별, 월별 랭킹을 구현해야 했습니다. 처음엔 하나의 방식으로 통일하고 싶었습니다.그런데 각 기간의 특성을 뜯어보니, 요구사항이 근본적으로 달랐습니다.기간핵심 요구사항데이터 갱신 빈도일별실시간성 (방금 전 좋아요가 반영돼야 한다)이벤트마다 즉시주별집계 정확성 (7일치 누적 합산)주 1회 배치월별집계 정확성 (한 달치 누적 합산)월 1회 ..

Tech 2026.04.16