2020-12-15

jsbak·2020년 12월 15일
0

어제

  1. sql 인젝션
    키워드 전달 , 쿼리문이 공격받을 수 있다.
    데이터 검증을 빡시게 한다.
    persistance 단에서 미리 준비된 쿼리가 필요하다.
    preparedStatement

  2. 암호화 알고리즘
    ID, PW 기반, PW 어떻게 보호할 것인가?
    권고하는 알고리즘(국가에서)
    허가된 자(키를 아는자)
    블럭 암호 -> 패딩, 강도를 높여야(CBC, 블럭 체이닝)

    자바 서명 -> private key로 암호화 시킨다.(전자서명), OpenSSL

  3. Object pooling
    dbcp(database connectin pooling), 웹어플리케이션에서는 pooling 반드시 필수

  4. 리플렉션
    getClass(), Class.forName()
    차이 둘다

    객체에 대한 설계 과정이 정의되어 있다.
    -> 모델링 ->
    그 다음 단계 객체를 만들 수 있는 틀(틀에 박혀있는 데로 인스턴스가 만들어진다)

    프레임워크를 사용했지만 앞으로는 프레임워크를 만들어야한다.

    이번주 내에 2번째 수업, Class 안에 모든것을 만들어보기

    어노테이션이용한 마킹

오늘

아이디 저장하기
1. 내가 로그아웃을 하지않고 했을때, 로그인하지 않아도 저절로
2. 체크하고 로그아웃하면 2틀뒤에 들어가면 로그인 했던 입력값이 로그인 필드에 남아있는것
어딘가에는 상태 정보를 저장해야한다.
클라이언트-서버 시스템 이용하는데 어떤 측면에다가 저장할 것인가 (클라이언트, 쿠기를 이용하여 저장한다)
세션에 auth멤버가 자동으로 만료 타임아웃(2틀이상)
ID기억하기를 체크한 경우에만 살아 남아야한다.
그 상태정보는 어딘가에 저장해야하는데 세션에 저장하면 30분뒤에 살아진다. 그러면 데이터베이스에다가 저장한다.
DB 데이터는 PC가 꺼진 경우에도 남아있다. 16진수의 긴문자여을 DB에 집어 넣게 되면 반쪽짜리이다. 그래서 클라이언트에도 저장해야한다.( 그래서 비교해서 동일하다면 Auth정보를 복원하는게 가능해진다. )
DB에 Auth정보나 키를 저장하게끔해야한다. (우리는 심플하게 처리할 예정)

쿠키

쿠키를 어떻게 써야하는지 레시피를 배우기

쿠기의 어떤 정책이 있는지 확인

  • Http 의 stateless의 단점 (대화가 불가능하다)을 보완하기 위해 최소한의 상태 정보를 저장하는 개념.

첫번째 요청과 두번째 요청이 을 식별, 저장
이것을 저장할 두개의 티어가 존재

  • 상태정보를 서버측에 저장 : session
  • 상태정보를 클라이언측에 저장 : cookie
    1. 쿠키 생성
    1. response 에 쿠키를 실어 전송(header-문자 형태로 전송(단점, 저장할 데이터가 문자뿐,header는 문자열만 가능)) (라인 : 상태정보, 바디 : 컨텐츠)
      2진데이터를 문자로 바꾸려는 것 네트워크가 2진데이터만 알수있으니(Base64, 이용 )
      반드시 쿠키의 정책을 고려해야한다( header를 이용하기 때문에 길이, 전송되는 데이터 등에 제한 )
    1. 브라우자가 자기 쿠키 저장소에 저장
    1. 다음 요청시에 쿠키를 서버로 재전송(핵심)( header )
    1. request 를 통해 전송된 쿠키로 상태 복원

    Creates a cookie, a small amount of information sent by a servlet toa Web browser, saved by the browser, and later sent back to the server
    크키제한, 서버에서 클라이언트로 전송. 브라우저에 의해서 저장, 다시 서버로 재전송
    A cookie has a name, a single value
    하나의 name, 하나의 value를 가진다. 필수
    and optional attributessuch as a comment, path and domain qualifiers, a maximum age, and aversion number.
    어떤 정보들을 가지고 있는 지 알 수 있다.

    The servlet sends cookies to the browser by using the 'HttpServletResponse.addCookie' method, which addsfields to 'HTTP response headers' to send cookies to thebrowser, one at a time. The browser is expected tosupport 20 cookies for each Web server, 300 cookies total, andmay limit cookie size to 4 KB each.
    httpservletreponse.addCookie를 통해서 보내며
    한번에 보낼수 있는 쿠키의 갯수는 최대 2o개이며, 총 쿠키의 갯수는 300까지 제한이 된다. 4kb, header에 담아 보낸다.

