조회수가 많아요 🫢
-
키크론 키보드 fn + f1~12 키 기본 설정
개요감사하게도 지인분께 키크론 k8 pro 키보드를 선물 받아 사용하던 중 키크론 키보드는 f1키를 입력하면 자동으로 fn + f1키가 입력 되고 fn + f1키를 입력해야 f1키가 입력되는 것을 알게 되었다.개발자로써 f1 ~ 12까지의 키를 쓸 일이 많아 그때마다 fn키까지 같이 눌러줘야하는게 굉장히 불편했는데 맥 자체의 설정으로도 키를 돌릴 수 없는 것을 알게 되었고 열심히 찾아보아도 기능키를 기본 맥 키보드처럼 쓸 수 있는 방법은 찾지 못했다... 하InteliJ에서 파일 리팩토링 단축키가 shift + f6인데 리팩토링을 하기위해 shift + f6 + fn 이렇게 세 키를 누를 때마다 참을 수 없는 분노가 올라와서 결국 키크론 키보드 런처에 접속해 직접 부딪혀서 설정하게 되었다.설정 방법유선으..
-
tailwind - important
tailwind class에 !important 적용 시키는 법 클래스 명 앞에 느낌표를 붙이면 된다. See the Pen Untitled by 김채민 (@aleph-kim) on CodePen.
-
Linux - ls -al 명령어 각 항목별 설명
개요linux를 사용하다 보면 자주 사용하게 되는 ls -al 명령어에서 각 항목이 무슨 의미인지 생각이 안 날 때가 있어 글로 정리 하려한다.각 항목별 설명항목예시설명권한-rw-r--r--파일 유형 및 접근 권한- 첫 글자는 파일 유형(-: 파일, d: 디렉토리 등), 다음 9글자는 소유자, 그룹, 기타 사용자의 권한링크 수1해당 파일이나 디렉토리에 연결된 하드 링크의 수소유자user파일이나 디렉토리의 소유자 이름그룹staff파일이나 디렉토리가 속한 그룹 이름크기1024파일의 크기(바이트 단위) 디렉토리의 경우 메타데이터 크기수정 날짜 및 시간Oct 5 12:34마지막으로 파일이나 디렉토리가 수정된 날짜와 시간파일명example.txt파일이나 디렉토리의 이름예시권한 | 링크 수 | 소유자 | 그룹 | ..
-
Nginx - Nginx Proxy Manager Stream 설정
개요최근 GCP 프리티어 VM이 너무 느린 것 같아 Oracle Cloud Infrastructure(OCI)의 프리티어로 서버를 옮기게 되었다. OCI는 상상 이상으로 쾌적하게 잘 작동했지만, 인스턴스 간 네트워크 구성에서 예상치 못한 문제가 발생했다.OCI에서는 프리티어 기준으로 VM 인스턴스를 2개까지 생성 가능하지만, Public IP는 1개만 예약 가능하다.그리하여 아래와 같이 구성했다.main-instance: 실제 서비스 운영 (Nginx, 백엔드 API 등), Public IP 보유db-instance: MySQL DB만 운영, 사설 IP만 존재하지만 위 구조로 진행 중 DB 툴(MySQL Workbench, DBeaver 등)에서 MySQL에 접속하려고 할 때 문제가 발생했다.원인처음엔 ..
-
nginx - nginx proxy manager internal error
에러 발생 nginx proxy manager에서 proxy host를 등록하고 ssl 설정을 하려고 할때 이 오류가 발생했다. 해결 방법 1. 다른 설정 없이 해당 host 주소로 접속이 가능한지 확인한다. 2. 주소로 접속이 안 된다면 도메인의 A레코드 설정을 확인한다. 3. 주소로 접속이 안 된다면 docker에서 해당 port를 열어주었는지 확인한다. 4. 알맞은 ip를 넣었는지 확인한다.
-
Docker - Nginx Proxy Manager(npm) Docker로 실행하기
개요아....... 글 80% 작성 완료했는데 날아가서 새로 써야하네요.... 정말 속상합니다....한 서버에서 여러 프로젝트를 돌려야 하는데 각 서브 도메인마다 ssl 인증 관리를 해주어야 해서 열심히 삽질을 한 결과Nginx Proxy Manager(이하 npm, js 패키지 매니저 아님)를 사용하는게 가장 쉽고 편하다는 것을 깨닫게 되었다.그리하여 docker compose를 사용하여 npm을 컨테이너로 실행하고 서브도메인별로 ssl 인증을 받는 과정을 정리해본다.서버 디렉토리 구조.ssh├── nginx│ └── docker-compose.yml├── project1│ └── docker-compose.yml└── project2 └── index.jsnginx/docker-co..
-
Discord - AWS 요금 알림 봇
개요매일 정오에 이번 달 aws 요금이 얼마나 나왔는지 알려주는 봇을 만드는 과정이다.친절하게 한화로도 알려주게끔 만들었다.무분별한 수정과 배포를 환영합니다.준비물1. ssh 접속이 가능하고 docker, docker-compose가 정상 설치된 서버2. 채팅을 올리려는 채널의 discord 봇 webhook url3. 요금을 보려는 aws 계정의 access keydiscord 봇 webhook url 만드는 방법을 모른다면? Discord - 봇 만들기개요discord 기본 봇을 만드는 과정을 담은 글이다.1. 채널 편집 페이지2. 연동 - 웹후크3. 웹후크 만들기웹후크 url이 필요없다면 이름과 프로필 사진만 바꾸면 된다.웹후크 url이 필요할 경우 아래dev-kimchi.tistory.comaws..
-
Java - 소수점 올림, 반올림, 버림
올림Math.ceil()double num = 123.4567891011;double test = Math.ceil(num); // 124// Math.cail()는 소수점 첫째자리를 기준으로 올림하는 메소드이다.반올림Math.round()double num = 123.4567891011;double test = Math.round(num); // 123// Math.round()는 소수점 첫째자리를 기준으로 반올림하는 메소드이다.double result1 = Math.round(num * 100) / 100.0; // 123.46// 둘째자리까지 나타내려면 100을 곱해주고 후에 100.0으로 나눠준다. 100으로 나누면 정수형으로 변환되기 때문에 100.0으로 나눠야 한다.버림String.fomat(..
-
Mysql - 비관적 락(Pessimistic Lock)
개요락(Lock)에 대해 찾아보다 Mysql이 "자동으로 비관적 락을 건다"는 말을 발견했는데 '그럼 내가 따로 코드를 짤 필요가 없는 건가?' 싶은 마음에 헷갈려서 정리해보았다.Mysql 자동 락의 역할Mysql(InnoDB)은 UPDATE나 DELETE 실행 시 자동으로 해당 행에 락을 건다.예시: 동시 수정 방지재고를 10으로 변경하는 A 요청과 20으로 변경하는 B 요청이 동시에 실행되는 상황이다.// A 요청UPDATE products SET stock = 10 WHERE id = 1;// B 요청 (거의 동시)UPDATE products SET stock = 20 WHERE id = 1;자동 락 덕분에:A의 UPDATE 실행 중 → B는 대기A 완료 → B 실행결과: stock = 20자동 락..
-
Github - 디스코드 깃허브 알림 action(Discord Github Notification) 설명서
프로젝트 개요프로젝트 이름: 🛎️ Discord Github NotificationGithub repository urlGithub marketplace url프로젝트 설명이 프로젝트는 GitHub Action을 통해 GitHub에서 발생하는 다양한 이벤트(예: Pull Request 생성, 이슈 생성 등)를 Discord 채널 알림으로 전송하는 프로세스를 단순화해주는 서비스입니다.이 Action을 사용하면 중요한 개발 이벤트를 놓치지 않고 바로 Discord에서 확인할 수 있습니다!이 Action은 커스텀 알림 메시지를 지원하며, 한국어 🇰🇷와 영어 🇬🇧 중 원하는 언어로 알림을 받을 수 있습니다.👤 개발자: 김채민(Aleph Kim)🔧 주요 기능📝 PR 알림Pull Request 생성,..
최근에 올렸어요💡
-
DB - ACID
ACID란?ACID는 데이터베이스 트랜잭션이 안전하게 처리되기 위해 반드시 지켜야 하는 4가지 속성이다.Atomicity (원자성)트랜잭션 내 모든 작업이 완전히 성공하거나 완전히 실패해야 한다.예시: 계좌이체 시 A계좌 출금과 B계좌 입금이 모두 성공하거나 모두 취소된다. 출금만 되고 입금 실패는 불가능하다.Consistency (일관성)트랜잭션 전후로 데이터베이스가 일관된 상태를 유지해야 한다.예시: 쇼핑몰에서 주문 시 "재고수량 ≥ 주문수량" 규칙이 있다면, 재고 10개인 상품을 15개 주문하려고 하면 트랜잭션 자체가 거부된다. 트랜잭션이 완료되면 반드시 재고가 충분히 남아있는 상태가 보장된다.Isolation (격리성)동시 실행되는 트랜잭션들이 서로 영향 없이 독립적으로 실행되어야 한다.예시: 콘..
-
Mysql - 비관적 락(Pessimistic Lock)
개요락(Lock)에 대해 찾아보다 Mysql이 "자동으로 비관적 락을 건다"는 말을 발견했는데 '그럼 내가 따로 코드를 짤 필요가 없는 건가?' 싶은 마음에 헷갈려서 정리해보았다.Mysql 자동 락의 역할Mysql(InnoDB)은 UPDATE나 DELETE 실행 시 자동으로 해당 행에 락을 건다.예시: 동시 수정 방지재고를 10으로 변경하는 A 요청과 20으로 변경하는 B 요청이 동시에 실행되는 상황이다.// A 요청UPDATE products SET stock = 10 WHERE id = 1;// B 요청 (거의 동시)UPDATE products SET stock = 20 WHERE id = 1;자동 락 덕분에:A의 UPDATE 실행 중 → B는 대기A 완료 → B 실행결과: stock = 20자동 락..
-
DB - 파티셔닝과 샤딩
개요개발을 하다보면 파티셔닝과 샤딩이라는 용어를 종종 듣게 된다. 찾아보니 둘 다 데이터를 분할한다는 공통점이 있지만, 작동 방식과 목적이 완전히 다르다는 것을 알게 되었다. 이에 대한 내용과 더불어 샤딩을 구현할 때 Laravel ORM에서 어떻게 특정 샤드를 찾아가는지에 대한 내용까지 정리해보았다.파티셔닝 (Partitioning)하나의 데이터베이스 서버 내에서 대용량 테이블을 물리적으로 여러 조각으로 분할하는 기술주요 특징:단일 서버, 단일 DB 인스턴스에서 동작쿼리 성능 향상 (필요한 파티션만 스캔)유지보수 용이 (파티션 단위 삭제/아카이빙)MariaDB는 RANGE, LIST, HASH, KEY 네 가지 파티셔닝을 지원한다.-- RANGE 파티셔닝 예시CREATE TABLE orders ( ..
-
Laravel - encrypt, bcrypt의 차이와 안전성
개요Laravel에서 데이터 암호화에 사용되는 encrypt와 비밀번호 해싱에 사용되는 bcrypt의 차이점과, 각각의 salt 방식, 그리고 bcrypt가 APP_KEY 없이도 충분히 안전한 이유를 정리해보았다.encrypt와 bcrypt의 근본적 차이암호화 방향성encrypt (양방향 암호화)$encrypted = encrypt('신용카드번호');$original = decrypt($encrypted); // 복호화 가능용도: 나중에 원본 데이터가 필요한 경우예시: 신용카드 번호, API 토큰, 개인정보특징: APP_KEY를 사용하여 암호화/복호화bcrypt (단방향 해싱)$hashed = bcrypt('password123');// 복호화 불가능, 검증만 가능Hash::check('password1..
-
Nginx - Too many open files 에러 / 1024 worker_connections are not enough 에러
개요대용량 트래픽 테스트 중 Nginx 캐싱을 적용한 후, 추가적인 시스템 레벨 병목 현상을 발견하게 되었다. 캐시 설정만으로는 해결되지 않는 파일 디스크립터 부족과 워커 커넥션 한계 문제를 해결한 과정을 기록해보았다.1. Too many open files 에러 해결해결 방법/etc/nginx/nginx.conf다음 내용 추가:worker_rlimit_nofile 65535;시스템 서비스 설정sudo systemctl edit nginx다음 내용 추가:[Service]LimitNOFILE=65536설정 후 재시작:sudo systemctl daemon-reloadsudo systemctl restart nginxworker_rlimit_nofile를 최대값(65535)으로 설정해도 되는 이유Nginx ..
-
PHP - Nginx 캐싱 설정
개요laravel 서버의 대용량 트래픽 처리에 대해 테스트하다 PHP FPM 프로세스의 부족으로 인해 병목 현상이 발생함을 발견하게 되었고 서버 스펙을 무리하게 올리기 보다는 다른 방식으로 해결을 하는 것이 바람직하다 판단되어 Nginx 캐싱에 대해 찾아보게 되었다./etc/nginx/sites-available/default# server 블록 상단에 추가fastcgi_cache_path /dev/shm/nginx_cachelevels=1:2keys_zone=PHPCACHE:100mmax_size=500minactive=60muse_temp_path=offfastcgi_cache_use_stale error timeout updating invalid_header http_500;fastcgi_cach..
-
Nginx - www, non-www redirect 시 도메인 검색엔진의 색인 방식
개요Nginx에서 www 서브도메인을 메인 도메인으로 리다이렉트 설정 시, 검색엔진이 어떤 도메인을 색인하는지에 대한 내용을 정리해보았다.검색엔진의 리다이렉트 처리질문의 배경Nginx에서 www.example.com을 example.com으로 301 리다이렉트 설정 시, 검색엔진(구글, 네이버)이 www 도메인을 노출할지에 대한 의문이 발생하였다.검색엔진의 동작 방식크롤러의 리다이렉트 추적크롤러 접근: www.example.com ↓Nginx 응답: 301 → example.com ↓크롤러 인식: "example.com이 정규 URL" ↓검색 결과: example.com으로 색인핵심 사실:검색엔진은 301 리다이렉트를 따라가며 최종 도착 URL을 정규 버전으로 인식리다이렉..
-
PHP -dom pdf로 html -> pdf 변환
개요DomPDF로 PDF를 생성할 때 한글이 깨지는 문제가 발생하여 폰트 등록부터 인코딩 문제까지, 여러 시행착오를 겪어가며 해결하였다.하지만 DomPDF로 PDF를 생성하는 방법은 font 관련 css를 넣었을때 또 깨지는 문제가 발생하고 일부 css가 먹질 않아서 폐기하게 되었다.그리하여 결국에는 이 방식을 사용하지 않게 되었지만 그냥 갖다버리기는 아까워서 글로라도 남기려한다...DomPDF 한글 깨짐 문제문제의 원인DomPDF는 기본 폰트(DejaVu Sans)에 한글 글리프가 없다. 한글을 표시하려면 한글을 지원하는 폰트를 명시적으로 등록해야 한다.증상별 원인? (물음표): 인코딩 문제 또는 폰트 미등록□ (네모): 폰트에 해당 글리프 없음깨진 문자: UTF-8 인코딩 미지정해결 과정1단계: 인코..
-
PHP - aws t3 서버 사용 시 관련 스펙 정리
스펙 정리 표aws t3 서버 스펙 공식문서인스턴스 타입RAMvCPU동시 접속용도t3.nano0.5GB22~5명개발/테스트 전용t3.micro1GB25~15명매우 가벼운 사이트, 사내 도구t3.small2GB220~50명소규모 비즈니스 사이트t3.medium4GB250~150명중소 규모 서비스t3.large8GB2150~300명중간 규모 서비스t3.xlarge16GB4300~600명대규모 서비스t3.2xlarge32GB8600~1,200명엔터프라이즈급네트워크 성능 - 최대 5Gbps동시 접속 가능량 계산t3.micro (1GB RAM) 예시OS + 기본 서비스: ~300MBMariaDB: 200 ~ 300MBNginx: ~50MB남은 여유: 350 ~ 450MBPHP-FPM 프로세스 수: 7 ~ 15개 ..
-
Nginx - 리버스 프록시란?
개요분명 이전에 공부했던 개념인 리버스 프록시에 대해 스스로 질문을 던졌더니 제대로 답변을 하지 못했다. 지금의 나보다 더 멍청할 미래의 나를 위해 정리해주도록 하자.리버스 프록시란?식당 비유로 이해하기리버스 프록시는 식당에서 주문을 받는 직원과 같다.일반적인 상황 (프록시 없음)손님(사용자) → 직접 주방장(서버)에게 주문리버스 프록시 사용손님(사용자) → 직원(Nginx) → 주방장(서버)에게 전달리버스 프록시의 주요 기능로드 밸런싱: 트래픽이 많을 때 여러 서버로 요청 분산보안: 실제 서버의 위치와 구조를 클라이언트로부터 숨김캐싱: 자주 요청되는 콘텐츠를 미리 저장하여 빠른 응답 제공실제 구조사용자 브라우저 → Nginx → 서버(애플리케이션 레벨)Nginx가 클라이언트의 요청을 받아 서버에 전달하..
-
Nginx - www 서브도메인을 non-www로 리다이렉트하기
개요현재 단일 도메인으로 서비스를 운영하고 있는데, www.도메인으로 접속했을 때 기존 도메인으로 리다이렉트 시키고 싶었다. SEO 측면에서도 단일 도메인으로 통일하는 것이 좋고, 사용자 경험 측면에서도 일관된 URL을 제공하는 것이 중요하다고 판단했다.설정 방법1. DNS 레코드 추가먼저 호스팅 사이트의 DNS 설정에서 www 서브도메인에 대한 CNAME 레코드를 추가했다.- 레코드 타입: CNAME- 호스트: www- 값: 도메인. (호스팅 사이트에 따라 끝에 .을 붙이는 경우도 있다.)- TTL: 600 (10분)TTL을 낮게 설정한 이유는 새로운 레코드를 추가하는 것이기 때문에 문제 발생 시 빠르게 수정할 수 있도록 하기 위함이다. 안정화된 후에는 3600(1시간) 이상으로 올려도 ..
-
laravel - sail 컨테이너 apt-get update 지연 해결 방법
개요laravel 프로젝트를 도커에 얹기 위해 sail로 컨테이너를 빌드하는데 apt-get update && apt-get upgrade ... 명령어에서 억겁의 시간이 걸리는 상황이 발생했다.원인sail로 컨테이너를 빌드할때 패키지 파일을 ports.ubuntu.com에서 받아오는데 이 서버가 영국에 있기 때문에 한국과 물리적으로 거리가 멀어 지연이 발생하는 것으로 확인되었다.해결방법권장되는 방법은 아닐 것 같지만(애초에 vendor 내의 파일을 수정하려고 하면 PhpStorm에서 안내 메시지가 나온다.) vendor 디렉토리 내에 있는 기본 Dockerfile에서 저장소 서버의 url을 한국에 위치한 비공식 미러서버 url로 바꿔주는 명령어를 추가해 해결하였다.이 방법에서 사용한 미러서버는 KAIS..
-
기타 - 빈약한 도메인 모델(Anemic Domain Model)이란?
빈약한 도메인 모델(Anemic Domain Model)이란?빈약한 도메인 모델은 겉모습은 도메인 모델처럼 보이지만, 실제로는 데이터(속성)만 가지고 있고, 행동(비즈니스 로직)은 거의 없는 객체들을 말한다.즉, 도메인 객체가 단순히 ‘데이터 보관용 그릇’ 역할만 하고, 핵심 로직은 전부 별도의 서비스 객체에 분리되어 있는 구조왜 문제가 될까?객체지향 설계의 기본 원칙 위반객체지향 설계에서는 데이터와 그 데이터를 처리하는 행위(동작)를 한 객체 안에 함께 담는 것이 원칙빈약한 도메인 모델은 이 원칙을 무시하고, 데이터를 가진 객체와 로직을 가진 서비스를 따로 분리해 놨기 때문에 사실상 절차지향 프로그래밍과 크게 다르지 않음도메인 모델의 장점을 살리지 못함도메인 모델을 잘 활용하면 비즈니스 로직을 객체 안..
-
PHP - Docker Prometheus Grafana 모니터링
개요php로 서비스를 운영하며 속도가 너무 느려 원인을 찾아보려 했으나 코드상에서 병목이 발생할만한 부분을 찾지 못했다.서버 성능의 문제가 아닌가 싶었지만 원인을 분명히 하고 싶어 모니터링 시스템을 추가하게 되었고 많은 모니터링 시스템 중 Prometheus Grafana 조합을 선택하게 되었다.왜 Prometheus + Grafana인가?기준Prometheus + GrafanaZabbixNagiosInfluxDB + ChronografDatadog데이터 수집Pull 기반, PHP-FPM exporter로 PHP 메트릭 수집 가능, 다양한 exporter 지원Push 기반, 에이전트 설치 필요, PHP 스크립트로 커스텀 메트릭 지원스크립트 기반 체크, PHP 메트릭은 플러그인으로 제한적Push 기반, T..
-
Ubuntu - 서버간 파일 전송(scp 명령어)
개요여러 서버를 운영하다보면 가끔 필요해지는 서버간 파일 전송 방법에 대해 정리해보았다.scp보다는 rsync를 사용하는게 안정적이라고는 들었으나 일단은 scp로도 충분한 것 같아 rsync는 추후에 사용하게 되면 그때 정리할 예정이다.1. 서버 A에 SSH 접속ssh 서버A유저@서버A의IP# ex. ssh userA@123.123.123.1232. SSH 키쌍 생성 (서버 A에서)ssh-keygen -t rsa -b 40963. 생성된 키쌍 파일 확인ls -al4. pub key 내용 확인 및 복사cat ~/.ssh/id_rsa.pub5. 서버 B에 SSH 접속ssh 서버B유저@서버B의IP# ex. ssh userB@456.456.456.4566. 서버 A의 pub key를 서버 B의 authorize..
-
Nginx - Nginx Proxy Manager 502 bad gateway 에러 해결
개요GCP 인스턴스에서 OCI 인스턴스로 서버를 이전하던 중 기존 GCP에서는 문제없이 작동하던 Docker 기반 네트워크 구조가 OCI에서는 제대로 동작하지 않았고, 그로 인해 Nginx Proxy Manager(이하 npm) 컨테이너가 다른 서비스 컨테이너와 통신을 할 수 없어 도메인을 연결할 수 없게 되었다.이를 해결하기 위해 꽤나 많은 시간을 허비하게 되었고, 이는 그 과정을 압축한 글이다.문제 상황OCI로 서버를 옮긴 뒤 Docker 설정을 기존과 동일하게 구성했지만, npm이 다른 컨테이너와 통신하지 못했다.1. GCP에서는 npm이 `172.17.0.1:[service port]`로 통신하면 정상 작동했지만 OCI에서 같은 방식으로 설정할 경우 502 bad gateway 에러 발생2. `n..
-
MAC 주소란?
MAC 주소란?MAC 주소(Media Access Control Address)는 네트워크에 연결된 기기의 네트워크 인터페이스(예: Wi-Fi 칩, 이더넷 포트)에 부여된 고유한 식별자이다.데이터 링크 계층(Layer 2)에서 로컬 네트워크(LAN) 내에서 기기를 식별하고, 데이터를 정확히 전달하는 데 사용된다.애플의 mac과는 전혀 상관 없다. 애플에서는 혼동되지 않도록 mac 주소를 프로토콜 주소(Ex. 와이파이 주소) 같은 식으로 표기한다.MAC 주소의 특징형식: 48비트(6바이트) 16진수. 예: AA:BB:CC:DD:EE:FF앞 24비트: OUI(제조사 고유 ID) — 예: 삼성, 애플 등뒤 24비트: 제조사가 임의로 지정하는 고유 번호고유성:총 가능한 조합: 2^48 ≈ 281조 개 → 전 세..
-
Nginx - Nginx Proxy Manager Stream 설정
개요최근 GCP 프리티어 VM이 너무 느린 것 같아 Oracle Cloud Infrastructure(OCI)의 프리티어로 서버를 옮기게 되었다. OCI는 상상 이상으로 쾌적하게 잘 작동했지만, 인스턴스 간 네트워크 구성에서 예상치 못한 문제가 발생했다.OCI에서는 프리티어 기준으로 VM 인스턴스를 2개까지 생성 가능하지만, Public IP는 1개만 예약 가능하다.그리하여 아래와 같이 구성했다.main-instance: 실제 서비스 운영 (Nginx, 백엔드 API 등), Public IP 보유db-instance: MySQL DB만 운영, 사설 IP만 존재하지만 위 구조로 진행 중 DB 툴(MySQL Workbench, DBeaver 등)에서 MySQL에 접속하려고 할 때 문제가 발생했다.원인처음엔 ..
-
Docker - Dockerfile에서 crontab 설정하기
개요Docker 컨테이너 안에서 cron을 실행해야 하는 작업이 있어서 Dockerfile에 cron 설정을 추가했는데, 컨테이너는 잘 올라갔지만 cron이 실행되지 않는 문제가 발생했다.crontab -l로 확인해보면 제대로 등록까지 되어 있었는데도 아무 반응이 없었고, 구글로 검색했더니 명확한 해결방법을 찾지 못해 수많은 삽질을 통해 찾게된 해결방법을 정리해본다(몹시 간단).Dockerfile에 crontab 설정하기처음에 사용한 Dockerfile은 대략 아래와 같았다# 베이스 이미지FROM ubuntu:20.04# 패키지 설치RUN apt-get update && apt-get install -y cron# cron 파일 복사COPY cronfile /etc/cron.d/cronfile# cron..
-
기타 - compinit:480: compdump: function definition file not found 에러 해결(feat. m4 에어 마이그레이션)
개요드디어 맥북을 업그레이드 했다. 오랜 기간 동고동락한 m1 에어를 보내주고 m4 에어를 질러버렸다.기분좋게 마이그레이션까지 마치고 VScode에서 터미널을 열었는데 갑자기 아래와 같은 에러가 출력되기 시작했다.compinit:480: compdump: function definition file not found.zshrc:188: add-zsh-hook: function definition file not foundcompinit 관련 에러zsh에서 compinit은 자동 완성 기능을 초기화할 때 사용하는 함수인데, 뭔가 꼬였는지 함수 파일 자체를 못 찾는다고 에러가 발생했다.그래서 .zshrc에 다음 스크립트를 추가해보았다autoload -Uz compinitcompinitautoload -U b..
- 방문자수
전체 방문자
오늘 방문자
어제 방문자