🐳 Docker Desktop for Mac + JDK 17이 실행되지 않는 이유 deep dive!
·
DevOps/docker
최근 Docker Desktop for Mac 환경에서 JDK 17을 사용하는 Spring Boot 애플리케이션이 실행되지 않는 문제를 발견했다.이상한 점은 Windows 환경에서는 정상 실행되지만, Mac에서는 실행 후 바로 종료된다는 것이다."환경 차이 때문인가?" 🤔 하지만 Docker는 OS와 무관하게 동일하게 실행되어야 하는데, 왜 이런 문제가 발생한 걸까?정확한 원인을 찾기 위해 Deep Dive 해보았다.🔍 문제상황Mac에서 실행한 Docker Container의 로그를 확인한 결과,JVM이 컨테이너 내부 리소스를 감지하는 과정에서 NullPointerException 발생했다.java.lang.NullPointerException: Cannot invoke "jdk.internal.pl..
놀고있는 노트북으로 homelab을 꾸려보자-2
·
DevOps/etc
오늘의 설정 ⚒️✅ ubuntu-server 설치✅ 맥북 --> 홈랩 서버 원격 설정✅ 홈랩서버 클램쉘 모드 설정✅ k3s cluster 구성ubuntu-server 설치노트북 각각 ubuntu-server를 깔고, docker로 설치완료했다.ubuntu-server를 깔기 위해서는 ISO 이미지를 다운받아 bootable usb를 만들어야 한다!ubuntu-server ISO를 다운받는다https://etcher.balena.io/ 를 다운받는다 (ubuntu 오피셜 사이트에서 추천해 준 툴)다운받은 ISO 이미지를 선택 -> usb 드라이브 선택 -> usb드라이브에 설치되기까지 대기다운이 완료된 usb를 ubuntu-server를 설치하고자 하는 컴퓨터에 연결부팅 시 usb로 실행여튼 설치 완료했으..
놀고있는 노트북으로 homelab을 꾸려보자-1
·
DevOps/etc
나에게는 놀고 있는 노트북이 2대가 있다. 대학생 때 사용했던 HP 랩탑과 아버지에게 갈취(?) 했던 삼성 노트북. 2024년부터 사용하지 않는 짐 정리 대 프로젝트를 진행 중인 와중에, 이 두대의 노트북이 정말,, 눈엣가시처럼 사라지지도 않고 계속 거실장에 거치되어 있는 게, 나의 모든 움직임에 "감히 나를 그냥 둬?"라고 말하는 것 같은 느낌을 받았다. 새해가 되었으니, 새 마음으로 이 노트북을 보내줄까 하다가 보내줄수도 없고 (원하는 사람이 없을 듯), 이전부터 해보고 싶었던 Homelab 구축을 이거로 연습해 볼까?라는 생각이 들었다. 일단 내 노트북 두대의 스펙은 이렇다 삼성 노트북 운영체제: Windows CPU: Intel i7-3537URAM: 4GB저장공간: 256GBHP 노트북운영체제:..
Kafka vs RabbitMQ & MSA환경에 kafka를 적용한다면? (with 예제코드)
·
DevOps/devops
대규모 시스템이란방대한 양의 데이터를 처리하고 수 많은 사용자의 요청을 동시에 처리할 수 있는 시스템이러한 시스템 설계는 확장성, 유지보수성, 성능, 안정성 등을 고려MSA 는 대규모 시스템 설계 아키텍쳐 패턴RabbitMQ,Kafka 같은 메시징 시스템을 활용하여 각 서비스 간의 효율적인 데이터 통신과 확장성을 보장메세징 시스템?Queue 형태로 메세지를 저장. 송신자 (Producer)가 메세지를 큐에 넣으면, 수신자(Consumer)는 자신의 속도에 맞춰 Queue에서 메세지를 처리.Message Broker를 사이에 두고, 송신자(Producer)와 수신자(Consumer)가 간접적으로 데이터를 주고 받음MSA 환경에 적용한다면송신자 (Producer): MSA에서 메세지를 발행하는 곳 (e.g...
모바일, PC 화면 Nginx로 분기 처리하는 방법
·
DevOps/nginx
위의 네이버 화면 처럼, 접속하는 디바이스에 따라 모바일, PC 화면으로 분기 처리를 해야함! Proxy로 사용되는 Nginx로 해보자! 어떻게? error page named location header에 있는 user-agent 를 기반으로 분기 처리 error page 란? 에러가 발생한 요청을 지정한 uri로 redirect 하는 nginx module 400대 에러나 500대 에러의 redirect 설정을 하기 위해 보통 사용! → 하지만! 이미 사용하고있는 에러코드를 덮어쓸수는 없으니, error code 418을 사용해서 PC,mobile 분기 처리를 하도록 하겠다! 418 에러코드가 뭐지?? client error 응답 코드로 서버가 커피 내리기를 거부한다는 의미를 가진다 - 왜냐면 서버는..
custom header 값을 nginx 로그로 찍기
·
DevOps/nginx
기본 http header들은 nginx 에서 제공하는 variable로 찍으면 되는데..어플리케이션에서 직접 생성한 `custom header` 는 어떻게 찍을까? 우선 nginx 에서 지원하는 variable 리스트 중에 `$http_name` 이라는 값이 있다. 저 뒤 `_name` 부분에 custom 하게 생성한 header의 이름을 넣어주면 log에 기록할 수 있게 된다! log_format에 아래와 같이 추가해주면! 예쁘게 잘 찍힐것! log_format main '$remote_addr $http_x_forwarded_for [$time_local] ' '$host $request $status $body_bytes_sent ' '$request_time $upstream_response_t..
[Redis] Sorted Sets
·
DevOps/cache
Keys 명령어 returns all keys matching pattern. O(N) 데이터가 많은 DB를 상대로 수행하는 경우에 성능저하 발생 리얼 환경에서 사용하는 것을 지양 해당 명령어는 디버깅, 키스페이스 레이아웃을 변경하는 것 같이 특별한 상황에만 사용하는 것을 권장. Sorted Sets O(log(n)) 중복이 없는 문자열 콜렉션. 모든 데이터는 score와 매핑되어서 정렬되고 데이터자체는 유니크한 값이지만, score는 중복 될 수 있다. Sorted Sets에 데이터가 등록될 떄 순서대로 등록되기 때문에 (등록된 이후에 후처리로 정렬하는 것이 아님), 데이터의 범위와 랭크를 아주 빠르게 구할 수 있다. 중간에 있는 데이터에 접근 하는 것도 굉장히 빠르게 처리 가능. 배민에서 사용한 대표..
[docker] docker-compose 업데이트! 무엇이 바뀌었고 언제까지 바꿔야 하는가?
·
DevOps/docker
무엇이 바뀌었는가 내부 코드 v1 은 python으로 개발됨 v2 는 Golang으로 개발! (from scratch!) standalone binary 파일이 아니라서 설치 방식이 v1과 좀 다름docker-compose → docker compose 명령어 사이에 - 없이 사용 가능 v1과 v2의 compatibility를 위해 compose-switch 유틸 제공 docker-compose python 코드를 docker compose Golang으로 converting! container 명명 방식 변경 언더스코어(_) 에서 하이픈 (-) 으로 변경 container 이름 기준으로 스크립트를 개발하였다면, -compatibility옵션을 사용하여 에러가 발생하지 않도록 설정 가능 BuildKit ..