SpringBoot 로 RestAPI 를 개발하다 보면, 클라이언트에 일관된 에러 응답을 제공하기 위해 예외처리의 표준화가 필요합니다. 이를 효율적으로 관리하기 위해 RestErrorAdvice 를 설정하면 각종 예외를 깔끔하게 처리할 수 있습니다. 이번 포스팅에선 RestErrorAdvice 를 설정하는 방법에 대해 소개하겠습니다. 1. Dependency 추가dependencies { ... implementation 'org.springframework.boot:spring-boot-starter-web' ...}gradle 또는 maven 에 Dependency 를 추가합니다. 2. 공통 에러 응답 포맷 정의@Getter@Setter@NoArgsConstructorpublic class Ba..
SpringBoot 애플리케이션을 Undertow 기반으로 실행하고 Docker로 배포하는 방법을 단계별로 정리했습니다. 이 가이드를 따라 하면 간단히 Docker 컨테이너 환경에서 애플리케이션을 실행할 수 있습니다. 1. 프로젝트 설정1.1. Gradle 설정build.gradle 파일에서 Undertow 및 Docker 빌드를 위한 플러그인을 설정합니다.# build.gradleplugins { id 'java' id 'org.springframework.boot' version '3.4.0' id 'io.spring.dependency-management' version '1.1.6'}dependencies { implementation 'org.springframework.boot:sprin..

