반응형

Programming 375

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..

repository, repositoryCustom, repositoryImpl 구조를 사용하자

jpa 공식 같은 repository, repositoryCustom, repositoryImpl 구조 해당 포스팅에서는 하나의 Repository를 통해 JpaRepository의 기능과 Querydsl의 기능을 사용하는 CustomRepository를 모두 사용할 수 있는, 일종의 공식처럼 쓰이는 'repository, repositoryCustom, repositoryImpl 구조'에 대해서 살펴보겠습니다. repository 상속 구조 해당 구조를 코드로 보면 아래와 같은데요. 크게 JpaRepository를 extends 하는 Repository 인터페이스에 CustomRepository 인터페이스를 추가로 extends 하는데, CustomRepository 인터페이스는 Querydsl의 기능..

@SpringBootTest 스프링 부트 통합 테스트 개념과 예시 코드

@SpringBootTest를 사용한 스프링 부트 통합 테스트 개념과 예시 코드 Spring Boot 프로젝트의 테스트 코드 작성 방법에 대해 찾아보면서, 테스트 방식이 크게 '@SpringBootTest를 사용하는 통합 테스트'와 '@WebMvcTest, @DataJpaTest 등의 어노테이션을 사용하는 슬라이스 테스트'로 나뉜다는 것을 알게 되었습니다. (슬라이스 테스트에 사용되는 어노테이션 @WebMvcTest, @WebFluxTest, @DataJpaTest, @JsonTest, @RestClientTest 등) 해당 포스팅에서는 '@SpringBootTest를 사용하는 통합 테스트의 개념과 장단점, 예시 코드'에 대해서 살펴보겠습니다. * 전체 코드는 포스팅 맨 하단에 링크해 두었으니 필요하신 ..

(docker) maven:3.6.3-jdk-8: no match for platform in manifest

(docker) no match for platform in manifest 해당 에러는 Apple M1(Silicon) 환경에서 docker image를 build 하는 과정 중 발생한 문제입니다. M1 환경은 기본적으로 ARM 기반 아키텍처인데요. 때문에 해당 환경에서 도커 이미지를 빌드하면 platform이 'linux/arm64'로 생성됩니다. 발생한 에러 메시지인 'maven:3.6.3-jdk-8: no match for platform in manifest...'라는 문구를 통해 원인을 유추해 보면 'maven:3.6.3-jdk-8'을 사용하는데 platform이 맞지 않는다? 정도로 생각해 볼 수 있었는데요. 관련 정보를 찾아보던 중 일부 docker image에서 Apple M1 칩을 지원..

Programming/Error 2023.10.25

MySQL 중복 데이터 조회 및 삭제 방법(GROUP BY HAVING)

mysql 중복 데이터 조회(group by having) 및 삭제 방법 데이터를 관리하다 보면 중복된 데이터를 찾아야 하는 경우가 있는데요. 해당 포스팅은 MySQL에서 'GROUP BY HAVING'을 사용하여 중복 데이터를 조회하는 방법과 삭제하는 방법에 대해 정리한 내용입니다. CREATE TABLE `users` ( `idx` bigint NOT NULL AUTO_INCREMENT, `last_name` varchar(45) COLLATE utf8mb4_bin DEFAULT NULL, `first_name` varchar(45) COLLATE utf8mb4_bin DEFAULT NULL, `birth` varchar(45) COLLATE utf8mb4_bin DEFAULT NULL, PRIMAR..

Programming/MySQL 2023.10.21

(Linux) Too many open files 에러가 발생하는 경우

Too many open files 에러가 발생하는 경우 해당 포스팅은 Linux 서버에서 발생하는 'Too many open files' 에러에 대한 해결 방법과 해당 에러가 발생할 수 있는 상황에 대해서 살펴본 내용입니다. File Descriptor / open files Too many open files 에러에 대해 살펴보기 위해서는 먼저 '파일 디스크립터(File Descriptor / open files)'에 대해서 알아야 하는데요. Linux에서는 파일을 열면(open) 파일 디스크립터를 반환하며, 반환된 파일 디스크립터는 파일을 읽고 쓰는 데 사용됩니다. 문제는 리눅스 환경에서 Java의 소켓 통신(HTTP, API, JDBC 커넥션 등) 또한 파일로 취급된다는 것인데요. 때문에 소켓을 ..

Programming/Linux 2023.10.18
반응형