#2018.12.15 개발일지
1. 개인적인 개발공부 시작하고 첫 주말 토요일.
나름 진도 뺀다고 했으나, 생각만큼은 못뺐다.
금요일에 기가 쏙 빨려서, 오전에 좀 푹 쉬고 공부 시작.
게시판 만들기는 현재진행중이다. -ing
2. 게시판만들기 Summary
* 오늘의 진도는 하기 포스팅을 바탕으로 진행한 개인적인 공부 입니다.
[본격 게시판짜기 Part1.2 - 게시판도 HTML부터] 글 입력폼 http://cusmaker.tistory.com/53
[본격 게시판짜기 Part1.3 - Dom 맛보기 ] 글입력폼 검사 http://cusmaker.tistory.com/48
* 작일 수행한 개발은 정적인 리스트 페이지 (http://syeon02.tistory.com/25 참고).
오늘은 소스를 추가해서 글쓰는 페이지를 만들 예정
Ⅰ. [본격 게시판짜기 Part1.2 - 게시판도 HTML부터] 요약
1)
1 | <a href="write.html">글쓰기</a> | cs |
- intex.html의 </table> 밑에 하기 코드 추가.
index.html 의 글쓰기 링크를 클릭하면, 404 에러가 발생.
write.html 파일을 미생성 했기 때문 → index.html과 동일한 디렉토리에 write.html 파일을 추가
동일한 디렉토리에 write.html을 생성하지 않았다면, 절대 혹은 상대경로로 경로를 명확히 지정해준다.
[ 절대경로 Vs 상대경로 ]
절대경로 |
① URL의 전부를 적어줌. WebContent를 사용하므로 경로는 아래와 같음 http://localhost:8000/board/write.html ② '.'을 사용하지 않고 '/'만 활용하여, 프로젝트 이름부터의 경로를 적어줌 /board/write.html |
상대경로 |
① 말 그대로 상대적인 경로. ② WebContent 폴더가 기준이 되는 루트폴더 ( WebContent 폴더에서 아무리 ../../로 접근하여도 더 이상 상위폴더로 이동X ) |
2)
1 2 3 | <form action="index.html" method="post"> </form> | cs |
- <form> 태그 추가: <form>태그는 데이터가 담긴 input 태그들의 값을 전송하기 위해서 사용 됨.
<table> 태그 처럼 안의 태그들을 감싸는 태그라고 생각하기.
- action 속성: 데이터들을 가진 form을 action에 지정 된 페이지로 보내주겠단 의미
- method: form을 보내는 방식으로 대표적으로 get과 post가 있음. 몇 가지 더 있었던 것 같은데 정리가 필요해보임
GET |
POST |
① 모든 파라미터 값을 url에 query string 형식으로 전환 ② 파라미터 값이 길어질 수록 url이 길어지기 때문에 값의 길이 제한이 있음 ③ url 형식에 맞지 않는 파라미터 이름/값은 encoding 되어야 할 필요성이 있음 ④ 요청 url에 text형식으로 포함 됨 → 웹브라우저 사용자의 눈에 직접적으로 표시 될 수 있음(예: 구글에 검색 할 때) ⑤ 사용자의 눈에 직접적으로 표시 되기 떄문에, 로그인 비밀번호 정보를 get 방식으로 전달하면 문제가 발생 할 가능성이 있음 ⑥ ①~⑤의 이유로 단순한 페이지 요청에 많이 쓰임 |
① 모든 파라미터는 HTTP Body에 포함 되어 전달 ② Body에 포함되어 전달되므로, 길이 제한 없음 ③ HTTP Body에 포함되므로, 웹브라우저 사용자의 눈에 직접적으로 표현되지 않음 ④ 사용자의 눈에 직접적으로 표시 되지 않기 떄문에, 사용자가 원하지 않는 정보가 서버로 전달 될 가능성 有. BUT, 사용자가 입력하지 않은 정보가 전달 될 가능성은 거의 없음. ⑤ 따라서, 대부분의 웹 브라우저에서는 post 방식의 요청에 대한 응답 페이지를 새로고침으로 요청할 때는 경고를 통해서 사용자에게 정보 전송에 대한 confirm을 받음. (예: 체크아웃 페이지에서 새로고침시) ⑥ 사용자의 눈에 직접 표시되지 않는다고 하더라도, http response message를 분석 했을 때는 얼마든지 유지될 수 있으므로 단순하게 post방식을 썼다고 보안성이 높아지지 않음 ???? 그럼 어떻게 해야 보안성이 높은거지 ⑦ 따라서 서버로 데이터 전송을 할 목적으로 많이 사용 됨. |
3)
1 2 3 | 제목: <input type="text" name="title" /><br/> 작성자 : <input type="text" name="writer" /><br/> 날짜 : <input type="text" name="regdate" /><br/> | cs |
- input 태그 채워넣기 (form 태그 안에 입력하기)
- name: 해당 값이 DB로 넘어갔을 때, 이를 인지할 수 있도록 해주는 변수명이라고 생각하면 됨.
- <br/>: break의 약자로 개행해주는 역할
4)
1 | <input type="submit" /> | cs |
- 해당 fom을 전송하는 기능을 가지고 있음
▶Ⅰ. 1) ~4) 까지 수행한 최종코드
1 2 3 4 5 6 7 8 | <body> <form action="index.html" method="post" onsubmit="return formCheck();"> 제목 : <input type="text" name="title" /><br/> 작성자: <input type="text" name="writer" /><br/> 날짜: <input type="text" name="regdate" /><br> <input type="submit" /> </form> </body> | cs |
Ⅱ. [본격 게시판짜기 Part1.3 - Dom 맛보기 ] 글입력폼 검사 요약
*Javascript를 이용하여, 입력 값 유효성 검증하기
- Javascript: 스크립트 언어로써 HTML과 마찬가지로 웹브라우저의 엔진에서 작동.
스크립트는 언어 특성상 문법이 엄격하지 않고, 자유도가 넓어서 많은 라이브러리들이 존재하는 강력한 언어임.
1)
1 2 3 | <script> alert(document.forms[0].title.name); </script> | cs |
- write.html 소스안 </form> 바로 밑에 입력
: 보통은 <head>태그 안에 집어 넣는 것이 일반적인데, 스크립트는 페이지가 순차적으로 로드 되기 때문에 form 태그 위쪽에 소스가 위치하게 되면 동작하지 않을 수 있음
- document 자세한 내용은 직접 찾아보기
: 하위 객체에 접근하기 위해서는 . 으로 접근
: 아이디를 지적하고 getElementById() 함수를 사용하여 직접 접근도 가능
- document.forms[0]: 문서내에서 form 태그들을 찾아 첫번째 form 객체를 선택
- title: input 태그에서 name 속성에 지정한 값에 접근 가능
- alert으로 경고창 띄움: title에서 name 값을 alert() 함수를 통해 출력하게 되는 것.
▶ Ⅱ. 1)까지 수행한 최종코드 및 결과
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <body> <form action="index.html" method="post" onsubmit="return formCheck();"> 제목 : <input type="text" name="title" /><br/> 작성자: <input type="text" name="writer" /><br/> 날짜: <input type="text" name="regdate" /><br> <input type="submit" /> </form> <script type="text/javascript"> function formCheck(){ alert(document.forms[0].title.name); } </script> </body> | cs |
2) 입력값 검사하기
: 페이지에서 값이 모두 입력 된 후에, submit 버튼을 누르는 시점에서 검사가 이루어져야겠다.
1 | <form action ="index.html" method="post" onsubmit="return formCheck();"> | cs |
- onsubmit : input태그 중 type이 submit인 버튼을 클릭했을 때, 폼을 전송하기 전에 이벤트를 캐치하여, 이때 동작 할 자바스크립트 구문을 연결해주는 이벤트 속성. 여기서, return은 formcheck() 함수가 반환하는 Boolean 값을 토대로 submit을 할 것인지 안 할 것인지를 정하게 됨.
3) formcheck() 함수 완성하기
- 정규식을 사용하여, 유효성 검사를 디테일하게 진행하기
① 숫자인지 판별 정규식
: .match(/^\d+$/ig)
② asdf@asdf.com 형식을 판별 정규식
: .match(/^(\w+)@(\w+)[.](\w+)$/ig)
③ sdf@asdf.co.kr 형식을 판별하는 정규식
: .match(/^(\w+)@(\w+)[.](\w+)[.](\w+)$/ig)
▶ Ⅱ. 3) 최종코드 및 결과
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 31 32 33 34 35 36 37 | <script type="text/javascript"> function formCheck() { var title = document.forms[0].title.value; var writer = document.forms[0].writer.value; var regdate = document.forms[0].regdate.value; var content = document.forms[0].content.value; if (title == null || title == ""){ alert('제목을 입력하세요'); document.forms[0].title.focus(); return false; } if (writer == null || writer == ""){ alert('작성자를 입력하세요'); document.forms[0].writer.focus(); return false; }else if(writer.match(/^(\w+)@(\w+)[.](\w+)$/ig) == null){ alert('이메일 형식으로 입력하세요'); document.forms[0].writer.focus(); return false; } if (regdate == null || regdate ==""){ alert('날짜를 입력하세요'); document.forms[0].regdate.focus(); return false; }else if(regdate.match(/^\d\d\d\d\d\d+$/ig) == null){ alert('숫자형식(6자리)으로 입력하세요'); document.forms[0].regdate.focus(); return false; } } </script> | cs |
4) DB로 데이터 넘기기 (다음 개발일지 진도 내용...)
- 현 방식대로해도, 역시나 데이터 삽입은 불가 ( html에서 DB로 바로 접속하는 것은 불가능)
* DB 연결가능 언어: 서버에 접속하기 위한 언어로만 가능
- Server side 언어(=백 엔드 언어): JSP, PHP, ASP 등의 웹 프로그래밍 언어
: 웹 언어가 DB에서 데이터를 가져옴 → html, javascript로 표현되어 웹 페이지로 보여줌 ▶ 이런게 웹 프로그래밍
: JSP(Java Server Page)는 웹 언어의 확장자를 가지고, html코드를 포함하기도 함. 자바기반의 웹 프로그래밍 언어
- index.html페이지로 넘어간 form 데이터들을 어떻게 받을 수 있을까?
① html과 javascript만으로는 불가!
② html, javascript: 사용자가 사용하는 웹브라우저의 엔진에서 작동(Client Side언어, 프론트 엔드)
+ 1-1, 1-2, 1-3에서 사용한 html, javascript는 웹 브라우저에게 돌아가기 때문에 웹 서버를 구동하지 않아도 되지만, JSP 파일을 사용하기 위해서는 웹서버가 필요.
'개발 이야기 > 개발일지' 카테고리의 다른 글
2018.12.17 개발일지 (0) | 2018.12.17 |
---|---|
2018.12.13 개발일지 (0) | 2018.12.13 |