프로젝트 진행
1. ID 기반 수정 및 삭제 기능 적용
- 실험 : DB의 users 테이블의 primary key인 user_id 값을 가져와서 post_id 값과 대조
- 문제 파악 : user_id 값은 유저가 생성될 때만 새로 추가되지만 post_id 값은 같은 유저가 게시글을 여러 개 생성하기만 해도 값이 증가해서 대조 값으로 사용할 수 없음
- 해결 방안 : user_id 값 대신 users 테이블의 loginID 값과 posts 테이블의 users(userID) 값과 대조하는 것으로 ID 기반 권한 부여 로직 구성
- 문제 : 로그인 후 유저 ID 값을 인식하지 못해 유저 ID가 게시글 작성 유저의 ID와 일치하는 경우에도 수정 및 삭제 기능이 작동하지 않음
- 실험 : 로그인한 유저 ID 값을 세션을 통해 받아오고 전달하는 과정 전부 출력(서버, 게시글 페이지)
- 문제 파악 : 받아온 유저 ID 값의 경우 user_id 값이어서 숫자 값인 반면 users의 로그인 ID 정보는 문자형 데이터라 데이터 매칭이 안 됨
- 해결 방안 : 서버에서 세션에서 받은 유저 값을 함수를 통해 users 테이블에서 loginID 값으로 받아서 변수에 저장하여 HTML 파일로 전송
- 결과 : 로그인 한 유저 ID 정보가 게시글을 작성한 유저 ID 정보와 일치하는 경우 수정 및 삭제 기능이 정상적으로 작동
수정된 서버 파일
# 기존 DB의 users 테이블의 loginID 값을 가져오는 데 사용한 함수
def get_current_user_id():
user_id = session.get('user_id')
if user_id:
user = Users.query.get(user_id)
return user.loginID if user else None
return None
@app.route("/total/", methods=['GET', 'POST'])
def total():
if request.method == 'POST':
# 여기에 POST 요청 처리 로직을 구현합니다.
return redirect(url_for('total'))
else:
post_list = Posts.query.all()
# 현재 로그인한 사용자의 ID를 세션에서 가져옵니다.
user_id_from_session = session.get('user_id')
# login_id = Users.query.filter_by(userID=userID).first()
return render_template('total.html', data=post_list, current_user_id=user_id_from_session)
# return render_template('total.html', data=post_list)
- 로그인 한 유저 ID 정보를 세션을 통해 받아온 후 html 파일로 보낼 ID 대조 값으로 변수에 저장
- posts 테이블의 users 필드 수정으로 함수 삭제
수정된 데이터 삭제 함수
@app.route("/delete_post/<int:postID>", methods=['POST'])
def delete_post(postID):
# post_to_delete = Posts.query.get_or_404(postID)
# db.session.delete(post_to_delete)
# db.session.commit()
print("Before deletion")
post_to_delete = Posts.query.get(postID)
# Cascade delete to associated view_count
if post_to_delete:
view_count_to_delete = ViewCount.query.filter_by(
board_post_id=postID).first()
if view_count_to_delete:
db.session.delete(view_count_to_delete)
db.session.delete(post_to_delete)
db.session.commit()
print("After deletion")
return redirect(url_for('total'))
# return jsonify({'success': 'Post deleted successfully'}), 200
- 게시글 삭제 시 게시글의 조회수도 같이 삭제하도록 수정
수정된 데이터 수정 함수
@app.route('/edit-post/<int:postID>', methods=['POST'])
def edit_post(postID):
post = db.session.get(Posts, postID)
if not post:
return jsonify({'error': 'Post not found'}), 404
data = request.json
title = data.get('title')
content = data.get('content')
type = data.get('type')
url = data.get('url')
image_url = data.get('image_url')
if type is None:
return jsonify({'error': '`type` is a required field'}), 400
post.title = title
post.content = content
post.type = type
url = data.get('url')
post.url = url
post.image_url = image_url
try:
db.session.commit()
return jsonify({'success': 'Post updated successfully'}), 200
except Exception as e:
db.session.rollback()
return jsonify({'error': str(e)}), 500
- 기존 함수에서 수정된 url 값을 받아서 DB로 보내는 변수가 없어서 해당 기능을 수행할 변수 추가
2. master branch로 merge
- 개발 완료된 로직을 프로젝트 마스터 브랜치로 병합 작업 실행
- 병합 후 프로젝트 각 기능 별로 테스트 실시
- 회원 가입, 로그인 기능(아이디, 이메일 중복확인, 비밀 번호 일치 확인)
- 메인 화면 웹툰 우측 바(랜덤 셀렉트, 바 접고 펴기)
- 게시글 페이지 카테고리 별 분류 확인
- 게시글 클릭 시 링크 이동 및 조회수 증가 확인
- 유저 ID 기반 게시글 수정 및 삭제 기능 동작 확인
- 웹툰 상세 페이지 랜덤 셀렉트 및 갱신 상세 정보 페이지 접속 확인
- 기능 동작 간 발생한 에러 상황 즉시 조치
- 서버의 DB 수정 함수가 url 값을 받고 DB에 명령할 코드가 없음 → 코드 추가
- 삭제 함수의 기능을 누를 시 페이지 로딩 오류 → 함수 중간에 함수 파라미터 값이 잘못 된 부분 올바른 파라미터 값으로 수정 조치
3. 프로젝트 발표자료(PPT) 제작 및 발표
- 프로젝트 발표자료 제작 및 발표 진행
4. 프로젝트 마무리
- 기술 매니저님께 프로젝트 피드백 및 프로젝트 간 궁금했던 사항 질문
- 프로젝트 시연 데모 영상 제작
- 영상 녹화 프로그램을 통해 프로젝트 완성 결과물의 각 기능 시연 영상 녹화 후 youtube에 조 이름으로 업로드
- 프로젝트 전체 파일 제출
프로젝트 간 느낀 점
- Git을 통해 협업을 할 경우 공통 기능의 경우 빠르게 개발하고 개발 후 수정을 거의 하지 않는 것이 좋다.
- git push 간 충돌 최소화
- 프로젝트 회의나 의견 교환 시 문서로 기록하는 것이 좋음
- 어떤 의견을 주고 받았는지 프로젝트 수정 방향 등을 확인할 수 있음
- 팀원과 개발하는 파트가 겹칠 경우 자주 의사소통하며 개발하는 것이 나중에 git 간 충돌을 줄일 수 있어서 좋음
- 그 외에도 개발을 잘못된 방향으로 하지 않을 수 있음(팀원이 사용해야 하는 부분을 삭제 또는 수정하는 상황 방지)
KPT
KEEP
- 팀원과 프로젝트 진행 사항을 자주 공유하고 프로젝트 기간동안 시작 회의 및 마무리 회의를 통해 프로젝트 방향을 설정한 것
- 각자 맡은 역할을 수행하기 위해 개인 스스로 노력 뿐만 아니라 팀원과 협력을 통해 문제를 해결한 것
- 좋은 분위기를 유지하기 위해 시작 전에 서로 노래를 추천하는 것
Problem
- Git 작업 간 공통 사용 부분에 대한 약속을 제대로 정하지 않아 git push간 충돌 문제로 인해 코드를 수정하고 확인하는데 많은 시간이 소요 됨
- SA 및 와이어 프레임을 작성하는데 도움이 되는 툴 사용에 미숙해서 시간이 걸렸던 점
Try
- Git 작업 전 공통 사용 부분에 대한 개발 시 수정이나 삭제에 대한 규칙 정의 및 작업 간 겹치는 부분을 개발할 때 팀원과 활발하게 소통하며 git push 간 충돌이 발생할 만한 사항을 최소화
- SA 및 와이어 프레임을 작성하는데 도움이 되는 툴 숙련도를 올려 작성 시간을 줄이기
프로젝트 PPT 및 프로젝트 전체 파일, 프로젝트 시연 영상 주소
공유다.pptx
14.03MB
0UDA_Project.zip
0.06MB
'항해 99 > Web' 카테고리의 다른 글
AWS - EC2, RDS 활용 배포 (0) | 2024.03.09 |
---|---|
웹 미니 프로젝트 2일차 (0) | 2024.02.02 |
웹 미니 프로젝트 1일차 (0) | 2024.01.31 |
GPT 활용 웹개발 - 카드 삭제 기능 추가 (1) | 2024.01.30 |
GPT 활용 웹개발 기초 5주차 - 웹 배포하기 (0) | 2024.01.09 |