프로젝트 활동 보고서_4w - GraduationDku/tastyHub GitHub Wiki

4W 기능명세서

주제 : User
기능 제목 주 기능 상세 기능 상호 작용 사용자 인터페이스
아이디 중복체크 아이디 중복 체크하기 회원가입 시 필요한 아이디가 기존 사용자 아이디 중복을 피하기 위한 기능 1. 사용쟈는 회원가입을 진행한다. 2. 회원가입시, 설정할 아이디 중복을 확인하기 위해 중복 확인 버튼을 누른다. 3. 팝업 창에 중복이 아니라고 뜨면 해당 아이디를 사용한다. 3-1. 중복이라고 팝업창이 뜨면 해당 아이디 외에 다른 아이디를 사용한다.
이메일 중복체크 1. 이메일 인증하기 2. 이메일 검증하기 회원가입 시 1인 1가입을 위한 본인인증 기능 1. 사용자는 회원가입을 진행한다. 2. 회원가입시, 설정할 이메일을 입력한다. 3. 이메일 인증 버튼을 누른다. 4. 이메일 인증이 확인되면 해당 이메일로 인증 번호를 받게 된다. 5. 인증 번호를 입력한다. 6. 인증 번호가 일치하면 해당 이메일을 입력한다. 6-1. 이메일 인증에 실패하였다는 팝업창이 뜨면, 해당 이메일 외에 다른 이메일을 사용한다.
닉네임 중복체크 닉네임이 중복인지 체크 하는 기능 회원가입 시 필요한 닉네임이 기존 사용자 닉네임과 중복을 피하기 위한 기능 1, 사용자는 클라이언트 화면에서 닉네임을 입력한다. 2. 해당 닉네임이 존재하지않는다면 사용가능하다는 알림을 보여준다.
아이디 찾기 사용자가 본인 아이디를 찾는 기능 사용자가 아이디를 잊었을 때 아이디 조회를 위한 기능 1. 사용자는 클라이언트 서버에 아이디 찾기 버튼을 누른다. 2. 사용자는 아이디 찾기 화면에 이메일 번호를 입력한다. 3.사용자가 입력한 이메일이 동일하면 사용자에게 해당 이메일에 맞는 아이디의 몇 자리를 가리고 보여준다.
비밀번호 재설정 비밀번호 재설정 사용자 정보 보안을 위한 비밀번호 재설정 기능 1. 인증된 사용자는 클라이언트 서버에 비밀번호 재설정 버튼을 누른다. 2. 사용자가 원하는 새로운 비밀번호를 입력받는다. 3. 사용자가 입력한 비밀번호가 조건에 맞는다면 해당 비밀번호로 사용자의 비밀번호를 변경한다.
사용자 삭제하기 1. 사용자 정보 입력 2. 사용자 정보 데이터베이스에서 제거 사용자가 서비스를 이용하고 싶지않은 경우 탈퇴를 위한 기능 1. 인증된 사용자는 아이디와 패스워드를 클라이언트 화면에 입력한다. 2. 입력된 데이터를 서버에 전송 후 올바른지 확인한다. 3. 해당 사용자임을 확인한 뒤 사용자가 맞다면 사용자의 정보를 삭제한다.
사용자 동네 수정하기 1.사용자 위치 확인 2. 위치 정보 전달하기 사용자가 동네를 이동했을 경우 동네 정보 수정을 위한 기능 1. 사용자가 마이페이지 화면에서 동네 수정하기 버튼을 누른다면 동네 수정 화면을 보여준다 2 지도에서 자동으로 마커가 사용자의 위치와 같도록 정렬한다. 3.사용자는 지도에 표시되어있는 마커를 자신의 위치가 맞는지 확인하여 맞는 버튼을 클릭한다. 4-1. ‘네 맞아요’ 버튼을 누른다면 마이페이지 화면으로 돌아간다. 4-2. ‘아니에요’ 버튼을 누른다면 다시 한번 사용자의 위치를 찾아 표시해준다.
사용자 정보 수정하기 사용자 닉네임 수정하기 사용자 닉네임 등의 정보를 수정하기 위한 기능 1. 사용자는 자신이 수정하고 싶은 항목을 수정 한다. 2. 수정이 완료되었으면 수정 완료 버튼을 누른다. 3. 수정된 정보를 반영한 마이페이지 화면으로 돌아간다.
사용자 검색하기 닉네임 기준으로 사용자 검색하기 조회하고 싶은 사용자를 닉네임을 기준으로 검색하는 기능 1. 사용자는 검색창에 키워드를 입력한다. 2. 입력을 완료했으면 검색 버튼을 누른다. 3. 유저 닉네임에 입력한 키워드를 포함하는 유저 리스트를 보여준다.

