반응형

🚀 가볍고 빠른 오픈소스 이미지 서버, LIS(Lightweight Image Server)

풀스택 웹 애플리케이션이나 실시간 데이터가 반영되는 대시보드 프로젝트를 개발하다 보면, 이미지 서빙과 리사이징 처리가 항상 큰 고민거리로 다가옵니다. 외부 클라우드 스토리지를 쓰자니 비용이나 네트워크 레이턴시가 신경 쓰이고, 직접 구축하자니 아키텍처가 무거워지기 십상입니다.

이러한 고민을 해결하기 위해, Nginx 캐싱과 고속 리사이징 엔진을 결합하여 Docker 환경에 손쉽게 올릴 수 있는 LIS (Lightweight Image Server)를 소개합니다. 직관적인 GUI 관리 도구까지 제공하여 개발 및 운영 효율을 극대화할 수 있습니다.

주요 기능을 흐름 순서대로 살펴보겠습니다.

1. 직관적인 이미지 보관소 (Image Storage)

가장 기본이 되는 '이미지 보관소' 탭입니다. 복잡한 CLI 명령어 없이, 마우스 드래그 앤 드롭만으로 손쉽게 신규 이미지를 서버 스토리지에 적재할 수 있습니다.

업로드된 파일은 썸네일과 함께 파일명, 용량, 업로드 일자가 카드 형태로 깔끔하게 리스팅됩니다. 특히 '원본 복사''가공 복사' 버튼을 통해 프론트엔드 코드에 삽입할 URL을 즉시 클립보드에 가져올 수 있어, 프론트엔드 작업 시 생산성이 매우 높아집니다.

2. 실시간 API 성능 테스트 및 시뮬레이터 (API Test)

이미지 서버의 핵심은 '얼마나 빠르게 가공하고 응답하는가'입니다. API 테스트 탭에서는 가로(width), 세로(height) 해상도를 슬라이더로 조절하여 리사이징 호출을 실시간으로 시뮬레이션할 수 있습니다.

우측의 성능 분석 로그 데이터를 주목해 주시기 바랍니다.

  • NGINX CACHE HIT/MISS: 프록시 서버의 캐시 적중 여부를 시각적으로 즉시 확인
  • 호출 지연 (LATENCY): 8ms 수준의 매우 빠른 응답 속도 모니터링
    캐싱 전략이 제대로 동작하고 있는지 개발 환경에서 바로 검증할 수 있는 강력한 도구입니다.

3. 웹 기반 시스템 설정 및 캐시 제어 (System Settings)

인프라 설정을 바꾸기 위해 굳이 컨테이너 쉘에 접속할 필요가 없습니다. 시스템 설정 메뉴에서는 nginx/default.confdocker-compose.yml 같은 핵심 구성 파일을 웹 브라우저 상에서 직접 조회하고 편집할 수 있습니다.

  • proxy_cache_path 설정이나 CORS 헤더를 프로젝트 환경에 맞게 즉시 수정 가능합니다.
  • 좌측 하단의 'Nginx 캐시 전체 초기화' 버튼을 통해, 기존에 물려있던 캐시를 원클릭으로 플러시(Flush)하여 최신 리소스를 서빙하도록 강제할 수 있습니다.

4. 인터랙티브 API 레퍼런스 (API Reference)

개발자 경험(DX)을 끌어올려 주는 'API 레퍼런스' 화면입니다. LIS가 제공하는 RESTful API(GET, POST, DELETE) 목록을 한눈에 확인할 수 있습니다.

단순한 문서 제공을 넘어, Interactive Sandbox를 지원합니다. 타겟 URL을 입력하고 Send Request를 누르면, 하단 콘솔에 HTTP Status(200 OK), 응답 헤더, 그리고 JSON 포맷의 Response Body가 실시간으로 출력됩니다. 백엔드 연동 전 API 동작을 완벽하게 테스트할 수 있습니다.

5. 손쉬운 연동 가이드 (Integration Guide)

아무리 좋은 서버라도 기존 시스템에 붙이기 어렵다면 무용지물입니다. '연동 가이드' 메뉴에서는 현재 구동 중인 서비스의 docker-compose.yml 파일에 LIS를 애드온(Add-on) 형태로 주입하는 스니펫을 제공합니다.

