Flask 웹 서버 만들기

Flask로 웹개발: #9 어? 이게 빠졌는데요? - 추가 기능 개발 요청

TitediosKW 2024. 7. 26. 19:00
반응형

 

우리는 앞선 포스팅까지 미니 쇼핑몰을 만들었습니다. 여러분도 느끼셨겠지만 뭔가 허전하죠? 로그인 기능이 없었습니다. 지금부터는 실제 상황에서 마주칠만한 상황인데요. 분명 발주자 또는 개발 요청자가 요구한 대로 개발했지만 완성본에는 문제가 있을 수 있습니다. 그럴 경우 부족한 부분에 대한 추가 개발이 필요합니다. 그럼 이 추가 개발 현장 속으로 가보시죠.


이번 포스팅은 아쉽게도(!!) 글만 있는 포스팅입니다. 읽어보시면 좋겠지만 그렇지 않으시다면 Bold 표기 된 부분만 읽으셔도 무방하겠습니다.

1. 로그인 기능 추가의 필요성

로그인 기능을 추가하는 것은 여러 가지 장점을 제공합니다

 

1) 사용자 개인화: 사용자의 이전 구매 내역, 선호 상품 등을 추적할 수 있어 개인화된 서비스를 제공할 수 있습니다.
2) 보안 강화: 민감한 정보(예: 결제 정보)를 보호할 수 있습니다.
3) 고객 관리: 사용자의 활동을 모니터링하고 분석하여 더 나은 고객 지원과 마케팅 전략을 세울 수 있습니다.

2. 요구사항 분석

로그인 기능을 추가하기 위해 다음과 같은 요구사항을 정의할 수 있습니다. 이런 과정은 인터뷰나 미팅(회의)를 통해 여러 사람의 아이디어를 모으고 전문가의 의견을 청취한 후 종합하여 결론지을 수 있습니다.

2.1 사용자 시나리오

  • 사용자 등록: 새로운 사용자가 사이트에 등록할 수 있어야 합니다.
  • 로그인: 등록된 사용자가 이메일과 비밀번호로 로그인할 수 있어야 합니다.
  • 로그아웃: 로그인한 사용자가 언제든지 로그아웃할 수 있어야 합니다.
  • 로그인 상태 유지: 로그인한 사용자는 세션을 통해 로그인 상태를 유지할 수 있어야 합니다.
  • 접근 제어: 로그인하지 않은 사용자는 장바구니와 결제 페이지에 접근할 수 없습니다.

2.2 기능적 요구사항

  • 회원가입 페이지: 새로운 사용자가 이메일, 비밀번호 등의 정보를 입력하여 회원가입을 할 수 있는 페이지.
  • 로그인 페이지: 기존 사용자가 이메일과 비밀번호를 입력하여 로그인할 수 있는 페이지.
  • 로그아웃 기능: 사용자가 로그아웃 버튼을 클릭하면 로그아웃 처리.
  • 세션 관리: 로그인 후 세션을 통해 사용자의 로그인 상태 유지.
  • 접근 제어 기능: 로그인 여부에 따라 특정 페이지 접근 제한.

2.3 비기능적 요구사항

  • 보안: 비밀번호는 해시 처리하여 저장하며, HTTPS를 사용하여 데이터 전송 보안 강화.
  • 사용자 경험: 간단하고 직관적인 UI/UX 제공.
  • 확장성: 향후 추가 기능(예: 소셜 로그인)을 고려한 설계.

3. 요구사항 명세

요구사항 분석이 모두 끝났다면 해당 요구사항을 개발하기 위해 어떤 것들이 실제 개발에 필요한지 문서화를 해야합니다. 여기서는 간단한 문서화에 대한 내용을 살펴보겠습니다.

3.1 데이터 모델

사용자를 등록해야 하므로 '사용자'에 대한 정의를 해야합니다. 다시 말하면 데이터 모델을 만든다고 합니다. 아래와 같이 만들 수 있을 것 같습니다.

User 테이블
id: Primary Key
email: 사용자 이메일, Unique
password: 해시 처리된 비밀번호
created_at: 계정 생성일

3.2 회원가입 기능

사용자가 있다면 이를 등록하는 기능이 필요하겠죠? 이 등록 즉, 회원가입을 위한 기능을 만들어봅니다. 회원 가입은 GET, POST 방식을 모두 활용하여 만들 수 있습니다.

URL: /register
Method: GET, POST
처리 흐름:
GET 요청 시 회원가입 폼을 렌더링.
POST 요청 시 입력된 이메일과 비밀번호를 처리하여 새로운 사용자 계정을 생성.

3.3 로그인 기능

다음은 로그인 기능입니다. 사용자 등록까지 마쳤다면 실제 로그인을 통해 사용자가 접속을 해야 하므로 이 접속 기능을 만드는 것입니다. 역시 GET 방식과 POST 방식을 통해 기능을 구현합니다.

RL: /login
Method: GET, POST
처리 흐름:
GET 요청 시 로그인 폼을 렌더링.
POST 요청 시 입력된 이메일과 비밀번호를 검증하여 세션에 사용자 정보 저장.

3.4 로그아웃 기능

마지막으로 로구아웃입니다. 사용자가 웹에서 모든 일을 마치고 돌아가는 기능이죠. GET으로 간단하게 구현 가능합니다.

URL: /logout
Method: GET
처리 흐름: 세션에서 사용자 정보를 제거하고 홈 페이지로 리디렉션.

3.5 접근 제어

로그인 상태의 유무에 따라 접근할 수 있는 페이지가 달라지기도 합니다. 예를 들어 마이페이지(My page)와 같은 사용자 정보 확인 페이지는 로그인이 되어 있지 않으면 접근할 수 없죠. 따라서 이런 접근 제어 기능도 필요할 것입니다.

로그인 확인 데코레이터: 특정 페이지에 접근하기 전에 사용자가 로그인 상태인지 확인.

결론

로그인 기능을 추가함으로써 사용자에게 보다 개인화되고 보안이 강화된 서비스를 제공할 수 있습니다. 요구사항 분석 및 명세 과정을 통해 보다 체계적으로 기능을 구현할 수 있으며, 향후 확장성도 고려하여 설계하는 것이 중요합니다. Flask를 활용한 미니 쇼핑몰 프로젝트에 로그인 기능을 성공적으로 통합하기 위해 위와 같은 요구사항을 분석하고 명세하는 과정을 거치는 것이 좋습니다.


다음 포스팅부터는 실제 로그인 기능을 추가하여 기존에 소스코드에 추가하는 과정들을 상세히 살펴보도록 하겠습니다.


감사합니다!

반응형
댓글수1