2020-12-14

jsbak·2020년 12월 14일
0

퍼사드 뭔가 데이터베이스를 어떻게하는게

  1. SQL인젝션이 어떤 것인가, 어떻게 막는것인가

  2. 어플리케이션의 퍼포먼스를 고려해서 반응시간 소요시간을 줄일것인가 그와중에서 오브젝트 풀링

  3. 쿠키

  4. 리플렉션 (시간이 남으면)

--private String mem_id;
-- 멤버 테이블 확인
desc member;

-- 가진 테이블확인
select *
from user_tables;

select *
from user_Objects;

select *
from cols;

select *
from cols
where table_name= 'MEMBER';

기본형(int)과 객체형(Integer) 차이 null을 받을수 있냐 없냐
프레임 워크에서는 데이터의 최소단위가 Object이다.

/*기본형(int)과 객체형(Integer) 차이 null을 받을수 있냐 없냐
프레임 워크에서는 데이터의 최소단위가 Object이다.*/
select 'private '||
    decode( data_type , 'NUMBER', 'Integer ', 'String ' ) ||
    LOWER(COLUMN_NAME) || ';'
from cols
where table_name = 'MEMBER'
order by COLUMN_ID;


db 쿼리로 만들었다....


보기 - 코드 조각 - 코드 조각을 끌어다 쓰면된다.

SQL Injection 방지

  1. 입력 데이터 검증을 빡세게한다.
  2. 쿼리가 아닌 그냥 데이터로 만들어버린다.
    리터럴로 처리가 된다라고 하면 문제가 없다.
    그래서 사용하는 것이 preparedStatement

'?' 쿼리, 파라미터 데이터만 들어간다. 쿼리안에 모든건 예약어가 아니라 그냥 문자다.

쿼리 객체를 생성하는 단계에서 쿼리를 만들면서 쿼리객체를 생성한다.
미리 컴파일 되었기 떄문에 중간에 뭔가를 쿼리문을 추가하는 것이 불가능 하다. (동적으로 예약어를 추가할수 없다. 동적으로는 추가할 수 있는 것은 데이터뿐)
쿼리 실행시 쿼리를 전달하지 않는다.( 데이터자리에 키워드가 아무리들어와도 키워드로 인식이 되지 않는다.)

암호 알고리즘

암호 알고리즘
대칭키 : AES
해시함수 : SHA-512
공개키 : RSA

2진데이터를 Base64로 바꿔서 브라우저가 읽을수 있게

application/x-www-form-urlencoded
x-www www에서 독점적으로
application을 구동할때
form 데이터는 ?
입력값 데이터 charecter encoding셋의 기본값이다.

SHA-512

SHA-512 (512 고정길이의 비트수)
512, 256, ... 있지만 512가 있는 이유
1. 비둘기집 충돌
2. 정교한 암호화

  1. 최대한 길게 늘린다. 길이의 제한 언젠가는 충돌이 발생한다.
  2. 비밀번호의 길이를 제한한다. (단방향 암호시 충돌이 발생하면 안되니까, 보호를 하기 위해서 단방향 암호를 참고 한다.)

주민 번호는 아무나 보면 안되니까 암호화하되 나중에 다시 확인할 수 있어야하기 때문에 양방향 암호화 해야한다.
비밀번호는 단방향 굳이 몰라도 된다.

RSA는 HTTPS의 핵심 기술??

실제론 필드에서는 한가지의 암호화 방식을 사용하지 않는다. 비밀키 암호 /공개키 암호

https secure layer 어떻게 구성되는가?

A가 B를 쓰려면 B를 먼저 만들어야한다.
의존성이 가장 없는 녀석부터 만들어야한다
그래서 VO가 제일 먼저 완성되는 것
DAO, 협업가능하게 인터페이스부터

flash attribute 스프링에 알아서 제공
(용어를 모르면 프레임워크안에 이런게 있는지 모른다)