쿠키의 제약사항

문자열 데이터만 가능
4kb이하의 공간을 차지해야함
여러개의 쿠키설정 가능
도메인당 20개까지 저장 가능
총 300개 까지 저장가능
*저장한도를 넘으면 최근에 사용되지 않은 쿠키부터 자동 삭제

  • 크롬이 가진 쿠키 저장소

  • 엣지가 가진 쿠키저장소

쿠키의 정보가 없거나 있어도 다르다.
-> 브라우저마다 다르다.

  • 서버로 재전송하는 과정에서 요청 헤더에 포함된것을 알수 있\었다.

500 에러? 무조건 이클립스 콘솔 에러 메시지

쿠키는 절대로 믿을 수 있는 데이터가 아니다.

사이트간 쿠키 공유가 안되도록하는게
쿠키의 도메인 속성이다.
첫번째 기준 도메인, 동일한 경우에만 재전송이된다는 것
두번째 기준 Path, ContextPath 아래로 발생하는 모든 것이 실린다. 10depth구조 아래로만 발생한 것
Expires/Max-Age, 세션의 타임아웃이 흘러가서 무의미 해지면 쿠키도 삭제된다.
HttpOnly에만 재전송을 하겠다. (어떤 프로토콜로 요청을 보내는지에 따라서 쿠키를 전송할지 안할지 결정하겠다, http인 요청을 보냈을 떄만 세션을 연장하겠다.)
Secure 프로토콜에만 쿠키를 보낼 것이냐 하는 것을 체크하는 속성
SameSite 모든 도메인이 동일한 경우에만 체크된다. (하위레벨은 상위레벨의 포함구조, 모든레벨이 동일한 경우에만 체크하겠다.)
Priority 크롬이 결정한다.

쿠키를 나중에 서버로 보낼것인지 아닌지에 대한 조건을 설정하는 속성들이다.

쿠키의 속성

  • name (required) : 영문자/숫자/_ (자바의 식별자 기준)

  • value (required) : 특수문자는 URLEncoding으로 전송 (주의:인코딩), 한글은 특수문자(%인코딩)

    한글은 인코딩, 디코딩 고려해야한다.

  • path (optional) : path로 설정된 경로 이하로 발생하는 요청에만 쿠키를 재전송.
    생략시 쿠키의 생성 경로가 반영.

    절대 경로의 저 이하의 경로만 반영이 가능하다.

  • domain/host(optional) : 쿠키의 재전송 여부 결정에 사용. 생략시 쿠키 생성 도메인 반영.

  • domain level 구조

    • 3 level : www.naver.com (GlobalTopLevelDomain) hostname//회사 (3 level이 2 level에 포함된다.)
    • 4 level : www.naver.co.kr(NationalTopLevelDomain)
    • .naver.com / .naver.co.kr : 도메인 설정시 호스트명을 생략한 패턴을 사용하면, 해당 도메인의 모든 호스트로 쿠키 전송

Domain Level 구조에 대해서 알아야한다.

톰캣 7버전을 가지고 테스트 해보자

dummyVersion 7을 만들고 폴더 10번 만들어서 복사 후
브라우저의 쿠키를 지운다음 테스트

한글인코딩, 디코딩 설정을 하지않으니 톰캣 7버전대에서는 터져버린다.

