트러블 슈팅 - DB 연관관계에서의 N+1 문제
트러블 슈팅 - DB 연관관계에서의 N+1 문제 성장기록/개인프로젝트 2024. 3. 4. 04:03

문제 상황1 주문(Order)은 여러개의 주문 아이템(OrderItem)과 연결되어 있습니다. 각 주문 아이템은 상품정보를 가지고 있고, 주문과도 연관관계를 가지고 있습니다. 하나의 주문 내역을 가져오는 과정에서 2번의 쿼리문이 나왔습니다. 문제 원인 주문(Order)과 주문 아이템(OrderItem)은 ManyToOne 관계이므로 주문을 조회할때는 기본적으로 fetch.LAZY 전략을 사용합니다. 따라서 주문 아이템(OrderItem)은 프록시 객체로 저장되지만 전달하는 DTO에서 아래와 같은 코드를 사용함으로서 N+1 문제가 발생합니다. @Getter public class OrderDto { private Long orderId; private Long memberNumber; private Loc..

jwt 토큰을 관리하는 방법에 대한 고민
jwt 토큰을 관리하는 방법에 대한 고민 성장기록/개인프로젝트 2024. 3. 3. 13:37

이전에 다른 과제에서 jwt 토큰으로 로그인을 구현해 본 적이 있습니다. -> 원티드 프리온보딩 지원 과제(github 링크) 이 때에는 단순히 토큰 기반 로그인이 많이 사용된다하여 구현했었는데요. 사용한 이후에 해당 기술에 대해 더 찾아보니 아래와 같은 이점이 있었습니다. 1. 토큰 방식은 서버가 클라이언트의 상태를 가지지 않는 stateless한 방식 2. stateless하기 때문에 언제든 token만 있으면 회원 검증가능 3. session을 사용하지 않는 앱 쪽에서도 로그인 기능 확장이 가능(전통적인 웹에선 session 기반으로 인증 값을 가지고 있어야 함) 이전에는 이러한 이해가 부족한 채로 구현했었기 때문에 로그인 시 간단히 access token만 발급하는 방식이었습니다. 그렇지만 네이버..

리트코드 - Letter Combinations of a Phone Number
리트코드 - Letter Combinations of a Phone Number CS/코딩테스트 2024. 1. 11. 11:54

리트코드 - Letter Combinations of a Phone Number 출처 - https://leetcode.com/problems/letter-combinations-of-a-phone-number/description/ 문제 설명 주어진 문자열이 2에서 9까지의 숫자를 포함하고 있을 때, 이 숫자가 나타낼 수 있는 모든 가능한 문자 조합을 반환합니다. 답은 어떤 순서로든 반환될 수 있습니다. 숫자와 문자의 매핑은 아래와 같이 전화 버튼과 같습니다. 1은 어떤 문자에도 매핑되지 않는다는 점을 유의하세요. 의사코드 # 전화 번호 패드에 해당하는 문자열을 저장하는 배열 phoneLetters = ["", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "..

리트코드 - 77. Combinations
리트코드 - 77. Combinations CS/코딩테스트 2024. 1. 10. 20:53

리트코드 - 77. Combinations 출처 - https://leetcode.com/problems/combinations/description/ 문제 설명 두 정수 n과 k가 주어졌을 때, 1부터 n까지의 범위에서 k개의 숫자를 선택하는 모든 가능한 조합을 반환하세요. 답은 어떤 순서로든 반환해도 좋습니다. 의사코드 함수 combine(n, k): answer = new ArrayList() combine 함수를 재귀적으로 호출하여 조합을 생성 (answer, 빈 리스트, 시작점 1, n, k) answer 리턴 함수 combine(answer, current, start, n, k): if (current.length == k) answer에 current의 복사본 추가 break 반복문 시작 ..

2023년 회고록
2023년 회고록 이런저런이야기 2023. 12. 29. 23:44

작년 개발자가 되고 싶어 회사를 퇴사하고 공부를 시작한 이후 예비 개발자 신분으로 정말 너무 정신없이 모든 것이 흘러갔다. 해야 할 것도 많았고, 하고 싶은 것도 많았는데 체력이 부족했고 정신력 또한 어려움을 극복해야 하는 시기가 많았다. 수없이 요동치며 흘러가는 강물은 바다에 합류하는 순간 잔잔해지는데 (물론 바다는 이와 별도로 어마어마한 파도를 치지만) 아마 지금의 흔들림은 다 이런 과정이 아닐까하는 생각으로 임했다. 셰익스피어는 '인생은 연극이다'라는 말을 했다. 인생 전체가 하나의 연극이고, 어떤 이는 7막에 걸쳐서 여러 연기를 묘사하기도 한다고 했다. 인생에는 갑자기 바뀌는 분기점들이 있고, 이것을 극에서의 '막'이라는 표현으로 비유한 것이 아닌가 싶었다. 나도 지금이 새로운 막이 시작되는 것이..

리트코드 - 11. Container With Most Water
리트코드 - 11. Container With Most Water CS/코딩테스트 2023. 12. 27. 23:13

리트코드 - 11. Container With Most Water 출처 - https://leetcode.com/problems/container-with-most-water/description/?envType=study-plan-v2&envId=top-interview-150 문제 설명 당신은 길이가 n인 정수 배열 height를 가지고 있습니다. 여기서, i번째 선은 (i, 0)과 (i, height[i]) 두 점을 연결하는 수직선으로 그려집니다. x축과 함께 컨테이너를 형성하는 두 선을 찾아서, 해당 컨테이너가 가장 많은 물을 담을 수 있도록 합니다. 컨테이너가 저장할 수 있는 최대 물의 양을 반환하세요. 컨테이너를 기울일 수는 없다는 점에 유의하세요. 의사코드 left = 0 right = he..

image