web-app 컨테이너와 lis-imaginary, lis-upload-api, lis-nginx 컨테이너가 동일한 서버 네트워크망을 공유하도록 설정하여, 불필요한 외부망 왕복 없이 고속으로 이미지를 처리하고 내재화할 수 있습니다. 복사 후 붙여넣기만 하면 세팅이 완료됩니다.


마치며
무거운 클라우드 서비스에 의존하기보다, 가볍고 통제 가능한 자체 이미지 인프라가 필요하다면 LIS는 훌륭한 선택지가 될 것입니다. 설정 파일의 즉각적인 수정부터 캐시 모니터링까지, 개발자가 필요로 하는 모든 기능을 하나의 대시보드에 담아냈습니다.

반응형
반응형

Nginx + Imaginary 초고속 경량 이미지 서버

게시글에 등록되는 수많은 이미지 파일의 초고속 서빙(Nginx Proxy Cache)실시간 이미지 가공(Imaginary)에 특화된 100% 순수 오픈소스(MIT & BSD License) 기반 단독 이미지 서버 구성입니다.

이번에는 Imaginary 의 이미지 변환기능 테스트와 다른 프로젝트에 적용을 하는 방법을 고민해보려고 합니다.


🚀 기동 방법

로컬 터미널에서 다음 명령어를 실행하여 서비스를 시작합니다.
(실행 전에 Docker Desktop이 켜져 있어야 합니다.)

docker compose up -d --build

📂 폴더 구조 및 볼륨 정보

  • ./uploads: 실제 이미지 원본 파일들이 UUID 이름으로 저장되는 물리 디렉터리입니다. (컨테이너간 볼륨 마운트 공유)
  • ./nginx/default.conf: Nginx 라우팅, CORS 설정 및 캐싱 관련 설정 파일입니다.
  • ./upload-api/: Multipart 업로드를 받아 저장하는 Node.js 기반 초경량 업로드 API 모듈입니다.

🔌 API 명세 및 사용법

모든 외부 접속은 Nginx의 기본 포트인 8080을 통해 단일 진입점으로 처리됩니다.

1. 이미지 업로드 (Upload)

  • HTTP Method: POST
  • Request URL: http://localhost:8080/upload
  • Content-Type: multipart/form-data
  • Body Parameter: image (Key), [파일 객체] (Value)

cURL 예제:

curl -X POST -F "image=@your_photo.png" http://localhost:8080/upload

성공 응답 (JSON):

{
  "success": true,
  "filename": "123e4567-e89b-12d3-a456-426614174000.png",
  "url": "http://localhost:8080/uploads/123e4567-e89b-12d3-a456-426614174000.png",
  "size": 1048576
}

2. 원본 이미지 조회 (Retrieve Original)

업로드 응답에서 반환된 URL을 그대로 사용하여 조회합니다. Nginx가 공유 볼륨에서 즉각 정적으로 빠르게 파일 서빙을 처리합니다.

  • Request URL: http://localhost:8080/uploads/{파일명}
  • 예시: http://localhost:8080/uploads/123e4567-e89b-12d3-a456-426614174000.png

3. 실시간 리사이징 / 썸네일 조회 (On-the-fly Resize with Caching)

가로(width) 및 세로(height) 픽셀 크기를 쿼리 파라미터로 지정하여 호출합니다.
첫 호출 시 뒷단의 imaginary 리사이징 가공을 거치고, 그 이후 동일한 크기의 호출에 대해서는 Nginx의 Proxy Cache(메모리/디스크)에서 0.001초 이내로 즉시 반환됩니다.

  • Request URL: http://localhost:8080/resize/{파일명}?width={픽셀}&height={픽셀}
  • 가로 200px 리사이징 예시: http://localhost:8080/resize/123e4567-e89b-12d3-a456-426614174000.png?width=200
  • 세로 150px 리사이징 예시: http://localhost:8080/resize/123e4567-e89b-12d3-a456-426614174000.png?height=150

응답 헤더에 X-Cache-Status: HIT (캐시 완료) 또는 MISS (첫 변환) 상태가 반환됩니다.


🧩 다른 프로젝트 docker-compose.yml에 추가하는 가이드

이 이미지 서버를 개발 중인 다른 서비스(예: 메인 백엔드 및 DB)의 docker-compose.yml 파일에 병합하여 확장하고 싶다면, 아래 구성을 그대로 메인 compose 파일에 추가하시면 됩니다.

