🐳 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 노트북운영체제:..
[Leetcode] 110. Balanced Binary Tree
·
BE/algorithm
문제관련 토픽: DFS, Binary Tree, Tree난이도: Easy링크: https://leetcode.com/problems/balanced-binary-tree/description/요구사항주어진 Binary Tree가 height balanced 인 상태인지 확인height balanced = 두 서브트리의 높이의 차이가 1이상이 아닌 트리조건노드 개수 범위 [0, 5000]10^4 O(N) 시간복잡도 이전으로 풀어야 한다풀이모든 노드의 왼쪽 서브트리와 오른쪽 서브트리의 높이 차이를 확인높이 차이가 1을 초과하면, 트리는 불균형하다고 판단, return FalseDFS방식으로 각 노드의 서브트리 높이를 계산하며 균형여부를 확인Stack으로 DFS를 풀이하니, 각 노드에 방문했는지 여부를 저장..
Eureka와 Eureka 설정방법
·
BE/BE
Eureka 란?Netflix가 개발한 서비스 디스커버리 툴MSA 아키텍쳐에서 각 인스턴스의 위치를 자동으로 찾고, 관리서비스 디스커버리?MSA에서 중요한 컴포넌트 → monolithic 에서는 서로의 인스턴스를 찾을 필요가 없었으니까!여러 서비스 인스턴스와 그 위치를 자동으로 탐지하고 관리하는 기능 → 분리되어있는 MSA 환경에서의 개발은 복합적인 MSA의 호출 발생서비스가 서로를 찾고 통신할 수 있도록 해주며, 수동으로 서비스 위치를 관리하는 복잡성을 낮춤!Eureka의 구성요소Eureka Server서비스 등록과 조회 기능을 제공모든 클라이언트가 서버에 등록을 해야함Eureka Client각 MSA 서비스E.g. product msa, order msa주요기능서비스 등록과 발견하트비트 매커니즘클라이..
[Leetcode] 121. Best Time to Buy and Sell Stock
·
BE/algorithm
문제: Best Time to Buy and Sell Stock 관련 토픽: Array, Dynamic Programming난이도: Easy 링크 https://leetcode.com/problems/best-time-to-buy-and-sell-stock요구사항prices 배열은 i번째 날짜의 주식의 가격을 담음정해진 하루에 주식을 사고, 주식을 산 시점 이후에 주식을 판매주식을 구매, 판매하며 어떤 조합이 가장 큰 수익을 낼 수 있는지 탐색수익이 발생하지 않는 경우에는 0을 반환  조건1 10만개의 요소를 다루는 문제는 효율적으로 풀이 하는 것이 좋다 O(n) ~ O(nlogn) 시간 복잡도의 풀이가 필요! 0 최대값,최소값을 구할 때 값 초기화의 기준으로 사용 가능풀이 문제 태그에는 Dynamic ..
[Leetcode] 21. Merge Two Sorted Lists + 그림 풀이
·
BE/algorithm
문제: Merge Two Sorted Lists관련 토픽: LinkedList, Recursion난이도: Easy 링크  https://leetcode.com/problems/merge-two-sorted-lists요구사항list1, list2 LinkedList를 정렬된 하나의 LinkedList로 합치기 list1, list2는 정렬된 LinkedList return 값의 list는 두 리스트를 기반으로 만든 값이어야 함 조건LinkedList의 노드 길이는 [0, 50]-100 list1, list2는 오름차순 정렬 (non-decreasing) 풀이이미 정렬된 리스트들을 하나로 합치기 위해서는 brute-forcing, LinkedList, recursion을 사용할 수 도 있음 여기에서는 Lin..
장비병 고치기 위한 온몸 비틀기 - 맥북 m1 에어 듀얼모니터 설정 (with LG 듀얼업)
·
IT Review
나에게는 오래된 병이 있다. 지병인데, 모든 분야에 나타나는 고칠 수 없는 병이다. "장비병"이라고,,,불치병을 앓고(?) 있다. 카메라, 키보드, 그리고 최근에는 캠핑용품으로 뻗어나가는 전적이 있는데, 오래전 부터 애플 장비도 여러 것들을 거쳐왔다. 퇴사를 하게 되면서, 잘 쓰던 16인치 맥북 프로를 보내고 개인용 노트북이 필요해져서 당시 따끈따끈한 m1 칩을 탑재한 맥북에어를 구매했다. 물론 개발, 유튜브, 웹 서칭 등등 모든 목적을 위한 노트북 구매였고, 당시에는 원모니터 또는 맥북 하나로만 개발하는 것에 맛 들렸어서 (이상한 미니멀리즘에 취했었음) `m1 에어는 하나의 디스플레이만 지원한다` 는 사실도 괜찮았다. 사고 한동안은 괜찮았다. 하지만 지금까지는 진짜 꾸역꾸역 아이패드 미니 (미니병에 도..
Kafka vs RabbitMQ & MSA환경에 kafka를 적용한다면? (with 예제코드)
·
DevOps/devops
대규모 시스템이란방대한 양의 데이터를 처리하고 수 많은 사용자의 요청을 동시에 처리할 수 있는 시스템이러한 시스템 설계는 확장성, 유지보수성, 성능, 안정성 등을 고려MSA 는 대규모 시스템 설계 아키텍쳐 패턴RabbitMQ,Kafka 같은 메시징 시스템을 활용하여 각 서비스 간의 효율적인 데이터 통신과 확장성을 보장메세징 시스템?Queue 형태로 메세지를 저장. 송신자 (Producer)가 메세지를 큐에 넣으면, 수신자(Consumer)는 자신의 속도에 맞춰 Queue에서 메세지를 처리.Message Broker를 사이에 두고, 송신자(Producer)와 수신자(Consumer)가 간접적으로 데이터를 주고 받음MSA 환경에 적용한다면송신자 (Producer): MSA에서 메세지를 발행하는 곳 (e.g...
Leethub v2 수정해서 NOTES.md 도 업로드 하기
·
devlog/etc
new UI가 적용되면서 기존에 동작하던 Leethub 앱이 동작하지 않게 되었다.이에 따라서 여러 개발자들이 v2, v3 등등 개선한 버전을 공유하고있다! 대부분의 케이스에서는 잘 동작하는 것 같다. 👍이렇게 동작하지 않는 이유로 검색하다가, algorithms 풀이를 한 repo에서 관리할수있게, 그리고 이걸 difficulty 기준으로 폴더 정리해서 나눌수있게! 해주는 블로그 글을 발견했다. 이렇게 정리하면 기존에 알고리즘 문제 풀이 하는 repo도 싹 정리가능해서 적용했다! 잘됨!잘 쓰다가, 문득 notes도 같이 업로드 되었으면 좋겠다! 는 생각에 기존 코드를 좀 뜯어 보기 시작했다.나는 지금 V2버전을 수정해서 사용하고있는데, 이 코드 기반으로는 notes가 업로드 되는 부분이 생략되어있다...
모바일, 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 응답 코드로 서버가 커피 내리기를 거부한다는 의미를 가진다 - 왜냐면 서버는..
[LeetCode] 347. Top K Frequent Elements
·
BE/algorithm
문제 링크 https://leetcode.com/problems/top-k-frequent-elements/description/ Intuition 주어진 array에서 가장 중복이 많은 k개의 element를 결과값으로 반환 그렇다면 정렬하고, 중복을 찾기 위해선 hash를 써야겠군 Approach hash를 쓰기 위해서는 python의 dictionary를 사용 가장 많이 중복되는 element 별로 저장된 dictionary를 그 후에 정렬! 정렬된 중복_숫자_맵 에서 k개의 key값을 반환 dict에서 get()함수는 parameter가 2개! 두번째 param은 optional로 조회하는 key 값이 없는 경우에 반환할 값을 설정 numMap[num] = numMap.get(num,0) → nu..
[LeetCode] 49. Group Anagrams
·
BE/algorithm
문제 링크 https://leetcode.com/problems/group-anagrams/description/ Intuition 동일한 길이를 가지고 동일한 문자열 구성을 가져야 하는 anagram! 그럼 저번에 문제 풀이 했을 때 처럼 set을 사용해서 풀어볼까? 그런데 이 전 문제와 다르게 grouping 해야하는 문제니까 hash 를 써야할듯 Approach 단어가 3글자라고 주어진 input에서 3개 묶음의 단어가 다 있으리라고는 보장 X 있는 element를 기준으로 hash에 저장해서 확인해야함 python에서 hash는? → dictionary! dict의 key 값은 정렬한 값으로 저장 → 모든 element가 정렬된 값을 기준으로 hasKey() operation을 해야하므로 valu..
[LeetCode] 1. Two Sum
·
BE/algorithm
문제 링크 https://leetcode.com/problems/two-sum/description/ Intuition 주어진 array의 element 중에 target 값으로 합의 수가 맞는 조합을 찾아야 하면..모든 element를 합해서 확인해 보자 first + second index element의 합을 확인하고 넘어가야 한다 Approach 당장 생각나는건...outer loop에서는 index 0 부터 좌항에 들어가는 인자를 iterate하고 inner loop에서는 우항에 들어가는 인자를 iterate 해서 둘의 합을 확인하는 방법 Complexity Time complexity: O(N^2) Space complexity: Code class Solution: def twoSum(sel..
[LeetCode] 242. Valid Anagram
·
BE/algorithm
Intuition Anagram은 주어진 문자열의 character를 재배치 했을 때에도 다 같은 구성의 character를 가지는 단어 혹은 문구를 뜻한다고 한다. 그러니 길이가 같아야지? 같은 구성의 character를 가져야하겠네? Approach 같은 구성의 문자를 가진것을 어떻게 비교하면 좋지? 정렬한 후에 같은지 확인하면 효율적이지 않을까 길이가 다른 경우는 먼저 False를 반환 하는게 좋을 것 같다 Complexity Time complexity: O(nlogn) 평균 / W.C (= worst case) 이유는 python의 sorted() 함수는 Timesort라는 정렬 알고리즘을 사용 Timesort 알고리즘이란? insertion sort 와 merge sort의 장점만을 합쳐서 만..