퍼사드 뭔가 데이터베이스를 어떻게하는게
SQL인젝션이 어떤 것인가, 어떻게 막는것인가
어플리케이션의 퍼포먼스를 고려해서 반응시간 소요시간을 줄일것인가 그와중에서 오브젝트 풀링
쿠키
리플렉션 (시간이 남으면)
--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 쿼리로 만들었다....
보기 - 코드 조각 - 코드 조각을 끌어다 쓰면된다.
'?' 쿼리, 파라미터 데이터만 들어간다. 쿼리안에 모든건 예약어가 아니라 그냥 문자다.
쿼리 객체를 생성하는 단계에서 쿼리를 만들면서 쿼리객체를 생성한다.
미리 컴파일 되었기 떄문에 중간에 뭔가를 쿼리문을 추가하는 것이 불가능 하다. (동적으로 예약어를 추가할수 없다. 동적으로는 추가할 수 있는 것은 데이터뿐)
쿼리 실행시 쿼리를 전달하지 않는다.( 데이터자리에 키워드가 아무리들어와도 키워드로 인식이 되지 않는다.)
암호 알고리즘
대칭키 : AES
해시함수 : SHA-512
공개키 : RSA
2진데이터를 Base64로 바꿔서 브라우저가 읽을수 있게
application/x-www-form-urlencoded
x-www www에서 독점적으로
application을 구동할때
form 데이터는 ?
입력값 데이터 charecter encoding셋의 기본값이다.
SHA-512 (512 고정길이의 비트수)
512, 256, ... 있지만 512가 있는 이유
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
스트링 버퍼나 빌더를 사용하는 이유
메모리 공간을 효율적으로
자바 스트링 객체는 컨스턴트 풀 (가비지컬랙션 대상이 안되기 때문에)에 저장된다.
힙메모리에 저장, 다른메서드들을 이용해서 상태를 변경가능
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으로 증가한것을 확인할 수 있다.
서비스를 다시 시작하지 않으면 적용이 안된다.
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>
BasicDataSource를 이용한 pooling 정책
퍼포먼스, 소요시간를 끼워넣어서 문장을 만들어야한다.
Active 사이즈를 지정해서
연결 갯수를 제한, 그래서 DB? 서버?가 멈출일이 없다.
리플렉션을 통해서 어떻게 클래스의 객체를 동적으로 할당할 것인가
파헤치기!
리플렉션 -> 상(거울 등에 비친), 반사, 반영
제일먼저 클래스를 찾는다.
(프로퍼티 - 전역변수 - 필드)
mybatis를 써보기 위해서
프레임워크 내부에서 돌아가는 기술
resultClass
셋터를만들고, 호출할 객체를 만들수 있기 때문에 resultClass가 필요했던 것이다.
자동은 없으니, 어떤 값을 집어넣을지 결정해야함.
보니까 규칙성이 있던것이다.
소문자를 바꾸면 고대로 프로퍼티명이된다. 프로퍼티 명가지고 필드명 뽑고, 셋터 찾고, 우리가 짯던 코드와 비슷한 형태의 getter/setter를 찾은것?? 만든것?
어허 아주 옛날방식?