version: '3.8'

services:
  # 1. 이미지 서버 전면 Nginx 추가
  image-nginx:
    image: nginx:alpine
    container_name: image-server-nginx
    ports:
      - "8080:80"  # 필요 시 메인 포트 80과 겹치지 않게 포트 설정
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
      - shared-uploads:/usr/share/nginx/html/uploads:ro
      - nginx-cache:/var/cache/nginx
    depends_on:
      - image-upload-api
      - image-imaginary
    networks:
      - main-network

  # 2. 이미지 업로드 API 추가
  image-upload-api:
    build:
      context: ./upload-api
    container_name: image-server-upload-api
    volumes:
      - shared-uploads:/app/uploads
    environment:
      - PORT=3000
    networks:
      - main-network

  # 3. 실시간 리사이저 추가
  image-imaginary:
    image: h2non/imaginary:latest
    container_name: image-server-imaginary
    command: -mount /mnt/data
    volumes:
      - shared-uploads:/mnt/data:ro
    environment:
      - PORT=9000
    networks:
      - main-network

volumes:
  # 데이터 영속성을 유지할 공유 볼륨 정의
  shared-uploads:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: ${PWD}/uploads
  nginx-cache:

networks:
  # 메인 서비스들이 사용하는 동일 네트워크와 연동
  main-network:
    external: true  # 혹은 정의에 맞춰 조정
반응형
반응형

이미지 서버

완전한 오픈소스 라이선스(MIT/BSD) 컴포넌트로 구성된 Nginx + Imaginary + Upload-API 기반의 초고속 이미지 서버 구축을 완료하고 성공적으로 검증했습니다.

사실 이미지서버를 구성하려는 이유가 개인적으로 관리하는 서버에 올라가있는 다른 서비스들이 썸네일일로 제공하거나 서버 내부에서 빠르게 서빙하는 용도로 구상을 했습니다.

예전같으면 시간이 꽤나 걸렸을텐데, 요즘은 프롬프트 하나 잘만들어서 "딸깍!" 으로 구성할수 있으니 감개무량하네요 😘


🛠️ 최종 구현 사항

우선 제가 사용할 관리자 UI는 다음 작업으로 미루고, 제 개인서버에서 사용할수 있는 오픈소스 라이브러리를 찾아보았습니다.

https://github.com/h2non/imaginary

 

GitHub - h2non/imaginary: Fast, simple, scalable, Docker-ready HTTP microservice for high-level image processing

Fast, simple, scalable, Docker-ready HTTP microservice for high-level image processing - h2non/imaginary

github.com

오픈소스이고 GO 언어 기반으로 작성되어있어서, 빠른 응답과 캐싱 그리고 멀티스레드를 지원합니다😀

저 라이브러리만으로도 이미지서버를 딱! 구성할수는 있지만, 제 경우에는 도커의 다른 이미지에서 같이 사용할 예정이므로 Nginx와 라이트한 API서버 그리고  Imaginary를  Standalone Module 형식으로 구성을 먼저 해보았습니다.

아래는 코어가 될 설정과 로직들입니다.

---

  1. API 게이트웨이 및 캐싱
    default.conf
    3.3 kB
    • 이미지 요청을 Proxy Cache에 저장해 물리적인 로딩 속도를 최대화했습니다.
    • 로컬 Docker 환경에서의 호스트 리졸빙을 위해 DNS resolver 127.0.0.11 설정을 탑재했습니다.
  2. 실시간 이미지 가공
    docker-compose.yml
    1.0 kB
    • Go/libvips 기반의 초고속 가공 엔진 Imaginary를 연동했습니다.
    • M1/M2/M3 등 Apple Silicon Mac 환경에서의 구동을 지원하기 위해 platform: linux/amd64 설정을 반영했습니다.
  3. 업로드 모듈
    server.js
    3.0 kB
    • Express/Multer를 이용해 20MB 이하 이미지 업로드 차단 규칙과 확장자 필터링을 반영했습니다.
    • 저장 시 중복을 방지하기 위해 파일명을 UUIDv4로 자동 변환하여 로컬 볼륨에 적재합니다.

🧪 검증 결과 및 증적

1. 테스트용 이미지 생성 및 업로드

테스트를 위해 아래의 이미지를 생성하여 API에 업로드했습니다.

API 호출:

curl -X POST -F "image=@test_image.jpg" http://localhost:8080/upload

