- 이 과제는 C# 언어와 ASP.NET Core를 이용해서 만들어졌습니다.
- 따라서 이 서버를 작동시키기 위해서는
dotnet
을 다운로드 받아야 합니다. - https://dotnet.microsoft.com/download
- 위 링크에서 다운로드 받을 수 있습니다.
- 이 폴더는 AblyAPI 솔루션 폴더 안에 AblyAPI 프로젝트 폴더와 AblyAPITest 프로젝트 폴더가 있는 구조입니다.
{폴더의 위치}/AblyAPI/AblyAPI
경로로 이동합니다.dotnet run
명령어를 커멘드에 입력합니다.- 커멘드에 서버가 호스팅하는 로컬호스트 주소가 나옵니다.
- 인터넷 브라우저에서
https://localhost:????/swagger/index.html
으로 이동합니다. - API 명세를 알기 쉽게 보여주는 스웨거 페이지가 보입니다.
- 인증코드 전송 : POST api/auth/codes
- 문자 인증 : POST api/auth/codes/{code}
- 회원가입 : POST api/auth/accounts
- 로그인 : POST api/auth/accounts/login
- 내 정보 조회 : GET api/user/accounts/{accountId}
- 비밀번호 변경 : PUT api/user/accounts/{accountId}/credentials
- 회원가입 페이지
- 회원가입 페이지에는 이메일, 비밀번호, 비밀번호 재작성, 이름, 닉네임, 전화번호를 작성하는 입력란과
가입하기
버튼이 있습니다. - 전화번호 입력란 우측에는
코드 받기
버튼이 있고, 누르면인증코드 전송 API
가 작동하며 하단에 인증코드 입력란이 나타납니다. - 인증번호 입력란 우측에는
인증하기
버튼이 있고, 누르면문자 인증 API
가 작동하며 인증합니다. - 문자 인증이 완료된 상태에서
가입하기
버튼을 누르면회원가입 API
가 작동하여 가입과 동시에 로그인됩니다.
- 로그인 페이지
- 아이디 입력란에 이메일이나 전화번호를 입력하고, 하단에
로그인하기
버튼을 누르면로그인 API
가 작동하여 로그인됩니다.
- 내 정보 페이지
- 로그인 되어 있는 상태라면
내 정보 조회 API
가 작동하여 내 정보를 조회합니다.
- 비밀번호 변경 페이지
- 비밀번호 변경 페이지는 먼저
인증코드 전송 API
와문자 인증 API
를 이용해 인증을 해야 접근할 수 있습니다. - 새 비밀번호 입력란 하단의
비밀번호 변경하기
버튼을 누르면비밀번호 변경 API
가 작동하여 비밀번호가 변경됩니다.
- 인메모리 데이터베이스를 사용하였기 때문에 서버 재부팅 시 데이터가 초기화됩니다.
내 정보 조회 API
와비밀번호 변경 API
는 스웨거 우측의 인증 버튼을 눌러 엑세스 토큰을 입력해주어야 정상적으로 작동합니다.- 엑세스 토큰은
회원가입 API
나로그인 API
의 응답에서 얻을 수 있습니다.
- 전화번호 파싱이 잘 되어 있어 그냥 010 시작 뿐만 아니라 다양한 포맷의 전화번호를 인식할 수 있습니다.
- MVC 패턴에서 DTO를 사용하여 컨트롤러가 데이터를 모르도록 만들고, 요청과 응답에 집중할 수 있게 했습니다.
- 계정 엔티티 하위에 비밀번호를 포함한 자격 엔티티를 만들어서, 한 계정에 접근하는데 여러 로그인 방식을 도입할 수 있게 만들었습니다.
- 또한 후일 OAuth 로그인을 추가할 수 있는 방식으로 확장 가능성을 열어두었습니다.
- 서버에 다른 API를 할 때, 쉽게 로그인 인증을 추가할 수 있도록 중복될 가능성이 높은 인증 코드를 attribute로 만들었습니다.
- async await 패턴을 적재적소에 사용하여 과도한 트래픽이 몰렸을 때 트랜젝션 에러가 날 가능성을 최소화했습니다.
- 서비스 로직을 만들면서 동시에 유닛테스트를 작성하여, 로직이 제대로 되었는지 검증함과 동시에 변경 시 오류 가능성을 줄였습니다.
- github flow를 따른 branching 전략과 목적을 잘 드러낸 commit message 작성으로 다른 개발자가 작업 흐름을 이해하기 쉽게 도왔습니다.
- 평가의 편의성을 위해 인메모리 데이터베이스를 선택하였는데, SQL Server 등 다른 데이터베이스를 사용하여 안정성을 보장할 수 있을 것입니다.
- 엑세스 토큰이 만료될 때를 대비하여 리프레시 토큰을 구현하였는데, 실제 로직에는 포함되지 않아 추가 작업이 필요합니다.
- 엑세스 토큰에 필요한 정보를 현재보다 더 담기 위해서는 JWT를 사용하여야 합니다.
- 유닛테스트를 만들 때 더 많은 입력값을 넣고 빡빡한 제한을 걸어 테스트가 로직의 신뢰성을 더 높힐 수 있습니다.
- 비밀번호 암호화에 있어 비밀 구성을 사용하여 키값을 저장하는 BCript와 같은 방법을 사용하면 보안성을 높힐 수 있습니다.
- 비밀번호 제한 조건과 같은 기획 사항을 좀 더 고려하면 프로덕션에서 협업을 더 원활히 진행하는데 유리합니다.