전체 글

https://github.com/Layton0-0
Computer Science/Network

[Network] TCP & UDP 차이 / 3-way handshaking & 4-way handshaking

TCP(Transmission Control Protocol) 연결형 서비스 3-way handshaking 으로 연결, 4-way handshaking 으로 해제 데이터 전달 보증 패킷 단위 전송 (데이터를 잘게 조개서 전송한다) 3-way handshaking 중 전달하는 시퀀스 넘버, ACK로 각각 순서보장, 누락방지를 보증한다. 패킷의 총량을 ACK 응답으로 확인하고 누락된 데이터가 있으면 시퀀스 넘버로 순서를 확인, 해당 SEQ부터 재전송한다. 모든 패킷 전송에는 ACK로 응답한다. 패킷을 전송하면 어떤 패킷부터 도착할 지 모르지만 패킷에 시퀀스 넘버로 순서를 재정렬할 수 있다. 패킷이란? 전송하는 포트, 받는 포트, 전송하는 ip, 받는 ip 등 TCP/IP 4계층을 통과하는 동안 만들어진 택..

Spring/프로젝트

[Spring Security] Refresh Token 적용기

(작성 중인 글입니다.) 먼저 refresh token을 왜 적용하게 됐는가? 나는 현재 프로젝트에 JWT를 사용하고 있다. JWT는 말 그대로 토큰을 사용한 로그인 방식이다. 로그인을 했을 때 먼저 access token을 발급해준다. 사용자는 요청 시 이 token과 함께 요청을 해야한다. 다만 여기서 위험한 점이 하나 있는데 중간에 이 token이 탈취되면 누구든 그 사용자인 척 할 수 있다는 것이다. 그러면 개인정보 도용 등 다양한 문제 상황이 발생할 수 있다. 토큰은 한번 부여하면 삭제가 안되기 때문이다. 그래서 이에 대한 보완점으로 refresh token이라는 것도 같이 부여해주게 되었다. access token은 짧은 유효기간을 가져 탈취당하더라도 오래 사용하지 못하게 안정성을 챙기면서, ..

Computer Science/Network

www.google.com 이 뜨는 과정

1. 주소 입력 + HTTP 요청 주소창에 www.google.com 을 쳐서 서버에 request를 보낸다. 실제로는 https의 생략된 포트 443으로 www.google.com:443 으로 요청이 된다. HTTP 요청 메시지를 생성하고 HTTP 메시지를 전송한다. -> 웹 브라우저가 HTTP 메시지를 생성하고 -> SOCKET 라이브러리를 통해 전달(TCP/IP 연결) -> TCP/IP 패킷 생성(HTTP 메시지 포함) -> LAN 드라이버와 장비를 통해 서버로 전송 그러면 서버가 요청(request)패킷을 받고 응답(response) 패킷을 전송한다. 응답 패킷이 도착하면 다음 과정이 진행된다. 2. HTML 파일 다운로드 HTML, JSON, 이미지 등을 먼저 다운로드 받는다. 가장 먼저 다운받..

Computer Science/Network

네트워크 - GET 과 POST 의 차이점

GET 방식과 POST 방식의 공통점 클라이언트에서 서버로 요청(데이터 조회/저장)할 때 사용하는 HTTP 메소드이다. GET 방식 주로 리소스 조회할 때 사용하는 방식 서버에 전달하고 싶은 데이터는 쿼리(파라미터/스트링)를 통해서 전달한다. 메시지 바디를 사용해 데이터 전달이 가능하나 지원하는 곳이 많지 않아서 권장되지 않는다. URL 주소 끝에 파라미터처럼 붙이는 것을 쿼리 스트링이라고 한다. 지금 글을 작성할 때 호출된 URL도 GET 방식의 쿼리 스트링 예시이다.이다. https://layton0-0.tistory.com/manage/newpost/?type=post&returnURL=어쩌구 위의 예시를 서버에서 받을 때는 String type, String returnURL 의 명칭으로 받을 수..

