조회수가 많아요 🫢
-
키크론 키보드 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파일이나 디렉토리의 이름예시권한 | 링크 수 | 소유자 | 그룹 | ..
-
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 호스트..
-
PHP - 인터프리터 언어와 컴파일 언어, 그리고 PHP가 Java처럼 동작하지 않는 이유
인터프리터와 컴파일러, 그리고 PHP가 Java처럼 동작하지 않는 이유프로그래밍 언어는 결국 컴퓨터가 실행할 수 있는 형태로 바뀌어야 한다. 사람이 작성한 소스 코드를 CPU가 바로 이해하는 것은 아니기 때문이다.그래서 모든 언어는 어떤 방식으로든 변환 과정을 거친다.소스 코드→ 번역 또는 해석→ 실행전통적으로 이 변환을 실행 전에 미리 하면 컴파일 방식, 실행하면서 처리하면 인터프리터 방식이라고 부른다. 하지만 현대 언어에서는 이 구분이 아주 깔끔하게 나뉘지 않는다.1. 컴파일 언어와 인터프리터 언어는 절대 분류가 아니다C, C++, Rust, Go 같은 언어는 보통 실행 전에 기계어 실행 파일로 컴파일한다.C/Rust/Go source→ compiler→ machine code binary→ 실행반대..
-
Git - 특정 파일의 변경 사항 추적 제어 (올라간 파일 업데이트 안 하는 방법)
명령어설명예시git update-index --skip-worktree [파일명]지정한 파일에 대해 skip-worktree 플래그를 설정합니다. 로컬 변경 사항을 Git이 무시하도록 합니다.git update-index --skip-worktree config.txtgit update-index --no-skip-worktree [파일명]설정된 skip-worktree 플래그를 해제하여, 해당 파일의 변경 사항을 다시 추적하도록 합니다.git update-index --no-skip-worktree config.txtgit ls-files -v현재 추적 중인 파일들의 상태를 보여줍니다. `H`는 일반 상태, `S`는 skip-worktree가 설정된 파일입니다.git ls-files -v
-
git - GitHub 꾸미기 관련 서비스 모음
1. 상단바깃허브 URL - https://github.com/kyechan99/capsule-render예시 코드2. 깃허브 스택깃허브 URL - https://github.com/anuraghazra/github-readme-stats예시 코드3. 깃허브 커밋 스택코드 생성 ..
-
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..
-
vue - cors 에러 proxy 사용(vite)
문제발생vue로 spring 서버의 데이터를 가져오는 도중 개발자의 숙원 cors 에러가 발생했다.vite.config.js 작성import { defineConfig } from "vite"; // Vite 설정을 정의하기 위한 헬퍼 함수 가져오기import vue from "@vitejs/plugin-vue"; // Vue 플러그인 가져오기export default defineConfig({ plugins: [ vue(), // Vue 플러그인 추가 ], server: { proxy: { '/api': { target: 'https://서버.com', // 프록시 요청을 보낼 대상 URL ..
-
tailwind - important
tailwind class에 !important 적용 시키는 법 클래스 명 앞에 느낌표를 붙이면 된다. See the Pen Untitled by 김채민 (@aleph-kim) on CodePen.
-
Laravel - 큐
1. 문제는 "느린 코드"가 아니라 "워커 점유 시간"이다PHP 웹 애플리케이션에서 요청은 보통 nginx를 거쳐 PHP-FPM worker로 전달된다. FPM worker 하나는 한 번에 요청 하나를 처리한다. 응답을 돌려주기 전까지 그 worker는 다른 요청을 받을 수 없다.동시 처리 가능한 요청 수= 사용 가능한 FPM worker 수문제는 평균 응답 시간이 아니다. 문제는 일부 요청이 갑자기 오래 걸리는 경우다.예를 들어 평소 50ms로 끝나던 엔드포인트가 특정 입력에서 2분 동안 실행된다고 해보자. 대량 메일 발송, 외부 API 폴링, 엑셀 리포트 생성, 대규모 데이터 집계 같은 작업이 여기에 해당한다.이런 요청이 몇 개만 겹쳐도 FPM worker가 오래 묶인다. 그러면 원래 빠르게 끝날 수..
최근에 올렸어요💡
-
Laravel - 큐
1. 문제는 "느린 코드"가 아니라 "워커 점유 시간"이다PHP 웹 애플리케이션에서 요청은 보통 nginx를 거쳐 PHP-FPM worker로 전달된다. FPM worker 하나는 한 번에 요청 하나를 처리한다. 응답을 돌려주기 전까지 그 worker는 다른 요청을 받을 수 없다.동시 처리 가능한 요청 수= 사용 가능한 FPM worker 수문제는 평균 응답 시간이 아니다. 문제는 일부 요청이 갑자기 오래 걸리는 경우다.예를 들어 평소 50ms로 끝나던 엔드포인트가 특정 입력에서 2분 동안 실행된다고 해보자. 대량 메일 발송, 외부 API 폴링, 엑셀 리포트 생성, 대규모 데이터 집계 같은 작업이 여기에 해당한다.이런 요청이 몇 개만 겹쳐도 FPM worker가 오래 묶인다. 그러면 원래 빠르게 끝날 수..
-
PHP - 인터프리터 언어와 컴파일 언어, 그리고 PHP가 Java처럼 동작하지 않는 이유
인터프리터와 컴파일러, 그리고 PHP가 Java처럼 동작하지 않는 이유프로그래밍 언어는 결국 컴퓨터가 실행할 수 있는 형태로 바뀌어야 한다. 사람이 작성한 소스 코드를 CPU가 바로 이해하는 것은 아니기 때문이다.그래서 모든 언어는 어떤 방식으로든 변환 과정을 거친다.소스 코드→ 번역 또는 해석→ 실행전통적으로 이 변환을 실행 전에 미리 하면 컴파일 방식, 실행하면서 처리하면 인터프리터 방식이라고 부른다. 하지만 현대 언어에서는 이 구분이 아주 깔끔하게 나뉘지 않는다.1. 컴파일 언어와 인터프리터 언어는 절대 분류가 아니다C, C++, Rust, Go 같은 언어는 보통 실행 전에 기계어 실행 파일로 컴파일한다.C/Rust/Go source→ compiler→ machine code binary→ 실행반대..
-
PHP - SAPI
개요PHP 애플리케이션은 같은 코드베이스라도 항상 같은 방식으로 실행되지 않는다. 웹 요청은 보통 PHP-FPM worker가 처리하고, php artisan 같은 명령은 CLI 프로세스가 처리한다. 로컬 개발에서 사용하는 php artisan serve는 또 다른 실행 방식인 PHP built-in server를 사용한다.이 차이를 이해하려면 먼저 SAPI를 분리해서 봐야 한다. SAPI는 PHP 엔진이 외부 세계와 만나는 실행 인터페이스다. 즉 PHP 코드 자체가 달라지는 것이 아니라, PHP 엔진에 요청을 어떻게 전달하고 결과를 어디로 내보낼지가 달라진다.1. SAPI란?SAPI는 PHP 문맥에서 Server API, 또는 Server Application Programming Interface로 ..
-
기타 - 아키텍처의 종류
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시간) 이상으로 올려도 ..
- 방문자수
전체 방문자
오늘 방문자
어제 방문자