4W 기술명세서

프론트엔드


유저

기능 제목 아이디 중복 체크
구현 기간 24.04.29. ~ 24.04.30.
담당 팀원 박승은
구현 단계 표시 구현 완료
알고리즘 1. 사용자가 아이디를 입력한다. 2. 키워드 await를 이용한 fetch API를 사용하여 서버에 중복 검사 요청을 비동기적으로 전송한다. 3. 서버는 데이터베이스를 조회하여 아이디 사용 여부를 확인한 후 결과를 클라이언트에 반환한다. 4. response.ok를 받으면 클라이언트는 응답 내용을 피싱하여 사용 가능 여부를 확인한다. 5. 사용 가능한 경우, 다음 페이지로 넘어간다. 5-1. 사용 불가능한 경우는 아이디를 이미 사용하고 있거나, 네트워크 오류, 서버 오류 등 예외 상황을 처리할 로직을 구현한다.
기능 제목 이메일 중복 체크
구현 기간 24.04.29. ~ 24.04.30.
담당 팀원 박승은
구현 단계 표시 구현 완료
알고리즘 1. 사용자가 이메일을 입력한다. 2. 키워드 await를 이용한 fetch API를 사용하여 서버에 중복 검사 요청을 비동기적으로 전송한다. 3. 서버는 데이터베이스를 조회하여 이메일 사용 여부를 확인한 후 결과를 클라이언트에 반환한다. 4. response.ok를 받으면 클라이언트는 응답 내용을 피싱하여 사용 가능 여부를 확인한다. 5. 사용 가능한 경우, 다음 페이지로 넘어간다. 5-1. 사용 불가능한 경우는 이메일을 이미 사용하고 있거나, 네트워크 오류, 서버 오류 등 예외 상황을 처리할 로직을 구현한다.
기능 제목 닉네임 중복 체크
구현 기간 24.04.29. ~ 24.04.30.
담당 팀원 박승은
구현 단계 표시 구현 완료
알고리즘 1. 사용자가 닉네임을 입력한다. 2. 키워드 await를 이용한 fetch API를 사용하여 서버에 중복 검사 요청을 비동기적으로 전송한다. 3. 서버는 데이터베이스를 조회하여 닉네임 사용 여부를 확인한 후 결과를 클라이언트에 반환한다. 4. response.ok를 받으면 클라이언트는 응답 내용을 피싱하여 사용 가능 여부를 확인한다. 5. 사용 가능한 경우, 다음 페이지로 넘어간다. 5-1. 사용 불가능한 경우는 닉네임을 이미 사용하고 있거나, 네트워크 오류, 서버 오류 등 예외 상황을 처리할 로직을 구현한다.
기능 제목 아이디 찾기
구현 기간 24.04.29. ~ 24.04.30.
담당 팀원 박승은
구현 단계 표시 구현 완료
알고리즘 1. 사용자가 아이디 찾기를 누른다. 2. 아이디를 찾기 위해 필요한 이메일을 입력한다. 3. 클라이언트는 fetch API를 사용하여 입력된 정보를 서버에 비동기적으로 전송하고 응답을 기다린다. 4. 서버는 요청받은 정보를 데이터베이스에서 검색하여 해당 정보와 연결된 아이디를 찾는다. 5. 찾은 아이디를 클라이언트에게 반환한다. 6. 클라이언트는 서버에게 받은 아이디를 팝업창에 띄워 알려준다. 6-1. 아이디를 찾을 수 없거나 서버에서 오류가 생긴 경우, 사용자에게 알리고 예외를 처리한다.
기능 제목 비밀번호 재설정
구현 기간 24.04.18. ~
담당 팀원 박승은
구현 단계 표시 개발 진행 중
알고리즘 1. 사용자가 비밀번호 재설정 버튼을 누른다. 2. 사용자는 기존 비밀번호와 새 비밀번호를 입력한다. 3. 클라이언트는 사용자가 입력한 정보를 비동기적으로 서버에게 전송한다. 4. 서버는 새로운 비밀번호를 데이터베이스에 업데이트하고 사용자에게 비밀번호 변경에 성공했다고 팝업창을 띄운다. 5. 네트워크 오류, 서버 오류 예외 상황이 있다면 예외처리로 해결한다.
기능 제목 사용자 삭제하기
구현 기간 24.04.18. ~
담당 팀원 박승은
구현 단계 표시 개발 진행 중
알고리즘 혹은 아키텍쳐 1. 사용자는 사용자 삭제하기 버튼을 누른다. 2. 사용자는 삭제하기 위해 비밀번호를 누른다. 3. 사용자의 토큰 값과 비밀번호를 서버에게 전달하여 인증 절차를 거친다. 4. 인증이 성공적으로 완료되면, 클라이언트는 삭제 요청을 서버에 비동기적으로 전송한다. 5. 서버로부터 응답을 받고, 삭제 작업의 성공 여부를 확인한다. 5-1. 성공적으로 삭제되면, 사용자에게 알린다. 5-2. 삭제 과정에서 오류가 발생한 경우, 사용자에게 오류 원인을 알리고 적절한 조치를 취한다. 6. 네트워크 오류, 서버 오류 등이 발생한 경우 예외 상황을 처리한다.