Spring/이론

JPA - 값 타입

JPA의 데이터 타입 분류 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 member 엔티티의 키나 나이 등 값을 변경해도 pk값으로 인식 가능 생명 주기를 관리한다. 값 타입 int, Integer, String, LocalDateTime처럼 단순히 값으로 사용하는 자바의 기본 타입이나 객체 식별자(PK)가 없고 값만 있어서 값을 변경하면 추적이 불가능하다. lastModifiedDate를 now로 변경하면 완전히 다른 값으로 대체된다. 생명 주기를 엔티티에 의존한다. (엔티티의 생명주기를 따라간다) 공유하지 않는 것이 안전(객체면 불변객체로 해서 복사해 사용하자) 값 타입의 분류 기본값 타입 자바 기본 타입(int, double) 래퍼 클래스(Integer, ..

Spring/프로젝트

@RestContollerAdvice 로 Security 예외 처리하기

문제 상황 분명히 나는 아래와 같이 ExceptionHandler 작업을 해주었는데 이를 통과하지 않는 현상이 지속됐다. 다른 예외는 잘만 통과하는데 대체 왜 스프링 시큐리티 예외만 저 메소드를 거쳐가지 않을까? 이를 이해하려면 스프링 시큐리티의 작동 순서를 알아야 한다. 이 이유에 관한 작동 순서는 별도의 글로 간략히 작성해두었다. Spring Security 동작 원리 / 필터 순서 스프링 시큐리티에 대해 이해하기 위해서는 기본적으로 필터에 대한 이해가 필요하다. 스프링에서는 client로부터 HTTP 요청이 들어오면 Servlet에 도달하기 전 필터를 거친다. 이 필터는 하나일 수 layton0-0.tistory.com 해결 (구현) 과정 AuthenticationEntryPoint 구현 시큐리티의..

Spring/이론

Spring Security 동작 원리 / 필터 순서

스프링 시큐리티에 대해 이해하기 위해서는 기본적으로 필터에 대한 이해가 필요하다. 스프링에서는 client로부터 HTTP 요청이 들어오면 Servlet에 도달하기 전 필터를 거친다. 이 필터는 하나일 수도 있고 여러개일 수도 있다. (원하는 만큼 필터 추가 가능하다.) 하나의 필터를 통과하면 다음 필터로, 그 다음 필터를 통과하면 또 다음 필터로 넘어가는 형태이다. 이를 필터 체인이라고 한다. HTTP 요청 -> WAS -> 필터 1 -> 필터 2 -> ... -> 서블릿 -> 컨트롤러 HTTP 요청 -> WAS -> 필터 1 -> 필터 2(적절하지 않은 요청, 서블릿 호출 X) 스프링 시큐리티는 여기서 DelegatingFilterProxy라는 서블릿 필터를 만들어서 메인 필터체인에 끼워 넣는다. 그리..

Language/Java

Java 필수 - 멀티쓰레드와 동기화 (feat. Atomic, Synchronized, Volatile)

공유자원이란? 여러 쓰레드가 동시에 접근할 수 있는 자원을 의미한다. 임계영역이란? 공유자원들 중 여러 쓰레드가 동시에 접근했을 때 문제(경쟁상태)가 생길 수 있는 부분을 말한다. 공유자원 ) 임계영역 경쟁상태란? 둘 이상의 쓰레드가 공유자원을 병행적으로 읽거나 쓰는 동작을 할 때 타이밍이나 접근 순서에 따라 실행 결과가 달라지는 상황이다. 문제 상황 예시) Read - Modify - Write Thread 1) count = 0 [read] -> count = 1 [modify] -> count = 1 [write] Thread 2) --------------------- -> count = 0 [read] -> count = 1 [modify] -> count = 1 [write] 이러한 상황에서 ..

레이튼
개발 공부 스케치북