오늘은 Spring으로 진행한 게시판 만들기 프로젝트에 대한 내용이다. 하필이면.. 티스토리를 시작하기 전에 프로젝트를 하는 바람에 모양새가 영 좋지 못하게 됐다. 일단 아래 두 개 링크를 이용해서 기본적인 기능(게시판 목록, 글 생성, 글 상세, 수정, 삭제, 회원가입, 로그인)은 구현을 마쳤다.
https://doublesprogramming.tistory.com/95?category=736879
https://gangnam-americano.tistory.com/11?category=976794
다만 한가지 과제가 있었는데... 아직 스프링 초보인 나에게 비밀번호 암호화 기능은 너무 어려운 것이였다!
보통은 스프링 시큐리티를 이용해서 많이 하는 듯 했다. 스프링 시큐리티는 bcrypt라는 암호화 알고리즘을 사용한다고 들었는데 아직 보급형 프로젝트기도 하고 하반기에 업그레이드 예정임을 감안하여 SHA-256을 이용했다. (사실 256인줄 알았는데 뜯어보니 512..) 하지만 많은 보안관련 글에서는 bcypt를 추천하는데 그 이유가 SHA를 암호해싱에 사용하는 암호화 함수들은 GPU를 이용한 공격에 취약하며(SHA family는 연산속도가 매우빠르기 떄문) 많은 메모리를 필요로 하지 않기 때문이다.
따라서 어떠한 암호화 알고리즘의 결함이라거나 그러한 문제가 아니라 충분한 시도 횟수, work-factor가 존재한다고 가정할 때, 방어자는 좀 더 느리게 설계된 암호화 방식에 의존하는 것이 낫기 때문이라고 한다.
요약 하자면,
- 기본 해시 함수인 SHA, MD5등을 이용하는 것은 빠른 처리속도로 인하여 보안에 취약하기 때문에 충분히 사용자의 password를 보호할 수 없다. key derivation function를 사용하여 암호화를 진행하자.
- 해시를 강하게 하기 위해서는 무작위 salt와 함께 반복적인 해싱작업이 필요하다.
- ISO-27001 보안 규정을 준수해야하는 상황이면 PBKDF2를 사용하자.
- 일반적으로 규정을 준수해야할 상황이 아니면 구현이 쉽고 비교적 강력한 Bcrypt를 사용하자.
- 보안 시스템을 구현하는데 많은 비용을 투자할 수 있다면, Scrpyt를 사용하자.
라고 한다.
사실 나는 암호화 알고리즘에 대해서는 잘 모른다. 하지만.. 백엔드 개발자라면 보안에도 나름 일가견이 있어야 하기에 앞으로는 관련 지식도 함께 공부해볼 예정이다.
다시 프로젝트 이야기로 돌아와서 이제 페이징 처리만 하면 되는데.. 방식이 너무 다양해서 어떤 방식을 채택해야 좋을지 잘 모르겠다.. 일단은 다양한 방법을 시도해보고 내 페이지와 가장 잘 맞는 방식을 채택해 사용할 예정이다.
현재까지 진행상황은
http://www.park-se-hyeon.xyz:8080/board/boardList.do여기서 확인할 수 있다. (하지만 재배포를 아직 못해서 여러가지 버그가 있다는..)
github에서는 최신 코드를 확인할 수 있다.
AWS로 배포하는 과정은 https://windosakacastle.tistory.com/12 이 게시물을 참고했다.
아주 상세하게 설명해주신 덕분에 순조롭게 배포할 수 있었다.
그럼 다음 게시물로 돌아오겠다.
'프로젝트' 카테고리의 다른 글
Ajax 로그인 구현 (0) | 2022.01.20 |
---|