백엔드


유저

기능 제목 아이디 찾기
구현 기간 24.04.18. ~ 24.04.30.
담당 팀원 김민수
구현 단계 표시 구현 완료
알고리즘 1-1. 사용자는 클라이언트 서버에서 아이디 찾기에 관련된 URI를 통해 API 요청을 보낸다. 1-2. 사용자는 요청을 보낼 때 요청에 맞게 데이터(이메일)을 전달한다. 2. 클라이언트는 해당 서비스 로직을 서버에 요청한다. 3. 서버는 요청과 데이터를 확인한다. 4. 서버는 요청을 통해 들어온 데이터를 서비스 레이어에 전달한다. 5-1. 서비스 계층에서는 해당 데이터를 통해 UserRepository에서 이메일에 맞는 사용자를 조회한다. 5-2-1. 사용자는 해당 이메일을 가진 사용자가 있으면 해당 사용자의 아이디 마지막 4자리를 ‘ * ’로 변환한 뒤 반환한다. 5-2-2. 사용자의 아이디가 DB에 없는 경우 IllegalArgumentException을 throw한다. 6. 서비스레이어를 통해 전달된 값을 클라이언트 서버에 전달한다.
기능 제목 비밀번호 재설정
구현 기간 24.04.18. ~ 24.04.30.
담당 팀원 김민수
구현 단계 표시 구현 완료
알고리즘 1-1. 사용자는 클라이언트 서버에서 비밀번호 재설정에 관련된 URI를 통해 API 요청을 보낸다. 1-2. 사용자는 요청을 보낼 때 요청에 맞게 데이터(기본 비밀번호, 재설정 비밀번호), 사용자 인증 토큰들을 전달한다. 2. 클라이언트는 해당 서비스 로직을 서버에 요청한다. 3. 서버는 요청과 데이터를 확인한다. 4. 서버는 요청을 통해 들어온 토큰을 통해 사용자가 검증된 사용자인지 확인한다. 5. 서버는 해당 사용자가 검증된 사용자면 해당 요청을 바탕으로 서비스 레이어에 전달한다. 6-1. 서비스 레이어는 기존에 주어진 비밀번호가 실제 사용자의 비밀번호인지 확인한다. 6-2-1. 사용자의 비밀번호가 일치하면 사용자의 변경해햐하는 비밀번호로 업데이트 한다. 6-2-2. 사용자의 비밀번호가 일치하지않으면 검증되지 않은 사용자이기에 IllegalArgumentException을 throw한다. 7. 서비스에서 나온 결과를 통해 클라이언트 서버에 상황에 맞는 응답값을 전달한다.
기능 제목 사용자 검색하기
구현 기간 24.04.18. ~ 24.05.01.
담당 팀원 김민수
구현 단계 표시 개발 진행중
알고리즘 1-1. 사용자는 클라이언트 서버에서 사용자 검색하기에 관련된 URI를 통해 API 요청을 보낸다. 1-2. 사용자는 요청을 보낼 때 요청에 맞게 데이터(검색할 사용자의 nickname)를 전달한다. 2. 클라이언트는 해당 서비스 로직을 서버에 요청한다. 3. 서버는 요청과 데이터를 확인한다. 4. 서버는 사용자의 요청에 맞는 서비스 레이어의 로직을 호출한다. 5. 주어진 사용자의 닉네임을 기반으로 DB에 select 로직을 호출한다. 6. 호출로 만들어진 결과값을 클라이언트에 전달한다.
기능 제목 사용자 삭제하기
구현 기간 24.04.18 ~ 24.04.30
담당 팀원 임세현
구현 단계 표시 개발 완료
알고리즘 1-1. 사용자는 클라이언트 서버에서 사용자 검색하기에 관련된 URI를 통해 API 요청을 보낸다. 1-2. 사용자는 요청을 보낼 때 username과 password를 전달한다. 2. 클라이언트는 해당 서비스 로직을 서버에 요청한다. 3. 서버는 요청과 데이터를 확인한다. 4. 서버는 사용자의 요청에 맞는 서비스 레이어의 로직을 호출한다. 5-1. password와 username 그리고 jwt 토큰에 있는 유저 정보를 비교해 맞다면 사용자와 사용자와 연관관계에있는 데이터들을 DB에서 삭제한다. 5-2. password와 username 그리고 jwt 토큰에 있는 유저 정보를 비교해 맞지 않다면 검증되지 않은 사용자이기에 IllegalArgumentException을 throw한다. 6. 서비스에서 나온 결과를 통해 클라이언트 서버에 상황에 맞는 응답값을 전달한다.

