본문 바로가기

전체 글142

회원가입 기능 설계에 대한 고민 (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. 8. 3.
객체와 쿼리최적화에 대한 고민 (2025년 3월 21일) 2025년 3월 21일의 고민 노션에서 옮겨오고 있습니다. 고민 농부 클래스와 농작물 클래스가 있다. 농부는 많은 농작물을 가질 수 있어서 농작물과 농부는 다대일 단방향 매핑을 했다. 외래키는 농작물에 있다.이때 농작물의 좌표를 바꾼다(농작물을 옮겨심는다)라는 기능은 농부 클래스에 있어야 할까? 농작물 클래스에 있어야할까? 농부가 농작물을 옮겨 심는다는게 자연스럽지만 농부 레포지터리에서 농작물 레포지터리에 접근해서 해당 농부가 가지고 있는 농작물을 조회하고 그 농작물의 id를 골라 좌표를 바꿔야한다.농작물에 농작물을 옮겨 심는다는 기능을 넣으면 좀 이상하지만 농작물 레포지터리에서 농작물 id를 찾고 좌표 바꾸면 끝이다.농작물이 무생물이라 조금 헷갈린다 좌표 바꾸는 기능은 농작물 클래스에 넣는게 맞는건가?.. 2025. 8. 3.
토큰 보안에 관한 고민 (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 에 접속하게 되는 경우가 생길수 있으니 토큰안의.. 2025. 8. 3.
[골드5] 백준 2467 용액 투 포인터(Java) 이분탐색으로도 풀 수 있다고 하던데 전 투 포인터로 풀었습니다. package org.problem.투포인터;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTokenizer;// 골드 5 용액// 시간 제한 1초 수는 10만 n(logN)까지 허용public class b2467 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); i.. 2025. 7. 30.
[골드3] 백준 1238 파티 Java 풀이 package org.problem.다익스트라;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.*;// 골드 3 파티// 문제// N개의 숫자로 구분된 각각의 마을에 한 명의 학생이 살고 있다.// 어느 날 이 N명의 학생이 X (1 ≤ X ≤ N)번 마을에 모여서 파티를 벌이기로 했다. 이 마을 사이에는 총 M개의 단방향 도로들이 있고 i번째 길을 지나는데 Ti(1 ≤ Ti ≤ 100)의 시간을 소비한다.// 각각의 학생들은 파티에 참석하기 위해 걸어가서 다시 그들의 마을로 돌아와야 한다. 하지만 이 학생들은 워낙 게을러서 최단 시간에 오고 가기를 원한다.// .. 2025. 7. 30.
[골드3] 백준 1835 웜홀 Java 풀이 package org.problem.벨만포드;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.StringTokenizer;// 골드 3 웜홀public class b1835 { static final int INF = Integer.MAX_VALUE / 2; static class Edge { int from; int to; int time; public Edge(int fr.. 2025. 7. 30.