본문 바로가기
반응형

sqlite5

[PHP] 파일 업로드 시스템 만들기 — 다중 업로드, 파일 교체, 다운로드 스트리밍 왜 만들었나지금까지 PHP로 로그인, 게시판, REST API를 만들었다. 그런데 실제 서비스에서 빠지지 않는 기능이 하나 있다. 파일 업로드다. 단순히 $_FILES로 받아서 저장하면 되는 것 같지만, 실제로는 주의해야 할 것들이 꽤 있다.MIME 타입을 클라이언트 제출값이 아니라 서버에서 직접 검사해야 한다저장 파일명을 원본 그대로 쓰면 경로 조작 공격에 노출된다다중 파일 업로드 시 $_FILES 배열 구조가 직관적이지 않다파일 교체는 기존 파일 삭제 + 새 파일 저장 + DB 업데이트가 원자적으로 돼야 한다이 튜토리얼은 다중 파일 업로드, 파일명 수정 + 선택적 파일 교체, 다운로드 스트리밍, 삭제까지 완전한 파일 관리 시스템을 구현한다.기술 상세아키텍처28-php-file-upload/├── db.. 2026. 3. 5.
[PHP] REST API 서버 만들기 — 프레임워크 없이 순수 PHP로 CRUD API 구현 왜 만들었나지난 두 편에서 PHP로 로그인 시스템과 게시판을 만들었다. 둘 다 서버에서 HTML을 렌더링하는 전통적인 방식이었다. 이번엔 반대로, JSON만 응답하는 REST API 서버를 만든다.프론트엔드가 React든 Vue든 모바일 앱이든, API 서버는 입력받고 처리하고 JSON을 돌려주는 역할만 한다. 프레임워크 없이 PHP 내장 기능만으로 이걸 구현하면, 라우팅이 어떻게 동작하는지, HTTP 메서드가 왜 5가지인지, 상태 코드가 왜 중요한지 직접 체감할 수 있다.기술 상세아키텍처27-php-rest-api/├── index.php # 라우터 + 핸들러 (단일 진입점)├── db.php # PDO SQLite 싱글턴├── .htaccess # Apache 리라이트 (php -S .. 2026. 3. 4.
[PHP] 게시판 CRUD 만들기 — SQLite, CSRF 방어, 소유권 검사, 페이지네이션 왜 만들었나지난 글에서 PHP 로그인/회원가입 시스템을 만들었다. 그런데 인증만 있고 정작 뭔가를 올릴 곳이 없으니 반쪽짜리였다. 게시판은 웹 개발의 가장 고전적인 CRUD 예제이면서도, 실전에서 반드시 부딪히는 패턴들이 압축돼 있다.인증된 사용자만 쓸 수 있는 기능 (작성/수정/삭제)남의 글을 못 건드리게 하는 소유권 검사CSRF 공격 방어페이지네이션 (글이 많아지면 한 번에 다 보여줄 수 없다)SQLite를 그대로 쓰고 MySQL로 전환할 때는 DSN 한 줄만 바꾸는 구조로 설계했다.기술 상세아키텍처26-php-board/├── db.php # PDO 싱글턴, 테이블 auto-create├── auth.php # 세션, CSRF, current_user()├── header.php .. 2026. 3. 4.
[PHP] 로그인/회원가입 시스템 만들기 — PDO SQLite, 세션, CSRF 방어 왜 만들었나인증 시스템은 모든 웹 앱의 기본이다. 직접 구현해보면 세션이 어떻게 동작하는지, 비밀번호를 왜 해시로 저장해야 하는지, CSRF 공격이 무엇인지 체감할 수 있다.PHP는 세션 관리, DB 연동, 폼 처리를 기본으로 제공한다. 이번 튜토리얼은 MySQL 서버 없이 SQLite + PDO로 구현한다. 파일 하나로 DB가 되기 때문에 서버 설정 없이 php -S로 바로 실행할 수 있다.앱 구조25-php-login/├── index.php # 진입점 (로그인 여부에 따라 리다이렉트)├── register.php # 회원가입 (GET: 폼, POST: 처리)├── login.php # 로그인 (GET: 폼, POST: 처리)├── dashboard.php # 보호된.. 2026. 3. 4.
[Flutter] 가계부 앱 만들기 — sqflite로 로컬 저장 구현 Flutter + sqflite 가계부 앱 만들기 구현하기왜 만들었나React나 Next.js 프로젝트를 계속 쌓아왔는데, 이번엔 모바일로 넘어간다. Flutter는 iOS/Android를 동시에 타겟하는 크로스플랫폼 프레임워크다. Dart 언어가 낯설긴 하지만, 기본 구조는 React 컴포넌트 개념과 비슷하다.첫 Flutter 앱 주제로 가계부를 선택한 이유는 간단하다. 수입/지출 CRUD + 로컬 저장이 Flutter 입문에서 다뤄야 할 핵심 패턴을 모두 포함한다.구현한 것:수입/지출 추가 (카테고리, 금액, 메모, 날짜)홈 화면: 잔액/수입/지출 요약 + 날짜별 거래 목록SQLite 로컬 저장 (sqflite)거래 삭제 (다이얼로그 확인)기술 스택항목선택이유프레임워크Flutter 3.38.5iOS/.. 2026. 3. 3.
반응형