업로드 결과:

{
  "success": true,
  "filename": "93733ac2-e256-45c4-b56e-16018e0e0619.jpg",
  "url": "http://localhost/uploads/93733ac2-e256-45c4-b56e-16018e0e0619.jpg",
  "size": 559267
}

 


2. Nginx 캐싱 및 실시간 리사이징 검증

업로드된 이미지를 대상으로 200px 리사이징 썸네일을 요청하고, Nginx의 캐시 상태를 관찰했습니다.

# 1차 요청 (Cache Miss 및 실시간 가공 수행)
curl -I "http://localhost:8080/resize/93733ac2-e256-45c4-b56e-16018e0e0619.jpg?width=200"
# -> X-Cache-Status: MISS 확인 (서버 응답 속도: 약 10~20ms)

# 2차 요청 (Cache Hit 및 가공 없는 고속 반환)
curl -I "http://localhost:8080/resize/93733ac2-e256-45c4-b56e-16018e0e0619.jpg?width=200"
# -> X-Cache-Status: HIT 확인 (서버 응답 속도: < 1ms)

캐싱이 잘되는걸 확인할수 있네요 ㅎㅎ

 

이로써 동일한 규격의 이미지 요청에 대해 뒷단 CPU 자원(Imaginary)을 전혀 사용하지 않고 Nginx 캐시 메모리에서 즉시 썸네일 서빙을 처리함을 확인했습니다.

 

다음은 테스트겸 Imaginary 라이브러리의 다양한 이미지 변환 기능을 테스트와 다른 프로젝트에 어떻게 적용(Add-On) 할지 고민해보록 하겠습니다

 

감사합니다.

반응형
반응형

네, 요청하신 대로 지금까지의 프로젝트 핵심 브리핑과 실행 계획을 '저장된 정보(Saved Information)'에 기록했습니다. 이제 새로운 채팅 세션을 시작하더라도 제가 이 맥락을 기억하고 프로젝트를 이어서 도와드릴 수 있습니다.
블로그 게시용 및 개인 관리용으로 정리한 Markdown 요약본입니다. 그대로 복사해서 사용하세요.
[Project Log] Gemini Stock Insight: 나스닥 지식 확장형 투자 비서
날짜: 2026-02-18
작성자: Gemini (AI Collaborator) & [사용자 이름/닉네임]

  1. 프로젝트 개요 (Conclusion)
    본 프로젝트는 '내가 보유한 주식'을 기점으로 지식이 뻗어나가는 구조의 AI 투자 보조 도구를 개발하는 것을 목표로 함. 단순한 종목 추천을 넘어, Gemini의 추론 능력을 활용해 공급망, 뉴스, 거시 경제 지표 사이의 연관성을 분석하고 투자 의사결정(매수/매도/관망)을 지원함.
  2. 핵심 컨셉: 지식 확장(Knowledge Branching)
    • Core Portfolio: 사용자가 실제 보유한 나스닥(NASDAQ) 종목이 분석의 중심.
    • Relational Analysis: 특정 종목의 변화가 연관 산업(공급망, 경쟁사)에 미치는 영향을 추적.
    • Personalization: 기존에 구축한 '메타테이블(Meta-table)' 구조를 활용하여 사용자 개별 투자 성향과 포트폴리오 데이터를 유연하게 관리.
  3. 단계별 실행 플랜 (Roadmap)
    단계 주요 활동 상세 내용
    1단계 데이터 파이프라인 나스닥 API(yfinance 등) 및 뉴스 RSS 연동
    2단계 분석 엔진 설계 Gemini 1.5 Pro 기반의 '지식 확장형' 프롬프트 엔지니어링
    3단계 수익 검증 (PoC) 개인 포트폴리오 적용 및 실제 수익률 트래킹(Track Record)
    4단계 마케팅 자동화 분석 리포트 및 수익률 데이터를 블로그에 자동 포스팅하여 유입 생성
    5단계 구독 서비스 런칭 개인화된 지식 지도를 제공하는 웹 대시보드 및 구독형 SaaS 출시
  4. 기술 스택 및 비즈니스 모델
    • Tech Stack: Python (FastAPI), Gemini API, Meta-table (DB), NotebookLM (데이터 학습).
    • Revenue Model: * AdSense: 블로그 자동 포스팅을 통한 광고 수익.
    • SaaS: 실시간 급등주 알림 및 개인화된 심층 리포트 제공 (월 구독료 발생).
  5. 향후 과제
    • 나스닥 실시간 데이터 수집을 위한 최적의 API(yfinance vs Alpha Vantage) 확정.
    • 사용자 투자 성향을 반영할 수 있는 메타테이블 스키마 구체화.
    • Gemini를 활용한 '지식 지도' 시각화 방안 모색.
      [메모: Gemini와의 협업 규칙]

      • 맥락 유지: '저장된 정보' 기능을 통해 프로젝트 히스토리를 관리함.
      • 도구 활용: 방대한 데이터 학습은 NotebookLM을 병행하고, 코드 및 전략 수립은 Gemini가 담당함.

      기록이 완료되었습니다. 이제 이 프로젝트를 시작하기 위해 어떤 것부터 먼저 해볼까요?
    • 나스닥 데이터 수집 코드 작성: Python을 이용해 주가와 뉴스를 긁어오는 기본 스크립트 짜기
    • 메타테이블 설계: 주식 종목과 연관 관계를 저장할 DB 구조 확정하기
      원하시는 다음 단계를 말씀해주세요!
