분류 전체보기 363

(spring) 싱글톤 객체의 다중 요청 처리 방법

싱글톤 객체의 다중 요청 처리 방법에 대한 의문점 뜬금없이 RestTemplate은 싱글톤 형식의 스프링 빈으로 등록하여 사용되는데 RestTemplate의 특성(blocking + 동기) 상 먼저 들어온 요청에 대한 응답이 늦게 와서 그동안 물려있다면 다음 요청은 먼저 들어온 요청이 완료되고 수행되는 것인가? 라는 의문이 들었습니다. 그러면 RestTemplate 뿐만 아니라 스프링 빈으로 등록되는 Controller, Service 등의 객체 역시 싱글톤으로 생성되는데, '(멀티스레드 환경에서) 싱글톤 객체에 대해 다중 요청이 처리되는 방식은 무엇일까?'가 궁금하여 찾아본 내용입니다. 싱글톤(Singleton) 패턴과 사용하는 이유 먼저 '싱글톤 패턴(Singleton pattern)'과 싱글톤 패턴..

Programming/Spring 2024.01.03

Atomikos를 통한 Multi Datasource Transaction 처리 (전역 트랜잭션)

스프링 부트 다중 데이터베이스 트랜잭션 처리 (jta-atomikos) 해당 포스팅은 스프링부트 환경에서 다중 데이터베이스를 연결할 때 'multi datasource에 대한 트랜잭션 처리'에 대해 정리한 내용입니다. 내용은 크게 스프링에서 지원하는 'ChainedTransactionManager'와 Java에서 지원하는 'JTA(Java Transaction API)'에 대한 내용으로 나뉘며, ChainedTransactionManager의 경우에는 현재 deprecated 된 상태이기 때문에 세부적인 구현보다는 동작되는 방식과 deprecated 된 이유에 대해서만 살펴보고 JTA에 대해서는 Atomikos를 사용한 실제 구현 방식과 트랜잭션 테스트 결과까지 확인해 볼 예정입니다. PlatformTr..

아이폰 푸시 알림 안 오는 경우 해결 방법(위치 및 개인 정보 보호 재설정)

아이폰 푸시 알림 안 오는 경우 해결 방법(위치 및 개인 정보 보호 재설정) 해당 포스팅은 '아이폰에서 푸시 알림이 오지 않는 문제'에 대한 해결 방법입니다. (해당 증상은 iPhone 12 mini 모델 및 소프트웨어 버전 15.6.1에서 발생했던 내용입니다.) 발생된 증상은 어느 날부터 갑자기 카톡 푸시 알림이 오지 않았고, 카톡 외에도 당근마켓, 네이버, pass 등 설치된 모든 애플리케이션의 푸시 알림이 오지 않았다는 것입니다. * 당시 알림 설정은 위 이미지와 같이 정상적으로 되어 있는 상태였습니다. 문제가 발생한 정확한 원인은 문제를 해결한 현재도 명확하게는 알 수 없지만, 대략적으로 어떠한 작업 중 아이폰의 위치 설정이 다른 나라로 바뀌면서 푸시가 오지 않았던 것으로 추측됩니다. 해결 방법 ..

IT Info 2023.12.23

Oracle ROWNUM, ROW_NUMBER() 사용하기 (MySQL LIMIT와 차이점)

Oracle ROWNUM, ROW_NUMBER() 사용하기MySQL에서는 SELECT 문에서 'LIMIT'를 통해 조회할 데이터 결과 값의 로우를 제한할 수 있습니다.반면 Oracle에서는 'LIMIT'가 없기 때문에 결과 값의 로우를 제한하기 위해 'ROWNUM' 또는 'ROW_NUMBER()'를 사용하는데요. 해당 포스팅은 Oracle에서 'ROWNUM' 및 'ROW_NUMBER()'를 사용하는 방법과 MySQL(및 PostgreSQL)의 'LIMIT'와의 차이점을 살펴보겠습니다. MySQL LIMIT, Oracle ROWNUM 사용 방법 비교id (BIGINT or NUMBER)name (VARCHAR)state (VARCHAR)1김학생NORMAL2이학생NORMAL3최학생WITHDRAWAL4박학생N..

Programming/Oracle 2023.12.23

(Oracle) TO_CHAR, TO_NUMBER, TO_DATE 함수 정리

오라클(Oracle) TO_CHAR, TO_NUMBER, TO_DATE 함수 정리 최근에 오라클을 조금 사용해 보게 되면서 그 과정에서 알게 된 'TO_CHAR', 'TO_NUMBER', 'TO_DATE' 함수에 대해 정리한 내용입니다.TO_CHAR먼저 'TO_CHAR' 함수는 날짜, 숫자 등의 값을 문자열로 변환하는 함수입니다.해당 함수의 다양한 변환 방법의 예시는 아래와 같습니다. 1. 날짜 관련-- 날짜 포맷 변경1SELECT TO_CHAR(SYSDATE, 'YYYYMMDD') -- 20231216 , TO_CHAR(SYSDATE, 'YYYY/MM/DD') -- 2023/12/16 , TO_CHAR(SYSDATE, 'YYYY-MM-DD') ..