기능 제목 사용자 동네 수정하기
구현 기간 24.04.18 ~ 24.04.30
담당 팀원 임세현
구현 단계 표시 개발 완료
알고리즘 1.사용자가 자신의 위치를 확정한다. 2.프론트엔드에서의 API 요청을 통해 백엔드로 전달받는다 3. jwt를 통해 유저가 해당 요청을 할 권한이 있는지 확인한다. 4.백엔드에서는 해당 요청을 전달받고 Village 서비스 레이어로 전달한다. 5. 전달된 요청에서 ‘locationRequest’을 가져온다. 6. 가져온 값을 통해 해당 요청을 한 user의 village 데이터를 수정한다. 7. 프론트엔드에 status code 200 전달한다.
기능 제목 사용자 정보 수정하기
구현 기간 24.04.18 ~ 24.04.30
담당 팀원 임세현
구현 단계 표시 개발 완료
알고리즘 1.사용자는 데이터를 입력한다. 2.프론트엔드에서의 API 요청을 통해 백엔드로 전달받는다 3. jwt를 통해 유저가 해당 요청을 할 권한이 있는지 확인한다. 4.백엔드에서는 해당 요청을 전달받고 유저 서비스 레이어로 전달한다. 5. 전달된 요청에서 ‘signupRequest’을 가져온다 6. 가져온 값을 통해 해당 요청을 한 user의 데이터를 수정한다. 7. 데이터베이스에 저장 후 프론트엔드에 status code 200 전달한다.

데이터 설정

기능 제목 레시피 데이터 셋 만들기
구현 기간 24.04.25. ~ 24.04.29
담당 팀원 김민수,임세현
구현 단계 표시 개발 완료
알고리즘 환경 : 쥬피터 노트북 0. "https://pypi.org/project/googletrans/"번역 api - 각 단계 진행 시 해당 string 번역하여 값 반환 하이퍼링크 제거 메서드 생성 1. 테이블 정의 - 레시피, 요리정보, 재료, 요리단계 레시피 - Recipe 1. id - db 자동배정 2. foodName : title 3. foodImg : image 4. tempId : spoonacular api recipeId 요리정보 - FoodInformation 1. id - db 자동 배정 2. text - summary 3. cookingTime - readyInMinutes 4. serving - serving 재료 - Ingredients 항목에서 가져오기 1. id - db 자동배정 2. ingredientName : ingredientName 3. amount : amount 요리 단계 - CookStep : analyzedInstruction 항목에서 가져오기 1. id - db 자동 2. stepNumber - number 3. text - step 4. stepImg - null로 통일 2. docker - mysql docker volume 설정으로 레시피 및 db 저장 폴더 지정 파이썬 mysql 연결 flask x 3. 레시피 아이디 들고와서 레시피 객체 생성 후 db 저장 4. 레시피 아이디를 리스트로 받아오기 5. 받아온 아이디를 기반으로 단일 레시피 get 요청 진행 5-1. 요리 정보 : 데이터 분리, body에서 summary 추출,이미지 링크 삭제, 그리고 매핑 및 객체 생성, 5-2. 재료 : 테이블과 각 값 매핑해서 객체 생성, 5-3. 요리 단계 : 테이블과 각 값 매핑해서 객체 생성 각 순서마다 db에 상황마다 바로 전송