일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- javascript
- 풀스택
- 웹페이지
- c programming
- 비밀번호찾기
- spring
- 프레임워크
- 제이쿼리
- 프론트엔드
- 백엔드
- 오라클
- dbms
- Binding
- html5
- 네비게이터
- 서블릿
- 웹개발
- 미로 생성 알고리즘
- 마이바티스
- 로그인
- jsp
- css3
- Linked List
- jQuery
- mybatis
- 회원가입
- Ajax
- 스프링
- MVC
- 웹서비스
- Today
- Total
목록풀스택 (7)
Programmer's Progress

게시글 삭제 구현 과정을 설명하기 전에 짚고 넘어가야 할 것이 있다. 먼저 기존의 코드 중에서 새로운 게시글, 메시지 번호를 얻는 방법을 변경하였음을 밝힌다. 기존 방식은 이렇다. SELECT NVL(MAX(article_id),0)+1 FROM free_board와 같이 현재 존재하는 게시글들 중에서 가장 게시글 번호가 큰 게시글의 번호 + 1을 새로운 게시글에 할당한다. 이 방식에는 큰 문제가 있었다. 1. 현재 게시글 목록에 번호가 1, 2, 3인 게시글들이 있고 각각 서로 다른 탭에서 참조하고 있다고 가정하자. 2. 첫 번째 탭에서 3번 게시글을 삭제하고, 다시 새로 게시글을 작성한다. 3. 두 번째 탭에서 기존 3번 게시글을 삭제하려고 하면, 이미 삭제된 게시글이 아닌, 2번 과정에서 작성한 새..

글을 수정하는 동작은 다음 포스팅에서 다룰 예정이다. 이유를 간단하게 밝히자면, 게시글 자체의 제목, 내용을 DB에서 새로운 내용으로 UPDATE 하는 것 자체는 정말 쉬운 일이지만, 해당 게시글에 첨부된 이미지 파일들의 경우 이것이 기존에 존재하는 이미지 파일인지 아닌지, 기존 이미지 파일을 완전히 삭제하려는 것인지 단순히 수정하려는 것인지 판단하는 것이 상당히 복잡한 과정을 거쳐 이루어지기 때문이다. 만약 게시글당 첨부할 수 있는 이미지 파일이 최대 1개로 고정되어있다면 단순히 글을 수정할 때 업로드하는 이미지 파일의 이름과 서버에 저장된 이미지 파일의 이름이 같은지 다른지 판단해서 처리하면 쉽지만 첨부한 파일이 여러 개인 경우에는 그렇게 할 수가 없기에 방법을 고안하느라 구현 시간도 오래 걸렸다. ..
앞서 언급했듯이, 비밀번호는 절대로 복호화 가능한 형태로 암호화해서는 안 된다. RSA든, AES든, DES든 어떠한 암호화 알고리즘을 사용하더라도 복호화가 가능하다면 이 비밀번호가 담긴 레코드를 탈취당했을 때 큰 문제가 발생할 것이다. 따라서 복호화가 불가능한, 단방향 해싱 알고리즘인 SHA512와 랜덤 한 값 SALT를 갖고 비밀번호를 암호화하였다. 그러나 복호화가 불가능하기 때문에 비밀번호 찾기를 구현하는 데 있어서 큰 문제가 있었다. 복호화가 불가능하기에, 기존의 비밀번호가 무엇인지 도저히 알 수가 없다는 것이다. 단순하게 JS의 alert( )를 이용해 기존 비밀번호를 출력하기에는 큰 문제가 있었다. 기존 비밀번호가 무엇인지 알지 못할 뿐만 아니라, 알고 있다고 하더라도 이 비밀번호를 DB에서 ..

