반응형

분류 전체보기 403

@Value 어노테이션 null이 나오는 문제 해결 방법

@Value annotation을 사용하여 properties에 있는 메타 정보 값을 가져오는 과정에서, 값이 null으로 들어오는 문제를 해결하며 기록한 내용입니다. @Value Annotation 쉽게 @Value 어노테이션은 데이터베이스 연결 정보나, 외부 API 주소 등, 메타 정보를 관리하기 위한 프로퍼티(properties) 파일이나, 야믈(yml, yaml) 파일에서 메타 정보를 가져오기 위해 사용하는 어노테이션입니다. properties 또는 yml 파일에 메타 정보를 기록해놓고 @Value 어노테이션을 통해 해당 값을 가지고 오는 방식을 통해 로컬(local) 개발 환경에서의 설정 값과 개발(dev), 실제 서버(prod)의 설정 값을 따로 분리할 수 있고, 수정과 관리가 용이하다는 장점..

JPA @Modifying clearAutomatically 속성 발생할 수 있는 문제

해당 포스팅에서는 JPA @Modifying 어노테이션을 적용할 때 clearAutomatically 속성에서 발생할 수 있는 영속성 컨텍스트의 1차 캐시 관련 문제에 대해서 살펴보겠습니다. 시작에 앞서 JPA와 Spring Data JPA에 대해서 간단하게 이야기하면, 'JPA'는 Java Persistence API의 약자로, 자바 애플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스입니다. 그리고 'Spring Data JPA'는 스프링 프레임워크에서 JPA를 편리하게 사용할 수 있도록 만들어진 모듈 중 하나인데, JPA를 한 단계 추상화시킨 Repository라는 인터페이스를 제공함으로써 데이터 접근 계층을 개발할 때 구현 클래스 없이 인터페이스만 작성해도 개발을 할 수 있도록 ..

Java - Future Interface 비동기적 연산 작업을 위한 인터페이스

Java에서 비동기적 연산 작업을 위해 만들어진 인터페이스인 Future에 대해서 살펴봅니다. Future란, 자바 1.5에서 나온 인터페이스로 비동기적 연산의 처리 결과를 표현하기 위해 사용됩니다. 비동기 처리가 완료되었는지 확인하고, 처리 완료를 기다리고, 처리 결과를 반환하는 메서드를 제공합니다. Future를 이용하면 멀티 스레드 환경에서 처리된 어떤 데이터를 다른 스레드에 전달할 수 있으며, Future는 내부적으로 Thread-Safe 하게 구현되어 있기 때문에 synchronized block(동기화 블록)을 사용하지 않아도 됩니다. Future 객체는 작업이 완료될 때까지 기다렸다가 최종 결과를 얻는 데 사용하며, 때문에 지연 완료(pending completion) 객체라고도 합니다. *..

Programming/Java 2022.04.04

ngrok 외부에서 로컬 개발환경 localhost 접근하기(mac)

ngrok을 사용하여 외부에서 로컬 개발환경 localhost에 접근하는 방법을 살펴보겠습니다. (기본적인 동작은 설치 및 가입 이후 간단한 명령어만 사용하면 되기 때문에 크게 어렵지 않습니다.) 먼저 ngrok에 대해서 설명하자면, ngrok은 로컬 개발환경인 localhost에서 구동 중인 웹 서비스를 외부 인터넷 환경에서 접근할 수 있도록 만들어주는 툴입니다. Ngrok exposes local servers behind NATs and firewalls to the public internet over secure tunnels. (ngrok 공식 홈페이지에서는 다음과 같이 설명되어 있습니다.) 웹 서비스를 개발하다 보면 localhost가 아닌 외부 환경에서 개발 중인 서비스에 접근해야 하는 경..

Programming/Web 2022.04.01

생성자 주입과 필드 주입, 수정자 주입 정리 (feat. 의존성 관계 주입)

생성자 주입(Constructor Injection), 필드 주입(Field Injection), 수정자 주입(Setter Injection)은 모두 의존성 관계 주입이라고 합니다. 각각의 의존성 관계 주입 방법에 대해서 알아보기 전에 의존성과 의존성 관계 주입(Dependency Injection, DI)이 무엇인지에 대해서 먼저 알아보고 시작하겠습니다. 의존성과 의존성 관계 주입(Dependency Injection, DI) '의존성 관계 주입'은 Spring 프레임워크의 3가지 핵심 프로그래밍 모델 중에 하나로 Spring에서만 사용되는 용어가 아니라 객체지향 프로그래밍 어디서나 통용되는 개념입니다. 의존성이란 한 객체가 다른 객체를 사용할 때 의존성이 있다고 하며, A클래스가 B클래스 또는 인터페..

Spring Batch 개념과 구조, 동작 방식에 대한 정리

