본문 바로가기

개발 & IT

(84)
방화벽 뚫지 않고 로컬 서버 공개하기 — Cloudflare Tunnel 실전 사용기 개발 서버에 22번 포트만 열려 있다면? 팀원들이 API를 테스트하려면 모두 SSH 터널링을 해야 할까요?Cloudflare Tunnel을 사용하면 인바운드 포트 개방 없이 외부에서 접근 가능한 공개 URL을 단 한 줄로 만들 수 있습니다.문제 상황개발 서버에 NestJS API를 띄웠지만, 외부에서는 22번 포트(SSH)만 접근 가능한 상황이었습니다.팀원들에게 API를 공유하려면 각자 SSH 터널링을 설정해야 해서 매우 번거로웠습니다.[팀원 브라우저] --SSH--> [개발 서버 :22] --> [NestJS API :3000 내부]❌ 팀원마다 터널링 설정 필요Cloudflare Tunnel이란?Cloudflare Tunnel(구 Argo Tunnel)은 아웃바운드 연결만으로 서버를 외부에 공개할 수 ..
Windows SSD 용량 부족 해결 — Docker vhdx, WSL 다른 드라이브로 이전하기 vhdx 위치 확인개발 환경에서 C: SSD 용량을 잡아먹는 주범은 대부분 Docker와 WSL의 가상 디스크 파일(.vhdx)이다.Docker vhdx 위치 확인(Get-ChildItem "C:\Users\$env:USERNAME\AppData\Local\Docker" -Recurse -Filter "*.vhdx" -ErrorAction SilentlyContinue).FullNameWSL vhdx 위치 확인(Get-ChildItem "C:\Users\$env:USERNAME\AppData\Local\Packages" -Recurse -Filter "*.vhdx" -ErrorAction SilentlyContinue).FullName용량 확인:Get-Item "C:\Users\$env:USERNAME\..
Ubuntu 서버에서 Docker / Laravel Sail 문제 해결 기록 Ubuntu 서버에서 Laravel Sail 실행이 안 되는 문제가 발생했습니다. 겉보기엔 다른 두 가지 문제였지만, 실제로는 Docker 환경이 꼬이면서 연쇄적으로 발생한 문제였습니다.문제 1. Docker 데몬이 실행 중인데 명령어가 실패현상$ docker infoCannot connect to the Docker daemon at unix:///var/run/docker.sock.Is the docker daemon running?$ sudo systemctl status dockerActive: active (running) # 서비스는 실행 중권한도 정상, 서비스도 정상인데 Docker 명령어가 모두 실패했습니다.원인$ ps -ef | grep dockerd/usr/bin/dockerd .....
Vue 개발자가 Next.js를 배우며 겪은 혼란: Server Component와 Client Component 이해하기 Vue와 Nuxt에 익숙한 개발자로서 Next.js를 처음 접했을 때, 가장 혼란스러웠던 부분은 "왜 데이터를 fetch 했는데 화면이 업데이트되지 않는가?"였습니다. Vue에서는 당연하게 작동하던 반응형 시스템이 Next.js에서는 전혀 다른 방식으로 동작했고, revalidatePath라는 낯선 함수를 호출해야 했습니다.이 글은 Vue/Nuxt 개발자가 Next.js의 Server Component와 Client Component를 이해하는 과정을 담았습니다.첫 번째 혼란: 왜 화면이 업데이트되지 않는가?Vue/Nuxt에서의 당연함Vue나 Nuxt에서 개발할 때, 반응형 시스템은 너무나 자연스럽게 작동합니다. {{ post.title }} 이 코드는 예상대로 작동합니다. 게시글을 추가하면 ..
JavaScript 개발자가 Flutter의 copyWith를 이해하기까지 시작하며Flutter를 배우면서 가장 궁금했던 것 중 하나가 바로 copyWith 패턴이었습니다.// 이게 왜 안 되는 거지?deck.keyword = "커피"; // 컴파일 에러!// 왜 이렇게 해야 하지?final newDeck = deck.copyWith(keyword: "커피");"JavaScript였으면 그냥 바꾸면 되는데..." 라는 생각이 들었습니다. 하지만 실제로 사용해보니 이 패턴이 왜 필요한지 이해하게 되었고, 오늘은 그 내용을 공유하려 합니다.JavaScript에서는 당연했던 것들JavaScript(특히 React)로 개발할 때, 객체나 배열을 다루는 방식은 이랬습니다:// 객체 일부 변경const user = { name: "김철수", age: 30, email: "kim@exam..
Dart 메서드 vs Getter: 언제 무엇을 사용해야 할까? Flutter/Dart로 개발하다 보면 클래스의 속성에 접근하는 방법을 선택해야 할 때가 있습니다. 메서드로 구현할지, getter로 구현할지 고민되는 순간들이 있죠. 오늘은 이 둘의 차이와 올바른 선택 기준을 명확하게 정리해보겠습니다.1. 기본적인 차이점메서드 방식class Rectangle { double width; double height; // 메서드로 구현 double area() { return width * height; } double perimeter() { return 2 * (width + height); } Rectangle(this.width, this.height);}// 사용void main() { final rect = Rectangle..
Git 경고 해결하기: CRLF와 LF, 그게 뭔데? 문제 상황Windows 환경에서 Flutter 프로젝트를 만들고 Git에 커밋하려는 순간, 이런 경고 메시지를 본 적 있으신가요?warning: LF will be replaced by CRLF in [파일명]The file will have its original line endings in your working directory처음 보면 당황스럽지만, 사실 이 경고는 매우 흔한 상황입니다. 오늘은 CRLF와 LF가 무엇인지, 왜 이런 경고가 뜨는지, 그리고 어떻게 해결할 수 있는지 알아보겠습니다.CRLF vs LF: 무엇이 다를까?줄바꿈 문자의 역사CRLF와 LF는 모두 **줄바꿈(Line Ending)**을 표현하는 방식입니다. 타자기 시대부터 내려온 차이인데요:CR (Carriage Return..
화면 뒤에 있는 것들 개발자에게 돈을 지불하는 걸 꺼리는 사람들이 있다. "이거 금방 되는 거 아니에요?""이 정도에 왜 이렇게 비싸요?""다른 개발자는 더 싸게 해주던데요." 개발을 단순 작업으로 본다.화면 하나 만드는 게 며칠이면 될 거라고 생각한다.하지만 그 뒤에는 설계가 있고, 데이터 구조가 있고, 서버 로직이 있고, 배포 과정이 있다.보이지 않는 것들이 훨씬 많다. 내가 주로 일하는 분야에서도 이런 일을 자주 겪는다.IT를 부가적인 서비스 정도로 여기는 경우가 많다.기술의 복잡함을 이해하지 못한다.그래서 가격만 보고 선택한다.하지만 경험이 부족한 개발자는 시행착오를 반복하고, 구조를 제대로 잡지 못해 나중에 유지보수가 어려워진다.단가가 낮다고 해서 총 비용이 적게 드는 건 아니다. 실제로 운영중이던 한 프로젝트를 다..

반응형