본문 바로가기
카테고리 없음

230227 TIL

by hbIncoding 2023. 2. 27.

1.  Spring에서 Expose header 열어주기

  • CORS의 경우 기본적으로 화면에서 response header 값을 읽지 못한다.
  • 해당 문제를 해결하기 위해 WebSecurityConfig를 아래와 같이 설정해준다.
    • 노출할 응답헤더를 추가한다.
    • 특수 값 "*" 하면 자격 증명이 없는 요청에 대해 모든 헤더를 노출할 수 있다.
@Configuration
@RequiredArgsConstructor
@EnableWebSecurity
//@EnableGlobalMethodSecurity(securedEnabled = true)
public class WebSecurityConfig {
	.....
    
    @Bean
    CorsConfigurationSource corsConfigurationSource() {
        CorsConfiguration configuration = new CorsConfiguration();
        configuration.addAllowedOrigin("*");
        configuration.addAllowedMethod("*");
        configuration.addAllowedHeader("*");
        configuration.addExposedHeader("*"); // ExposeHeader를 열어준다
        configuration.setMaxAge(300L);

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    }
}

  2) 3 HandShake, 4 HandShake

  • TCP : 연결형 데이터 전송 프로토콜
  • UDP : 비연결형 데이터 전송 프로토콜

 ㄱ. 3 HandShake

  • TCP는 정확한 전송을 보장해야 한다. 따라서 통신하기에 앞서, 논리적인 접속을 성립하기 위해 3 way handshake 과정을 진행한다.

  • 라이언트가 서버에게 SYN 패킷을 보냄 (sequence : x)
  • SYN_SENT 상태가 되어서 서버에서 올 패킷을 기다린다.서버가 SYN을 받고, 클라이언트로 받았다는 신호인 ACK와 SYN 패킷을 보냄
  • 이제 클라이언트에서 ACK를 기다리는 SYN_RECIVED 상태가 된다.클라이언트는 서버의 응답은 ACK와 SYN 패킷을 받고, ACK를 서버로 보냄
  • 연결이 성립됨

 ㄴ. 4 HandShake

  • TCP에서 연결을 종료할 때 실행되는 과정

  • 클라이언트는 서버에게 연결을 종료한다는 FIN 플래그를 보낸다.
  • 서버는 FIN을 받고, 확인했다는 ACK를 클라이언트에게 보낸다. (이때 모든 데이터를 보내기 위해 TIME OUT 상태가 된다)
  • 데이터를 모두 보냈다면, 연결이 종료되었다는 FIN 플래그를 클라이언트에게 보낸다.
  • 클라이언트는 FIN을 받고, 확인했다는 ACK를 서버에게 보낸다. (아직 서버로부터 받지 못한 데이터가 있을 수 있으므로 TIME_WAIT을 통해 기다린다.)

 

  • 서버는 ACK를 받은 이후 소켓을 닫는다(Closed)
  • Time_WAIT 시간이 끝남녀 클라이언트도 닫는다 (Closed)
  •  

 

 

 

 

3. 참조자료

1) 3handshake/4handshake : https://velog.io/@pandati0710/3-HandShake-4-HandShake

 

3 HandShake, 4 HandShake

TCP에서 어떤 방식으로 연결을 시작하고 끝내는지 알아보자

velog.io