분류 전체보기
쿠키와 세션 (feat. HTTP의 Connectionless 와 Stateless)
쿠키와 세션 (feat. HTTP의 Connectionless 와 Stateless)
2023.06.16HTTP의 Connectionless와 Stateless HTTP는 요청과 응답을 한번 주고받으면 바로 연결을 끊어버리는 특성을 가지고 있다. 그리고 다음 요청을 하기 위해 다시 연결을 맺어야 한다. 이를 HTTP의 Connectionless(비연결성) 라고 한다. 또한 HTTP 프로토콜은 요청과 응답을 교환하는 동안 상태(Status)를 저장하지 않는다. 따라서 HTTP 레벨에서는 이전에 보냈던 request나 response를 기억하지 못한다. 즉, HTTP 요청은 직전의 요청과 전혀 관련이 없다. 이를 HTTP의 Stateless(비상태성) 라고 한다. HTTP가 상태를 갖지 않음으로서 연결을 맺을 때 발생하는 오버헤드가 줄어들고, 데이터를 빠르고 확실하게 처리할 수 있다. 또한 요청간의 상태를 공..
JWT 직접 만들어보며 이해하기
JWT 직접 만들어보며 이해하기
2023.06.15JWT 직접 만들어보며 이해하기 본 포스팅에서는 JWT의 정의, 구조, 원리 등을 알아보며 실습을 통해 '라이브러리 없이' 직접 JWT를 생성하고 해독해본다. 1. JWT에 대하여 1-1. JWT의 정의 Json Web Token의 줄임말이다. RFC 7519 에 명세되어 있는 국제 표준으로써, 통신 양자간의 정보를 JSON 형식을 사용하여 안전하게 전송하기 위한 방법이다. JWT는 정보가 토큰 자체에 포함된 (Self-Contained)클레임(Claim)기반 토큰이다. JWT는 인증(Authentication) 과 권한부여(*인가)(Authorization) 에 사용되는 것이 가장 일반적이다. 인증 절차를 거쳐 서버에서 JWT를 발급해주면, 클라이언트는 이를 잘 보관하고 있다가 API 등을 사용할 때에..
Blocking과 Non-Blocking, Sync와 Async 그만 헷갈리기
Blocking과 Non-Blocking, Sync와 Async 그만 헷갈리기
2023.06.12Blocking과 Non-Blocking, Sync와 Async 그만 헷갈리기 OS를 공부하면서 Blocking과 Non-Blocking, Sync와 Async 개념을 이해했었는데, 다시 떠올려보니 너무 헷갈렸다. 특히 둘을 섞어서 생각해보면 더 혼란스러워졌다. 헷갈리는 것을 찾아보다가, 우연히 보게 된 좋은 예시가 있어서 정리해두고자 한다. 사무실에 있다. 복합기를 사용해서 스캔을 뜨고싶다. 그런데 문서의 양이 많아서 시간이 좀 오래걸린다. 10분 이상 걸린다고 가정하자. 복합기의 시작 버튼을 눌렀다. 그리고 그 앞에서 스캔이 완료될 때까지 하염없이 기다렸다가 스캔 된 파일 결과물을 갖게 된다면, 이것은 Blocking 이다. 10분은 아무것도 안하기에는 꽤 긴시가이다. Blocking 방식에는 다른 ..
[백준] 9372번 상근이의 여행 (feat. 그래프 이론, 최소 신장 트리)
[백준] 9372번 상근이의 여행 (feat. 그래프 이론, 최소 신장 트리)
2023.04.11https://www.acmicpc.net/problem/9372 문제 분석 첫 번째 단계(문제 요약 및 조건 파악) - 문제 요약 N개의 국가를 여행하려고 함. 비행 스케줄이 주어졌을 때, 가장 적은 종류의 비행기를 탈 수 있도록 하는 프로그램을 작성할 것. 한 국가에서 다른 국가로 이동할 때, 다른 국가를 겨쳐 가도됨. - 입력 첫 번째 줄에는 테스트 케이스의 수 T(T
JPA 성능 최적화 (feat. @SequenceGenerator allocationSize)
JPA 성능 최적화 (feat. @SequenceGenerator allocationSize)
2023.04.09JPA 성능 최적화 (feat. @SequenceGenerator allocationSize) JPA의 기본 키 매핑을 들여다 보던 중, SEQUENCE 전략에 대해서 이해한 내용을 정리하려고 한다. Persistence Context에 대한 개념을 충분히 이해하고 있다는 가정하에 정리할 것이다. 우선, 기본키 매핑 전략으로 SEQUENCE를 사용하려면 @SequenceGenerator 를 생성해 주어야 한다. @Sequence의 속성은 아래와 같다. 속성들 중, allocationSize에 집중해보자. 성능 최적화에 사용되는 속성이다. allocationSize의 역할을 이해하려면, 먼저 SEQUECE전략의 기본적인 기본 키 매핑 과정을 이해해야한다. em.persist(member)가 호출 되면, m..
Trade-Off(구조의 안정성 vs 단순한 개발의 편리성)
Trade-Off(구조의 안정성 vs 단순한 개발의 편리성)
2023.04.07Trade-Off(구조의 안정성 vs 단순한 개발의 편리성) 스프링 데이터 JPA 예제를 수행한 것을 다시 한번 돌아보며, 느낀 것들을 기록한다. 우선, DI, OCP를 지키기 위해 어댑터를 도입한 코드의 클래스 의존 관계와, 런타임 객체 의존 관계를 살펴보자. 중간에서 JpaItemRepositoryV2가 어댑터 역할을 해준 덕분에 ItemService가 사용하는 ItemRepository 인터페이스를 그대로 유지할 수 있고, 클라이언트인 ItemService의 코드를 변경하지 않아도 되는 장점이 있다. 그런데, 여기서 고민이 생긴다. 구조를 맞추기 위해서, 중간에 어댑터가 들어가면서 전체 구조가 너무 복잡해지고 사용하는 클래스도 많아지는 단점이 생겼다. 실제 이 코드를 구현해야하는 개발자 입장에서 보..