공부 로드맵과 다음 개선
이 프로젝트는 이미 AI로 어느 정도 만들어졌기 때문에, 처음부터 직접 만든 사람처럼 이해하려면 동작 흐름을 따라 읽는 방식이 좋습니다.
1단계: URL 흐름 익히기
먼저 routes/web.php를 봅니다.
공부 질문:
/posts/{slug}는 어디로 가는가?
/categories/{slug}는 어디로 가는가?
/admin/posts는 누가 처리하는가?
이 질문에 답할 수 있으면 라우팅의 큰 그림이 잡힙니다.
2단계: 공개 화면 읽기
다음 파일을 봅니다.
app/Http/Controllers/PostController.php
resources/views/posts/index.blade.php
resources/views/posts/show.blade.php
공부 질문:
공개 글만 가져오는 조건은 어디 있는가?
카테고리별 글 목록은 어떤 쿼리로 만들어지는가?
글 상세에서 본문은 왜 {!! !!}로 출력하는가?
3단계: 관리자 글 CRUD 읽기
다음 파일을 봅니다.
app/Http/Controllers/Admin/PostController.php
resources/views/admin/posts/index.blade.php
resources/views/admin/posts/create.blade.php
resources/views/admin/posts/edit.blade.php
공부 질문:
저장 버튼을 누르면 어떤 URL로 가는가?
store()와 update()의 차이는 무엇인가?
slug는 왜 수정할 때 바꾸지 않는가?
태그는 어느 테이블에 연결되는가?
4단계: DB 관계 익히기
다음 파일을 봅니다.
app/Models/Post.php
app/Models/Category.php
app/Models/Tag.php
database/migrations
공부 질문:
Post와 Category는 어떤 관계인가?
Post와 Tag는 왜 post_tag 테이블이 필요한가?
fillable은 왜 필요한가?
casts는 어떤 편의를 주는가?
5단계: 에디터 이해하기
다음 파일을 봅니다.
resources/js/editor.js
resources/views/admin/posts/create.blade.php
resources/views/admin/posts/edit.blade.php
app/Http/Controllers/ImageController.php
공부 질문:
왜 div#editor와 textarea#content가 둘 다 있는가?
editor.getHTML()은 언제 실행되는가?
이미지를 붙여넣으면 어떤 URL로 업로드되는가?
CSRF 토큰은 왜 필요한가?
6단계: 권한 이해하기
다음 파일을 봅니다.
routes/web.php
app/Http/Middleware/IsAdmin.php
app/Models/User.php
database/migrations/2026_05_20_130239_add_is_admin_to_users_table.php
공부 질문:
로그인만 한 사용자는 /admin에 들어갈 수 있는가?
is_admin은 어디서 검사하는가?
403 에러는 언제 발생하는가?
다음 개선 후보
현재 코드 기준으로 다음 기능을 추가하면 공부가 많이 됩니다.
1. 태그별 글 목록
현재 글 상세에는 태그 링크가 있습니다.
<a href="/tags/{{ $tag->slug }}">
하지만 /tags/{slug} 라우트는 아직 없습니다.
추가하면 배울 수 있는 것:
새 라우트 만들기
Tag 모델로 글 조회하기
posts.index 재사용하기
activeTag 상태 만들기
2. 관리자 여부 화면 조건 개선
현재 헤더는 로그인 상태면 관리자 링크를 보여줍니다.
더 정확하게 하려면 관리자일 때만 보여주도록 바꿀 수 있습니다.
예상 조건:
@auth
@if(auth()->user()->isAdmin())
<a href="/admin/posts">관리자</a>
@endif
@endauth
3. 글 검색
제목이나 요약으로 검색하는 기능을 만들 수 있습니다.
배울 수 있는 것:
query string
request('q')
where like 검색
페이지네이션에서 검색어 유지
4. 썸네일 기능
posts 테이블에는 thumbnail 컬럼이 있지만 현재 작성 폼에서 적극적으로 쓰이지 않습니다.
추가하면 배울 수 있는 것:
파일 업로드
이미지 미리보기
목록 카드 UI
storage 경로 저장
5. 본문 HTML 정제
현재 본문은 {!! $post->content !!}로 출력됩니다.
관리자만 작성한다면 괜찮지만, 나중에 사용자 입력이 늘어나면 HTML 정제가 필요합니다.
배울 수 있는 것:
XSS
HTML Sanitizer
신뢰할 수 있는 입력과 없는 입력의 차이
공부할 때 기억할 문장
Laravel은 URL을 Controller로 보내고,
Controller는 Model로 DB를 다루고,
View는 Blade로 화면을 만든다.
이 문장을 계속 실제 파일에 대입해보면, AI가 만든 코드도 점점 "내가 읽을 수 있는 코드"가 됩니다.