Spring Boot 썸네일형 리스트형 [Spring Boot] 🧠 GC 튜닝 없이도 가능한 JVM 메모리 최적화: 실무에서 바로 적용한 팁들 1. 왜 GC 튜닝보다 먼저 메모리 구조를 봐야 할까?Spring Boot 기반의 서비스가 일정 시간이 지나면 점점 느려지거나, 컨테이너 메모리 사용량이 예측 이상으로 올라가는 경험, 해보셨을 겁니다. 대부분은 "GC 튜닝 해야 하나?"라고 생각하지만, GC 로그를 아무리 봐도 정작 병목의 원인은 비효율적인 메모리 사용에 있는 경우가 많습니다.이번 글에서는 JVM 옵션 조정 없이도 메모리 낭비를 줄이고 성능을 개선했던 실전 팁들을 공유합니다. 2. 문제 상황: GC 튜닝 전에 놓치기 쉬운 흔한 패턴들❌ 문제 1: 반복 생성되는 불필요한 객체for (int i = 0; i ObjectMapper는 생성 비용이 크고 내부 캐시가 있음에도 매번 생성→ 결과적으로 Eden 영역에서 빠르게 차고, Minor G.. 더보기 [Spring Boot] JPA vs mybatis 안녕하세요! 좋은 질문입니다. MyBatis와 JPA를 혼용하여 사용하는 경우는 실제로 존재하며, 두 가지를 함께 사용하는 이유는 각기 다른 장단점을 보완하기 위함입니다. 각각의 특성을 이해하면 왜 혼용해서 사용하는지 더 명확하게 알 수 있습니다.JPA의 장점과 단점장점:객체 지향적 데이터베이스 접근: JPA는 객체 지향 프로그래밍을 지원하여 엔터티를 통해 데이터베이스를 조작합니다.자동화된 CRUD: 기본적인 CRUD(Create, Read, Update, Delete) 작업을 자동으로 처리해주는 기능을 제공합니다.JPQL: 객체 중심의 쿼리를 작성할 수 있는 언어를 제공하여, SQL을 직접 사용하지 않아도 됩니다.캐싱: 1차 및 2차 캐시를 통해 성능을 최적화합니다.단점:복잡한 쿼리의 어려움: 복잡한 .. 더보기 [Spring Boot] JDBC Template이란? JDBC Template 소개 JDBC Template은 Java에서 데이터베이스와의 상호 작용을 쉽게 만들어주는 스프링 프레임워크의 일부입니다. 이를 통해 개발자는 SQL 쿼리를 실행하고 데이터베이스와 상호 작용하는 코드를 간소화할 수 있습니다. 설정 방법은 2가지가 있다. 1. yml에서 설정하는 방법 spring.datasource.url=jdbc:mysql://localhost:3306/yourdatabase spring.datasource.username=yourusername spring.datasource.password=yourpassword spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver 2. Spring Bean으로 등록하여 .. 더보기 [Spring Boot] Hibernate란? 소개 Hibernate는 자바 기반의 오픈 소스 ORM (Object-Relational Mapping) 프레임워크입니다. ORM은 객체 지향 프로그래밍 언어와 관계형 데이터베이스 간의 데이터 매핑을 제공하여 개발자가 객체 지향 프로그래밍으로 데이터베이스를 다룰 수 있게 해줍니다. Hibernate는 데이터베이스 테이블과 객체 지향 언어 간의 매핑 작업을 간소화하고, 개발자가 데이터베이스에 대한 SQL 쿼리를 직접 작성하지 않고도 데이터를 조작할 수 있도록 지원합니다. Hibernate는 자바 객체와 데이터베이스 테이블 간의 매핑 규칙을 사용하여 객체와 데이터베이스 간의 변환을 처리하며, 이를 통해 개발자가 높은 수준의 추상화를 유지할 수 있습니다. Hibernate의 주요 특징과 이점은 다음과 같습니다.. 더보기 [Spring Boot] jpa n+1 문제 소개 N+1 문제는 데이터베이스 쿼리의 성능 이슈 중 하나로, 특히 Spring Data JPA와 같은 ORM(Object-Relational Mapping) 프레임워크를 사용할 때 발생할 수 있습니다. 이 문제는 관계형 데이터베이스에서 연관된 엔티티를 검색할 때 발생하며, 한 번의 쿼리로 필요한 데이터를 가져오지 않고 추가적인 쿼리를 여러 번 실행하는 상황을 말합니다. 예를 들어, 하나의 Post 엔티티와 여러 개의 Comment 엔티티가 있다고 가정해 봅시다. 예제 @Entity public class Post { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToMany(mappedBy = "post", fe.. 더보기 [Spring Boot] Spring에서 사용된 디자인 패턴 Singleton Pattern (싱글톤 패턴): 목적: 클래스의 인스턴스가 하나만 생성되도록 하는 패턴. 예제: Spring에서 @Service나 @Component 어노테이션을 사용하여 Bean을 정의하면 해당 Bean은 기본적으로 싱글톤 스코프로 생성됨. @Service public class MySingletonService { // 싱글톤으로 동작하는 서비스 } Factory Method Pattern (팩토리 메서드 패턴): 목적: 객체 생성을 서브 클래스에서 결정하도록 하는 패턴. 예제: Spring에서 @Bean 어노테이션을 사용하여 메서드를 통해 Bean을 생성하는 방식. @Configuration public class AppConfig { @Bean public MyService my.. 더보기 [ Spring Boot] Security Error - Pre-authenticated entry point called. Rejecting access 소개 해당 경로에 접근할 수 없을때 나는 에러이다. 해결법 requestMatchers에 해당 경로를 접근 허용해주면 된다. private static final String[] AUTH_WHITELIST = { "/login", "/user/**", "/js/**", "/css/**", "/html/**", "/fonts/**", "/images/**", "/index.html", "/error", }; .requestMatchers(AUTH_WHITELIST) .permitAll() 생각보다 간단한 문제였지만 /login 경로에 접근을 하면 classpath 경로에 있는 index.html 같은 파일들은 다른 경로라 인식을 하기 때문에 이걸 찾는데 삽질을 좀 했다. 다들 해결 잘 하시길 바랍니다! 더보기 [Spring Boot] Spring Batch란? 소개 Spring Batch는 대용량의 데이터를 처리하기 위한 일괄 처리(Batch Processing) 프레임워크로서, Java 기반의 프레임워크입니다. Spring Batch는 기업에서 주로 발생하는 대용량 데이터 처리 작업을 간편하게 구현하고, 관리할 수 있도록 도와줍니다. 주로 일괄 처리 작업, 예를 들면 대용량 데이터의 추출, 변환, 로딩(ETL) 작업, 정기적인 보고서 생성, 데이터 마이그레이션 등을 처리하는 데 사용됩니다. 아키텍처 Application: 목적: Batch 애플리케이션의 비즈니스 로직과 작업 흐름을 구현합니다. 기능: 실제 비즈니스 로직이 위치하는 곳으로, 배치 작업의 흐름을 제어하고 비즈니스 논리를 실행합니다. 주로 Job 및 Step의 정의, 비즈니스 로직 수행을 위한 서.. 더보기 이전 1 2 3 다음