spring

Web

[Spring] Logback MDC 로 애플리케이션 로깅하기

사이드 프로젝트 중 버그가 생긴 경우 그에 대한 요청/응답 값을 추적하던 중에 MDC 를 사용하면 좋을 것 같다는 생각이 들었다. MDC (Mapped Diagnostic Context) 란 Logback, Log4j2 등에서 지원하는 기능으로 로깅 메시지에 컨텍스트 정보를 저장할 수 있고 로깅 중에 스레드별로 특정 정보를 저장하고 관리하는 메커니즘을 말한다. 주요 이점 - 특정 사용자, 세션, 요청 등의 ID를 로그에 포함시켜 모니터링을 용이하게 한다. - 사용자 및 요청 정보를 로그에 포함시켜 감사 및 보안 모니터링을 강화할 수 있다. - 다중 스레드 환경에서 발생하는 요청을 효과적으로 관리하고 구분할 수 있다. 동작 방식 MDC 는 각 스레드에 대한 데이터 저장소를 Map 형태로 제공한다. 그렇기 ..

Web

[Spring] QueryDsl 로 동적 쿼리 짜기 with JPA

JPARepository 에서 제공하는 메서드로 해결이 안되는 경우 동적 쿼리를 짜야한다. 간단하게는 native query 로 해결할 수 있는데 개발자가 실수를 한 경우에 이는 컴파일 시점이 아닌 런타임 시점에서 고객이 그 메서드를 호출하는 행위를 한 경우에만 오류를 확인할 수 있게 된다. 이를 해결하기 위해 QueryDSL 을 적용해보자. QueryDSL 설정 1. spring boot 3.x QueryDSL 의존성 주입 ( Gradle 기준 ) // QueryDSL implementation "com.querydsl:querydsl-jpa:5.0.0:jakarta" annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta" annotationPro..

JAVA

[Java] LocalDateTime 과 Instant

프로젝트 진행 중에 데이터를 생성한 시간과 업데이트한 시간에 대한 필드를 정의하며 타입에 대한 고민이 들었다. LocalDateTime 만을 고려하고 있다가 Instant 라는 타입을 처음 알았기 때문이다. 해서 그에 대해 정리를 해보려한다. LocalDateTime 과 Instant 이 둘은 자바 8부터 도입된 날짜와 시간을 표현하는 데에 사용된다. 1. LocalDateTime - 시간대 정보를 포함하지 않으며 단순히 연, 월, 일, 시 등의 지역 날짜와 시간을 나타낸다. - 로컬 서버의 날짜와 시간을 나타내며 그것이 어느 시간대에 속하는 지는 명시하지 않는다. - 날짜, 시간 등을 더하고 빼는 등의 연산이 간단하다. - 시간대에 민감하지 않고 지역적인 서비스에 적합하다. 2. Instant - UT..

Web

[JPA] 양방향 순환 참조

JPA 양방향 관계를 설정하고 테스트하다가 Controller 단에서 아래 예외가 발생하였다. 찾아보니 JSON 직렬화 하는 과정에서 무한 참조로인해 생긴 예외로 원인과 해결방안에 대해 정리해보려한다. java.lang.IllegalStateException: Cannot call sendError() after the response has been committed .. java.lang.StackOverflowError: null .. ~[jackson-databind-2.15.3.jar:2.15.3] JPA 양방향 순환 참조 어떤 상황이었는지 간단하게 시나리오를 구현해보자. User 와 Notice 엔티티가 있고 1:N 양방향 관계이다. - User public class User { @Id @G..

Web

[Spring] 예외 코드 Enum 으로 관리하기

지난번 사이드 프로젝트를 할 때 커스텀한 예외 클래스를 따로 개별적으로 관리하여 한 눈에 보기 힘들고 중복되는 코드가 많아 가독성이 떨어진다는 느낌을 받았다. 그래서 이번에는 enum 으로 예외 코드를 관리해보기로 하였다. 자바의 Enum 타입이란 ? 공식 문서에 따르면 자바에서 Enum 타입은 고정된 상수들의 집합을 나타내는 특별한 데이터 타입으로, 변수는 미리 정의된 값들 중 하나와 같아야 한다. 또한, 상수들은 쉼표로 구분되며 대문자로 표기한다. public enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY } 또한 상수에 대한 의미있는 값을 미리 부여하여 활용할 수 있는데, 이렇게 하면 Enum 상수가 단순한 식별자..

Web

[System Design] URL 단축기 설계 -1

대규모 시스템 설계 기초 라는 책을 매주 한 chapter 씩만 읽고있음에도 나에게는 아직 많이 어렵고 와닿지 않는 내용이 많았다. 그 중 8장은 직접 구현해보면 좋을 것 같아 구현해보았다. URL 단축기의 필요성 사실 처음에는 이 필요성이 와닿지않았다. 특정 사이트에서 링크 복사를 하면 해당 URL 의 단축 URL 이 복사되어 좀 더 보기 간편하다는 생각은 했지만 그게 다였다. 그래서 필요성을 먼저 정리해보았다. 1. 확장성 - URL 단축기는 원래의 긴 URL을 짧게 변환하여 빠른 리다이렉션을 통해 서버의 부하를 줄일 수 있다. 2. 성능 - 캐싱 전략을 사용해 자주 접근되는 단축 URL에 대한 리다이렉션을 빠르게 제공할 수 있다. - 단축된 URL은 데이터 전송 시 네트워크 부하를 줄일 수 있다. ..

JAVA

[JAVA] 체크 예외와 언체크 예외

평소 체크 예외와 언체크 예외의 용도를 생각하지 않고 사용했던 것 같아 정리를 해본다. 체크 예외(Checked Exception)와 언체크 예외(Unchecked Exception) 1. 체크 예외 ( Checked Exception ) - 컴파일러가 예외를 확인하므로 컴파일 타임에 예외를 발생시킨다. - 예외를 처리하기위해 try-catch 블록이나 throws 를 사용해야 한다. ex> IOException, FileNotFoundException public class CheckedExceptionExample { public static void main(String[] args) { try { File file = new File("nonexistent.txt"); FileInputStream..

Web

[Spring] Transaction 에 대해서

spring 으로 웹을 구현했을 때 서비스 단에 트랜잭션을 보장하기위해 @Transactional 을 사용했었는데 그 동작에 대해서는 궁금해하지않았던 것 같아 정리를 해보려한다. 트랜잭션 ( Transaction ) 이란 트랜잭션은 데이터베이스 용어로, 하나 이상의 관련 작업을 그룹화하여 일련의 작업들이 모두 성공적으로 완료되거나 하나라도 실패할 경우 모든 작업들이 취소되도록 하는 것을 의미한다. 트랜잭션의 특성 ( ACID ) - 원자성(Atomicity) : 트랜잭션 내의 모든 작업들이 완전히 수행되거나 전혀 수행되지 않아야 한다. - 일관성(Consistency) : 트랜잭션 실행 전후로 데이터베이스는 항상 일관된 상태를 유지해야 한다. - 독립성(Isolation) : 동시에 여러 트랜잭션이 실행..

limnj
'spring' 태그의 글 목록