Search

GBSWHS Github Registrar

플랫폼 분야
WEB
OAuth
활동
개인
태그
2024년
AWS
Github OAuth
MongoDB

서비스 내용

경북소프트웨어마이스터고등학교의 GitHub Organization에 학생들을 효율적으로 초대하기 위해 이 프로젝트를 시작했습니다. 기존의 수동 초대 방식은 시간이 많이 들고, 외부인의 접근을 차단하기 어려웠습니다. 이에 IP 검증GitHub OAuth를 활용해 안전하고 간편한 초대 시스템을 구축하고자 했습니다.

기능

IP 검증 기능

현재 사용자의 IP를 가져와 학교 IP와 비교하여 학교의 IP가 아닐시 Github OAuth기반 초대 페이지가 아닌 예외처리 페이지로 리다이렉션 됩니다.

Github Organization Invite

IP 검증 시 학교 IP 인 경우 Github OAuth를 활용해 Organization 가입 페이지를 화면에 나타 냅니다.

사용 기술 및 라이브러리

NestJS + Github OAuth

유지보수성과 확장성
모듈화와 의존성 주입을 통해 유지보수성과 확장성을 높여주기에, 프로젝트에 적합했습니다.
타입스크립트 기반
TypeScript를 사용해서 타입 안정성코드 자동완성, 리팩토링에 유리하기에 채택하게 되었습니다.
풍부한 공식 모듈
TypeORM, Mongoose, GraphQL, WebSockets, Swagger 등 다양한 공식 통합 모듈을 제공하기에 채택 하였습니다.
학생 초대
학생들을 GBSWHS Organization Invite를 하기 위해 채택하게 되었습니다.

맡은 역할

프로젝트 전체 담당

작동 원리
클라이언트의 요청 IP를 분석하여 Whitelist IP가 아닐 시 예외처리가 되도록 구현
Github OAuth를 이용해 웹사이트에 접속한 학생 IP 검증 후 가입되도록 구현

겪었던 어려움

프록시 서버(Cloudflare)를 통해서 서버에 IP가 전달되는 문제가 발생하여서 항상 403 Error가 발생하는 문제가 발생하였습니다.

해결 방안

특정 헤더를 통한 IP 처리

Cloudflare 환경에서 실제 클라이언트의 IP를 정확히 가져오기 위해서 아래의 코드를 추가하여 해결 하였습니다.
private getClientIP(req: Request): string { return (req.headers['cf-connecting-ip'] as string) || req.ip; }
TypeScript
복사

성과

프로젝트 중 Cloudflare 프록시로 인해 IP가 잘못 전달되는 문제를 해결하면서 프록시 서버의 동작 원리와 헤더 처리에 대해 깊이 이해하게 되었습니다. 또한, GitHub API를 활용하며 외부 API 문서 분석인증 프로토콜에 대한 실무 경험을 쌓았습니다. 이 과정에서 보안 중심 사고의 중요성을 깨달았고, 이후 시스템 설계 시 보안을 최우선으로 고려하게 되었습니다.

Github

github-registrar-v2
GBSWHS