Skip to content

yongtae923/memo-dotnetcore

Repository files navigation

메모 서버

개발자 김용태

과제 개요

  • 이 과제는 C# 언어와 ASP.NET Core를 이용해서 만들어졌습니다.
  • 따라서 이 서버를 작동시키기 위해서는 dotnet을 다운로드 받아야 합니다.
  • https://dotnet.microsoft.com/download
  • 위 링크에서 다운로드 받을 수 있습니다.

API 작동 확인 방법

  • 이 폴더는 AblyAPI 솔루션 폴더 안에 AblyAPI 프로젝트 폴더와 AblyAPITest 프로젝트 폴더가 있는 구조입니다.
  • {폴더의 위치}/AblyAPI/AblyAPI 경로로 이동합니다.
  • dotnet run 명령어를 커멘드에 입력합니다.
  • 커멘드에 서버가 호스팅하는 로컬호스트 주소가 나옵니다.
  • 인터넷 브라우저에서 https://localhost:????/swagger/index.html 으로 이동합니다.
  • API 명세를 알기 쉽게 보여주는 스웨거 페이지가 보입니다.

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

사용자 경험 플로우

  • 회원가입 페이지
  1. 회원가입 페이지에는 이메일, 비밀번호, 비밀번호 재작성, 이름, 닉네임, 전화번호를 작성하는 입력란과 가입하기 버튼이 있습니다.
  2. 전화번호 입력란 우측에는 코드 받기 버튼이 있고, 누르면 인증코드 전송 API가 작동하며 하단에 인증코드 입력란이 나타납니다.
  3. 인증번호 입력란 우측에는 인증하기 버튼이 있고, 누르면 문자 인증 API가 작동하며 인증합니다.
  4. 문자 인증이 완료된 상태에서 가입하기 버튼을 누르면 회원가입 API가 작동하여 가입과 동시에 로그인됩니다.
  • 로그인 페이지
  1. 아이디 입력란에 이메일이나 전화번호를 입력하고, 하단에 로그인하기 버튼을 누르면 로그인 API가 작동하여 로그인됩니다.
  • 내 정보 페이지
  1. 로그인 되어 있는 상태라면 내 정보 조회 API가 작동하여 내 정보를 조회합니다.
  • 비밀번호 변경 페이지
  1. 비밀번호 변경 페이지는 먼저 인증코드 전송 API문자 인증 API를 이용해 인증을 해야 접근할 수 있습니다.
  2. 새 비밀번호 입력란 하단의 비밀번호 변경하기 버튼을 누르면 비밀번호 변경 API가 작동하여 비밀번호가 변경됩니다.

스웨거 테스트 시 유의사항

  • 인메모리 데이터베이스를 사용하였기 때문에 서버 재부팅 시 데이터가 초기화됩니다.
  • 내 정보 조회 API비밀번호 변경 API는 스웨거 우측의 인증 버튼을 눌러 엑세스 토큰을 입력해주어야 정상적으로 작동합니다.
  • 엑세스 토큰은 회원가입 API로그인 API의 응답에서 얻을 수 있습니다.

신경 쓴 점

  • 전화번호 파싱이 잘 되어 있어 그냥 010 시작 뿐만 아니라 다양한 포맷의 전화번호를 인식할 수 있습니다.
  • MVC 패턴에서 DTO를 사용하여 컨트롤러가 데이터를 모르도록 만들고, 요청과 응답에 집중할 수 있게 했습니다.
  • 계정 엔티티 하위에 비밀번호를 포함한 자격 엔티티를 만들어서, 한 계정에 접근하는데 여러 로그인 방식을 도입할 수 있게 만들었습니다.
  • 또한 후일 OAuth 로그인을 추가할 수 있는 방식으로 확장 가능성을 열어두었습니다.
  • 서버에 다른 API를 할 때, 쉽게 로그인 인증을 추가할 수 있도록 중복될 가능성이 높은 인증 코드를 attribute로 만들었습니다.
  • async await 패턴을 적재적소에 사용하여 과도한 트래픽이 몰렸을 때 트랜젝션 에러가 날 가능성을 최소화했습니다.
  • 서비스 로직을 만들면서 동시에 유닛테스트를 작성하여, 로직이 제대로 되었는지 검증함과 동시에 변경 시 오류 가능성을 줄였습니다.
  • github flow를 따른 branching 전략과 목적을 잘 드러낸 commit message 작성으로 다른 개발자가 작업 흐름을 이해하기 쉽게 도왔습니다.

더 신경 쓸 점

  • 평가의 편의성을 위해 인메모리 데이터베이스를 선택하였는데, SQL Server 등 다른 데이터베이스를 사용하여 안정성을 보장할 수 있을 것입니다.
  • 엑세스 토큰이 만료될 때를 대비하여 리프레시 토큰을 구현하였는데, 실제 로직에는 포함되지 않아 추가 작업이 필요합니다.
  • 엑세스 토큰에 필요한 정보를 현재보다 더 담기 위해서는 JWT를 사용하여야 합니다.
  • 유닛테스트를 만들 때 더 많은 입력값을 넣고 빡빡한 제한을 걸어 테스트가 로직의 신뢰성을 더 높힐 수 있습니다.
  • 비밀번호 암호화에 있어 비밀 구성을 사용하여 키값을 저장하는 BCript와 같은 방법을 사용하면 보안성을 높힐 수 있습니다.
  • 비밀번호 제한 조건과 같은 기획 사항을 좀 더 고려하면 프로덕션에서 협업을 더 원활히 진행하는데 유리합니다.

지금까지 과제 README를 읽어주셔서 감사합니다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published