메시지 보관함을 구현하기에 앞서 먼저 메시지 관련 DB 스키마를 변경했음을 밝힌다. 먼저 기존에는 SYS_GUID( ) 함수를 이용하여 중복될 확률이 거의 없는 난수 값을 사용하여 메시지 ID로 사용했었다. 물론, 이 방식도 나쁘지 않다고 생각했지만, 사용하면 할수록 불편하다는 느낌을 많이 받았다. 디버깅도 그렇고, DB 질의를 할 때에도 16바이트 난수 값을 가지고 처리하려니 상당히 어려웠다. 따라서 이를 INT타입으로 변경했는데, 사실 엄청 대단하고 규모가 큰 서비스도 아니고 간단한 웹 서비스를 구축하려는 것이기에, 게시글이며 메시지며 그 숫자가 21억을 넘지는 않을 것이라 판단하고 INT타입으로 데이터 타입을 변경했다. 삭제 검색 송신 수신 위의 JSP코드에서 id가 LIST인 table태그에 메시..

이번에는 사용자끼리 메시지를 주고받을 수 있도록 메시지 기능을 추가할 것이다. 메시지 기능을 추가하기에 앞서 먼저 메시지에 대한 스키마 다이어그램을 소개하자면 보는 것과 같이 송신함과 수신함을 위한 테이블을 따로 구성하였는데 이는 메시지를 보낸 사람이 해당 메시지를 자신의 송신함에서 지우더라도, 즉 송신 기록을 제거하더라도 수신자에게는 그대로 해당 메시지가 남아있을 수 있도록 하기 위함이다. 물론, 송신 메시지인지, 수신 메시지인지 구분하는 값을 더 추가한다면 하나의 테이블로도 처리가 가능하긴 하지만, 하나의 릴레이션이 너무 커지면 데이터 접근 속도도 그렇고 여러 가지 면에서 상당히 불리한 점이 많기 때문에, 일부러 분할하여 처리하였다. 메시지의 기본키는 SYS_GUID( ) 함수를 이용하여 16바이트의..

현재 개발 중인 웹 서비스는 보안을 전혀 신경 쓰지 않았었다. 클라이언트에서 서버로 데이터를 전송할 때, 서버에서 모델을 통해 DB에 데이터를 저장할 때 등등 만약 개발이 완료된 웹서비스가 보안 기능을 전혀 제공하지 않는다면 문제가 생길 것이다. 네트워크 보안 수업을 들으면서 SSL을 통해 대칭 암호키를 비밀리에 주고받을 수 있다면 좋겠지만 지금 당장으로는 지식이 부족하여 적용이 어렵다고 판단했고, 비대칭키 암호화를 통해 이를 부분 해결하기로 했다. 원리는 간단하다. 로그인 버튼을 누를때마다 서버는 클라이언트에게 랜덤 한 공개키 값을 보내주고 그에 대응되는 비밀키를 세션에 저장한다. 클라이언트는 전달받은 공개키로 비밀번호를 암호화한 후에 AJAX요청으로 암호화된 비밀번호와 암호화되지 않은 ID를 전달한다..

데이터베이스는 여러 의미 있는 값을 지닌 기록들인 데이터를 관련 있게 모아놓은 것을 말한다고 한다. 데이터베이스를 배우기 전까지는 나는 파일의 형태로밖에 데이터를 다루지 못했다. 가령 성적을 입력하면 평점과 이수 학점을 보기좋게 계산해서 DOS창에 일일이 수작업으로 GUI를 구성하여 출력하는 C 프로그램을 제작했던 경험이 있는데, 이 프로그램의 문제는. txt 파일의 형태로 데이터를 기록하다 보니 당연히 띄어쓰기가 잘못되거나, 파일의 경로가 달라지거나, 이름이 같은 사람에 대해서는 서비스를 제공할 수 없다거나... 데이터를 체계적으로 관리할 수 없었다는 것이었다. 때문에 프로그램의 규모가 상당히 작아질 수밖에 없었다. 그러나, 데이터베이스와 DBMS에 대한 공부를 하면서 이제 실전에 적용할 수 있겠다는 ..