전체 글 25

JPA에서 N+1 문제가 무엇인가

JPA를 사용하다 보면쿼리는 한 번만 날린 것 같은데실제로는 수십, 수백 번의 쿼리가 실행되는 상황을 마주치게 된다.이 현상을 흔히 N+1 문제라고 부른다.의미는 단순하다.한 번의 조회 쿼리(1)그 결과 개수만큼 추가 쿼리(N)의도하지 않은 다중 쿼리 실행으로 인해성능 문제가 발생하는 구조다.N+1 문제는 왜 발생하는가N+1 문제의 근본 원인은**연관 관계와 지연 로딩(Lazy Loading)**이다.예를 들어 다음과 같은 구조를 생각해보자.회원(Member)주문(Order)회원 1명은 여러 주문을 가진다 (1:N)JPA에서는 보통 연관 엔티티를지연 로딩으로 설정한다.@OneToMany(mappedBy = "member", fetch = FetchType.LAZY) private List orders; ..

Java 2026.02.04

대규모 데이터 처리란 무엇인가

서비스 규모가 커질수록 가장 먼저 문제가 되는 부분은데이터 처리 방식이다.초기에는 다음 구조로도 충분하다.요청이 들어오면서버에서 바로 처리하고바로 응답하지만 트래픽이 늘고, 처리해야 할 작업이 많아지면이 구조는 한계에 부딪힌다.대표적인 문제는 다음과 같다.요청 처리 시간이 길어짐특정 작업 실패가 전체 흐름에 영향서버 확장 시 로직 분리가 어려움장애가 발생하면 데이터 자체가 유실됨이 시점부터“요청 처리”와 “데이터 처리”를 분리하는 구조가 필요해진다.대규모 데이터 처리의 핵심은 분리다대규모 데이터 처리는 보통 다음 방향으로 진화한다.사용자의 요청은 빠르게 응답실제 무거운 작업은 비동기로 처리작업은 여러 프로세스가 나눠서 수행장애가 나도 데이터는 남아 있어야 함이를 위해 등장하는 개념이이벤트 기반 처리, 메..

기타 2026.01.23

Redis란 무엇인가?

Redis는 Remote Dictionary Server의 약자로,메모리(RAM)에 데이터를 저장하는 인메모리 데이터 저장소다.일반적인 데이터베이스(MySQL, PostgreSQL 등)는 디스크(HDD, SSD)에 데이터를 저장한다.반면 Redis는 데이터를 메모리에 올려두고 사용한다.이 차이로 인해 Redis는 속도가 매우 빠르다.디스크 기반 DB가 밀리초(ms) 단위라면, Redis는 마이크로초(μs) 단위로 응답한다.Redis의 목적은 모든 데이터를 저장하는 것이 아니라,빠르게 접근해야 하는 데이터를 처리하는 데 있다.캐시 메모리(Cache Memory)란 무엇인가캐시 메모리는 자주 사용되는 데이터를 미리 저장해 두는 임시 저장 공간이다.웹 서비스에서 대표적인 문제는 다음과 같다.사용자가 요청할 때..

기타 2026.01.20

개발하다가 매번 찾기 귀찮아서 직접 만든 개발자 유틸리티 사이트 (manyutils.dev)

개발을 하다 보면JSON, YAML, 타임스탬프, 숫자 변환 같은 작업을 정말 자주 하게 됩니다.문제는 이게매번 구글 검색해서사이트 들어갔다가광고 닫고원하는 기능 찾고이 과정을 반복하게 된다는 점이었습니다.저는 이게 너무 번거로워서“그냥 내가 쓰려고” 하나씩 만들어두기 시작했습니다.왜 직접 만들게 됐나처음엔 정말 단순했습니다.JSON ↔ YAML 변환Hex ↔ Decimal 변환Timestamp ↔ 날짜 변환이런 것들이요.VS Code 확장도 써보고,여러 온라인 툴도 써봤는데막상 쓸 때마다 만족스럽지 않았습니다.필요 없는 옵션이 너무 많거나모바일에서는 쓰기 불편하거나한 기능만 쓰고 싶은데 이것저것 섞여 있거나그래서 아예 브라우저에서 바로 쓸 수 있는 단순한 도구를 만들기로 했습니다.manyutils.de..

기타 2025.12.30

Spring Boot JWT 기반 SecurityConfig 정리

