Gin 블로그 앱 Part 2: JWT 보호된 CRUD 구현
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
- Go 언어 및 Gin 프레임워크를 사용한 웹 개발자
- JWT 인증과 RESTful API 설계 경험자
- 중간 수준의 백엔드 개발자
핵심 요약
- JWT 인증으로 보호된 CRUD 기능 구현
- CreatePost
, UpdatePost
, DeletePost
핸들러에서 JWTAuthMiddleware()
적용
- GORM을 활용한 데이터베이스 연동
- models.Post
구조체 정의 및 db.AutoMigrate
자동 마이그레이션
- 소유자만 수정/삭제 가능하도록 구현
- post.UserID == updatedPost.UserID
또는 payload.UserID
로 인증 검증
섹션별 세부 요약
1. 모델 정의 및 자동 마이그레이션
models/post.go
에서Post
구조체 정의:
- ID
, Title
, Content
, UserID
, CreatedAt
필드 포함
- gorm:"primaryKey"
태그로 기본키 설정
db.AutoMigrate(&models.Post{})
로 데이터베이스 자동 마이그레이션
2. 게시물 생성 핸들러
CreatePost
함수:
- c.ShouldBindJSON
로 요청 데이터 바인딩
- config.DB.First(&user, post.UserID)
로 사용자 존재 검증
- config.DB.Create(&post)
로 게시물 생성 후 StatusCreated
응답
3. 게시물 조회 핸들러
GetPosts
함수:
- config.DB.Preload("User").Find(&posts)
로 모든 게시물 및 사용자 정보 조회
- PostResponse
구조체로 응답 데이터 포맷팅 (사용자 정보 포함)
4. 게시물 상세 조회
GetPost
함수:
- c.Param("id")
로 게시물 ID 추출
- config.DB.Preload("User").First(&post, id)
로 특정 게시물 조회
- PostResponse
구조체를 사용해 사용자 정보 포함 응답
5. 게시물 수정/삭제 보안 처리
UpdatePost
및DeletePost
핸들러:
- post.UserID != updatedPost.UserID
또는 payload.UserID
로 소유자 인증 검증
- 실패 시 StatusUnauthorized
응답 반환
6. 라우트 설정
routes/routes.go
에서 JWT 미들웨어 적용:
- /api/posts
경로에 JWTAuthMiddleware()
적용 (POST, PUT, DELETE)
- /posts
경로는 공개 (GET)
결론
- JWT 인증으로 보호된 CRUD 구현 시 주의사항:
- JWTAuthMiddleware()
미들웨어를 보호된 경로에 반드시 적용
- post.UserID
검증으로 소유자만 수정/삭제 가능하도록 엄격히 구현
- GORM
을 사용해 데이터베이스 연동 시 AutoMigrate
로 스키마 자동 생성
- Part 3 예고: 검색/필터, 페이징, 사용자별 대시보드, 배포 팁 포함