암호화의 목적
목적에 따라 알고리즘을 써야한다.
필드에 나가면 용어가 뭔지 알아야한다.

sql Injection
1. 입력데이터 검증
2.

가장 오래 걸리는 시간이 어딘지 생각해야한다.(미리해야하는 부분)
어느 구간이 칼국수 반죽하는 부분인지 확인해야한다.
(미리 반죽을 하고 손님이 오면 해당 인분만 떼어서 준다.)

참고3 : http://www.terms.co.kr/latency.htm
레이턴시 타임? 네트워크 소요시간
프로세싱 타임? cpu

  1. 네트워크를 타야되는 소요시간(클라이언트, WAS)
  2. cpu
  3. 네트워크를 타야되는 소요시간(WAS, DB, 칼국수 반죽에 해당하는 부분(가장 중요한 것은 통로 - 면뽑는 과정, pooling 시스템))

스트링 버퍼나 빌더를 사용하는 이유
메모리 공간을 효율적으로
자바 스트링 객체는 컨스턴트 풀 (가비지컬랙션 대상이 안되기 때문에)에 저장된다.
힙메모리에 저장, 다른메서드들을 이용해서 상태를 변경가능

Connection을 열고 닫는데 시간이 오래걸린다.
그래서 설정을 바꿈 (우리가 기본 20개
SYSTEM 계정 접속

show parameter sessions;

show parameter processes;

select * 
from v$resource_limit
where resource_name in ('sessions', 'processes');

ALTER SYSTEM 
SET processes=200 scope=spfile;

모든 계정 연결 해제

show parameter processes;

다시 확인해보면 200으로 증가한것을 확인할 수 있다.
서비스를 다시 시작하지 않으면 적용이 안된다.

apache.org 의 commons - dbcp

relies on 의존한다. pool2라는 녀석이

오래걸려서 메이븐 레파지토리 참조 :

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-dbcp2</artifactId>
    <version>2.8.0</version>
</dependency>

examples 참고 - https://git-wip-us.apache.org/repos/asf?p=commons-dbcp.git;a=blob;f=doc/BasicDataSourceExample.java;h=81b6e389c57fe1f4ca42af58fdcb668e3c1aaaa7;hb=HEAD

pooling 정책

BasicDataSource를 이용한 pooling 정책
퍼포먼스, 소요시간를 끼워넣어서 문장을 만들어야한다.
Active 사이즈를 지정해서
연결 갯수를 제한, 그래서 DB? 서버?가 멈출일이 없다.

블록 암호

리플렉션

리플렉션을 통해서 어떻게 클래스의 객체를 동적으로 할당할 것인가
파헤치기!

리플렉션 -> 상(거울 등에 비친), 반사, 반영
제일먼저 클래스를 찾는다.
(프로퍼티 - 전역변수 - 필드)

리플렉션을 알아야하는 이유

mybatis를 써보기 위해서
프레임워크 내부에서 돌아가는 기술
resultClass
셋터를만들고, 호출할 객체를 만들수 있기 때문에 resultClass가 필요했던 것이다.
자동은 없으니, 어떤 값을 집어넣을지 결정해야함.
보니까 규칙성이 있던것이다.
소문자를 바꾸면 고대로 프로퍼티명이된다. 프로퍼티 명가지고 필드명 뽑고, 셋터 찾고, 우리가 짯던 코드와 비슷한 형태의 getter/setter를 찾은것?? 만든것?

어허 아주 옛날방식?

PropertyDescriptor

  • java.beans.PropertyDescriptor
    A PropertyDescriptor describes one property that a Java Beanexports via a pair of accessor methods.
    자바빈이 가진 프로퍼티의 대한 정보, 한쌍의 메서드에 대한 정보 프로퍼티에 대한 -> getter/setter 의 정보..
  1. 클래스 패스 동적으로 찾기
  2. 각 클래스가 가진 어노테이션에 대한것을???
profile
끄적끄적 쓰는곳

0개의 댓글