Programming/Oracle 2023.12.16

Spring Boot 다중 데이터베이스 구성하는 방법

Spring Boot 다중 데이터베이스(Multi Datasource) 구성하는 방법 해당 포스팅은 '스프링 부트 환경에서 다중 데이버테이스 연결을 구성하는 방법'에 대한 내용입니다. 단순히 다중 데이터베이스 연결을 구성하는 방법은 어렵지 않지만 구성 후 다중 데이버테이스에 대한 트랜잭션 처리 등 함께 공부할만한 내용이 있어 정리하게 되었으며, TransactionManager가 여러 개일 때 트랜잭션 처리에 대해서는 해당 포스팅이 아닌 이어지는 포스팅에서 다룰 예정이니 참고 부탁드리겠습니다. Multi Datasource (application.yml) 다중 데이터베이스를 연결하여 사용하는 방법의 가장 핵심은 '각각의 데이터베이스에 대한 Datasource를 구성하는 것'인데요. 먼저 applicati..

(Spring Data JPA) 데이터베이스 View, Entity 매핑하기

(Spring Data JPA) 데이터베이스 View, Entity 매핑하기 해당 포스팅은 '데이터베이스 가상 테이블인 View를 Entity에 매핑하는 방법'을 정리한 내용입니다. 먼저 데이터베이스에서 View란 무엇인지를 간단하게 살펴보고, 이어서 '1. 생성된 View에 Entity를 매핑하는 방법'과 '2. View가 생성되지 않은 상태에서 Entity에 매핑하는 방법'에 대해서 살펴보겠습니다. View란? 뷰(View)란 데이터베이스에 존재하는 가상의 테이블입니다. 가상의 테이블이라는 이름처럼 실제로는 데이터를 가지고 있지 않은데요. View는 데이터가 아닌 SQL을 저장하여 보여주는 것만을 목적으로 하는 테이블입니다. 이처럼 View는 SQL을 저장하기 때문에 '1. 여러 테이블을 조인하는 복..

BeanUtils.copyProperties를 사용한 객체 필드값 복사

BeanUtils.copyProperties를 사용한 객체 필드값 복사 프로젝트를 진행하다 보면 Dto -> Entity 또는 Entity -> Dto 변환하는 과정이 필요한데요. (그 외에도 객체 간의 필드 값을 복사해야 하는 경우) 개인적으로는 지금까지 Entity 또는 Dto에서 builder를 통해 변환된 객체를 반환하는 method를 만들어 사용했으며, 동료 분의 코드에서 'BeanUtils.copyProperties' 기능을 사용하시는 것을 보고 해당 기능에 대해 알아보게 되었습니다. (데이터 복사에는 BeanUtils 외에도 ModelMapper, MapStruct 등의 라이브러리를 사용할 수 있으며, 관련된 부분도 아래 내용을 통해 언급됩니다.) *** 아래 내용에서는 'Entity와 Dt..

도커 이미지와 컨테이너(docker images, containers)란?

도커 이미지와 컨테이너(docker images, containers) 최근 컨테이너 기술인 'docker'를 사용하면서 관련된 공부를 하게 되었는데요. 공부하는 과정에서 '도커 이미지와 컨테이너(docker image, docker container)'에 대한 개념을 잘 알아두어야겠다고 생각되어 정리한 내용입니다. (짧게) Docker란? 도커 이미지, 컨테이너, 컴포즈 등과 같은 용어들로 인해 처음에는 뭔가 엄청나 보이고 어려워 보였지만, 결국 도커는 '컨테이너를 생성하고 관리하기 위한 도구'인데요. 아래 이미지와 컨테이너에 대한 내용을 통해 도커가 생성하는 컨테이너는 무엇이고 어떤 기능을 하는지 살펴보겠습니다. Docker Image 도커 이미지는 '컨테이너를 만드는 데 사용되는 읽기 전용(Read..

Programming 2023.11.21

@AuthenticationPrincipal 동작 원리와 사용 예시

Spring Security @AuthenticationPrincipal 동작 원리와 사용 예시 해당 포스팅은 스프링 시큐리티 환경에서 인증 후 로그인 객체를 가져오는 방법 중 '@AuthenticationPrincipal 어노테이션을 사용하는 방법과 동작 원리, 사용 예시'를 중점으로 정리한 내용입니다. (코드가 너무 긴 부분은 내용상 필요한 부분만 올려놓았으며, 전체가 궁금하신 경우 포스팅 맨 하단 github 소스코드를 참고하시면 좋을 것 같습니다.) 인증 후 로그인 객체를 가져오는 방법 1. SecurityContextHolder에서 직접 가져오는 방법 Object principal = SecurityContextHolder.getContext().getAuthentication().getPrin..