반응형
반응형

피곤한 몸을 이끌고 마침내 몰디브에 도착했다.

몰디브 하면 떠오르는것은 보통 영화 <<내부자들>> 에서 나온 대사중 하나인 "모히또가서 몰디브 한잔해야지!" 가 아닐까 싶다. 

비행기에서 내려 게이트까지 걸어가는데, 마치 동남아에 도착한듯한 기온, 약간 축축한 느낌의 공기...

11월에 이곳에 왔지만 여기는 마치 한 여름 8월날씨를 보는듯 했다.. 다른것은 느낄새도 없이 사람들을 따라 "Arrival" 표지판만 보고 걸어나왔다. 공항은 생각 보다 작은편이라 조금만 걸으니 입국심사장이 나왔다. 여느 한국인과같이 누구보다 빠르게 입국심사를 하기위해 줄서는곳으로 뛰어갔다.ㅋㅋ

사실 몰디브에 오기전에 여러 몰디브여행가이드를 봤었는데, 항상하는 질문이 있다해서 짧은 영어실력을 뽐내볼겸 연습을 많이 해갔지만, 결국 아무 질문도 없는 공항직원들..

아래는 블로그에 많이 나온 입국심사 질문들이다.

 “What is your purpose?”

 “How long will you stay?”

 “Visiting first time?

애초에 근처에 보이는 한국인들만 봐도.. 공항직원이 한국인들에게는 딱히 질문을 하지는 않고 무심하게 여권에 도장만 찍어준다. 뭐.. 오히려 좋았다 

입국 심사를 하고 나와서, 어디로 가야하나 고민도 하기전에 하나 밖에 없는 위탁수화물찾는 장소로 나오게된다. 마치 오래된 학교의 강당에 컨베이너벨트를 설치해놓은 느낌인데 생각보다 짐이 느리게 나와서 한 20분은 기다렸다가 짐을 찾았다.(바로 옆에있는 화장실은 겉보기와다르게 매우 깨끗하다)

캐리어를 끌고 좁은 출구로 나오게되면 아마 누구든 깜짝 놀라지 않을까 싶다..

무수히 많은 리조트 직원들이 리조트 이름이 적힌 카드를 들고 열심히 손을 흔들고 있기때문인데, 이런 광경은 처음이라 나오자마자 정신줄을 잡느라 애썼다. 뒤에 밀려오는 다른 입국손님들도 있어서 한번에 리조트를 찾지 못해서 당황했지만, 딱히 리조트에 들어가는 시간은 정해져있지않고 도착하는 사람들이 얼추 모이면 리조트로 출발하기때문에 일단 눈앞에 펼쳐진 바다를 보러가기로 했다.

내부는 오래되어 보였지만 정말 멋진 공항이다. 바다도 바다지만 공항과 여객선터미널이 같이 있는 공항은 처음봐서 한참을 사진을 찍으려 구경을 했다. 카메라가 좋지않아서 풍경을 전부담지 못했지만 실제로는 눈도 못뜰만큼 쨍쨍한 날씨다..!

