2025/08/03 4

DB를 거치지 않은 JWT을 통한 사용자 식별에 관해 (2025년 4월 7일)

2025년 4월 7일의 고민 노션에서 옮겨오고 있습니다. 고민 만약 토큰에 식별자만 넣으면 JWT필터에서 인증객체를 만들기 위해 DB를 조회해야하지 않나?프론트에서는 페이지마다 /userinfo API로 서버에 유저정보를 요청할것이고 서버는 응답으로 유저정보를 반환한다. 그리고 필터는 모든 API요청마다 작동한다.그럼 모든 요청마다 DB를 조회해야하나? 그럼 토큰을 사용하는 의미가 없다.시큐리티컨텍스트홀더를 활용해서 최초한번만 DB를 조회하게하는 방법은 없나?해결 1. 우선 필터에서 DB를 조회하면 안된다. 필터는 서버를 들어오는 요청을 사전에 확인하는 거름망으로 Tomcat 서버의 필터레벨에 스프링 시큐리티의 필터체인이 삽입된다. 스프링의 필터체인에는 JWT필터도 있고 아직 웹 서버에 도착하지 않은 상..

회원가입 기능 설계에 대한 고민 (2025년 3월 29일)

2025년 3월 29일의 고민 노션에서 옮겨오고 있습니다. 고민 카카오 로그인 -> 서비스 회원가입으로 이어지는 흐름에서의 고민이다.1. 프론트 - 카카오 인가코드 받아 백엔드로 전송 (/login/kakao API)2. 백 - 카카오 토큰 발급 요청하고 토큰을 DB에 저장 PK를 DTO에 담아 프론트에 반환3. 프론트 - 서비스 회원가입시 농장이름을 입력하고 DTO에 채우고 백엔드로 전송 (/login/farm API) 문제 - 하나의 API로 회원가입 절차를 끝내고 싶지만 2개의 API를 사용함 서비스 회원가입까지 완료하지 않으면 전체가 롤백되는 일종의 트랜잭션으로 묶고 싶었지만 카카오API라는 외부 API를 호출하기 때문에 어려운 상황 그렇기 때문에 만약 농장이름 입력에서 사용자가 가입포기를 하면 ..

객체와 쿼리최적화에 대한 고민 (2025년 3월 21일)

2025년 3월 21일의 고민 노션에서 옮겨오고 있습니다. 고민 농부 클래스와 농작물 클래스가 있다. 농부는 많은 농작물을 가질 수 있어서 농작물과 농부는 다대일 단방향 매핑을 했다. 외래키는 농작물에 있다.이때 농작물의 좌표를 바꾼다(농작물을 옮겨심는다)라는 기능은 농부 클래스에 있어야 할까? 농작물 클래스에 있어야할까? 농부가 농작물을 옮겨 심는다는게 자연스럽지만 농부 레포지터리에서 농작물 레포지터리에 접근해서 해당 농부가 가지고 있는 농작물을 조회하고 그 농작물의 id를 골라 좌표를 바꿔야한다.농작물에 농작물을 옮겨 심는다는 기능을 넣으면 좀 이상하지만 농작물 레포지터리에서 농작물 id를 찾고 좌표 바꾸면 끝이다.농작물이 무생물이라 조금 헷갈린다 좌표 바꾸는 기능은 농작물 클래스에 넣는게 맞는건가?..

토큰 보안에 관한 고민 (2025년 3월 23일)

2025년 3월 23일의 고민 노션에서 옮겨오고 있습니다. 토큰은 암호화와 복호화가 쉬워서 내용을 해독하기쉽다.예를들어 어떤 웹사이트의 토큰이 userId = 값 형식이라는걸 알았다면 user ID = 32를 넣고 암호화한뒤 토큰에넣고 전송하면 그 사람은 사용자 32의 권한을 가지게 되는 것이 아닐까? 토큰은 앞선 문제 때문에 토큰에는 중요정보를 담지말아야한다. 근데 그럴때 토큰에있는게 user ID = 1 이라면 userId를 url의 파라미터로 사용하면 안되는걸까? 토큰의 서명은 사용자마다 다르기때문에 상관없나? 예를들어 토큰안에 유저Id 5가 있다. 그럼 악성링크를 클릭하여 https://example.com/delete-account?userId=5 에 접속하게 되는 경우가 생길수 있으니 토큰안의..