AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

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. 게시물 수정/삭제 보안 처리

  • UpdatePostDeletePost 핸들러:

- 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 예고: 검색/필터, 페이징, 사용자별 대시보드, 배포 팁 포함