diff --git a/resources/views/academy/backend-dev.blade.php b/resources/views/academy/backend-dev.blade.php new file mode 100644 index 00000000..544d9c26 --- /dev/null +++ b/resources/views/academy/backend-dev.blade.php @@ -0,0 +1,1282 @@ +@extends('layouts.app') + +@section('title', '백엔드 개발 백과사전') + +@push('styles') + +@endpush + +@section('content') +
서버, 데이터베이스, API부터 배포까지 — 비개발자도 이해하는 백엔드 가이드
++ 백엔드(Back-end)란 사용자 눈에 보이지 않는 서버 측 영역이다. + 데이터를 저장하고, 비즈니스 규칙을 처리하고, 보안을 관리하고, API를 통해 프론트엔드에 데이터를 전달하는 역할을 한다. +
+비유: 공장의 생산라인
++ 백엔드는 공장의 생산라인이다. 고객은 완성된 제품(화면)만 보지만, + 그 뒤에서는 원자재(데이터) 입고, 가공(비즈니스 로직), 품질검사(유효성 검증), 출하(API 응답)가 이루어진다. + 프론트엔드가 매장(쇼룸)이라면, 백엔드는 그 뒤의 공장 전체다. +
+프론트엔드 (매장)
+사용자가 보는 화면
HTML, CSS, JavaScript
버튼, 폼, 메뉴, 테이블
백엔드 (공장)
+서버에서 처리하는 로직
PHP, Laravel, MySQL
데이터 저장, 인증, API
1. 데이터 저장/관리
+주문, 고객, 제품 정보를 데이터베이스에 저장하고 필요할 때 꺼내온다.
+2. 비즈니스 로직 처리
+견적 계산, 재고 차감, 할인 적용 등 업무 규칙을 코드로 구현한다.
+3. 보안/인증
+로그인, 권한 확인, 비밀번호 암호화 등 보안을 책임진다.
+4. API 제공
+프론트엔드(앱, 웹)에 데이터를 전달하는 창구를 만들어 제공한다.
++ SAM 시스템의 백엔드: + SAM은 API 서버(Laravel)가 백엔드를 담당한다. MNG(관리자 웹)와 React 앱이 API를 통해 데이터를 받고, + MySQL 데이터베이스에 주문·견적·재고 등 모든 데이터가 저장된다. +
+3계층 아키텍처 — 브라우저, API 서버, 데이터베이스
+비유: 편지 주고받기
++ 클라이언트(브라우저)가 서버에 편지(요청)를 보낸다. 편지 봉투에는 받는 주소(URL), 요청 종류(GET/POST), 내용이 들어 있다. + 서버는 편지를 읽고 처리한 뒤, 답장(응답)을 보낸다. 답장에는 상태 코드(200 성공, 404 없음)와 데이터가 들어 있다. +
+| HTTP 메서드 | +역할 | +비유 | +
|---|---|---|
| GET | +데이터 조회 | +서류 열람 요청 | +
| POST | +데이터 생성 | +새 주문서 제출 | +
| PUT | +데이터 전체 수정 | +주문서 전체 다시 작성 | +
| DELETE | +데이터 삭제 | +주문 취소 | +
+ SAM의 API 통신: + SAM은 HTTPS로 암호화된 통신을 사용한다. API 서버 주소는 별도 도메인으로 운영되며, + MNG와 React 앱이 REST API를 통해 데이터를 주고받는다. +
+요청-응답 사이클 — 클라이언트와 서버의 대화
+비유: 엑셀 파일
++ 관계형 데이터베이스는 잘 정리된 엑셀 파일과 같다. + 각 시트(테이블)에 제목 행(컬럼)이 있고, 각 행(레코드)에 데이터가 들어간다. + 시트 간에 "주문번호"같은 공통 항목으로 연결(관계)할 수 있다. +
+RDB (관계형)
+NoSQL (비관계형)
++ 데이터베이스의 핵심 개념 세 가지: PK(Primary Key)는 각 행을 고유하게 식별하는 번호(사원번호), + FK(Foreign Key)는 다른 테이블을 참조하는 연결고리(부서코드), + 인덱스는 빠른 검색을 위한 색인이다. +
+
+ SAM의 데이터베이스:
+ SAM은 MySQL 8.0을 사용하며, tenant_id 컬럼으로 회사(테넌트)별 데이터를 격리한다.
+ 주문, 견적, 품목, 사용자 등 모든 데이터가 관계형 테이블에 저장된다.
+
ERD 테이블 관계 — 주문, 주문항목, 품목
+비유: 공장 부서 분리
++ Model(모델)은 자재 창고 — 데이터를 보관하고 꺼내준다. + View(뷰)는 쇼룸 — 완성품을 예쁘게 진열한다. + Controller(컨트롤러)는 공장장 — 주문을 받아 창고에서 자재를 꺼내고, 가공해서, 쇼룸에 진열하도록 지시한다. +
+Model (모델)
+데이터 = DB 테이블
데이터 조회·저장·수정
View (뷰)
+화면 = HTML 템플릿
데이터를 사용자에게 표시
Controller (컨트롤러)
+중재자 = 비즈니스 로직
요청 처리, 모델·뷰 연결
Artisan 주요 명령어
+php artisan migrate — DB 테이블 생성/수정
+php artisan make:controller — 컨트롤러 생성
+php artisan make:model — 모델 생성
+php artisan cache:clear — 캐시 초기화
+php artisan tinker — 대화형 PHP 콘솔
++ SAM의 Laravel: + SAM은 Laravel 11 + PHP 8.3을 사용한다. MNG와 API 모두 Laravel 프레임워크 기반이며, + Eloquent ORM으로 MySQL 데이터를 다루고, Artisan 명령어로 마이그레이션·캐시 관리를 한다. +
+MVC 흐름도 — Route → Controller → Model → View
+비유: 주문 창구
++ API는 주문 창구다. 메뉴판(API 문서)을 보고 정해진 양식(JSON)으로 주문(요청)하면, + 주방(서버)에서 요리(처리)해서 음식(데이터)을 내준다. + 아무렇게나 주문하면 안 되고, 정해진 형식을 따라야 한다. +
+| 메서드 | +URL | +동작 | +
|---|---|---|
| GET | +/api/v1/orders | +주문 목록 조회 | +
| GET | +/api/v1/orders/123 | +주문 #123 상세 조회 | +
| POST | +/api/v1/orders | +새 주문 생성 | +
| PUT | +/api/v1/orders/123 | +주문 #123 수정 | +
| DELETE | +/api/v1/orders/123 | +주문 #123 삭제 | +
+ SAM의 API 인증:
+ SAM API는 /api/v1/ 접두사를 사용하고, Laravel Sanctum으로 토큰 인증을 처리한다.
+ React 앱에서 로그인하면 토큰을 발급받아 이후 모든 API 요청에 포함한다.
+
REST API 구조 — URL 분해와 JSON 응답
+비유: 도장카드 vs 출입배지
++ 세션은 도장카드다. 가게(서버)에 내 도장카드를 보관해두고, 올 때마다 번호표(세션ID)만 보여준다. 가게가 기록을 관리한다. + 토큰은 출입배지다. 내가 배지(JWT)를 가지고 다니며, 입장할 때마다 배지를 보여준다. 건물(서버)은 배지 진위만 확인한다. +
+세션 (Session)
+토큰 (Token)
+SQL Injection
+사용자 입력에 악의적 SQL을 삽입하는 공격
+방어: 파라미터 바인딩 (Eloquent 자동 처리)
+CSRF
+사용자 모르게 악의적 요청을 보내는 공격
+방어: CSRF 토큰 검증 (Laravel 자동 처리)
++ SAM의 보안: + SAM MNG는 세션 기반 인증 + CSRF 토큰으로 보안을 처리하고, + API 서버는 Sanctum 토큰 인증을 사용한다. 비밀번호는 bcrypt로 해싱하여 저장한다. +
+인증 비교 — 세션 방식 vs 토큰 방식
+비유: 회사 규정
++ 비즈니스 로직은 회사 규정이다. "견적 금액이 100만원 이상이면 팀장 승인 필요", + "재고가 0이면 주문 불가" 같은 규칙을 코드로 구현한 것이다. + 규정이 바뀌면 서비스 클래스만 수정하면 된다. +
+비유: 은행 이체
++ A 계좌에서 10만원을 빼고 B 계좌에 10만원을 넣는 이체를 생각해보자. + A에서 빼기는 성공했는데 B에 넣기가 실패하면? 돈이 사라진다! + 트랜잭션은 두 작업을 하나로 묶어 "둘 다 성공하거나, 둘 다 취소"하도록 보장한다. +
++ SAM의 비즈니스 로직: + SAM은 견적 계산, 주문 처리, 재고 관리 등의 비즈니스 로직을 서비스 클래스에서 처리한다. + 주문 생성 시 재고 차감, 이력 기록 등을 트랜잭션으로 묶어 데이터 무결성을 보장한다. +
+트랜잭션 — 성공(commit)과 실패(rollback)
+비유: 대기표 시스템
++ 동기 처리는 은행 창구에서 줄 서는 것 — 앞 사람이 끝날 때까지 기다려야 한다. + 비동기 처리는 대기표를 받는 것 — 번호표를 받고 자기 볼일을 보다가, 호출되면 처리한다. + 이메일 100통을 보낼 때, 동기면 30초 기다려야 하지만 비동기(큐)면 즉시 "발송 예약됨"이 표시된다. +
+동기 처리 (Synchronous)
+순서대로 하나씩 처리
앞 작업 끝나야 다음 시작
사용자가 기다려야 함
비동기 처리 (Asynchronous)
+큐에 넣고 즉시 응답
워커가 백그라운드에서 처리
사용자는 기다리지 않음
+ SAM의 큐 활용: + SAM은 알림톡 발송, PDF 생성, 이메일 발송 등을 큐로 비동기 처리한다. + Docker 컨테이너 안에서 Queue Worker가 상시 실행되며, Scheduler로 정기 작업을 자동 실행한다. +
+큐 처리 — 요청 → 큐 → 워커 → 완료
+비유: 책상 위 필기도구
++ 자주 쓰는 볼펜과 메모지는 책상 위(캐시)에 놓아둔다. 필요할 때 바로 꺼내 쓸 수 있다. + 가끔 쓰는 도구는 서랍(데이터베이스)에 보관한다. 서랍을 열고 찾는 데 시간이 더 걸린다. + 캐시는 이처럼 자주 쓰는 데이터를 가까이 두어 빠르게 접근하는 기법이다. +
+N+1 문제 (느림)
+1. SELECT * FROM orders
+2. SELECT * FROM items WHERE order_id=1
+3. SELECT * FROM items WHERE order_id=2
+... (N번 반복)
+총 101번 쿼리!
+Eager Loading (빠름)
+1. SELECT * FROM orders
+2. SELECT * FROM items WHERE order_id IN (1,2,...)
+총 2번 쿼리!
++ SAM의 성능 최적화: + SAM은 config, route 캐싱으로 응답 속도를 최적화하고, + Eager Loading으로 N+1 문제를 방지한다. DB 인덱스를 적절히 설정하여 대량 데이터 조회 성능을 확보한다. +
+캐시 계층 — 캐시 히트와 캐시 미스
+비유: 시험생산 → 품질검사 → 출하
++ 공장에서 신제품을 바로 출하하지 않는다. + 시험생산(Local)에서 만들어보고, 품질검사(Staging)를 통과하면, + 비로소 출하(Production)한다. + 소프트웨어도 마찬가지로 환경을 분리하여 안전하게 배포한다. +
+Local (개발)
+개발자 PC
자유롭게 실험
Docker 컨테이너
Staging (테스트)
+운영과 동일한 환경
최종 검증
실 데이터 없음
Production (운영)
+실제 서비스
실 사용자 접속
장애 시 즉시 대응
Git 브랜치 전략
+develop — 개발 진행 브랜치main — 운영 배포 브랜치feature/* — 기능 개발 브랜치hotfix/* — 긴급 수정 브랜치로그와 모니터링
+storage/logs/laravel.log — 앱 로그nginx error.log — 웹서버 로그php artisan queue:work — 큐 상태docker ps — 컨테이너 상태+ SAM의 배포: + SAM은 Docker Compose로 로컬 개발 환경(MNG, API, MySQL, Nginx)을 구성하고, + 운영 서버에는 직접 배포한다. develop 브랜치에서 개발을 진행하며, + 코드 포맷팅(Pint), 캐시 클리어, 마이그레이션을 거쳐 배포한다. +
+배포 파이프라인 — 코드 → Git → 빌드 → 서버
+ + ++ 백엔드는 "사용자 눈에 보이지 않는 서버의 세계"다. + HTTP로 요청을 받아, 데이터베이스에서 데이터를 꺼내고, 비즈니스 로직을 처리하여 API로 응답한다. + Laravel 프레임워크가 MVC 패턴, ORM, 미들웨어, 큐, 캐시 등 핵심 기능을 제공하고, + 세션·토큰으로 인증, 트랜잭션으로 데이터 무결성, Eager Loading으로 성능을 보장한다. + Docker로 개발 환경을 통일하고, Git으로 버전을 관리하여 안전하게 배포한다. + SAM은 이 모든 백엔드 기술을 활용하여 ERP/MES 통합 시스템을 운영하고 있다. +
+