조회수가 많아요 🫢
-
키크론 키보드 fn + f1~12 키 기본 설정
개요감사하게도 지인분께 키크론 k8 pro 키보드를 선물 받아 사용하던 중 키크론 키보드는 f1키를 입력하면 자동으로 fn + f1키가 입력 되고 fn + f1키를 입력해야 f1키가 입력되는 것을 알게 되었다.개발자로써 f1 ~ 12까지의 키를 쓸 일이 많아 그때마다 fn키까지 같이 눌러줘야하는게 굉장히 불편했는데 맥 자체의 설정으로도 키를 돌릴 수 없는 것을 알게 되었고 열심히 찾아보아도 기능키를 기본 맥 키보드처럼 쓸 수 있는 방법은 찾지 못했다... 하InteliJ에서 파일 리팩토링 단축키가 shift + f6인데 리팩토링을 하기위해 shift + f6 + fn 이렇게 세 키를 누를 때마다 참을 수 없는 분노가 올라와서 결국 키크론 키보드 런처에 접속해 직접 부딪혀서 설정하게 되었다.설정 방법유선으..
-
Linux - ls -al 명령어 각 항목별 설명
개요linux를 사용하다 보면 자주 사용하게 되는 ls -al 명령어에서 각 항목이 무슨 의미인지 생각이 안 날 때가 있어 글로 정리 하려한다.각 항목별 설명항목예시설명권한-rw-r--r--파일 유형 및 접근 권한- 첫 글자는 파일 유형(-: 파일, d: 디렉토리 등), 다음 9글자는 소유자, 그룹, 기타 사용자의 권한링크 수1해당 파일이나 디렉토리에 연결된 하드 링크의 수소유자user파일이나 디렉토리의 소유자 이름그룹staff파일이나 디렉토리가 속한 그룹 이름크기1024파일의 크기(바이트 단위) 디렉토리의 경우 메타데이터 크기수정 날짜 및 시간Oct 5 12:34마지막으로 파일이나 디렉토리가 수정된 날짜와 시간파일명example.txt파일이나 디렉토리의 이름예시권한 | 링크 수 | 소유자 | 그룹 | ..
-
tailwind - important
tailwind class에 !important 적용 시키는 법 클래스 명 앞에 느낌표를 붙이면 된다. See the Pen Untitled by 김채민 (@aleph-kim) on CodePen.
-
PostgreSQL - docker PostgreSQL 16 설치
개요Docker가 설치된 환경에서 docker image를 사용하여 PostgreSQL을 설치하는 과정.이미지를 변경하여 다른 버전의 pg(postgresql 약어)도 설치가 가능합니다.과정1. 이미지 다운로드docker pull postgres:16docker images # 다운로드 완료 확인2. 컨테이너 실행# docker run --name 컨테이너명 -e 환경변수키=환경변수값 -d -p 포트바인딩 이미지명docker run --name postgres -e POSTGRES_PASSWORD=내비밀번호 -d -p 5432:5432 postgres:16docker ps # 실행중인 컨테이너 확인3. 컨테이너 접속docker exec -it postgres bash4. db 접속# psql -h 호스트..
-
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..
-
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 생성,..
-
카카오톡 url 미리보기 캐시 삭제
카카오톡 url 미리보기 캐시 삭제 방법 카카오 디벨로퍼스 공유 디버거에 접속 카카오 계정 로그인 (url과 상관x) 디버그를 클릭하여 현재 캐시 정보 확인 초기화가 필요할 경우 캐시 초기화 버튼 클릭 디버그를 클릭하여 초기화 확인
-
Database - mariadb, mysql dump(로컬, 원격, docker)
개요서버 작업을 하다 보면 DB 덤프를 떠야 하는 상황이 자주 생긴다.로컬 서버, 원격 서버, 도커 컨테이너 등 환경에 따라 명령어가 달라서 헷갈릴 때가 많아 환경별 덤프 명령어를 정리해보았다.1. 로컬 MariaDB 서버에서 DB 덤프기본 명령어mariadb-dump -u root -p database_name > backup.sql사용 예시# 특정 데이터베이스 덤프mariadb-dump -u root -p my_laravel_db > ~/Desktop/laravel_backup_20250117.sql# 모든 데이터베이스 덤프mariadb-dump -u root -p --all-databases > ~/Desktop/all_databases.sql# 특정 테이블만 덤프mariadb-dump -u roo..
-
Python - pip 모든 패키지 삭제
개요이전 시간에는 homebrew 패키지를 정리(하다가 기껏 정리 다 해놓고 마지막에 실수로 모든 패키지를 삭제해버림)해보았다.이번 시간에는 무분별하게 설치된 pip 패키지를 정리하려 한다.pip 패키지도 오늘 설치한 패키지만 삭제하려 했는데 생각해보니 homebrew와는 다르게 pip은 다양한 관리 도구가 있는데 내가 사용하지 않은 것이고, 다른 사람들은 다들 관리 도구를 사용할 것이기 때문에 굳이 오늘 설치한 pip 패키지 정렬 방법을 찾는다거나, 특정 기간에 설치된 pip 패키지 삭제 방법등은 필요하지 않을 것 같았다.그리하여 그냥 모든 pip 패키지를 깡그리 삭제하려고 한다ㅎㅎ삭제 명령어pip freeze | xargs pip uninstall -y설명pip freeze: 모든 패키지 목록 출력|..
-
Ubuntu - java 21 설치
명령어# apt 리스트 업데이트sudo apt update# java 21 버전 다운로드sudo apt install openjdk-21-jdk-headless# 설치 가능한 java 버전 확인# sudo apt list openjdk*
최근에 올렸어요💡
-
기타 - 아키텍처의 종류
1. 엔터프라이즈 아키텍처 (Enterprise Architecture, EA)범위: 조직 전체 (기업 수준)목적: 비즈니스 목표와 IT 전략의 일치설명: 회사의 비즈니스 프로세스, 데이터, 애플리케이션, 기술 인프라가 전체적으로 어떻게 맞물려 돌아가는지 정의하는 가장 거시적인 설계참고 자료: https://www.gartner.com/reviews/market/enterprise-architecture-tools2. 솔루션 아키텍처 (Solution Architecture, SA)범위: 특정 프로젝트 또는 서비스목적: 비즈니스 요구사항을 기술적 해결책으로 변환설명: 특정 문제를 해결하기 위해 필요한 소프트웨어, 인프라, 보안, 데이터 관리 등을 어떻게 통합하여 하나의 완성된 시스템(솔루션)을 만들지 설..
-
Laravel - Unable to connect with STARTTLS: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed 에러 해결
문제 상황Laravel에서 SMTP로 메일 발송 시 다음 오류가 발생했다.Unable to connect with STARTTLS: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed원인 분석먼저 메일 서버 인증서 상태를 확인했다.openssl s_client -starttls smtp -connect office.example.co.kr:25 -servername office.example.co.kr 2>&1 | grep -E "(Verify return code|verify error)"결과:ver..
-
Linux - nmap 포트 스캔
기본 명령어# 특정 호스트의 주요 포트 스캔 (1000개 포트)nmap 192.168.1.1# 특정 포트만 스캔nmap -p 80,443,3306 192.168.1.1# 포트 범위 스캔nmap -p 1-65535 192.168.1.1# 서비스 버전 확인nmap -sV -p 80,443 192.168.1.1옵션 설명# === 포트 지정 ===-p 80 # 80번 포트만 검사 (nginx/apache 확인할 때)-p 80,443,3306 # 여러 포트 동시 검사 (웹+DB 서버 확인)-p 1-1000 # 1번부터 1000번까지 순서대로 검사-p- # 1~65535번 전부 검사 (시간 오래 걸림)-p U:53,T:80 # UD..
-
Database - mariadb, mysql dump(로컬, 원격, docker)
개요서버 작업을 하다 보면 DB 덤프를 떠야 하는 상황이 자주 생긴다.로컬 서버, 원격 서버, 도커 컨테이너 등 환경에 따라 명령어가 달라서 헷갈릴 때가 많아 환경별 덤프 명령어를 정리해보았다.1. 로컬 MariaDB 서버에서 DB 덤프기본 명령어mariadb-dump -u root -p database_name > backup.sql사용 예시# 특정 데이터베이스 덤프mariadb-dump -u root -p my_laravel_db > ~/Desktop/laravel_backup_20250117.sql# 모든 데이터베이스 덤프mariadb-dump -u root -p --all-databases > ~/Desktop/all_databases.sql# 특정 테이블만 덤프mariadb-dump -u roo..
-
Docker - Ubuntu 서버에 docker, docker compose 설치하기
Docker 설치# 필수 패키지 설치sudo apt-get updatesudo apt-get install apt-transport-https ca-certificates curl software-properties-common# Docker GPG key 추가curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg# Docker 저장소 추가echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https..
-
Js - 국내 전화번호 정규식
2021. 12. 07 기준 전기통신번호관리세칙 기반 국내 전화번호 형식 종류구분번호형식세칙 근거설명시내전화0202-XXX(X)-XXXX제7조③, 별표1서울031031-XXX(X)-XXXX제7조③, 별표1경기032032-XXX(X)-XXXX제7조③, 별표1인천033033-XXX(X)-XXXX제7조③, 별표1강원041041-XXX(X)-XXXX제7조③, 별표1충남042042-XXX(X)-XXXX제7조③, 별표1대전043043-XXX(X)-XXXX제7조③, 별표1충북044044-XXX(X)-XXXX제7조③, 별표1세종051051-XXX(X)-XXXX제7조③, 별표1부산052052-XXX(X)-XXXX제7조③, 별표1울산053053-XXX(X)-XXXX제7조③, 별표1대구054054-XXX(X)-XXXX제7조..
-
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..
- 방문자수
전체 방문자
오늘 방문자
어제 방문자