728x90
반응형
1. 모듈 설명
- dao : DB에 sql을 보내는 메서드
- connectionUtils.py : postgreSQL 연결 Connection 생성
- todoDAO : todoDTO 객체를 통해 DB에 sql문으로 기능 수행 (modify, delete 메서드 추가)
- dto
- todoDTO : todo 객체
- templates : view 부분
- list.html : 목록 페이지
- register.html : todo 등록 페이지
- read.html : todo 세부 페이지
- modify.html : todo 수정 페이지
- main.py : 컨트롤러(view 부분에 jinja2로 html에 접근해 get, post방식으로 자료 교환)
- "/todo/read", "/todo/modify", "/todo/delete" 추가
2. 필요한 라이브러리 설치:
pip install fastapi uvicorn psycopg2 jinja2
- fastapi : fastAPI
- uvicorn : fastAPI 서버 구동
- psycopg2 : postgtrSQL 연결
- jinja2 : HTML 렌더링
3. 깃허브 링크
https://github.com/cbjh-4/TodoList_python
4. 실행 화면
5. 어려웠던 점
- postgreSQL에서 테이블을 window에서 만들 경우, 컬럼명을 대문자로 만들었을 때, 쿼리문에서 인식하지 못하는 문제가 있어 컬렴명을 소문자로 바꾸었다.
- jinja2에선 checkbox가 readonly를 지원하지 않아 사용자가 수정하지 못하도록 하려면 disable 속성을 사용해야 한다.
- sql 인젝션 방어를 위해 파라미터를 직접 문자열에 넣지 않고 %s를 사용해 전달되는 파라미터가 쿼리문으로 해석되지 않도록 하는 것이 보안상 좋다.
sql = "SELECT * FROM tbl_todo WHERE tno = %s"
cursor.execute(sql, (tno,)) # 튜플 형태로 파라미터 전달
- todoDTO를 객체로 전송할 때, tno를 None값으로 보내는 경우가 있고 tno를 사용하는 경우가 있으므로 잘 구분해서 보내줘야한다. update할때에는 where절에 tno값이 필요하므로 꼭 객체에 담아서 보내주자. 이 부분을 신경 못써 다른 곳에서 오류를 찾다가 1시간을 허비했다.
- 다음에는 세션을 추가하고 로그인 부분과 회원가입, 로그아웃 기능을 추가할 예정이다.
- 그 다음에는 jwt 토큰을 사용해 로그인 보안 부분을 추가할 예정이다.
6. 알아둘 이론 부분
- PostgreSQL에서는 기본적으로 모든 식별자(테이블 이름, 컬럼 이름 등)를 소문자로 변환합니다. 만약 생성시에 식별자에 대문자를 사용했다면, 이 식별자를 그대로 사용하려면 항상 쌍따옴표(")로 감싸주어야 합니다. 대문자를 포함하는 식별자를 쌍따옴표 없이 사용하려고 하면 PostgreSQL은 자동으로 소문자로 변환하여 인식하기 때문에, 원하지 않는 결과를 초래할 수 있습니다.
6.1 문제 해결 방법
- 쌍따옴표 사용: SQL 쿼리에서 테이블이나 컬럼 이름에 대문자가 포함된 경우, 그 이름을 항상 쌍따옴표로 감싸야 합니다. 예를 들어, 컬럼 이름이 DueDate인 경우, 쿼리에서는 "DueDate"로 참조해야 합니다.
- 테이블 및 컬럼명 수정: 향후 이러한 문제를 방지하기 위해 가능하다면, 테이블 및 컬럼명을 모두 소문자로 변경하는 것이 좋습니다. 이를 위해 테이블과 컬럼의 이름을 변경할 수 있습니다:
- 일관된 네이밍 규칙 적용: 데이터베이스 디자인 초기 단계에서 소문자와 밑줄(_)을 사용하는 스네이크 케이스 네이밍 컨벤션을 적용하는 것이 좋습니다. 이렇게 하면 나중에 식별자를 인용할 필요가 없어져 오류를 덜 발생시키고 코드의 가독성도 높일 수 있습니다.
6.2 추가 조언
- 식별자에 대문자를 사용할 때는 항상 주의해야 하며, 가능한 한 이러한 상황을 피하는 것이 좋습니다. PostgreSQL을 비롯한 많은 데이터베이스 시스템에서는 소문자 사용을 권장하고 있으며, 이는 나중에 복잡성을 줄이고, 표준화를 유지하는 데 도움을 줍니다.
'프로젝트 > Python - FastAPI' 카테고리의 다른 글
[Python_FastAPI] TodoList#6 로그인, 로그아웃, 세션 추가 (0) | 2024.05.07 |
---|---|
[Python_FastAPI] TodoList#4 모듈화, 글 등록 DB 연동 (0) | 2024.05.03 |
[Python_FastAPI] TodoList#3, FastAPI로 html 렌더링(연결), postgreSQL DB연결 (0) | 2024.05.02 |
[Python_FastAPI] TodoList#2, 파이썬 FastAPI로 html 렌더링(연결) (0) | 2024.05.02 |
[Python_FastAPI] TodoList#1, 파이썬 FastAPI로 html 렌더링(연결) (0) | 2024.05.02 |
댓글