반응형

Programming 360

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

RabbitMQ 개념과 구조 정리 (Exchange Type, Dispatch 등)

RabbitMQ 개념과 구조 정리 RabbitMQ란? 'RabbitMQ'는 AMQP를 구현하여 메시지 생성자와 소비자 사이에서 메시지를 중계해 주는 '메시지 브로커'입니다. * AMQP(Advenced Message Queuing Protocol) 메시지 지향 미들웨어를 위한 개방형 표준 응용 계층 프로토콜 RabbitMQ는 메시지 지향 미들웨어(Message Oriented Middleware)에 속하는데요. 메시지 지향 미들웨어는 비동기 메시지를 사용하는 응용프로그램들 사이에서 데이터를 송수신하는 것을 의미하며, 이러한 시스템을 구현한 솔루션을 '메시지 큐(Message Queue)'라고 합니다. 그렇다면 메시지 큐를 사용하는 이유는 무엇일까요? 메시지 큐를 사용함으로써 얻을 수 있는 이점은 아래와 ..

@RequestMapping 정규식, PathPattern 활용하기

@RequestMapping 정규식, PathPattern 활용하기 '@RequestMapping'에는 정규식과 PathPattern을 적용할 수 있는데요. 이런 기능이 있는 줄 모르고 있었는데, 간단하고 또 활용성 있는 기능인 것 같아서 정리하게 되었습니다. @RequestMapping 정규식 사용 방법 @RequestMapping(value = "{변수명:정규식}") public void request(@PathVariable String 변수명) { ... } @RequestMapping에서는 다음과 같이 '{변수명:정규식}' 형식을 통해 정규식을 적용할 수 있는데요. //영문 대소문자 //http://localhost:8080/request/TestValue @RequestMapping("/req..

OSIV(Open Session In View) 개념 정리 및 예시

OSIV(Open Session In View) 개념 정리 및 예시 spring.jpa.open-in-view=false application.properties(또는 yml) 파일의 내용을 항상 복사 붙여 넣기 식으로 사용하고, 또 동작에 문제가 없었기 때문에 'spring.jpa.open-in-view' 옵션이 어떤 역할을 하는지 모르는 상태로 계속 사용해 왔었는데요. 최근 프로젝트에서 해당 옵션 값으로 인해 문제가 발생하면서 'OSIV(Open Session In View)'가 무엇인지 찾아보고 정리하게 되었습니다. OSIV란? 먼저 JPA의 EntityManager가 Hibernate에서는 Session이라고 불리는데요. OSIV의 Session은 이 세션을 의미합니다. 때문에 사실 JPA에서는 ..

spring boot email 전송 (spring-boot-starter-mail, mailjet)

Spring Boot Email 전송하기 (+ Mailjet) 해당 포스팅은 스프링 부트에서 'spring-boot-starter-mail' 의존성을 사용하여 이메일을 전송하는 코드 예시입니다. 전체 코드는 포스팅 맨 하단에 github 주소를 링크해 두었으니 참고해 주시면 좋을 것 같습니다. (아래 이메일 발송 코드는 spring boot 3.1.4 환경에서 작업되었습니다.) SMTP SMTP는 'Simple Mail Transfer Protocol'의 약자로 인터넷을 통해 이메일을 보내고 받는 데 사용되는 통신 프로토콜인데요. SMTP 서버는 SMTP 프로토콜(Simple Mail Transfer Protocol)을 사용하여 메일을 보내는 메일 서버의 구성 요소를 말하며, 이메일 발신 작업에만 사용되..

Dart Class 기본적인 사용법 정리

Dart 언어 Class 기본적인 사용법 정리 Dart는 객체 지향 프로그래밍 언어이며, Flutter 역시 객체 지향 프레임워크인데요. 객체 지향 프로그래밍(OOP)에서는 특정 객체를 생성하기 위한 틀인 클래스(class)가 중요하기 때문에 'Dart 언어의 기본적인 Class 사용법'을 정리한 내용입니다. Class class Student { String name = "leo"; int grade = 3; final String birth = "920101"; void info() { print("name: $name, grade: $grade"); } } void main() { var student = Student(); //출력 가능 print(student.name); //수정 가능 stud..

Programming/Flutter 2023.09.24
반응형