▼ Backend
-
Spring Boot | No constructor found for class.. with parameters▼ Backend/└ QueryDsl 2022. 5. 12. 11:20
▶︎ 로그 No constructor found for class com.admin.domain.board.Board$Response with parameters: [class java.lang.Long, class java.lang.String, class java.lang.String, class java.time.LocalDateTime] QueryDsl을 사용하다 보면 필요한 칼럼만 조회하거나 서브 쿼리를 이용하여 칼럼을 추가할 때 Projections.constructor에 조회결과를 리턴 받을 클래스를 지정하는데 해당 클래스의 생성자에 조회 결과의 컬럼 리턴 타입과 리턴 개수가 정확해야 한다. Projections.constructor(Board.Response.class) 예시) 조회할 때 ..
-
Spring Boot | 간단하게 AOP 적용하기▼ Backend/스프링 (Spring) 2022. 5. 9. 16:37
Spring AOP (Aspect Oriented Programming) AOP란 관점 지향 프로그래밍이라고 하며 어떤 로직을 기준으로 핵심, 부가적인 관점으로 나누어서 어떤 관점을 기준으로 모듈화 하는것으로 여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다. 📌 Dependency 추가 Maven org.springframework.boot spring-boot-starter-aop Gradle implementation 'org.springframework.boot:spring-boot-starter-aop' Java Code Application 클래스에 @EnableAspectJAutoProxy 추가 // Aop 활성화 @EnableAspectJAutoProxy @Spr..
-
Spring Boot | Schedule cron 표현식▼ Backend/스프링 (Spring) 2022. 3. 28. 10:11
자릿수 마다의 의미 (총 7자리) 초 / 분 / 시 / 일 / 월 / 요일 / 년도 (생략가능) // 사용 예 (매일 12시에 실행) @Scheduled(cron = "0 0 12 * * *") 표현식 표현식 의미 0 0 12 * * * 매일 12시에 실행 0 15 10 * * * 매일 10시 15분에 실행 0 * 14 * * * 매일 14시에 0분~59분까지 매분 실행 0 0/5 14 * * * 매일 14시에 시작해서 5분 간격으로 실행 0 0/5 14,18 * * * 매일 14시, 18시에 시작해서 5분 간격으로 실행 0 0-5 14 * * * 매일 14시에 0분, 1분, 2분, 3분, 4분, 5분에 실행 0 0 20 ? * MON-FRI 월~금일 20시 0분 0초에 실행 0 0/5 14 * * ? ..
-
Spring Batch | 간단한 스프링 배치 시작하기▼ Backend/└ 스프링 배치 (Spring Batch) 2022. 3. 1. 18:05
이전 글) 스프링 배치 (Spring Batch)] 스프링 배치란 무엇인가? 📌 구성 환경 Spring Boot 2.6.3, Java 1.8, MariaDB 📝 샘플 데이터베이스, 테이블 생성 -- venh_batch 데이터베이스 CREATE DATABASE IF NOT EXISTS `venh_batch`; USE `venh_batch`; -- 테이블 venh_batch.market CREATE TABLE IF NOT EXISTS `market` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, `price` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_..
-
Spring Boot | jasypt를 사용하여 프로퍼티 암호화 하기▼ Backend/스프링 (Spring) 2022. 2. 24. 13:26
jasypt란 개발자가 암호화 작동 방식에 대한 깊은 지식 없이도 최소한의 노력으로 프로젝트에 기본 암호화 기능을 추가할 수 있도록 하는 Java 라이브러리이다. 주로 프로젝트가 공개되어도 프로퍼티 내에 작성된 설정 정보를 암호화하여 노출시키지 않는 목적으로 사용한다. 📌 Dependency 추가 Maven com.github.ulisesbocchio jasypt-spring-boot-starter 3.0.4 Gradle implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.4' Jasypt 설정 및 Bean 등록 코드를 보면 KEY를 상수로 작성하였지만 실제로 운영 시에는 보안을 위해 운영체제 환경설정으로 등록하거나 java -..
-
Spring Batch | 스프링 배치란 무엇인가?▼ Backend/└ 스프링 배치 (Spring Batch) 2022. 2. 3. 16:08
📌 스프링 배치(Spring Batch)란 엔터프라이즈 시스템의 일상적인 운영에 필수적인 강력한 배치 애플리케이션을 개발할 수 있도록 설계된 가볍고 포괄적인 배치 프레임워크로 로깅/추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작, 건너뛰기, 리소스 관리 등 대용량 레코드 처리에 필수적인 재사용 가능한 기능을 제공한다. 또한 최적화 및 파티셔닝 기술을 통해 대용량 및 고성능 일괄 작업을 가능하게 하는 고급 기술 서비스 및 기능을 제공한다. 📌 메타 테이블 스키마 (Meta-Table Schema) 작업을 수행하면서 상태에 관한 정보들을 메타 테이블에 저장해서 작업에 대한 기록을 구조화된 데이터로 저장하여 관리한다. 3개의 Sequence Table과 6개의 Meta Table이 존재하고, Job이 실..
-
JAVA | try-with-resource, 자원을 자동으로 해제▼ Backend/자바 (JAVA) 2021. 12. 13. 17:05
기존의 자원 해제 방법 try - finally 지금까지 개발을 해오면서 파일 관련 처리를 할 때면 자원 관련 객체인 InputStream, OutputStream을 사용하다 보니(꼭 파일 관련 처리가 아니더라도) 그럴 때마다 사용했던 자원에 대한 close() 처리를 finally 에서 해주고 있었다. 큰 문제는 없었지만 클린 코드, 리팩터링 관련해서 공부하다 보니 finally에서 자원을 해제하지 않고도 자원을 해제할 수 있는 방법이 있었다. try - finally BufferedInputStream in = null; BufferedOutputStream out = null; try { in = new BufferedInputStream(inputStream); try { out = new Buf..
-
JAVA | JVM(Java Virtual Machine) 이란▼ Backend/자바 (JAVA) 2021. 12. 10. 17:32
JVM(Java Virtual Machine) 자바 가상 머신으로 자바 바이트 코드를 실행할 수 있는 주체다. CPU나 운영체제(플랫폼)의 종류와 무관하게 실행이 가능하다. 운영체제 위에서 동작하는 프로세스로 자바 코드를 컴파일해서 얻은 바이트 코드를 해당 운영체제가 이해할 수 있는 기계어로 바꿔 실행시켜주는 역할을 한다. 1. .java → javac.exe → ByteCode Java Source Code로 작성된 .java 파일이 Java Complier(javac.exe)를 통해 ByteCode(.class)로 변환된다. 바이트코드는 JVM(자바가상머신)이 이해할 수 있는 기계어이다. 2. Class Loader class 파일을 JVM내로 로드하여 바이트코드를 해당 운영체제의 기계어에 맞게 변환..