공부 시간

TODO
[!note]+ 복기
@configuration을 클래스에 선언해주고
클래스 안의 메소드에 @Bean을 선언해주면 수동으로 스프링에 빈으로 등록이 된다.
new BCryptPasswordEncoder
- 문자열을 Hash화 해주는 객체
- encode(new String)
- String을 hash화를 해줌.
- matches( a,b ) a와 b를 비교해서 같으면 true를 반환
public interface food;
@Component
class pizza implements food
@Component
class chicken implements food
각자 하나씩 선언
@Autowired
Food pizza;
@Autowired
Food Chicken;
Primary로 사용안한다고 선언해주기
- 넓 범위 선언
@Component
@Primary
class chicken implements food
Qualifier("클래스 명")을 사용하여 우선순위 지정해주기
- 좁은 범위 선언
- 우선순위 Qualifier > Primary
// 선언
@Component
@Qulifier("pizza")
class pizza implements food{}
// 사용
@Autowired
@Qulifier("pizza")
Food food;
인증 == 검문 == Authentication
인가 == 허용 == Authorization
http 통신은 비연결성과 무상태성을 지닌다.
일반적으로 http는 무상태성을 지니기 때문에 상태성을 유지하기 위한 방법이 필요하다. 그렇기에 사용되는 방식이 쿠키와 세션이다.
쿠키
클라이언트에 저장될 목적으로 생성한 작은 정보를 담은 파일 입니다.
세션
서버에서 일정시간 동안 클라이언트 상태를 유지하기 위해 사용됩니다.
서버에서 클라이언트 별로 유일무이한 '세션 ID' 를 부여한 후 클라이언트 별 필요한 정보를 서버에 저장합니다.
서버에서 생성한 '세션 ID' 는 클라이언트의 쿠키값 ('세션 쿠키' 라고 부름)으로 저장되어 클라이언트 식별에 사용됩니다.
코딩애플 참고
https://www.youtube.com/watch?v=XXseiON9CV0
양방향
- 암호화: 평문 → (암호화 알고리즘) → 암호문
- 복호화: 암호문 → (암호화 알고리즘) → 평문
- 이와 같이 양방향으로 설계를 하면 암호화를 적용시킨 로직에 역으로 적용을 시키면 쉽게 뚫릴 수 있기에 양방향은 사용되지 않는다.
단방
- 암호화: 평문 → (암호화 알고리즘) → 암호문
- 복호화: 불가 (암호문 → (암호화 알고리즘) → 평문)
passwordEncoder.matches( a, b )
if(!passwordEncoder.matches("사용자가 입력한 비밀번호", "저장된 비밀번호")) {
throw new IllegalAccessError("비밀번호가 일치하지 않습니다.");
}
요청 전처리 (Request Pre-processing): Filter는 클라이언트의 요청이 컨트롤러에 도달하기 전에 요청 데이터를 가로채어 사전 처리 작업을 수행할 수 있습니다. 예를 들어, 인코딩 설정, 인증, 로깅 등의 작업을 수행할 수 있습니다.
응답 후처리 (Response Post-processing): 컨트롤러가 처리한 후, 응답이 클라이언트로 보내지기 전에 Filter는 응답 데이터를 가로채어 후처리 작업을 수행할 수 있습니다. 예를 들어, 응답 데이터의 압축, 보안 헤더 추가 등의 작업을 수행할 수 있습니다.
체인의 일부로서 동작: 여러 개의 Filter는 체인 형태로 동작하며, 각 Filter는 다음 Filter로 요청과 응답을 전달합니다. 이로 인해 각 Filter는 자신이 수행해야 할 작업을 수행하고, 다음 Filter로 제어를 전달하여 체인을 통해 여러 단계의 처리를 할 수 있습니다.