Link

블로그 운영방향 수정

블로그의 운영방향을 수정하게 되었다.

처음에는 그저 기술적인 내용만을 정리하는 블로그로 쓰려 했지만, 생각해보니 기술적인 내용은 Github에 이미 정리가 잘 되어있어 굳이 블로그로 한번 더 정리하는 것은 효율적이지 못한 것 같다.

그리하여 블로그에 존재하는 기술적인 포스트를 모두 삭제하고, 일기, 기록사항, 회고록 만을 적기로 했다.

기술적인 공부내용 관련해서는 github에 정리되어 올라갈 것이고, 블로그에서 해당 github를 링크하는 형식으로 사용할 것이다.

앞으로의 공부 진행방향

앞으로 무슨 공부를 해야할지 정하기 전, 나의 부족한 부분을 알아야 할 필요가 있다.

먼저 지난번 떨어진 면접에서 느낀 부족한 점이다.

  1. 간결하고 깨끗한 코드를 짜는 능력

  2. 객체지향에 대한 이해도

  3. 오류제어

그리고 원래 하려고 했던 공부 내용이다.

  1. Django 공식문서 정리

  2. PostgreSQL 공식문서 정리

  3. Spring 공식문서 정리

원래는 프레임워크의 공식문서들을 보고 정리하며 사용방법을 익히려고 하였으나, 여러 글을 보던 중 “프레임워크나 툴은 그저 도구일 뿐, 기반지식을 잘 익히는 것이 더욱 중요하다” 라는 글을 보았다.

계속해서 새로 나오는 프레임워크와 툴을 현업에서 직접 사용할 때는 공식문서를 보며 사용법을 익히는 것이 맞지만, 공부를 하는 입장에서 모든 기술들을 공식문서를 보고 정리할 수는 없다고 생각했다.

그래서 앞으로의 공부계획을 바꿔보았다.

  1. 간단한 웹이라도, 간결하고 깨끗한 코드로 짜보기

  2. 객체지향에 대한 공부

  3. 깨끗한 코드(Clean Code) 책을 보고 요약 정리

  4. 오픈소스 기여 혹은, 오픈소스 개발

  5. 커밋 메시지 가이드 정리

ToDOList 웹 제작

간단한 웹이라도, 간결하고 깨끗한 코드로 짜보기를 실천하기 위해 간단한 ToDoList 웹을 제작하기로 했다.

기능 나열

ToDoList웹을 제작하기 위해 먼저 해당 웹의 모든 기능을 나열한다.

  1. 로그인
  2. 회원가입
  3. 로그아웃
  4. 회원정보 수정
  5. 회원탈퇴
  6. 로그인된 회원의 ToDoList 출력
  7. ToDoList 추가
  8. ToDoList 삭제
  9. ToDoList 수정

Django를 이용해 해당 웹을 구현할 것이다.

데이터베이스 설계

데이터베이스는 PostgreSQL을 이용할것이다.
  1. User Table
    • idx
    • NickName
    • id
    • password(sha512 hash)
  2. ToDoList Table
    • idx
    • UserTableIdx(회원정보 Table -> idx)
    • Title
    • Context

URL 설계

  • / : 메인 페이지 출력
  1. /User/
    • 로그인(signin/)
      • form : 로그인 폼 출력
      • process : 로그인 처리(POST : User->id, User->Password(sha512 hashed))
    • 회원가입(signup/)
      • form : 회원가입 폼 출력
      • process : 회원가입 처리(POST : User->id, User->Password(sha512 hashed), User->NickName)
    • 로그아웃(logout/) : 로그아웃 처리
    • 회원정보 수정(edit_user_info/)
      • form : 회원정보 수정 폼 출력
      • process : 회원정보 수정 처리(GET : User->idx)(POST : User->id, User->Password(sha512 hashed), User->NickName)
    • 회원탈퇴(withdraw/)
      • form : 회원탈퇴 전 비밀번호 입력 폼 출력
      • process : 회원탈퇴 처리(GET : User->idx)
  2. /ToDoList/
    • ToDoList 출력(/) : ToDoList 출력
    • ToDoList 추가(/insert) : ToDoList 추가(POST : ToDoList->UserTableIdx, ToDoList->Title, ToDoList->Context)
    • ToDoList 삭제(/delete) : ToDoList 삭제(GET : ToDoList->idx)
    • ToDoList 수정(/update) : ToDoList 수정(GET : ToDoList->idx) (POST : ToDoList->Title, ToDoList->Context)

보안 설계

기능 구현 중 발생될 수 있는 취약점 나열, 보안방안 추가

XSS, SQL Injection 관련 취약점 제외(Django에서 자동 보안)

로그인 기능 계정 BruteForce 취약점 -> recaptcha 사용, 동일 ip의 5회 이상 로그인 시도 시 10분간 ip Block

  1. 로그인
    • 계정 BruteForce 취약점 -> recaptcha 사용 or 동일 ip의 5회 이상 로그인 시도 시 10분간 ip Block
    • packet sniffing을 통한 user password 노출 취약점 -> SSL 암호화 사용 or pw를 front에서 hash 한채로 전달
  2. 회원가입
    • 중복 계정 회원가입 -> 회원가입 시 id 중복 체크
    • packet sniffing을 통한 user password 노출 취약점 -> SSL 암호화 사용 or pw를 front에서 hash 한채로 전달
  3. 로그아웃

  4. 회원정보 수정
    • User->idx 조작 -> 전달된 User->idx와 세션 id로 검색된 User->idx 비교
  5. 회원탈퇴
    • User->idx 조작 -> 전달된 User->idx와 세션 id로 검색된 User->idx 비교
  6. 로그인된 회원의 ToDoList 출력

  7. ToDoList 추가

  8. ToDoList 삭제
    • ToDoList->idx 조작 -> 전달된 ToDoList->idx에 레코드의 UserIdx와 세션 id로 검색된 user->idx 비교
  9. ToDoList 수정
    • ToDoList->idx 조작 -> 전달된 ToDoList->idx에 레코드의 UserIdx와 세션 id로 검색된 user->idx 비교