[E] Cannot construct instance of ~ xxxDTO (no Creators, like default constructor, exist): cannot deserialize from Object value
·
⚙ Framework/Spring-스프링
Spring Boot 2.7 + Java 17 환경에서 개발하고, Tomcat 8 + Java 17 (내부적으로는 Java 8) 환경에서 빌드를 시도하니 다음과 같은 에러가 발생했다.[2025-04-17 09:35:12.569] [ERROR] [ ajp-nio-0.*.*.0-8019-exec-42 ] c.s.a.c.w.c.e.ErrorHandler.handleException:26 - 에러 발생: Type definition error: [simple type, class com.skmns.aisc.calladmin.web.combination.adminUser.dto.CombinationResetPwReq]; nested exception is com.fasterxml.jackson.databind.e..
[Java/JPA] QueryDSL이란?
·
💻 Language/Java : 자바
QueryDSLQueryDSL은 Java 기반의 타입 안전(type-safe)한 SQL 쿼리 생성 라이브러리입니다. 주로 JPA, Hibernate 등과 함께 사용되어 복잡한 쿼리를 코드로 안전하게 작성할 수 있도록 도와줍니다. 다음은 QueryDSL의 주요 특징과 장점, 그리고 사용 예시입니다. QueryDSL은 정적 타입을 이용해서 SQL과 같은 쿼리를 생성할 수 있도록 해 주는 오픈소스 프레임워크이다. Fluent API를 이용해 코드 작성 형식으로 쿼리를 생성할 수 있게 한다. QueryDSL이 적합한 상황은 아래와 같다.복잡한 검색 조건이 필요한 경우 (ex. 게시판 필터, 검색 기능)동적 쿼리가 자주 필요한 도메인SQL 쿼리를 문자열이 아닌 안전한 코드로 다루고 싶을 때 Querydsl - U..
[Spring] JPA Enum Converter로 DB Entity Mapping하기
·
⚙ Framework/Spring-스프링
Spring JPA에서 Enum을 데이터베이스 컬럼과 매핑하기 위해 Enum Converter 추상 클래스를 사용할 수 있다.이 방식을 이용하면 Enum을 더 유연하고 안전하게 DB와 연동할 수 있고, 유지보수성이 향상되는 장점이 생김! 일반적인 방식 - 1Enum Converter 없이 일반적으로 Enum을 사용하는 구조(JPA 기본 방식)는 다음과 같다.@Enumerated(EnumType.STRING) : enum 이름("ACTIVE", "INACTIVE")을 DB에 저장@Enumerated(EnumType.ORDINAL) : enum의 순서, index값(0, 1)을 DB에 저장public enum Status { ACTIVE, INACTIVE;}@Entitypublic class State..
[Vue+Spring] 파일 검증 로직 구현 (+ MIME 타입, 시그니처란?)
·
⚙ Framework
파일 업로드 구현 시 보안상의 이유로 파일 검증 로직이 포함되어야 한다. 검증은 파일명, 파일 크기, 확장자, 위변조에 대해 수행되어야 하며 위변조의 경우 MIME 타입과 시그니처를 확인하면 된다. 파일 위변조 검증 방식1) MIME 타입 검증MIME 타입(Multipurpose Internet Mail Extensions)은 파일의 형식을 나타내는 표준 방식으로, Content-Type 헤더에서 확인할 수 있고 브라우저나 서버에서 파일이 어떻게 처리될지를 결정하는 데 사용된다.파일 확장자 기반 검증 (위험)example.jpg 같은 확장자를 보고 image/jpeg인지 확인하는 방식 → 쉽게 변경 가능하여 보안성이 낮음OS 또는 언어별 내장 MIME 타입 검출 기능 사용 → 신뢰할 수 있으나 MIME ..
[Vue+Spring] 파일 업로드 구현 - 서버에 File 저장하기
·
⚙ Framework
[Vue] 파일 업로드 구현 - 반응형 API 시스템에서 File 객체 불러오는 방법반응형 APIVue는 반응형 API 시스템을 이용한다. 아래와 같은 기능들이 있는데, 자세한 내용은 따로 포스팅을 쓸 예정.reactive() : 반응형 객체를 만들 때 사용 - 객체만 가능ref() : 단일 값을 반응형으idox.tistory.com 이전 포스팅에 업로드한 바와 같이, Vue에서는 반응성 객체 내에서 file_, blob_ 정보를 유지하기 위해 Base64 인코딩 방식을 사용해야 한다. 하지만 서버에 Base64 형태로 데이터를 전송하게 되면 용량이 33% 증가한다는 점을 비롯한 단점이 존재하여 MultiPart 형태의 File 객체로 다시 변환하여 전송하는 과정이 필요하다. BLOB이란?BLOB(Bin..
[Spring] 운영 환경에서의 로그 모니터링 레벨 구분
·
⚙ Framework/Spring-스프링
모든 시스템은 추적을 위해 로깅이 필요하다. 일반적으로 개발 환경에서는 DEBUG, 운영 환경에서는 INFO 레벨로 사용한다.  로그 레벨TRACE > DEBUG > INFO > WARN > ERROR > FATAL 로그 레벨 설정 시 TRACE로 설정하면 TRACE 이상 등급의 모든 로그 표시, INFO 설정 시 INFO 이상 로그가 출력된다.TRACE : 모든 레벨에 대한 로그 추적DEBUG : 개발 단계에서 사용, 주로 SQL 확인INFO : 운영에 참고될 수 있는 데이터나 애플리케이션 흐름 확인WARN : 로직 상 유효성 확인, 예상 가능한 문제로 인한 예외 처리ERROR : 예상하지 못한 심각한 문제가 발생하는 경우 로그 포맷# Logback 포맷14:18:17.635 [Name Of Threa..
[Spring] 스프링 부트(Spring Boot) 프로젝트 생성
·
⚙ Framework/Spring-스프링
Spring(스프링)이란?객체 지향 언어가 가진 강력한 특징을 살려내는 Java 기반의 프레임워크로, 좋은 애플리케이션을 개발할 수 있도록 도와준다. 특정 기술에 종속되지 않고(기술 비침투적) 객체를 관리할 수 있는 컨테이너를 제공하는 것이 기본 철학이다.'Spring'이라는 단어는 문맥에 따라 다르게 사용되지만, 최근엔 부트+프레임워크를 모두 포함한 생태계를 일컫는다.스프링 프레임워크(스프링의 핵심)은 다음과 같다.핵심 기술 : 스프링 DI 컨테이너, AOP, 이벤트, 기타웹 기술 : 스프링 MVC, 스프링 WebFlux데이터 접근 기술 : 트랜잭션, JDBC, ORM 지원, XML 지원기술 통합 : 캐시, 이메일, 원격 접근, 스케줄링테스트 : 스프링 기반 테스트 지원언어 : 코틀린, 그루비 Spri..
[E] No matching variant of org.springframework.boot:spring-boot-gradle-plugin:3.1.4 was found.
·
⚙ Framework/Spring-스프링
스프링부트 사이트(https://start.spring.io/)에서 스프링부트 프로젝트를 다운로드하여 IntelliJ IDEA에서 불러오는 과정에서 오류가 발생하였다. No matching variant of org.springframework.boot:spring-boot-gradle-plugin:3.1.4 was found. The consumer was configured to find a library for use during runtime, compatible with Java 8, packaged as a jar, and its dependencies declared externally, as well as attribute 'org.gradle.plugin.api-version' with ..