**로그인 처리
1. 암호화가 되어있지 않은 경우
=> 아이디(이메일등)와 비밀번호를 받아서 일치하는 데이터가 있는지 확인하는 방식으로 처리
=> 필요한 데이터를 읽어와야 함
=> 아이디와 비밀번호를 한번에 비교하는 경우 입력된 데이터를 검사하여 SQL 예약어가 있는지 확인해봐야 함
-- SQL injection 예시
select 컬럼이름나열
form 유저테이블
where id = ? and password = ?
=> id가 abc이고, password가 1234인 데이터가 존재
- id를 abc, password를 23으로 입력시 일치데이터가 없으므로 로그인 실패
- id를 abc, password를 23 or 1 = 1 로 입력시 true 리턴
=> 데이터 입력의 유효성검사시 SQL예약어 등의 단어는 입력할 수 없도록 해야 함
=> 닉네임, 아이디를 관리자를 유추할수 있는 단어도 사용할 수 없도록 처리(ex-root)
2. 비밀번호가 암호화 되어있는 경우
=> 아이디를 가지고 아이디에 해당하는 정보를 가져옴
=> 입력한 비밀번호와 암호화된 비밀번호를 비교하는 방식으로 처리
=> DAO에서는 데이터를 찾아오는 역할만 하고, service에서 로그인처리를 담당
=> REST API를 구축하여 여러서비스를 하나의 서버로 제공하는 경우
- 일반적인 데이터 출력은 request에 저장하여 처리, 로그인은 session에 저장하여 처리하는 것이 좋음
=> Web의 경우 페이지 이동이 발생하도 다시 로그인을 하지 않는 형태로 구현되는 경우가 많은데 이때 페이지 이동이 발생해도 로그인 정보를 유지하려면 session을 이용해야 함
- request는 하나의 요청에서만 데이터를 유지하므로 페이지 이동시 내용이 소멸
3. web이 아닌경우에는 로그인시 로그인 정보를 계속 유지할 수 있도록 어떤 변수에 저장해 두어야 함
=> URL : http://localhost:8081/user/ -> File : WebContent/member/main.jsp
- Web Programming에서 상대 주소는 URL을 기준으로 설정해야 함
=> 단순 페이지 이동은 Controller에서 포워딩
=> 페이지 이동하고 입력하여 처리하는 서비스들은 동일한 URL을 사용하고 method를 GET, POST로 구분하여 처리
- 로그인, 데이터 삽입, 데이터 수정, 삭제시 비밀번호 입력처리등이 대표적
**Script 언어
=> 미리 컴파일 하지 않기 때문에 근본적으로 IDE가 에러를 표시해주지 않음
=> 줄 단위로 번역해가면서 실행 - 문장의 끝을 표시하는 기호가 없음
=> 줄 단위로 번역하기 때문에 한줄에 2개의 명령이 사용되면 이때 구분기호가 필요 - ';'
=> 중간에 에러가 발생시 거기까지만 수행
=> 이런 형식의 언어들을 데이터를 가져올때 데이터가 없으면 null을 리턴
- ex) var mainbtn = documentById("kbtn") - 에러가 아니라 mainbtn에 null이 대입
- mainbtn.?를 하면 그때 에러가 발생
=> 이런 스크립트 언어로는 javascript, python, kotlin, swift등이 있음
**요청 처리 디버깅
1. 요청 페이지에서 요청이 제대로 발생하는 지 확인 - 이벤트가 제대로 처리되는지 확인
=> 자바스크립트 코드인 경우 이넵트 처리가 제대로 이루어지지 않으면 이벤트 발생 객체를 호가인
=> 다른 Application의 경우도 객체가 제대로 생성되었는지 확인
2. 요청이 제대로 Controller에 전달되는지 확인
=> 스크립트 코드에 오타가 없는지 확인
=> ajax의 경우 open의 첫번째 매개변수와 두번째 매개변수를 확인
=> Controller의 요청을 처리하는 부분에 콘솔에 텍스트를 출력하는 코드를 작성
=> 서버를 다시 실행하고 요청을 전송
=> Controller의 텍스트 미출력시 자바스크립트에 오류가 없는 경우라면 URL or Controller의 URL패턴이 잘못된 것
3. Controller에서 호출하는 서비스 클래스의 메소드를 확인
4. serviceImpl 클래스의 메소드에서 파라미터를 확인
=> 입력 파라미터가 미출력시 인코딩을 확인하고 jsp 파일의 name과 getparameter의 매개변수 명이 같은지 확인
- 이름이 다르면 null이나 다른 값이 출력됨
5. DAO 클래스의 메소드를 호출하는 지 확인
6. DAO 클래스의 메소드에서 파라미터를 출력
=> 파라미터 미출력시 ServiceIMPL클래스에서 DAO 메소드를 호출할 때 파라미터를 제대로 만들어 주었는지 확인
7. DAO 클래스의 메소드에서 SQL을 확인하고 데이터를 제대로 바인딩 했는지 확인
8. DAO 클래스의 메소드에서 return 하기 직전에 return 되는 값을 출력
=> return 되는 갑싱 이상하면 위에서 return 되는 데이터르 ㄹ제대로 만들었는지 화깅
=> 삽입, 삭제, 갱신 작업의 경우 SQL을 실행하지 않고 return 만 한 것은 아닌지 확인
9. ServiceImpl 클래스의 메소드에서 DAO의 결과를 받는 부분 하단에서 읽은 데이터를 제대로 저장했는지 확인
=> null을 저장한 상태에서 jsp에서 el을 이용하여 출력시 아무것도 출력되지 않음
=> el은 null을 출력하지 않음
10. Controller 클래스 요청 처리부분에서 데이터 출력을 위한 jsp 파일을 확인하고 앞에서 만든 데이터 출력코드 확인
11. 예외가 발생하지 않은 경우 디버깅
=> 예외 발생시 예외 내용을 읽어봐야 함
=> 스크립트 오류도 없는 경우에 의미가 있음
=> 스크립트 오류 중에서 404오류라면 Controller와 View만 확인해도 됨
**오라클 & MySQL & MongoDB
=> 국내 대기업, 금융, 공공기관 SI : Spring + MyBatis + Oracle
=> 중견, 강소 : Spring + JPA + MySQL
- Python or Node.js + MongoDB
Page : 현재 페이지에서만
Request : 포워딩에서 쓸때만(리다이렉트, 인터넷 종료시 사용불가)
Session : 세션 계속 공유
Application : 애플리케이션
불용어 사전 : 사용해서는 안되는 단어를 txt파일등에 입력해 놓고 사용하지 못하게 하는것(만들어서 사용해보기)
'수업 정리' 카테고리의 다른 글
60일차 수업정리(Spring - lombok) (0) | 2020.07.01 |
---|---|
59일차 수업 정리(Spring) (0) | 2020.06.30 |
57일차 수업정리(회원 가입 관련 Tip) (0) | 2020.06.26 |
수업 외 정리 (0) | 2020.06.24 |
55~58일차(회원가입과 로그인) (0) | 2020.06.24 |