시작에 앞서, 해당 포스팅은 Spring Batch의 예시 코드에 대해 정리하고 설명하기보다 Spring Batch를 적용하기 위해 공부하며 정리한 개념과 구조, 동작 방식에 대해 공부한 기록을 남긴 것에 더 가깝습니다. 실제 예시 코드와 사용 방법에 대한 더 자세한 내용은 포스팅 맨 하단에 제가 보고 공부했던 좋은 포스팅들의 링크를 함께 두겠습니다. 잘못된 부분이나 궁금한 부분은 댓글로 남겨주시면 답변드리겠습니다. 감사합니다. Spring Batch란, 먼저 배치 프로세싱은 '일괄처리'라는 뜻을 가지고 있으며, 일괄처리의 의미는 일련의 작업을 정해진 로직으로 수행하는 것이라고 할 수 있습니다. 공식 문서에 따르면 Spring Batch는 이러한 배치 프로세싱을 기반으로 로깅/추적, 트랜잭션 관리, 작업..

Redis 동시성 처리를 위한 Transaction 사용 (MULTI, EXEC, DISCARD, WATCH)

Single-thread 기반의 Redis 동시성? Redis는 싱글 스레드(Single-thread) 기반으로 데이터를 처리합니다. 싱글 스레드를 기반으로 동작하지만 여러 명의 클라이언트 요청에 동시에 응답하는 동시성도 가지고 있는데요. 이것이 가능한 이유는 레디스의 동장 원리에서 알 수 있습니다. Redis의 동작 원리를 살펴보면 Redis는 이벤트 루프(Event Loop)를 이용하여 요청을 수행합니다. 즉, 실제 명령에 대한 작업(Task)은 커널 레벨에서 멀티플렉싱(Multiplexing)을 통해 처리하여 동시성을 보장합니다. 쉽게 유저 레벨에서는 싱글 스레드로 동작하지만, 커널 I/O 레벨에서는 스레드 풀을 이용하는 것입니다. (위 이미지는 참고를 위한 node.js의 event loop 이미..

Spring Boot 타임리프 Thymeleaf layout 적용하는 방법

타임리프(Thymeleaf)에 대해서 간단하게, 타임리프는 서버 사이드 템플릿 엔진(Template Engine)의 한 종류로, 쉽게 컨트롤러가 전달하는 데이터를 이용하여 동적으로 화면을 구성할 수 있게 해주는 역할을 합니다. 타임리프(Thymeleaf)는 HTML의 속성(Attribute)을 기반으로 작동되기 때문에 기존의 HTML 구조를 건드리지 않고 동작합니다. 때문에 서버를 구동하지 않을 때는 순수 HTML을 생성하며, 서버를 구동했을 때는 동적 HTML을 생성하게 됩니다. 'th:속성' 형식을 통해 값을 치환해주는 방법이 적용되며, 순수 HTML을 기반으로 하기 때문에 내추럴 템플릿으로도 불립니다. (추가로 Spring에서 공식적으로 Thymeleaf 사용을 권장하고 있습니다.) 레이아웃을 사용..

Querydsl Paging 페이징 처리, Custom PageRequest 사용하는 이유

'Querydsl Paging 페이징 처리' 프로젝트에서 Get요청을 통해 여러 건의 데이터를 가져올 때, 페이징(Paging) 처리가 필요한 경우가 많습니다. Spring Boot에서는 Pageable, PageRequest를 사용하여 페이징 처리를 하는데요. 페이징은 Pageable, PageRequest를 활용한 큰 틀 안에서 조금씩 다른 방법으로 사용될 수 있는데, 여기서는 Custom PageRequest를 사용한 페이징 처리에 대한 예시를 볼 수 있으며, 왜 Custom PageRequest를 만들어서 사용하는지에 대해서도 알 수 있습니다. *** (해당 포스팅은 JPA, Querydsl을 사용할 수 있는 환경이 세팅된 상태에서 작업했으며, Querydsl 환경 설정은 바로 아래 글을 참조하시..

구글맵 google map API 사용법 및 marker 추가, 변경하는 법 (JavaScript)

구글맵 google map API를 사용하는 방법 및 marker를 추가하고 변경하는 작업을 알아보겠습니다. (사용할 API는 'Maps JavaScript API'입니다.) 진행 과정은 먼저 Google Cloud Platform에서 'Maps JavaScript API' 라이브러리 사용 설정 및 API 키 발급받는 과정 이후 실제 html에 구글맵 API를 사용하는 코드를 적용해보겠습니다. 'Google Cloud Platform 설정' (Google Cloud Platform에 Project가 등록되어있다는 가정하에 진행됩니다.) Google Cloud Platform -> API 및 서비스 -> 라이브러리 -> Maps JavaScript API => 'Maps JavaScript API' 사용 ..

반응형