반응형

분류 전체보기 104

TIL - JWT Token 생성 및 검증(Access Token, Refresh Token)

JWThttps://jwt.io/RFC 7519 웹 표준으로 지정되어 있는 JSON 객체를 사용해서 토큰 자체에 정보들을 저장하고 있는 Web Token당사자 간에 정보를 JSON 형태로 안전하게 전송하기 위한 토큰URL로 이용할 수 있는 문자열로만 구성되어 있으며, 디지털 서명이 적용되어 있어 신뢰할 수 있으며 HTTP 구성요소 어디든 위치할 수 있음주로 서버와의 통신에서 권한 인가를 위해 사용됨JWT의 장점중앙의 인증서버, 데이터 스토어에 대한 의존성 없음, 시스템 수평 확장 유리Base64 URL Safe Encoding > URL, Cookie, Header 모두 사용 가능JWT의 단점Payload의 정보가 많아지면 네트워크 사용량 증가(트래픽 증가), 데이터 설계 고려 필요토큰이 클라이언트에 저..

개발노트 2024.05.21

TIL - Java 8 date/time type `java.time.LocalDateTime` not supported

Spring Security를 사용해 로그인 처리를 할 때, 성공 시 응답 본문에 Json 형식의 데이터를 담아 보내려고 했다.그런데 LocalDateTime 타입의 createdAt에 대해 다음과 같은 예외가 발생했다.com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 date/time type `java.time.LocalDateTime` not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling (through reference chain: org.zerock.todolist.domai..

개발노트 2024.05.20

TIL - Spring Security에서 JSON으로 로그인 처리

Spring Security에서 formLogin()을 사용하면 Content-Type이 x-www-form-urlencoded인 방식으로만 데이터를 받을 수 있다.이런 경우 Rest Api 통신에 사용하는 Json으로 보내는 데이터는 처리되지 않는다.Json으로 데이터를 받아서 로그인 처리를 하기 위해서는 AbstractAuthenticationProcessingFilter나 UsernamePasswordAuthenticationFilter를 상속 받아 처리할 수 있다. 다음은 AbstractAuthenticationProcessingFilter를 상속 받아 로그인을 구현한 코드이다.class JsonUsernamePasswordAuthenticationFilter( private val obje..

개발노트 2024.05.17

TIL - Offset-based Pagination & Cursor-based Pagination

오프셋 기반 페이지네이션(Offset-based Pagination)DB의 offset, limit 쿼리를 사용이전의 데이터를 모두 조회 후 offset을 조건으로 잘라내는 방식페이지 단위로 구분해 요청 및 응답총 레코드 개수 및 전체 페이지 크기를 알 수 있음원하는 페이지로 바로 이동 가능데이터의 변경이 잦은 경우 중복 또는 누락 데이터가 발생(데이터 불일치)레코드의 개수가 많고 offset 값이 올라갈수록 시간 복잡도 ↑SELECT * FROM todo ORDER BY create_at DESC LIMIT 10 OFFSET 10 -- 10개 skip 후 10개의 데이터 요청SELECT * FROM todo ORDER BY create_at DESC LIMIT 20 OFFSET 10 -- 20개 ski..

개발노트 2024.05.16

TIL - SQL WITH 재귀 쿼리

프로그래머스에서 SQL 문제 중 입양 시각 구하기(2) 문제를 푸는데 결과에 없는 시간대를 어떻게 만들어야 할지 몰라서 질문하기를 참고 했는데 MySQL의 경우 with을 사용한 재귀 풀이가 많았다.문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/59413 SQL 재귀 쿼리에 대해 찾다가 MySQL Recursive CTE에 대해 이미지와 함께 잘 설명되어 있는 페이지를 발견했다.https://www.mysqltutorial.org/mysql-basics/mysql-recursive-cte/ CTE의 요소 재귀적 CTE의 실행 단계앵커와 재귀 멤버를 분리앵커 멤버는 초기 행( SELECT 1)을 형성하므로 첫 번째 반복에서는 n = 1..

개발노트 2024.05.14

TIL - 댓글을 가져올 때 순환 참조 발생

Todo 프로젝트에 댓글 기능을 추가하면서 순환 참조 문제가 발생했다.테스트 코드에서는 문제가 없었지만 swagger에서 테스트를 하려고 보니 Response Example Value에 문제가 있는 게 보였다.comments 내 todo에 comments가 다시 들어가 있어서 순환 참조가 발생할 코드였다. [Execute] 버튼을 누르면 예상대로 다음과 같이 순환참조 되면서 중복되는 많은 데이터가 출력된다. 서버 로그에는 다음과 같은 예외 메시지가 출력된다.2024-05-13T20:25:33.474+09:00 WARN 12560 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Ignoring exception, response comm..

개발노트 2024.05.13

JPA(Java Persistence API)의 이해 2

JPA의 Entity Manager영속성 컨텍스트(Persistence Context)를 두어 Entity를 관리하는 주체@PersistenceContext 어노테이션을 통해 주입하거나 생성자 주입을 했을 시 자동적으로 주입 됨import org.springframework.stereotype.Serviceimport jakarta.persistence.EntityManagerimport jakarta.persistence.PersistenceContext@Serviceclass MyService { @PersistenceContext private lateinit var entityManager: EntityManager}EntityManager는 여러 종류의 함수를 지원하여, Entity의..

개발노트 2024.05.10

JPA(Java Persistence API)의 이해 1

JPA(Java Persistence API)ORM의 한 종류, Java 및 Kotlin의 객체를 사용해 DB를 쉽게 조회, 조작할 수 있도록 해 줌 ORM(Object-Relational Mapping)객체와 관계형 DB 간의 매핑을 담당별도의 SQL 쿼리를 작성하지 않아도 객체를 DB에 저장 및 조회 가능객체를 활용하므로 객체 지향 프로그램 가능 및 재사용성 증대DB에 종속적이지 않음(DB 변경 시 코드 최소화)필요에 따라 데이터를 캐싱하므로 효율적인 데이터 조회 가능 ORM 개념 학습 러닝 커브 有복잡한 쿼리나 특수한 DB 기능을 사용하는 경우 직접 SQL 작성이 효율적JDBC, Hibernate, JPA, Spring Data JPAJDBC(Java Database Connectivity)Java..

개발노트 2024.05.09

Programmers SQL 문제 풀이 61 ~ 70

서울에 위치한 식당 목록 출력하기https://school.programmers.co.kr/learn/courses/30/lessons/131118-- 1. 서울에 위치한 식당-- 2. 식당 ID, 식당 이름, 음식 종류, 즐겨찾기수, 주소, 리뷰 평균 점수 조회-- 3. 평균 점수는 소수점 세 번째 자리에서 반올림-- 4. 평균 점수 기준 내림차순, 즐겨찾기수 기준 내림차순 정렬-- ------------------------------------------------------------------ 1. rest_review 테이블에서 식당 ID, 점수를 추출한다.-- 2. rest_info와 rest_review에서 추출한 데이터를 조인한다.-- 3. address에서 '서울'과 일치하는 주소만 필..

개발노트 2024.05.09
반응형