일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 코테준비
- Kafka
- 알고리즘공부
- JPA스터디
- 코테공부
- 자바공부
- nestjs공부
- querydsl
- K8S
- nestjs스터디
- 카프카
- 스프링
- JPA
- 스프링공부
- 스프링 공부
- 플러터 공부
- 플러터 개발
- JPA 공부
- Axon framework
- DDD
- 프로그래머스
- 기술면접공부
- Flutter
- JPA공부
- 스프링부트
- 스프링부트공부
- nestjs
- 기술공부
- JPA예제
- 자료구조공부
- Today
- Total
DevBoi
잡다하지만 필요한 기술지식 6 본문
1. Hash/ salt 방식 차이
패스워드 암호화 저장 방식이다.
우선 Hash 는 단방향 암호화 방식이고, 이를 통해 저장된 데이터를 다이제스트라고 한다.
또한 해싱은 단방향이다. 한마디로 단방향 해시함수는 다이제스트를 복호화, 즉 원본 데이터를 구할수 없어야 말 그대로 단방향이다.
그러면 이 해싱 방식은 가장 안전한 방식일까?
그렇지 않다.
단방향 암호화 방식은 동일한메시지는 동일한 다이제스트를 갖는다.
그러면, 해커의 입장에서는 하나씩 대입해보면서 자신이 가지고있는 암호화 테이블 즉 , 레인보우 테이블을 가지고
비교하면서, 암호화 된 대상을 나름대로 대입 복호화를 할수 있다.
해결 방법으로는 두번 해싱 하는 방법이 있다.
예를 들면, 해싱해서얻은 암호화된 데이터를 한번더 해싱해서, 값을 가지고있는 것이다.
최대한 브루트포스를 무력화하기 위한 방법이다.
2. 솔트
그럼에도 뭔가 아직 부족?
해시 함수를 돌리기전에 임의의 문자열을 덧붙여서, 해싱하는 것이다.
일명 원본에 소금쳐서 암호화 하기 이방법을 사용하게 되면, 한명이 해킹을 당해도 다른사람들은
안당할수 있다
왜냐면 (비밀번호)+(솔트 )-> 해싱 -> 값
이런식으로 사용되기 때문이다.
해싱 + 솔트 기법을 사용하는경우에는 두번하는 경우도있다.
2. ArrayList, LinkedList, Vector
자바 초기 버전 배열의 문제를 없애기 위해 Vector 를 사용,
Vector는 인스턴스가 디폴트 10 , 그 이상이되면 2배씩 늘리는 전략을 택해 이슈가 있었다.
ArrayList는 내부적으로 데이터를 배열에서 관리하고, 데이터의 추가,삭제시에 데이터를 복사하는 방법을 사용한다.
대량의 자료를 추가/삭제하는 경우에는 그만큼 데이터의 복사가 많이 일어나게되어
ArrayList는 탐색에 용이하다.
반면 LinkedList는 데이터의 추가, 삭제시에 데이터 복사가 없어 불필요한 작업이 없고
검색시에는 처음부터 순회하기때문에 검색시에는 ArrayList보다 느리다.
3. 스프링 프록시 패턴이란?
프록시 전에, AOP에 대한 개념을 알아야 한다.
AOP란 관점 지향 프로그래밍, 트랜잭션이 대표적인 AOP관점이 적용되는 사례이다.
쿼리 실행하기 전에 앞서 트랜잭션을 생성, 쿼리 실행후에, 트랜잭션을 커밋 or 롤백 후 close
AOP에는 Aspect, 반복 사용되는 로직
Target, 적용할 로직
Advice 반복 로직의 구현체
JointPoint,PointCut, Advice의 적용위치
관련 타이밍, AOP에 대한 이전,이후에 대한 처리는 어노테이션으로 가능하다
(before,after,afterReturning,afterThrowing,around)
AOP를 사용하는것이 프록시 패턴을 사용한다는 의미이다. (간단하게는)
쉽게들 보조업무를 주업무전에 처리하는 느낌으로 이해하면 좋은것같다.
4. 캡슐화, 상속, 다형성...
- 캡슐화 객체의 값을 전체 다 접근 가능하지 않게, 안에 내용물은 은닉을 하는것이다
즉 사용 메소드를 숨기고, 애트리뷰트와 메소드를 하나로 묶고,
하나를 외부에서 사용할수없게끔 해주는 것이다.
예를 들면, 어떤 객체를 만들었을때, 해당 속성값을 다른 객체에서 접근 할수 없도록 하는 것이며
이는 결합도를 낮춰주고, 응집도를 높여준다.
-상속 : 이건 부모자식 클래스간의 필요시에 변경 오버라이드 메소드로재정의 아니면 그냥 그대로 가져다가 쓰는것이다.
대게 특정 분류에 속하는 것들끼리 공통된 부모의 클래스를 상속 받아서 사용하며
해당 상속을 쓰면, 코드의 재사용성이 높아져서, 쓸데없이 같은 기능을 하는 코드가 중복되지않는다
-다형성
기본적인 건 오버라이딩과 오버로딩, 정의는 큰개념의(부모클래스)에 작은개념(자식 클래스) 를 넣어서 사용할수있다.
map이나 list는 HashMap이나 ArrayList로 된것이 그예이다.
'[Computer Science]' 카테고리의 다른 글
잡다하지만 필요한 기술지식 8 (0) | 2021.07.26 |
---|---|
잡다하지만 필요한 기술지식 7 (0) | 2021.07.25 |
잡다하지만 필요한 기술지식 5 (0) | 2021.07.22 |
잡다하지만 필요한 기술지식 4 (0) | 2021.07.21 |
잡다하지만 필요한 기술지식 3 (0) | 2021.07.19 |