해물파이의 괴발개발 TIL

전체 글 304

Raspberry Pi4 홈서버 트러블슈팅 - 도커가 다 날아갔다!

Raspberry pi에 설치된 기존 SD카드를 메인 컴퓨터에 백업한 뒤 다시 부팅해 SSH로 접속했다.그리고 평소처럼 Docker 상태를 확인했다.docker ps아무 컨테이너도 보이지 않았다.기존에 운영 중이던 서비스는 다음과 같았다.JellyfinUptime KumaTransmission + Gluetun순간 Docker 데이터가 날아간 줄 알았지만, 일단 컨테이너를 다시 생성하지 않고 원인부터 확인했다.1. Docker 데이터 경로 확인우선 Docker가 어디를 보고 있는지 확인했다.docker info | grep "Docker Root Dir"결과:Docker Root Dir: /mnt/docker/docker-dataDocker 데이터 경로 자체는 SSD 경로를 정상적으로 보고 있었다.하지만..

Infra 2026.05.18

Raspberry Pi 홈서버 재구축기

오래된 OS를 정리하고 Docker, 기존 프로젝트, 외부접속 환경을 다시 구성하기까지오랫동안 Raspberry Pi를 간단한 홈서버처럼 사용해왔다.처음에는 파일 공유 정도로 시작했지만, 시간이 지나면서 개인 프로젝트도 올리고, 다운로드 서버도 붙이고, 외부에서도 접근할 수 있게 조금씩 기능을 늘려갔다.문제는 운영 환경이 점점 오래되면서부터 시작됐다.가장 먼저 불편했던 건 패키지 관리였다.sudo apt update를 실행해도 repository 관련 경고가 나오거나, 일부 패키지는 정상적으로 내려받지 못하는 경우가 생기기 시작했다.결정적으로 OS를 다시 설치하게 된 계기는 Docker였다.예전에 만들었던 Spring Boot 기반 토이 프로젝트인 약모고를 Docker 컨테이너로 옮겨보려고 했는데, 기존..

Infra 2026.05.13

Raspberry Pi 홈서버 외부접속 구성기 — WireGuard 대신 Tailscale을 선택한 이유

ASUS WireGuard를 시도하다가 Tailscale로 방향을 바꾼 이유최근 Raspberry Pi에 새 OS를 설치하면서 기존에 운영하던 홈서버 환경을 다시 구성하게 되었다.기존에 사용하던 서비스는 크게 세 가지였다.Spring Boot 기반 개인 토이 프로젝트Transmission + Gluetun 조합Samba를 이용한 간단한 NAS 구성Docker와 데이터 복구 자체는 생각보다 어렵지 않았다. 기존에 백업해둔 설정과 프로젝트 폴더가 있었고, 필요한 패키지들도 대부분 익숙한 범위 안에 있었다.오히려 시간을 가장 많이 쓴 부분은 외부에서 내부망에 접근하는 방법이었다.처음에는 ASUS 공유기에 기본 내장된 WireGuard 기능을 사용해보기로 했다.집 네트워크 구조는 다음과 같았다.인터넷↓LG U+..

Infra 2026.05.12

HashMap 정리

다시 정리해봄1. 생성과 데이터 추가- 데이터를 넣는 단계put( K key, V value ): 키와 값을 저장. 만약 이미 존재하는 키라면 값을 덮어씀putIfAbsent( K key, V value ): 키가 없을 때만 데이터를 넣음(중복 방지용)HashMap map = new HashMap();map.put("상의", 2);map.putIfAbsent("상의", 5); // 이미 "상의"가 있어서 무시됨 2. 데이터 확인 및 가져오기- 조회하는 단계containsKey(Object key): 해당 키가 있는지 확인(boolean 반환)get(Object key): 키에 해당하는 값을 가져옴. 없으면 null을 반환getOrDefault(Object key, V defaultValue): 키가 있으..

Java/문법 2026.01.21

헥사고날 아키텍처에 대한 쉬운 정리

헥사고날 아키텍처란?핵심 로직(도메인)과 외부 세계(DB, 웹, 메시징 등)를 깔끔하게 분리하려는 목적을 가지는 소프트웨어 아키텍처 패턴중심에는 비즈니스 로직이 있고 외부와 어댑터로 연결됨이름이 왜 헥사고날 아키텍처?육각형 자체에 기술적인 의미는 없다.개념을 제안한 개발자 Alistair Cockburn가 중심의 도메인을 둘러싼 어댑터라는 개념을 설명하며 그린 그림이 육각형이라서..🤔개념적으론 포트 앤 어댑터(Ports and Adapters) 아키텍처라는 다른 명칭이 더 알맞다.왜 헥사고날 아키텍처를 쓸까?기존 구조에서 일어나기 쉬운 문제들웹 요청이 들어오면 컨트롤러 → 서비스 → DB까지 다 엮여있는 경우도메인과 웹이 얽혀 있어서 웹 요청 없이 테스트하기 힘든 경우DB를 바꾸려면 비즈니스 로직까지 ..

아키텍처 2025.05.08

쿠키 - SameSite 및 Domain 설정에 따른 쿠키 전달 이슈

1. SameSite 설정SameSite 옵션은 브라우저에서 쿠키가 요청에 포함되는 조건을 제어한다. 특히 서로 다른 도메인 간의 요청(크로스 사이트 요청)에 대해 보안을 강화하는 역할을 한다.SameSite의 종류Strict: 같은 사이트에서만 쿠키가 전송된다. (가장 엄격)Lax: 대부분의 상황에서 같은 사이트에서만 전송되지만, 일부 GET 요청은 허용None: 다른 도메인에서도 쿠키가 전송됨. 단, Secure 플래그가 반드시 함께 설정되어 있어야 한다.설정 예시 (Spring Boot 기준)ResponseCookie.from("token", tokenValue) .sameSite("None") // 크로스 도메인 허용 .secure(true) // SameSite=None을 위해..

Java/Spring 2025.04.18