{"id":28500838,"url":"https://github.com/devnogi/devnogi-auth-server","last_synced_at":"2026-04-26T20:31:17.648Z","repository":{"id":297919102,"uuid":"996873458","full_name":"devnogi/devnogi-auth-server","owner":"devnogi","description":"데브노기 통합 인증 마이크로서비스","archived":false,"fork":false,"pushed_at":"2026-03-29T13:09:54.000Z","size":216,"stargazers_count":1,"open_issues_count":1,"forks_count":1,"subscribers_count":0,"default_branch":"dev","last_synced_at":"2026-03-29T15:43:58.627Z","etag":null,"topics":["java","jwt","mabinogi","msa","spring-boot"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/devnogi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-05T15:38:26.000Z","updated_at":"2026-03-29T13:09:56.000Z","dependencies_parsed_at":"2025-07-04T13:21:37.451Z","dependency_job_id":"47ff1f0a-3a68-44c7-bcfa-406622c93059","html_url":"https://github.com/devnogi/devnogi-auth-server","commit_stats":null,"previous_names":["devnogi/devnogi-auth-server"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/devnogi/devnogi-auth-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devnogi%2Fdevnogi-auth-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devnogi%2Fdevnogi-auth-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devnogi%2Fdevnogi-auth-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devnogi%2Fdevnogi-auth-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devnogi","download_url":"https://codeload.github.com/devnogi/devnogi-auth-server/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devnogi%2Fdevnogi-auth-server/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32312174,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T19:15:34.056Z","status":"ssl_error","status_checked_at":"2026-04-26T19:15:15.467Z","response_time":129,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java","jwt","mabinogi","msa","spring-boot"],"created_at":"2025-06-08T15:07:51.614Z","updated_at":"2026-04-26T20:31:17.643Z","avatar_url":"https://github.com/devnogi.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🎮 Devnogi Auth Server (DAS)\n\n마비노기 경매장 거래 내역 조회 및 통계 서비스, **Devnogi**의 **인증 및 인가(Authentication \u0026 Authorization) 서버**입니다.\n\n## 1\\. 개요 (Overview)\n\n본 프로젝트는 [마비노기 경매장 거래 내역 조회 및 통계 서비스](https://www.google.com/search?q=https://github.com/example/devnogi-project) (가상)의\n일부분으로, 마이크로서비스 아키텍처(MSA)에서 **사용자 인증 및 인가**를 전담하는 백엔드 서버입니다.\n\n주요 역할은 다음과 같습니다:\n\n* 표준 이메일 회원가입 및 로그인 처리\n* OAuth 2.0을 이용한 소셜 로그인 (Google, Kakao, Naver) 연동\n* 인증 완료 후, 서비스 전반에서 사용될 JWT(Access Token, Refresh Token) 발급\n* 사용자 정보(프로필, 닉네임 등) 관리 및 회원 탈퇴\n* Kafka를 통해 사용자 정보 변경 사항(예: 닉네임 변경)을 다른 서비스(커뮤니티, 알림 등)에 전파(Eventual Consistency)\n\n## 2\\. 주요 기능 (Key Features)\n\n본 인증 서버의 핵심 기능입니다.\n\n* **🔐 표준 인증 (Standard Auth)**\n\n    * 이메일, 비밀번호, 닉네임 기반의 회원가입\n    * 이메일 및 닉네임 중복 확인 API 제공\n    * Bcrypt를 사용한 비밀번호 암호화\n    * 로그인 성공 시 **JWT (Access/Refresh Token)** 를 `HttpOnly` 쿠키로 발급\n\n* **✨ 소셜 로그인 (Social Login)**\n\n    * **OAuth 2.0** 클라이언트를 통한 소셜 로그인 연동\n    * 지원 프로바이더: **Google, Kakao, Naver**\n    * 최초 소셜 로그인 시, 추가 정보(닉네임, 프로필 이미지)를 입력받아 회원가입 완료\n\n* **👤 사용자 관리 (User Management)**\n\n    * 인증된 사용자의 프로필 정보(닉네임, 프로필 이미지) 조회 및 수정\n    * 회원 탈퇴 (계정 `INACTIVE` 상태 변경)\n    * 프로필 이미지 업로드 시 **AWS S3** 사용\n\n* **🛡️ 인가 및 보안 (Authorization \u0026 Security)**\n\n    * Spring Security 기반의 인증/인가 파이프라인 구축\n    * `UserAuthenticationFilter`를 통해 매 요청 시 쿠키의 JWT를 검증하여 사용자 인증\n    * `SUPER_ADMIN`, `ADMIN`, `USER` 역할(Role) 기반의 API 접근 제어\n    * `@ActiveUserRequired` AOP 어노테이션을 통해 비활성화/탈퇴 유저의 API 접근 차단\n\n* **📨 비동기 이벤트 발행 (Async Event Publishing)**\n\n    * 사용자 정보(닉네임, 프로필) 변경 시, **Kafka**를 통해 `USER_INFO_UPDATE_EVENT` 메시지 발행\n    * (이를 통해 다른 마이크로서비스가 사용자 정보의 변경 사항을 구독하여 동기화할 수 있습니다.)\n\n## 3\\. 기술 스택 (Tech Stack)\n\n* **Backend**: Kotlin, Spring Boot 3.5.0, Spring Security, Spring Data JPA (Hibernate)\n* **Authentication**: JWT, OAuth2 Client (Google, Naver, Kakao)\n* **Database**: MySQL, Flyway (DB 마이그레이션), Redis\n* **Async**: Kafka (이벤트 발행)\n* **Storage**: AWS S3 (프로필 이미지 저장)\n* **API Docs**: SpringDoc (Swagger UI)\n* **DevOps**: Docker, Docker Compose, Gradle\n* **Testing**: JUnit5, Mockito\n\n## 4\\. DB 스키마 (Database Schema)\n\n`src/main/resources/db/migration`의 Flyway 스크립트를 기반으로 한 주요 테이블입니다.\n\n* `users`: 핵심 사용자 정보 (이메일, 비밀번호, 닉네임, 프로필 URL, 상태, role\\_id)\n* `roles`: 역할 정의 (예: SUPER\\_ADMIN, ADMIN, USER)\n* `oauth_users`: `users` 테이블과 소셜 로그인 정보(provider, provider\\_user\\_id)를 매핑\n* `refresh_tokens`: JWT 리프레시 토큰 저장 (로그아웃 및 토큰 탈취 대응)\n* `account_locks`: 로그인 실패 횟수 및 계정 잠금 관리\n* `password_history`: 비밀번호 변경 이력 (재사용 방지)\n* `login_history`: 로그인 성공/실패 이력\n\n## 5\\. 프로젝트 구조 (Package Structure)\n\n```\nsrc/main/java/until/the/eternity/das\n├── auth          # 1. 표준 인증 (회원가입, 로그인) 컨트롤러, 서비스, DTO\n├── oauth         # 2. 소셜 로그인 (OAuth2) 서비스, 핸들러, DTO\n├── user          # 3. 사용자 정보 관리 (프로필 조회/수정, 탈퇴)\n├── role          # 4. 역할(Role) 관련 엔티티, 리포지토리\n├── token         # 5. JWT 유틸, 토큰(Refresh Token 등) 엔티티, 서비스\n├── login         # 6. 로그인 관련 엔티티 (로그인 이력, 계정 잠금 등)\n├── common        # 7. 공통 모듈\n│   ├── application (S3, Kafka 등 공용 서비스)\n│   ├── aop         (AOP 관련 로직)\n│   ├── config      (SecurityConfig 등 설정)\n│   ├── exception   (전역 예외 처리)\n│   ├── filter      (JWT 인증 필터)\n│   ├── response    (공통 응답 포맷)\n│   └── util        (JWT, Cookie 유틸)\n└── demo          # 8. 데모 및 테스트용 컨트롤러\n```\n\n## 6\\. 시작하기 (Getting Started)\n\n### 1\\. 설정 파일 복사\n\n프로젝트 루트에서 제공되는 샘플 설정 파일을 복사하여 실제 설정 파일을 생성합니다.\n\n```bash\n# 1. .env.sample 파일을 .env 로 복사\ncp .env.sample .env\n\n# 2. application-sample.yml 파일을 application.yml 로 복사\ncp src/main/resources/application-sample.yml src/main/resources/application.yml\n```\n\n### 2\\. 설정 파일 수정\n\n생성된 `.env` 파일과 `application.yml` 파일에 실제 환경에 맞는 값(DB, JWT, OAuth, AWS, Kafka 등)을 입력합니다.\n\n* `.env`: DB 접속 정보, AWS 키, OAuth 클라이언트 ID/Secret 등 민감 정보\n* `application.yml`: 서버 포트, 프로필 설정 등\n\n### 3\\. 프로젝트 실행\n\n**A. Docker Compose 사용 (권장)**\n\n(프로젝트 루트에 `docker-compose.yml`이 구성되어 있다고 가정합니다.)\n\n```bash\ndocker-compose up -d --build\n```\n\n**B. 로컬에서 직접 실행**\n\n```bash\n./gradlew bootRun\n```\n\n### 4\\. API 문서 확인\n\n서버가 실행된 후, 브라우저에서 아래 주소로 접속하여 API 문서를 확인할 수 있습니다.\n\n* [http://localhost:8080/swagger-ui.html](https://www.google.com/search?q=http://localhost:8080/swagger-ui.html) (포트는\n  `application.yml` 설정에 따라 다를 수 있습니다.)\n\n## 7\\. 주요 API (Key Endpoints)\n\n* `POST /api/auth/signup`: 표준 (이메일) 회원가입\n* `POST /api/auth/admin/signup`: (관리자용) 관리자 계정 생성\n* `POST /api/auth/login`: 표준 (이메일) 로그인\n* `GET /api/auth/check-email`: 이메일 중복 확인\n* `GET /api/auth/check-nickname`: 닉네임 중복 확인\n* `POST /api/auth/signup/social`: 소셜 로그인 최초 가입 (추가 정보 입력)\n* `GET /login/oauth2/code/{provider}`: (Redirect) 소셜 로그인 (provider: `google`, `kakao`, `naver`)\n* `GET /api/user/info`: 내 정보 조회\n* `PUT /api/user/info`: 내 정보 수정 (닉네임, 프로필 이미지)\n* `PATCH /api/user/withdraw`: 회원 탈퇴","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevnogi%2Fdevnogi-auth-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevnogi%2Fdevnogi-auth-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevnogi%2Fdevnogi-auth-server/lists"}