** 로그인 처리
1. 암호화가 되어 있지 않은 경우
2. 비밀번호가 암호화 되어 있는 경우
3. Web이 아닌 경우에는 로그인을 했을 때 로그인 한 정보를 계속 유지할 수 있도록 어떤 변수에 저장을 해 놓아야 한다.
** Script 언어
** 요청 처리 디버깅
1. 요청 페이지에서 요청이 제대로 발생하는지 확인 -> 이벤트가 제대로 처리되는지 확인
2. 요청이 제대로 Controller에 전달되는지 확인
3. Controller에서 호출하는 서비스 클래스의 메소드를 확인
4. ServiceImpl 클래스의 메소드에서 파라미터를 확인
5. DAO 클래스의 메소드를 호출하는지 확인
6. DAO 클래스의 메소드에서 파라미터를 출력
7. DAO 클래스의 메소드에서 SQL을 확인하고 데이터를 제대로 바인딩했는지 확인
8. DAO 클래스의 메소드에서 return하기 직전에 return되는 값을 출력
9. ServiceImpl 클래스의 메소드에서 DAO의 결과를 받는 부분 하단에서 읽은 데이터를 제대로 저장했는지 확인
10. Controller 클래스의 요청 처리부분으로 가서 데이터를 출력하기 위한 jsp 파일 이름을 확인하고 jsp 파일이 있는지 확인해보고 jsp 파일에서 앞에서 만든 데이터를 출력하는 코드가 있는지 확인한다.
11. 예외가 발생하지 않는 경우에 디버깅을 한다.
** 오라클 & MySQL & MongoDB
※
로그인 처리
1. 암호화가 되어 있지 않은 경우
- 아이디(이메일 등)와 비밀번호를 받아서 일치하는 데이터가 있는지 확인하는 방식으로 처리한다.
- 필요한 데이터를 읽어봐야 한다.
- 아이디와 비밀번호를 한꺼번에 비교하는 경우는 입력된 데이터를 검사해서 SQL 예약어가 있는지 확인해보는 것이 좋다.
select 컬럼이름나열
from 유저테이블
where id=? and password=?;
- id가 ggangpae1@gmail.com이고 password가 1234인 데이터가 존재할 때
- ggangpae1@gmail.com 입력하고 password를 2345로 입력하면 일치하는 데이터가 없으니까 로그인 실패한다.
- id를 ggangpae1@gmail.com 입력하고 password를 2345 or 1 = 1로 입력하면?
- 데이터 입력의 유효성 검사를 수행할 때 sql 예약어 같은 단어는 입력하면 안되도록 해주어야 하고 닉네임이나 아이디를 관리자를 유추할 수 있는 단어도 사용할 수 없도록 해주어야 한다.
2. 비밀번호가 암호화 되어 있는 경우
- 아이디를 가지고 아이디에 해당하는 정보를 가져온다.
- 입력한 비밀번호와 암호화된 비밀번호를 비교하는 방식으로 처리한다.
- DAO에서는 데이터를 찾아오는 역할만 하고 Service에서 로그인 처리를 담당한다.
- REST API를 구축해서 여러 서비스를 하나의 서버로 제공하는 경우 일반적인 데이터 출력은 request에 저장해서 처리하지만 로그인 만은 session에 저장해서 처리하는 것이 좋다.
- Web 의 경우는 페이지 이동이 발생해도 다시 로그인을 하지 않는 형태로 구현되는 경우가 많은데 이 때 페이지 이동이 발생해도 로그인 정보를 유지할려면 session을 이용해야 한다.
- request는 하나의 요청에서만 데이터를 유지하기 때문에 페이지 이동이 발생하면 내용이 소멸된다.
3.Web 이 아닌 경우에는 로그인을 했을 때 로그인 한 정보를 계속 유지할 수 있도록 어떤 변수에 저장을 해 놓아야 합니다.
URL: http://localhost:8080/User/ -> File: WebContent/member/main.jsp
=>Web Programming에서 상대주소는 URL을 기준으로 설정합니다.
단순 페이지 이동은 Controller에서 포워딩하면 됩니다.
페이지 이동을 하고 입력을 해서 처리하는 서비스들은 동일한 URL을 사용하고 method를 GET 과 POST로 구분해서 처리합니다.
로그인, 데이터 삽입, 데이터 수정, 삭제 시 비밀번호 입력 처리 등이 대표적입니다.
※ Script 언어
미리 컴파일하지 않기 때문에 근본적으로 IDE가 에러를 표시해주지 않는다.
줄 단위로 번역해가면서 실행 - 문장의 끝을 표시하는 기호가 없다.
줄 단위로 번역하기 때문에 한 줄에 2개의 명령이 사용되면 이 때 구분 기호가 필요 - ;
중간에 에러가 발생하면 거기까지만 수행한다.
이런 형식의 언어들은 데이터를 가져올 때 데이터가 없으면 null을 리턴한다.
var mainbtn = document.getElementById("kbtn") - 에러가 아니고 mainbtn에 null이 대입
mainbtn.? 를 하면 그 때 에러가 발생
이런 script 언어로 javascript, python, kotlin, swift 등이 있다.
※ 요청 처리 디버깅
1. 요청 페이지에서 요청이 제대로 발생하는지 확인 -> 이벤트가 제대로 처리되는지 확인
- 자바스크립트 코드인 경우 이벤트 처리가 제대로 이루어지지 않으면 이벤트 발생 객체를 확인해봐야 한다.
- 다른 Application의 경우도 객체가 제대로 생성됐는지 확인한다.
2. 요청이 제대로 Controller에 전달되는지 확인
- 스크립트 코드에 오타가 없는지 확인
- ajax의 경우 open의 첫 번째 매개변수와 두 번째 매개변수를 확인한다.
- Controller의 요청을 처리하는 부분에 콘솔에 텍스트를 출력하는 코드를 작성하여 확인한다.
- 서버를 다시 실행하고 요청을 전송한다.
- Controller의 텍스트가 출력이 안되면 자바스크립트에 오류가 없는 경우라면 URL이 잘못되었거나 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 파일 이름을 확인하고 jsp 파일이 있는지 확인해보고 jsp 파일에서 앞에서 만든 데이터를 출력하는 코드가 있는지 확인한다.
11. 예외가 발생하지 않는 경우에 디버깅을 한다.
- 예외가 발생했으면 예외 내용을 읽어봐야 한다.
- 스크립트 오류도 없는 경우에 의미가 있다.
- 스크립트 오류 중 404 오류라면 Controller와 View만 확인해도 된다.
※ 오라클 & MySQL & MongoDB
- 국내 대기업, 금융, 공공기관 SI : Spring + MyBatis + Oracle
- 중견기업이나 강소기업 : Spring + JPA + MySQL
- Python 또는 Node.js + MongoDB
'안드로이드&IOS 앱 개발자 양성' 카테고리의 다른 글
안드로이드&IOS 앱 개발자 양성(60일차) (0) | 2020.07.01 |
---|---|
안드로이드&iOS 앱 개발자 양성(59일차) (0) | 2020.06.30 |
안드로이드&iOS 앱 개발자 양성(57일차) - 데이터 삽입, 파일 업로드, 회원가입 요청 디버깅, 비밀번호 암호화, 데이터 암호화, 암호화, form의 Data를 ajax로 전송 (0) | 2020.06.26 |
안드로이드&iOS 앱 개발자 양성(55~6일차) - ajax와 REST API Server 구축 및 암호화, 더보기 구현, ajax 처리, 회원 가입과 로그인 (0) | 2020.06.24 |
안드로이드&iOS 앱 개발자 양성(53~4일차) - 데이터베이스 연동, Connnection Pool, 나누어서 읽기 (0) | 2020.06.22 |