SpringBoot 에서 JPA 와 GraphQL 을 연동하는 방법에 대해 간략히 소개하겠습니다. 해당 포스팅에선 PostgeSQL 을 사용하였습니다. 1. 의존성 추가// GraphQLimplementation 'org.springframework.boot:spring-boot-starter-graphql'implementation 'com.graphql-java-kickstart:graphql-spring-boot-starter:15.1.0'// PostgreSQLruntimeOnly 'org.postgresql:postgresql'// JPAimplementation 'org.springframework.boot:spring-boot-starter-data-jpa'GraphQL, PostgreSQL..
스프링 AOP(Aspect-Oriented Programming)는 핵심 비즈니스 로직에 영향을 주지 않고 공통적인 관심사를 처리하는 데 사용됩니다. AOP를 활용하면 코드 중복을 줄이고 유지보수를 용이하게 만들 수 있습니다. AOP의 주요 사용처 1. 로깅애플리케이션의 메서드 호출, 매개변수, 반환값, 실행 시간 등을 기록개발 중 디버깅 및 운영 중 문제 분석에 유용@Aspect@Componentpublic class LoggingAspect { @Before("execution(* com.example.service.*.*(..))") public void logBefore(JoinPoint joinPoint) { System.out.println("Method called: ..
스프링 어노테이션은 리플렉션과 스프링 컨테이너를 기반으로 동작합니다. 어노테이션은 런타임에 메타데이터를 제공하며, 스프링은 이를 통해 객체 생성, 의존성 주입, AOP 등을 처리합니다. 주요 동작 원리를 단계별로 살펴보겠습니다. 1. 스프링 컨테이너의 역할스프링 컨테이너는 어노테이션 정보를 분석하고, Bean 을 생성 및 관리합니다. 스프링의 주요 컨테이너는 ApplicationContext 이며, 이를 통해 어노테이션이 처리됩니다. 2. 스캔 및 어노테이션 인식스프링은 클래스패스 스캔을 통해 어노테이션을 가진 클래스를 탐색합니다.컴포넌트 스캔 @ComponentScan 어노테이션을 통해 특정 패키지를 스캔합니다.해당 패키지에서 @Component, @Service, @Repository 등이 붙은 클래..

이미지에서 글자를 추출해야 할 때, Tesseract OCR은 가장 많이 사용되는 오픈소스 라이브러리 중 하나입니다. 이번 포스팅에서는 Spring Boot와 Tesseract를 활용해 이미지에서 글자를 추출하는 방법을 알아보겠습니다. 전체소스는 github 를 참고해 주세요. 1. 특징Tesseract는 강력한 오픈소스 OCR(Optical Character Recognition) 엔진으로 다양한 특징을 가지고 있습니다. 다음은 Tesseract의 주요 특징입니다.다국어 지원 : Tesseract는 약 100여 개의 언어를 기본으로 지원하며, 한국어, 영어, 일본어 등 다국어 OCR이 가능합니다.높은 정확도 : LSTM(Long Short-Term Memory) 신경망을 활용해 텍스트 인식 정확도를 크..

MongoDB는 NoSQL 데이터베이스로, 비관계형 데이터베이스 모델을 사용하는 것이 가장 큰 특징입니다. 스키마리스 구조로 고정된 스키마가 없기 때문에 데이터의 구조를 유연하게 관리할 수 있을뿐더러 샤딩을 통해 데이터를 여러 서버에 분산해 저장하고, 이를 통해 대량의 데이터를 처리할 수 있는 수평적 확장을 지원합니다. 윈도우에 MongoDB 를 설치하는 방법과 SpringBoot를 통해 MongoDB를 사용하는 방법에 대해 알아보겠습니다. 1. 윈도우 MongoDB 설치아래 경로로 접속하여 커뮤니티 버전을 다운로드합니다.https://www.mongodb.com/try/download/communityComplete : 기본Custom : 사용자설정저는 Complete로 진행하였습니다.원하는 경로로 지..

최근 유행하는 캐릭터 맞히기 게임을 아이와 함께 즐기다 보니, 흥미가 생겨 직접 만들어보게 되었습니다. 관심 있으신 분들은 한번 참고해보세요! 전체소스는 Github 를 참고해주세요. SpringBoot + Thymeleaf + MariaDB 로 작성되었습니다. 주요 기능일반 모드: 10문제, 20문제, 50문제 중 선택하여 플레이 가능데스매치 모드: 제한 시간과 목숨을 두고 도전하는 스릴 있는 게임 모드공부하기 모드: 게임을 즐기면서 캐릭터에 대해 학습할 수 있는 기능랭킹 시스템: 사용자들의 기록을 기반으로 랭킹을 조회하는 기능메뉴 및 문제 등록: 게임에 사용할 캐릭터와 문제들을 자유롭게 등록 가능 1. 메인화면게임을 선택할 수 있는 메인 화면입니다. 원하는 만화를 선택하여 게임을 진행할 수 있습니다...
AOP(Aspect-Oriented Programming)는 핵심 비즈니스 로직과 분리되는 부가적인 기능, 즉 '횡단 관심사'를 분리해 코드의 가독성과 유지 보수성을 높여줍니다. 대표적인 예로 로깅, 트랜잭션 관리, 보안 등이 있는데, 이 중에서도 메서드 호출에 대한 로깅은 애플리케이션의 동작을 추적하고 디버깅하는 데 큰 도움이 됩니다. 이번 포스팅에서는 Spring Boot의 AOP를 활용해 프로젝트 내 모든 메서드 호출 시마다 자동으로 로그를 남기는 방법을 알아보겠습니다.Spring logback 설정은 블로그 포스팅 을 참고해주세요. 1. 라이브러리 추가// AOPimplementation 'org.springframework.boot:spring-boot-starter-aop' 2. LogAop...
Spring Data JPA는 쿼리를 메서드 이름만으로 작성할 수 있는 강력한 기능을 제공합니다. 복잡한 SQL을 작성하지 않고도 데이터를 쉽게 조회, 수정, 삭제할 수 있는 이 기능은 개발 생산성을 크게 향상시킵니다. 이번 포스팅에서는 findBy, countBy, deleteBy 등의 다양한 키워드와 그 조합을 알아보고, 실제 예제를 통해 활용 방법을 소개하겠습니다. 1. findBy특정 조건을 만족하는 엔티티(혹은 엔티티의 리스트)를 조회할 때 사용// username으로 User 리스트를 조회List findByUsername(String username); 2. existsBy데이터베이스에 존재하는지 체크// 이메일이 데이터베이스에 이미 존재하는지 확인boolean existsByEmail(St..
- Total
- Today
- Yesterday