분류 전체보기 65

Spring Boot에서 발생한 Jackson 직렬화 오류: Document nesting depth exceeds the maximum allowed 해결 방법

Spring Boot를 사용하여 REST API를 개발하던 중, Jackson 라이브러리에서 발생한 "Document nesting depth exceeds the maximum allowed" 오류를 만났습니다. 이번 글에서는 오류가 발생한 원인과 이를 해결한 과정을 공유하려 합니다. 이번 포스트에서는 Spring Boot에서 JPA 양방향 매핑을 사용할 때 종종 발생하는 순환 참조 문제의 원인과 이를 해결하는 방법을 설명합니다. 특히, Jackson 직렬화 과정에서 발생하는 이슈에 대해 자세히 다룹니다. 문제 상황: 테스트 중 직렬화 오류 발생 테스트 요청 POST URL: localhost:8080/api/transactions..

TroubleShooting 2024.12.27

Lazy Vs Eager

Spring의 경우 기본적으로 즉시 로딩을 지원한다. 이 말은 Spring Context가 Bean을 읽는 시점에 같은 패키지를 포함한 하위 패키지의 모든 Bean을 ComponentSacn하기 때문에 모든 Bean 객체는 자동적으로 의존성이 주입된다. 하지만 Lazy로딩의 경우 해당 Bean을 사용하고자 할 태 호출이 되어서 의존성을 주입받게 된다. 즉시 로딩의 경우 구성에 오류가 있을 때 실행할 때 바로 에러를 잡을 수 있는 이점이 있다. Singelton Vs Prototype  Prototype의 경우 출력 값을 보게 되면 기본 클래스와 달리 출력될 때마다해시코드가 다른 것을 볼 수 있다. 즉 인스턴스가 계속 바뀐다는 소리이다.package com.udamy.beanscope;import org...

카테고리 없음 2024.09.04

Spring 의존성 주입

1. 생성자 주입 @Autowired가 없어도 의존성 주입 가능 : Spring에서 제일 권장하는 방식 (초기화가 한 메소드안에서 이루어지기 때문 그리고 초기화가 완료되었다는 것은 사용할 준비가 되었다는 것을 의미)2. 수정자(Setter) 주입3. 필드 주입 @Autowired : Bean 객체 자동 와이어링@Component : 클래스에 추가할 경우 클래스의 인스턴스는 Spring이 관리하게 된다.의존성 주입 : IOC(제어 반전)IOC(제어 반전) : 객체 생성 CoponentScan등을 활용해 Bean을 찾는 작업등을 Spring에 맡기는 것 내가 할 일들을 Spring에서 맡기는 것이 제어 반전자동 와이어링 : Spring Bean에 대한 의존성의 와이어링 프로세스를 말함 Spring이 특정 B..

카테고리 없음 2024.09.03

Spring

Spring Context(Spring Container) vs IOC Container vs Application ContextSpring Contexts(IOC Container) : Spring Bean을 관리하고 생명주기를 관리하는 것 클래스와 인풋(Bean 설정 파일)을 가지고 실행되는 시스템Bean Factory : 메모리에 심각한 제약을 가지는 것에 사용Application Context : 웹 서비스, REST API, 마이크로서비스에 사용Java Bean vs Spring BeanPOJO : 모든 Java객체 오래된 객체 모든 객체는 POJOJava Bean : 인수 생성자가 없어야 한다, Getter, Setter가 있어야 한다, Serializable을 구현한다. 세가지 제약을 가진 ..

카테고리 없음 2024.08.27

Spring Context, I/O Context, Application Context

Spring Context Spring Context에서 Bean을 관리하기 전의 상태package com.udamy.springpractice;import org.springframework.context.annotation.Configuration;/** * Spring에서 관리하는 것들을 Spring Bean 객체라고 한다 * @Configuration 어노테이션을 선언한 경우 Bean 객체 메서드를 생성 선언할 수 있다. */@Configurationpublic class HelloWorldConfiguration {}package com.udamy.springpractice;import org.springframework.context.annotation.AnnotationConfigApplic..

카테고리 없음 2024.08.26

강한 결합과 약한 결합의 차이는 뭘까?

강한 결합이란 무엇이고 약한 결합은 무엇일까..? 강한 결합, 약한 결합.. 말로만 들으면 어떤 의미인지 짐작하기가 어렵다. 코드를 보기 전에 먼저 예시를 차로 들어서 설명을 하자면 차에서 엔진은 쉽게 교체 할 수 없는 부품이고 차에 종속적인 부분이다. 하지만 바퀴의 경우 경우에 따라 바껴야 하며 차에 종속적이지 않다. 차로 예로 들었을때 엔진은 강한 결합이고, 바퀴는 약한 결합이라고 볼 수 있다. 마지막으로 하나의 예시를 더 든다면 테스크 탑의 경우 장소에 고정되기에 강한 결합이라고 볼 수 있고 노트북의 경우 장소에 고정적이지 않기 때문에 약한 결합이라고 볼 수 있다. 이제 코드를 본다면 강한 결합을 간단하게 아래의 코드로 설명할 수 있다. Mario 게임을 만든다고 가정을 해보자. Mario 게임의 ..

JAVA 2024.06.10

CodeTree 3일차

값의 변경을 위해서 기존의 값을 정수로 선언한 temp라는 값에 기존의 복사 할 값을 저장해둬야 한다.public class Main { public static void main(String[] args) { // 변수 선언 int a = 5, b = 6, c = 7; // 교체 int temp = a; a = c; c = b; b = temp; // 출력 System.out.println(a); System.out.println(b); System.out.println(c); }}출력 결과756 하나의 변수의 값을 2개 이상의 다른 변수의 값으로 지정하기..

JAVA 2024.05.08

Junit4 와 Junit5의 아주 간략한 차이

TestCode를 이용해서 동시성 문제를 사용해보려다 생긴 모두가 알법한 아주 간단한 이슈를 정리합니다. 기존의 Junit4에서의 TestCode는 아래와 같은 식으로 작성을 했었다. 내용을 보면 @RunWith, @After 어노테이션을 사용하고 있다. @RunWith(SpringRunner.class) @SpringBootTest public class PostsRepositoryTest { @Autowired PostsRepository postsRepository; @After public void cleanup() { postsRepository.deleteAll(); } @Test public void 게시글저장_불러오기() { //given String title = "테스트 게시글"; St..

TestCode 2024.04.20

Spring Boot MySQL 연결하기 java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)

Docker를 활용해 MySQL을 생성하고 Docker ps 명령어로 정상적으로 실행되는 걸 확인했다면 이제 Spring과 연결을 할 수 있습니다. 하지만 저는 연결하는 과정에서 java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)라는 에러를 직면했습니다. 이 에러는 비밀번호를 틀렸을 경우에도 나올 수 있습니다. 하지만 저는 아래의 명령어로 생성했고 비밀번호는 1234였습니다.docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234 --name mysql mysql이 과정에서 yml파일의 경우 아래와 같이 등록이 되어 있었기에 비밀번호와 url 모두 맞..

Spring 2024.04.20