2. 팀 프로젝트 파일의 압축을 풀고 import 시킨다.
Import시 <errors running builder 'JavaScript
validator' on project (프로젝트 이름)>이와 같은 에러가
발생하는 경우 http://fillin.tistory.com/2 블로그를 참조해보자
10. 오라클에서 직접 데이터를 넣었다.
참고로 쿼리문을 이용해 넣을 생각이었지만
이상하게 자꾸 틀린 value 값을 입력한다는 에러가 발생해서
행추가 기능을 사용해서 입력했다.
11. 성공한 결과이다. 다만 한가지 결점이 있다.
회원 가입 페이지를 보면 주소 같은 값은 account 테이블이 아닌
Info 테이블에 저장된다. 두 테이블이 연동되어 있어서 그런듯하다.
하지만 지금 같은 방법으로는 처음 오라 클 에서 직접 입력했던 사용자
는
Info 테이블에 값이 존재하지 않게 된다. 따라서 정상적인 사용자로 이
용하기에는 부적합하다. 비정상적인 사용자는
차후 삭제 시키는 걸로 한다.
12. 관리자 메뉴에는
권한을 부여하는
기능이 존재한다.
하지만 그 권한
을 부여할
최초의 관리자는
오라클에서 설정
해준다.
관리자로 로그인
하면 mypage가
Admin으로 바
뀐 것을 볼 수 있
다.
17. 맵핑마다 출력문구를 배치하여 client 의 Q&A게시판 화면 요청이
어느 맵핑을 타는지 추적한다. 확인 결과
Value = “/Qalist” 맵 루트를 탄다.
(나중에 알았지만 아래 화면처럼 URL만 확인하면 금방 알수 있다.)
18. Q&A 와 Board 코드의 비교이다.
Model.addAttribute () 부분은 GUI 제작 때 사용했던 기억이 난다.
표를 만들 때 위의 속성을 표시해주는 부분과 연관이 있다.
(현재 문제가 있는 부분이 이곳 근처이다.)
19. 해당 맵핑의 시작하는 부분, 중간부분, 끝나는 부분에 검사용
출력 코맨트를 첨부 하여 문제가 발생하는 부분을 찾는다.
(결과 : test-QABoard-Alist-middle이 출력되지 않았다.
문제는 중간 부분에 있었다.)
20. 중간 부분의 코딩이다. 추적을 위해 심어놓은 코맨트가 작동하지 않는 이유는
윗부분인 if 문 두 개중 하나 혹은 둘 다 작동하지 않기 때문이다.
Count와 endPage, pageCount를
모두 출력해봐서 if문의 조건과 비교해본다.
결과는 if(count > 0) if(count >=0) 로
코딩을 수정함으로 문제는 해결됐다.
22. 보면 이름과 예약날짜는 텍스트 필드
방 번호는 select 박스로 되어있다.
(가격은 어차피 비활성화 되어있으므로 논외)
여기서 방 번호를 설정하면 이름과
예약날짜 방 번호가
모두 초기화되는 문제가 있었다.
23. URL을 보면 굉장히 수상한 부분이 발견된다.
방 번호를 203으로 선택해서 문제가 발생한 화면인데
조금 전 화면과 거의 같지만 URL 끝부분에
?roomNum=203 이라는 부분이 추가되어 있다.
24. 브라우저에서 확인 가능한 소스와
이클립스에서 소스를 비교하던 중
문득 “사이트 에러나 소스 에러는 나지 않았지?”
라는 생각이 들었다.
그리고 URL이 바뀌는 것과 데이터가 초기화
되는 부분을 고려해보니
DB의 “아직 입력되지 않은 데이터를
불러오는 것은 아닐까?” 라는 생각이 들었다.
33. 모조리 실패.
나중에는 소스를 고칠 때마다 에러 메시지가 뜨는
비참한 상황에 부딪히게 되었다.
(여기에는 결과 위주로 적지만 혹시나 4시간에 걸친
탐색과정이 어떤 논리로 진행됐는지 궁금하신 분은 개인적으로
연락바랍니다.)
34. 문제 해결의 계기가 된 것은 게시판코딩이었다.
(등잔 밑이 어둡다라는 말이 현실이 되었다…)
게시판의 제목이나 글 내용은 DB에 한글로 잘만 입력되고 있었던것
양쪽 파트의 코딩을 비교하니 한글 깨짐의 원인은
get 방식과 post 방식의 차이라고 결론이 나왔다.
(수업시간에 몇 번 강조되었지만 이렇게 애먹일 줄은 몰랐다…)
35. 구글에 검색어로 “spring get 한글 깨짐” 이라고 입력하니
금방 찾을 수 있었다. 초보 개발자들이 한번쯤은 걸리고 넘어가는
문제라고 한다.
하긴 코딩에 문제가 있는 게 아니라 서버 쪽 코딩을 수정해야 하니
경험이 없으면 쉽게 생각이 나지 않을 것이다…
36. DB에 정상적으로 입력된 모습이 보인다.
아직 테스트를 더 해야 하지만 게시판 등에서 실행했을 때는
작성자의 이름이 깨지지 않고 정상로딩 되는 것이 확인되었다.
40. 덧글을 입력해서 submit 시켜주는 코딩을 발견했다.
Action 설정을 확인해서 이 다음 과정이
QACommentInsert 라는 것을 알수있다.
(JSP 파일목록에 보이지 않으면 분명히 컨트롤러 쪽에 있다)
41. QABoard 덧글이 문제 였으니 당연히 QABoardController를
확인한다. 내려가다 보면 익숙한 value 값이 눈에 들어온다.
위 화면에서는 System.out.println()을 여러 개 배치하여
어느 부분에서 에러가 나오는지 확인하였다.
42. 위에서 출력한 값들의 결과이다.
보이는 대로 3번째 추적 구문이 출력되지 않았다.
그러므로 2번째와 3번째 추적 구문 사이에 있는
qaboarddao.QACommentInsert(qr);
여기서 문제가 발생했다는 것을 알 수 있다.
43. 여기서 오류화면과 방금 전의 추적구문을 비교해보면
이상한 점이 발견된다.
SQL문에서 받아야 할 값을 다섯 개인데 보내주는 값은
네 개뿐이다.(오류메시지를 이해했다면
이 결론에 도달하는데 10초도 안 걸릴 것이다…참고로
필자는 단지 거북하다는 이유로
추적방식을 썼다가 1시간 걸렸다.)
44. 여기까지 오면 해결은 간단하다.
문제가 되는 SQL문을 지워버리면 된다.
앞부분의 username과 뒷부분의 UserName 을 삭제하면
덧 글 기능이 정상작동하기 시작한다.