Spring Boot에서 JWT(Json Web Token) 를 사용하는 인증/인가 구조를 구성할 때,가장 핵심이 되는 설정이 바로 SecurityConfig입니다.이 글에서는 다음을 중심으로 설명합니다.Spring Security 필터 체인 구조JWT 인증 필터 적용 방식엔드포인트별 접근 제어CORS 설정실무에서 주의해야 할 포인트1. 전체 구조 개요@Configuration@RequiredArgsConstructorpublic class SecurityConfig { private final JwtTokenProvider jwtTokenProvider; private final UserRepository userRepository; @Bean public SecurityFilte..

Java 2025.12.22

스프링에서 예외 처리 구조 통일하기

최근 프로젝트 개발 중 예외 처리를 통일 시키면 일관성 있는 API 응답 구조를 구현할 수 있을거란 생각이 들어서 구현해보았다. CustomException, ApiResponse, GlobalExceptionHandler 설계 정리백엔드 API를 운영할 때 다양한 예외가 발생한다.입력값 오류, 인증 실패, 비즈니스 규칙 위반, 파일 업로드 문제 등 상황별로 처리해야 할 경우가 많다.이런 예외를 각 컨트롤러에서 개별적으로 처리하기 시작하면 코드가 복잡해지고,응답 형식도 통일되지 않아 프론트엔드 측에서도 다루기 어려워진다.이를 해결하기 위한 구조가 다음 세 가지 클래스다.ApiResponseCustomExceptionGlobalExceptionHandler이 구조는 API 응답 형식을 통일하고, 예외를 중..

Java 2025.11.17

Flutter에서 wifi_iot 라이브러리가 Android 보안 정책 강화 이후 동작하지 않는 문제 해결 (Kotlin 네이티브 코드로 Wi-Fi 연결 구현)

1. 개요자사 IoT 앱을 개발중 Flutter에서 Wi-Fi 제어 기능을 위해 흔히 사용하는 wifi_iot 패키지는 Android 버전이 올라가면서 점점 정상적으로 동작하지 않는 문제가 발생했다.특히 Android 10(Q) 이후 Google이 Wi-Fi 접근 정책을 강화하면서, 기존 wifi_iot 내부의 메서드들이 더 이상 정상 작동하지 않는 사례가 증가했다.이 문제는 단순한 버그가 아니라, Android OS 자체의 권한 정책 변화가 원인이기 때문에 패키지 업데이트만으로 해결되기 어렵다.본 글에서는 이 문제의 원인을 정리하고, Flutter에서 Wi-Fi 연결을 안정적으로 구현하기 위해 Kotlin 네이티브 코드로 직접 Wi-Fi 연결 로직을 구현한 방법을 소개한다.2. 문제 원인: Androi..

Flutter 2025.11.13

Spring-boot MultipartFile

Spring Boot에서 MultipartFile 처리하는 법 정리회사에서 프로젝트를 진행하는 도중 추가 요구사항으로 파일 업로드 요청이 들어와 작성해본다. 일반적으로 프로필 이미지 업로드, 게시판 첨부파일, CSV 데이터 업로드 등 다양한 상황에서 MultipartFile을 다루게 된다. 이 글에서는 MultipartFile이 무엇인지, 어떻게 사용해야 하는지, 그리고 실제로 파일을 저장하고 처리하는 패턴까지 한 번 정리해보려고 한다.MultipartFile이란?MultipartFile은 스프링에서 제공하는 인터페이스로, HTTP 요청 중 multipart/form-data 형식으로 전송된 파일을 객체로 다룰 수 있게 해준다.즉, 사용자가 업로드한 파일을 서버에서 편하게 읽고, 저장할 수 있도록 도와주..

Java 2025.11.13

정보처리 산업기사 실기 합격 후기

이번에 정보처리산업기사 실기시험에 합격했다.필기 때도 그랬지만, 실기 준비 과정에서는 자료를 고르기가 쉽지 않았다.교재나 강의는 많지만 실제 기출 유형을 정리해둔 곳은 생각보다 적었는데,그중에서 제일 도움이 된 게 잡코딩 정보 블로그였다.https://complainrevolutionist.tistory.com/53이 블로그에 있는 실기 기출 정리글은 정말 실전 감각을 익히는 데 큰 도움이 됐다.문제들이 실제 시험 형식 그대로 구성되어 있고,간단한 해설과 예시 코드까지 있어서 공부 효율이 높았다.공부하면서 특히 도움이 됐던 점기출문제 정리가 정말 잘 되어 있었다.분야별로 문제를 나눠서 볼 수 있어서내가 어떤 파트를 약하게 잡고 있는지 바로 확인할 수 있었다.특히 C언어나 SQL 쪽 문제는 거의 실전 그대..

자격증 2025.11.13

JVM이란

JVM은 자바 가상 머신으로서 자바 애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행하는 것으로JAVA와 OS(운영체제) 사이에서 중개자 역할을 수행하여 운영체제에 구애받지 않고 독립적으로 작동이 가능하며Garbage collecter를 통한 메모리 관리를 수행한다. 우선 JVM은 컴파일된 바이트 코드를 기계가 이해할 수 있는 기계어로 변환해주는데 나는 이것을 보고 번역기같다..? 라는 생각을 했다또한 스택기반의 가상 머신으로 후입선출의 개념을 가진다. JVM의 구조는 크게 4가지 (Class Loader, Runtime data areas, Execution Engine, GC)로 나누어져 있다.각각의 역할은 Class Loader - 클래스 파일을 Runtime data area의..

Java 2024.06.13