누군가가 이미지를 볼때
언제 쿠키가 생성되고 쿠키가 해야하는가?
멀티 셀릭팅을하면 해당하는 녀석들이 나 나와야한다.
나갔다가 들어오면 그 해당 이미지가 다시 나와야한다.
쿠키 값은 문자열로 밖에 저장할 수 없다.
어떤 구조가 필요할까? 문자열을 토큰으로 구분가능하게 ', ' 같은걸 주어서 저장하고, 파싱을 할때는 제거하면
불안정한 구조이다. 중간에 ', '를 제거하는 코드가 나와야한다. 데이터의 형태를 유지한 대로 저장하는 방법 JSON, JSON 문자열로 저장, 토큰을 저장하는데 아무 문제가 없다. JSON 데이터로 잘만들어서 쿠키로 저장, 그러면 우리는 마샬링을 통해서 저장한다.
쿠키에서 데이터를 복원할때는 언마샬링한다.
언제 어느 시점에 5개의 데이터를 모아서 쿠키로 만들것인가?, 비동기 요청을 넘기고 요청을 처리하는 과정에서 쿠키를 만들고 랜더링 할 것이다.

마샬링(JSON.stringify), 언 마샬링(JSON.parse)

클라이언트로부터 요청이 오면
서블릿이 쿠키를 받음
1. 디코딩 2. 언마샬링 -> 스트링 배열을 복원

imageList.jsp에서 이진 탐색 구조를 이용
트리 구조의 핵심은 정렬

클라이언트가 보낼수 있는 것은 파라미터 뿐만아니라
다양한 것을이 있고 서버에서는 이 다양한 것들을 처리할 수 있어야한다. 수업을 이렇게 한이유..

오늘 까지 나간진도

p.62 까지임... 여기까지가 제일 중요한 부분
교재를 정독해오기

Adapter Pattern

디팬던시 누가 누가를 사용한다.
implements
operation 이 클래스와 이름이 같다. ->생성자
Adapter has a Adaptee

제일 의존 관계가 없는 녀석 부터 설계한다.
Adaptee

Target 1
Adaptee 2
Adapter 3
OtherConcrete 4
Client 5

Client은 Target의 구현체에게 의존관계인 것임

아래 그림은
발이 3개인 인터페이스를 받았지만 나는 실제론 발이 2개짜리인 돼지코 인터페이스를 가진것

어댑터 패턴, fancytree의 형식으로 바꿀것이다.
part 1의 쿠키? 의 정책
jdbc 가지고 prepareStament이용해서 회원가입

과제

p.62
로그인폼 ID체크박스 구현하기
체크후 로그인 성공하면 일주일은 저장이 되어야함. 경우에 따라 로그인에 따라 체크하지 않고 성공하면 ID를 저장하지 않고, 정보를 남기기 싫다는 것이니까 혹시 남은 저장되어있는 아이디를 지워준다.

Part 2 프레임워크를 이용 최대한 많이 이용해보기

  1. 제일먼저 mybatis
    검증 프레임워크

  2. model2? p.65 MVC 패턴
    frontContollerPattern + commandPattern

왜 필요한가에 대한 동기를 줄 예정
우리식으로 변형을 해서 사용하게 될것임.

  1. p.75 EL, JSPL

  2. p94 filter 필터와 Wrapper 파일처리, 접근제어(보안 강화)

  3. p99 웹어플리케이션의 이벤트 처리 Listenner(skip 할 예정)

  4. p.110 프레임워크
    메이븐 롬복, 생략

p.115 프로젝트 형상관리 (SVN, GIT) 스킵

p.118 mybatis DAO 다시 리팩토링 할 예정

p.148 결합도와 응집력 (HCLC 구현)
디펜던시 인젝션을 사용하기 위한 프레임 워크
p. 152 HCLC를 이용한 디자인 패턴, 이미 다뤘거나 우리가 다룬 것( 우리가 직접 다시 봐야한다.)
p. 159 CLASS DIAGRAM
이론을 다 집어 넣은 설계도, 수업시간에 할 시간을 없을 것임 직접해봐야한다.

PART 3

p. 160 스프링 IOC

profile
끄적끄적 쓰는곳

0개의 댓글