Programming134 JWT 돌아보기 세션, 쿠키, 토큰의 인가 방식 중에 우리는 왜 굳이 토큰을 사용할까? 라고 물어보면 누구나 쿠키보다 보안이 뛰어나고 세션보다 서버 부하가 적다는 대답을 할 수 있다. 그럼, 왜 쿠키보다는 보안이 뛰어나고 세션보다는 서버 부하가 적을까? 이유를 알아야 '보안이 좀 더 낫고, 서버 과부하가 안와요'라고만 대답해도 찰떡같이 알아들을 수 있다. 이번 면접에서 JWT와 관련한 질문을 받았고, 해당 내용을 까먹어서 제대로 답변하지 못했다. 아쉬운 부분이다. JWT의 구조 JWT는 위와 같은 세 부분의 구조로 이루어져있다. 중요한 것은 서명, 시그니처 부분이다. JWT가 쿠키에 비해 보안적인 측면에서 좀 더 나은 이유가 된다. - Header 헤더에는 토큰의 타입과 서명에 적용된 알고리즘이 담겨있다. 형태 예시는 .. 2024. 2. 20. DB Entity -> Domain Entity로의 전환은 어느 계층에서 담당하는 것이 옳을까 헥사고날 아키텍처를 괜히 적용했나 싶다. 고민해야 할 영역이 지나치게 많아진 느낌이다. 지금 내 수준에서 이런 문제들에 대한 최선의 답안을 찾아내는 것이 가능할까? 싶은데, 뭐 그렇다고 고민하는 시간이 의미없는 것은 아니니까 일단은 생각해볼만 하다고 여겨지는 영역에 대해서는 최선의 답을 찾아내고자 한다. 기존의 ORM 전략을 사용한 프로젝트에서는 데이터베이스 계층에서 사용되는 엔티티가 곧 도메인 엔티티의 역할을 함께 했다. 이번 프로젝트에서는 ORM을 사용하지 않고 데이터베이스 엔티티와 도메인 엔티티를 분리했다. 외부 데이터베이스와 내부 도메인 로직은 확실히 분리하고자 하였고, 임피던스 불일치 문제 같은 데이터베이스 레벨의 문제가 도메인 로직에 스며드는 것을 방지하고자했다. 그러나 결국 서버는 데이터베이.. 2024. 2. 14. 웹소켓은 왜 쓸까? 구글에 '스프링 채팅 기능'을 검색하면 웹소켓을 활용해 스프링 채팅 기능을 구현했다는 글이 수십페이지가 검색된다. 이 사람들은 왜 기본적인 통신 방법인 HTTP를 사용하지 않고 웹소켓이라는 기술을 선택해서 채팅 기능을 구현했을까. 웹소켓을 사용하는 것이 어떤 이점이 있을까. 이를 알아보면 웹소켓을 사용해서 채팅 기능을 구현하는 당위성이 생길 것이다. TCP VS UDP 웹소켓이고 HTTP고 알아보기 전에 TCP와 UDP를 먼저 알아보자. 그래도 기본적인 통신 프로토콜은 알고 진행하는게 낫지 않겠는가? TCP, UDP는 모두 데이터 송신을 위한 통신 프로토콜이다. 둘의 가장 큰 차이는 우리가 통신하고 있다는 걸 알고있냐, 모르냐의 차이라고 할 수 있다. 위의 표에서 확인할 수 있듯이, TCP는 연결형 서비.. 2024. 2. 7. 난수 테스트는 어떻게 해야할까? (면접 코드 리팩토링) 이번 면접 라이브 코딩 중에는 이런 문구가 있었다. 테스트 환경을 구성하면 더 좋습니다. 테스트 환경을 구성하지는 못했지만, 그래도 기능 구현을 하면서 테스트를 어떻게 작성하면 좋을지를 계속 고민했는데, 그 과정에서 문제가 되는 사항이 있었다. 참가자의 오답률에 따라 오답이 발생합니다. 간단하게 요구사항을 설명하자면, 뭔가 게임을 하는데 참가자가 오답을 말할 확률이 존재하고 이 확률에 따라 정답 또는 오답 처리를 해야한다는 것이다. 나는 아래와 같이 코드를 작성했다. public class Player { private final String name; private final double wrongAnswerRate; Player(String name, double wrongAnswerRate) { t.. 2024. 2. 1. [1/24 TIS] OAuth 2.0 적용에 따른 테스트 코드 수정 OAuth를 적용하면서 Spring Secuirty의 filter chain에 OAuth와 관련한 친구들이 추가되었다. 문제는 이게 테스트 코드에도 영향을 준다는 점이었다. 기존의 API계층에 대한 테스트 코드에는 SecurityAutoConfig 파일을 제외하는 설정이 되어있었다. Spring Security를 테스트하고 싶으면 아예 Integration test를 진행하고, API계층에서는 들어온 DTO가 출력 결과와 같게 출력되는지만 확인하고 싶었기 때문이다. 그런데 OAuth가 추가되면서, 잘 돌아가던 테스트가 돌아가지 않게 되었다. 아래는 에러 코드인데, 너무 길어서 첫 줄만 따왔다. Consider defining a bean of type 'org.springframework.security.. 2024. 1. 25. 이전 1 2 3 4 5 6 ··· 27 다음 반응형