[Spring] VO, DAO, DTO 간단한 개념 정리
2023. 6. 5. 20:40
프로그래밍/Spring
VO, DAO, DTO 비교 VO는 데이터를 담는 불변 클래스로 사용되고, DTO는 데이터 전송을 위한 가변 클래스로 사용되며, DAO는 데이터 액세스를 추상화하고 실제 액세스를 처리하는 인터페이스와 구현체를 제공함 VO(Value Object) 값 오브젝트로 비즈니스 로직을 포함하지 않고 데이터를 담는 용도로 사용 일반적으로 변경 불가능한(immutable) 객체로 설계하며, 객체의 상태를 변경하는 대신 새로운 객체를 생성하여 전달 read-Only 특징 DTO와 유사하지만 DTO는 setter를 가지고 있으며, 주로 데이터베이스의 엔티티와 매핑되는 불변 클래스로 사용됨 DAO(Data Access Object) 데이터베이스의 data에 접근하기 위한 객체입니다. DAO는 데이터 액세스를 위한 CRUD..
[MyBatis] Cause: java.sql.SQLDataException: Cannot determine value type from string 해결
2023. 6. 2. 20:04
프로그래밍/Mybatis
Cause: java.sql.SQLDataException: Cannot determine value type from string 해결 dto에 select 절을 받아줄 생성자가 없어서 발생하는 문제 해결 방법 MyBatis select절에 해당하는 생성자를 생성해주거나 @NoArgsConstructor 혹은 @AllArgsConstructor 를 적절하게 사용하여 생성자를 자동으로 생성해주자 @NoArgsConstructor @AllArgsConstructor public class MyClassDto { // 필드, 메서드 등 클래스의 내용 } 어노테이션에 대한 자세한 설명은 이전 글 참고
[Java] @NoArgsConstructor @AllArgsConstructor 비교
2023. 6. 1. 20:51
프로그래밍/JAVA
@NoArgsConstructor @AllArgsConstructor 비교 롬복(Lombok) 라이브러리에서 제공하는 어노테이션 개발자는 생성자 관련 코드를 직접 작성하지 않고도 편리하게 객체를 생성하고 초기화할 수 있음 @NoArgsConstructor 매개변수가 없는 기본 생성자를 자동으로 생성 이를 통해 객체를 생성할 때 매개변수를 전달하지 않고도 기본 생성자를 사용할 수 있음 @NoArgsConstructor public class MyClass { // 필드, 메서드 등 클래스의 내용 } @AllArgsConstructor 모든 필드를 인자로 받는 생성자를 자동으로 생성 이를 통해 객체를 생성하고 필드 값을 한 번에 초기화할 수 있음 @AllArgsConstructor public class M..
[Java] 컴파일 에러와 런타임 에러
2023. 5. 31. 20:57
프로그래밍/JAVA
컴파일 에러와 런타임 에러 컴파일 에러는 프로그래밍 단계에서 발생하며, 컴파일러가 코드를 분석할 때 확인 가능 대부분의 통합 개발 환경 (IDE)에서는 컴파일 에러를 강조 표시하고 오류 메시지를 제공하여 실시간으로 확인할 수 있음 반면, 런타임 에러는 프로그램이 실행 중에 발생하므로 디버깅 도구와 예외 처리를 통해 해결해야 함 런타임 에러는 프로그램의 실행 상태, 데이터 입력, 외부 환경 등 다양한 요소에 따라 발생할 수 있음 컴파일 에러 (Compile Error) 컴파일러는 소스 코드를 분석하고 변환하는 과정에서 발생하는 에러 일반적으로 문법 오류, 타입 불일치, 잘못된 메서드 사용 등으로 인해 발생 컴파일 에러는 소스 코드를 컴파일하기 전에 발생하며, 프로그램이 실행되기 전에 수정되어야 함 컴파일 ..
[Mybatis] #{}와 ${} 차이
2023. 5. 30. 20:28
프로그래밍/Mybatis
Mybatis #{}와 ${} 표기법 일반적으로 #{}을 사용하여 값을 전달하고, ${}을 사용하여 동적인 SQL을 작성하는 것이 안전하고 권장되는 방법임 ${}의 경우 사용자 입력 값을 포함할 때 주의해야 하며, 반드시 값의 이스케이프와 SQL Injection 방어를 수동으로 처리해야 함 #{} 표기법 SELECT * FROM users WHERE id = #{userId} #{} 안에는 자바 객체의 프로퍼티 이름이나 매개변수 이름 적음 #{} 안에 작성된 값은 자동으로 PreparedStatement의 파라미터로 설정되며, 자동으로 값의 타입에 맞게 변환 #{}은 SQL Injection 공격을 방지하기 위해 내부적으로 값을 이스케이프(escape)하여 처리함 ${} 표기법 SELECT * FROM..
[React] 리액트 lazy loading
2023. 5. 26. 20:51
프로그래밍/React
리액트 컴포넌트 lazy loading 방법 lazy loading은 로딩을 바로 하지 않고 지연시켰다가 로딩한다는 의미로 페이지에 그 부분이 보여져야 할 때 로딩하기에 처음 화면을 띄울때 속도를 개선할 수 있음 지연 로딩에는 여러 방법이 있지만 React.lazy 를 활용한 방법을 알아보고자 함 예시 fallback에는 로딩 중일 때 실행될 요소를 넣어줌 import React, { lazy, Suspense } from 'react'; const MyComponent = lazy(() => import('./MyComponent')); function App() { return ( Lazy Loading Example ); }
[JavaScript] undefined, null 체크
2023. 5. 24. 20:57
프로그래밍/JavaScript
undefined 체크 if (typeof str === 'undefined') {...} null 체크 if (str === null) {...} 값 존재 여부 체크 if (typeof str === 'undefined' || str === null || str === '') { // 값이 없는 경우 실행될 코드 }
[Java Error] class java.lang.Integer cannot be cast to class java.lang.Long 해결 방법
2023. 5. 23. 20:47
프로그래밍/JAVA
class java.lang.Integer cannot be cast to class java.lang.Long 에러 원인 java.lang.Integer 타입을 java.lang.Long 타입으로 캐스팅할 수 없다는 에러 Integer와 Long은 서로 다른 클래스이기 때문에 직접적인 캐스팅은 불가능 나의 경우 직접 캐스팅 할 수 없음에도 캐스팅 하려고 해서 에러 발생 if((Long) obj.get("input")) == longValue) { ... } 해결 방법 JSON 객체에서 가져온 "input" 값이 Number 타입으로 캐스팅 후, 이를 long 타입으로 변환하여 사용 long input = ((Number) obj.get("input")).longValue(); if(input == lo..