Backend 76

Jackson 커스텀 어노테이션: @JacksonAnnotationsInside

Jackson 관련하여 공통적인 코드를 분리하기 위해 커스텀 어노테이션을 만들어 사용하기로 결정했습니다.그 과정에서 Jackson이 커스텀 어노테이션을 인식하도록 하기 위해 @JacksonAnnotationsInside라는 어노테이션이 필요하다는 사실을 알게 되었고, 이를 정리해보았습니다. 👀 @JacksonAnnotationsInside란 무엇인가?`@JacksonAnnotationsInside`는 Jackson 라이브러리에서 제공하는 메타 어노테이션으로, 커스텀 어노테이션이 Jackson의 어노테이션처럼 동작하도록 정의할 때 사용됩니다. 즉, 이 어노테이션이 없으면 Jackson이 커스텀 어노테이션을 인식하지 못합니다.왜 필요한가?기본적으로 Jackson은 자신이 제공하는 어노테이션(@JsonNam..

Backend/Java 2024.12.21

[Java] JPA에서 발생하는 N+1 이슈: 원인부터 해결까지

JPA를 처음 사용할 때 많은 개발자들이 부딪히는 문제 중 하나가 바로 N+1 이슈입니다. 이번 글에서는 JPA 환경에서 N+1 이슈가 발생하는 원인을 알아보고, 이를 해결할 수 있는 방법을 정리해보겠습니다.   N+1 이슈란?N+1 이슈는 1개의 메인 쿼리로 데이터를 가져오려 했지만, 추가로 N개의 쿼리가 실행되는 문제를 뜻합니다.다음은 간단한 예제를 통해 이를 이해해보겠습니다. 엔티티 구조Member와 Order 간에 일대다 관계가 있다고 가정합니다.@Entitypublic class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @One..

Backend/Java 2024.11.27

Java의 Reflection 사용법과 주의점

Java에서 Reflection은 클래스나 메서드, 필드 같은 객체 정보를 "런타임"에 읽고 수정할 수 있는 도구입니다. 간단히 말해, 코드가 실행되는 도중에 "클래스의 내부를 엿보거나 조작"할 수 있게 해주는 강력한 기능입니다. 이 글에서는 Reflection이 무엇인지, 어떻게 사용하는지, 그리고 주의해야 할 점을 하나씩 살펴보겠습니다! 🚀 Reflection이란?Reflection은 말 그대로 반사처럼 프로그램이 자신을 들여다보고 조작할 수 있게 하는 기능입니다.어디에 쓰일까요?라이브러리/프레임워크: Spring 같은 프레임워크에서 빈(bean)을 생성하거나 주입할 때동적 동작: 컴파일 시점에 알 수 없는 클래스의 메서드나 필드를 실행해야 할 때테스트: 테스트 코드에서 private 메서드나 필드..

Backend/Java 2024.11.24

[Java] 빌더 패턴

자바에서 객체를 생성할 때 `new` 키워드를 사용한 생성자 호출 외에도 빌더 패턴을 활용하면 더 가독성 있고 유연한 코드를 작성할 수 있습니다. 특히, 필드가 많은 객체나 옵션이 다양한 경우 빌더 패턴은 매우 유용합니다. 이번 글에서는 빌더 메서드의 기본 개념, 장점, 실무 활용법을 정리하겠습니다! 👩🏻‍💻 빌더 패턴이란?빌더 패턴은 복잡한 객체의 생성 과정을 단순화하고, 가독성과 유지보수성을 높이기 위해 고안된 디자인 패턴입니다. 기본 빌더 패턴 코드 예제public class User { private final String name; private final int age; private final String email; // Builder 클래스 public s..

Backend/Java 2024.11.23

JPA FetchType.EAGER와 LAZY의 차이 알아보기

JPA를 사용할 때 @OneToMany, @ManyToOne 등 연관 관계를 매핑할 때 종종 등장하는 옵션이 있습니다. 바로 FetchType.EAGER와 FetchType.LAZY입니다. 이 두 옵션은 연관된 엔티티 데이터를 언제 로딩할지를 결정하며, 올바르게 설정하지 않으면 성능 문제를 일으킬 수 있습니다. 이번 글에서는 두 FetchType의 차이와 실무에서의 사용법을 다뤄보겠습니다. FetchType이란?FetchType은 JPA에서 엔티티의 연관된 데이터를 가져오는 방식을 정의합니다.기본적으로 JPA는 두 가지 FetchType을 제공합니다:EAGER (즉시 로딩)LAZY (지연 로딩)FetchType.EAGER (즉시 로딩)즉시 로딩은 엔티티를 조회할 때 연관된 엔티티 데이터도 즉시 가져옵니다..

Backend/Java 2024.11.22

[Java]자바 메모리 관리: 스택(Stack)& 힙(Heap)

자바 애플리케이션은 JVM 위에서 동작하며, JVM은 효율적인 메모리 관리를 위해 스택(Stack)과 힙(Heap)을 중심으로 메모리를 관리합니다. 이 글에서는 스택과 힙의 구조, 동작 원리, 그리고 실제 개발에서 반드시 알아야 할 내용을 정리하겠습니다.✍️ JVM 메모리 구조에서 스택과 힙의 위치JVM의 메모리는 크게 5가지로 나뉩니다. 메서드 영역(Method Area): 클래스 정보와 상수 풀(Constant Pool) 저장힙(Heap): 모든 객체와 배열이 저장스택(Stack): 각 스레드의 메서드 호출과 관련된 데이터 저장PC 레지스터(Program Counter Register): 현재 실행 중인 명령어 주소 저장네이티브 메서드 스택(Native Method Stack): 네이티브 코드(C, ..

Backend/Java 2024.11.20

[Java] Optional 한눈에 정리하기

Optional은 Java 8에 도입된 클래스로 null 처리를 안전하게 하고 코드의 가독성을 높이는 데 도움을 줍니다.이 글에서는 Optional에 대해 간단하게 정리해 보겠습니다. 👩🏻‍💻 Optional 기본 개념Optional은 값이 존재할 수도 있고 없을 수도 있는 상황을 명시적으로 표현합니다.NullPointerException 방지값을 감싸는 컨테이너 역할을 하며, null일 가능성을 안전하게 처리Optional 사용 이유명시적으로 값이 없음을 표현(`Optional.empty()`)null 대신 의미 있는 API 설계null 체크를 명시적으로 처리Optional 생성 방법1) 빈 Optional 생성Optional emptyOptional = Optional.empty();2) nul..

Backend/Java 2024.11.19

[Spring] @Component vs @Bean

스프링 프레임워크에서 애플리케이션의 구성 요소를 관리할 때, `@Compnent`와 `@Bean`은 빈(Bean)을 등록하는 주요 방법입니다.두 어노테이션은 비슷해 보이지만 실제 사용 목적과 방법은 다릅니다. 이번 글을 통해서 적재적소에 맞게 스프링 빈을 등록하는 방법을 알아보겠습니다.✍️ @Component란?`@Component`는 개발자가 정의한 클래스(주로 도메인 계층 또는 애플리케이션의 주요 기능을 담당하는 클래스)를 스프링 컨테이너로 등록하기 위해 사용됩니다.자동 스캔- `@Component`는 클래스패스 스캔(ComponentScan)을 통해 스프링이 자동으로 탐지하고 빈으로 등록합니다.- 별도의 설정 없이 클래스에 어노테이션만 추가하면 빈으로 관리됩니다.어노테이션 타깃- 클래스, 인터페이스..

Backend/Spring 2024.11.16

JavaScript heap out of memory 에러 해결하기

JavaScript 애플리케이션의 개발 및 배포 후 Out of Memory (OOM) 오류가 발생했다...😥이 글에서는 OOM 오류의 원인과 이를 해결하기 위한 접근 방법을 중심으로 정리해 보겠습니다. JavaScript Heap Out of Memory 오류란?JavaScript Heap은 애플리케이션이 동적으로 생성하는 객체들이 저장되는 메모리 공간을 의미합니다.JavaScript 애플리케이션의 힙 메모리는 고정된 크기를 가지고 있으며, 이 크기를 초과하면 Heap Out of Memory 오류가 발생하게 됩니다.이 오류는 일반적으로 다음과 같은 상황에서 발생합니다.데이터가 지나치게 많이 로드될 때반복문 안에서 대규모 객체를 생성하고 해제하지 않을 때메모리 누수가 발생할 때 오류 발생 및 문제 파..

Backend/TypeScript 2024.11.12

[Spring]고성능 비동기 웹 개발의 시작: Spring WebFlux 알아보기

최근 고성능 비동기 API를 구현해야 할 필요가 생기면서 기존의 Spring MVC로는 처리 성능에 한계가 있음을 느꼈다..🤔더 많은 요청을 효율적으로 처리할 방법을 찾던 중, Spring이 기존 MVC 외에 논블로킹 비동기 웹 애플리케이션을 지원하는 Spring WebFlux를 제공한다는 것을 알게 되었습니다. 이글에서는 Spring WebFlux의 개념에 대해 알아보겠습니다. Spring WebFlux 개요Spring WebFlux는 비동기 및 논블로킹 I/O를 기반으로 한 웹 프레임워크입니다.전통적인 Spring MVC의 동기적 구조와 달리 WebFlux는 Reactive Streams API를 기반으로 논블로킹 방식의 고성능 비동기 웹 애플리케이션을 구축할 수 있습니다. 전통적인 Servlet ..

Backend/Spring 2024.11.11