전체 글 257

네트워크 기초 정리 :: traceroute로 경로 추적하기

네트워크 기초 정리 :: traceroute로 경로 추적하기설치 (없는 경우)sudo apt install traceroute -y정상 경로 확인traceroute 8.8.8.8결과: 목적지까지 거쳐가는 라우터(홉)들이 순서대로, 각 홉의 응답 시간과 함께 출력국내/해외 목적지 비교traceroute 8.8.8.8traceroute naver.com결과: 해외(8.8.8.8)는 국제 게이트웨이, 해저 케이블, 상대국 백본망까지 여러 구간을 거치기 때문에 홉 수가 많고 응답 시간도 긴 경향. 국내(naver.com)는 상대적으로 적은 구간만 거쳐서 홉 수가 적고 빠름응답 없는 구간(* * *) 관찰traceroute 8.8.8.8결과: 중간 홉에서 * * * 로 표시되는 구간이 나타날 수 있음. 해당 라우..

Network 2026.09.04

웹서버 성능 비교 정리 :: nginx vs Apache 응답 속도 실측

웹서버 성능 비교 정리 :: nginx vs Apache 응답 속도 실측nginx vs Apache 응답 속도 비교nginx는 비동기 이벤트 기반, Apache는 프로세스/스레드 기반이라는 구조 차이가 있음* Apache (프로세스/스레드 기반)요청이 하나 들어오면, 그 요청을 전담할 프로세스나 스레드를 하나 배정요청 100개가 동시에 오면 프로세스(또는 스레드) 100개가 각각 하나씩 붙어서 처리* nginx (비동기 이벤트 기반): 적은 수의 워커 프로세스(보통 CPU 코어 수만큼)가, 요청 하나에 매달리지 않고 여러 요청을 번갈아가며 처리어떤 요청이 파일 읽기나 DB 응답을 기다리는 동안 그 워커는 놀지 않고 다른 요청을 처리nginx 설치sudo apt install nginx -yApache 설..

Web Server 2026.09.02

SQL 기초 실습 노트 6편: SQL Injection 직접 검증하기

SQL 기초 실습 노트 6편: SQL Injection 직접 검증하기준비: 실습용 테이블과 계정 데이터 만들기sudo mysqlCREATE DATABASE login_test;USE login_test;CREATE TABLE accounts (id INT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(50),password VARCHAR(50)); >> accounts라는 이름의 테이블을 생성id, username, password라는 세 개의 컬럼 생성id 컬럼은 정수형(INT)으로 저장되며, PRIMARY KEY로 설정되어 각 계정을 구분하는 고유한 값이 된다.또한 AUTO_INCREMENT 옵션을 사용하여 새로운 계정 데이터가 추가될 때마다 번호가 자동으로 1씩 증가..

SQL 기초 실습 노트 5편: 백업과 복구

SQL 기초 실습 노트 5편: 백업과 복구백업이 왜 필요한가랜섬웨어 노트에서 다뤘던 것처럼, 데이터가 손상되거나 삭제됐을 때 되돌릴 수 있는 유일한 안전장치가 백업DB는 특히 실수로 WHERE 없이 DELETE/UPDATE 날리는 사고가 자주 나기 때문에, 백업과 복구를 직접 손으로 해보는 게 중요백업 대상 확인USE practice_db;SELECT * FROM students;지금 있는 데이터 상태를 먼저 눈으로 확인해두기데이터베이스 전체 백업 뜨기터미널에서 (mysql 접속 상태가 아니라 일반 쉘에서) 실행mysqldump -u root -p practice_db > practice_db_backup.sql백업 파일이 잘 만들어졌는지 확인ls -l practice_db_backup.sqlcat pr..

SQL 기초 실습 노트 4편: 계정과 권한 관리

SQL 기초 실습 노트 4편: 계정과 권한 관리계정 권한 관리가 왜 중요한가DB에 접속하는 모든 사람이나 애플리케이션이 root처럼 모든 권한을 가지면, 실수든 침해든 한 번에 전체 데이터가 위험해짐최소 권한 원칙을 DB 레벨에서 실제로 적용해보는 게 이번 실습의 핵심현재 계정 목록 확인sudo mysqlSELECT user, host FROM mysql.user;기존에 어떤 계정들이 있는지 먼저 확인읽기 전용 계정 만들기CREATE USER ‘staff_user’@‘localhost’ IDENTIFIED BY ‘Test1234!’;비밀번호는 예시이며, 실제로는 더 복잡하게 설정 권장SELECT 권한만 부여GRANT SELECT ON practice_db.* TO ‘staff_user’@‘localhos..

SQL 기초 실습 노트 3편: 인덱스와 실행계획

SQL 기초 실습 노트 3편: 인덱스와 실행계획인덱스란테이블에서 특정 컬럼으로 데이터를 찾을 때, 처음부터 끝까지 다 뒤지지 않고 빠르게 찾을 수 있게 만든 별도의 자료구조책의 맨 뒤에 있는 찾아보기(색인)와 같은 개념. 색인 없이 책 내용을 처음부터 넘기며 찾는 것과, 색인에서 페이지 번호를 바로 찾아 넘기는 것의 차이실습용 대용량 데이터 준비USE practice_db;대량 데이터용 테이블 생성CREATE TABLE members (id INT PRIMARY KEY AUTO_INCREMENT,email VARCHAR(100),name VARCHAR(50));>> members라는 이름의 테이블을 생성하는 명령어로, 테이블에는 id, email, name이라는 세 개의 컬럼 생성id 컬럼은 정수형(IN..

SQL 기초 실습 노트 2편: JOIN 이해하기

SQL 기초 실습 노트 2편: JOIN 이해하기실습용 테이블 두 개 만들기1편에서 만든 practice_db와 students 테이블 계속 사용 (test, test2, test3 세 명)USE practice_db;수강신청 테이블CREATE TABLE enrollments (id INT PRIMARY KEY AUTO_INCREMENT,student_id INT,course_name VARCHAR(50));>> enrollments라는 이름의 테이블을 생성하고, 학생의 수강 정보를 저장하기 위해 id, student_id, course_name의 세 개의 열을 만듦.id는 기본 키로 설정되어 새로운 데이터가 추가될 때마다 자동으로 1씩 증가하며, student_id는 학생의 번호를 저장하고 course_..

SQL 기초 실습 노트 1편: DB 설치와 기본 CRUD

SQL 기초 실습 노트 1편: DB 설치와 기본 CRUDDB 설치하기sudo apt install mariadb-server -y 설치 확인sudo systemctl status mariadbMariaDB 접속sudo mysql프롬프트가 MariaDB [(none)]> 로 바뀌면 접속 성공데이터베이스 만들기CREATE DATABASE practice_db;만든 데이터베이스 목록에서 확인SHOW DATABASES;데이터베이스 선택해서 사용USE practice_db;테이블 만들기CREATE TABLE students (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50),age INT,major VARCHAR(50));>> students라는 이름의 테이블을 생성하며,..