이렇게 막연하기도하고 어디인지도 모르는곳에 도착하니, 긴장감 때문인가 열심히 일했던 기억도 친구들도 기억나지도 않고 순간 멍때리며 몰디브 바다를 눈에 담았다.. 하지만, 지금은 리조트 직원을 찾아야하기 때문에 얼른 공항 내부로 다시 들어갔다.

공항입구 라운지는 에어컨도 없어서 덥고 애초에 지붕만있는 외부환경이기에 땀을 뻘뻘흘리면서 리조트부스를 찾기 시작했다.

아, 몰디브 공항 1층(도착층)에는 수많은 리조트들이 마치 대학축제 부스처럼 줄지어져있는데 생각보다 예약한 리조트를 찾기가 어려웠다. 심지어 예약한 곳은 Dusit D2(두짓D2)인데, 부스에 Dusit이라고만 적혀있어서 아닌줄알고 몇번을 지나친지 모른다... 왜냐하면 두짓타니라는 다른 리조트도 있어서 정확하게 찾으려던거였는데. 알고보니 Dusit 이라는 리조트사업을하는 두짓그룹이 있었던거였다..

같은곳을 맴도니 보다못한 다른리조트 직원이 나를 안내해줘서 다행히 배타는곳으로 안내받게 되었다. 직원은 잠시 밖에서 기다리면 배가 금방올꺼라고 영어로 안내를 해준 후 어딘가로 뛰어가버려서 부둣가앞에 짐과 함께 남게 되었다.

바다색이 유투브나 홈쇼핑광고에서보던 그색깔과 정말 똑같다. 과장 하나 없이 맑고 투명하고 푸르다.. 심지어 바다속을 들여다보면 지나가는 물고기가 엄청많아서 징그러울 정도였으니까..

한 10분을 기다렸나, 직원 3명이 짐과 캐리어를 달라고 손짓을하며 부른다. 한명은 스피트보트 조종수, 남은 2명은 승무원인데 모두 인도인(?) 처럼 보였다. 사실 DusitD2를 선택한 이유가 공항과 제일 가까워서였는데, 수상비행기나 국내선비행기를 타면 좀더 자연환경에 가까운 리조트들고 있었지만, 직항도 없는 이 몰디브까지와서 이동시간을 조금이라도 단축시키고 싶었기에.. 정말 잘 선택한것같다. 

보트는 한 10분정도 타면 영화나 유투브에서만 보던 몰디브의 수많은 리조트가 지어진 섬이 보인다. 정말 가까워서 조금 아쉽긴..했지만 그래도 리조트에서 여유롭게 즐기는게 좋으니까 ㅎㅎ

동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.

배에 타고 있는 직원들과 짧은 인사를 나누고 섬으로 내리면, 10명정도 되는 직원들이 환영인사를 해준다. 명절에 친척가족들 모두모인자리에 내가 제일늦어 뒤늦게 온 기분처럼 느껴진다. 실제로도 며칠지내보니 지원들이 동물의숲 주민들같다는 생각도 많이했다 ㅎㅎ

이제 리조트에 들어가서 4박5일간 아주 평화로운 일상을 보내볼 예정이다.

입국 준비물

1. 입국신고서

3일전부터 등록할 수 있고, 지금 기준으로는 몰디브 직항이 없기때문에 경유지 공항에서 체크인할때 몰디브 입국신고서를 등록을 해주기때문에 미리등록하고 QR 코드를 캡쳐해놓는게 좋아요.

Imuga | New Traveller Declaration

 

Imuga - Maldives Immigration

Maldives Immigration - Navigating Towards Future

imuga.immigration.gov.mv

2. 청첩장

혹시 신혼여행으로 몰디브 리조트를 찾았다면, 꼭 허니문 프로모션이 있는지 확인해보세요. 이벤트가 있다면 청첩장으로 증빙하고 식사나 여러가지 기념품들을 받을 수 있어요.

3. 선크림

저는 상체랑 얼굴은 진짜 꼼꼼히 발랐는데, 다리정도는 타도 상관없다 싶어 안바르고 나갔다가 1시간만에 화상입고 연고발랐네요.. 꼭 방수되는 좋은 선크림 가져가세요..

생각보다 딱히 필요없던것

1. 해외 콘센트 어댑터

이렇게 생긴 어댑터인데,

DusitD2에는 모든종류의 콘센트를 사용할수있게 되어있어서 굳이 안들고 와도 되었어요.

 

 

반응형

+ Recent posts