전체 글323 com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.util.ArrayList<java.lang.Object>` from Object value (token `JsonToken.START_OBJECT`) 현상 - RestTemplate.postForEntity()를 통해 데이터를 전송할 때 데이터의 타입을 지정하는 세번째 파라미터에 List.class를 적용하였더니 해당 에러가 발생 원인 - 해당 에러는 RestTemplate.postForEntity()의 세번째 파라미터가 List.class일 경우 데이터 전송 시 List를 구성하는 데이터의 타입 정보가 유실되어 역직렬화에 대한 데이터 타입을 알 수 없어 에러가 발생 해결 방법 - 요청 수령 시 데이터를 처리하는 API를 하나로 개발하지 않고 DTO 종류별 API로 나눠 개발하여 각 API에서 @RequestBody의 데이터 타입을 제네릭에 와일드카드(?)를 사용하지 않고 List처럼 명확히 정의하여 해결 2024. 4. 12. java.lang.IllegalArgumentException: Cannot generate variable name for non-typed Collection parameter type 현상 1. RestTemplate.postForEntity()를 통해 특정 URL(/receive)에 Client로부터 전송받은 값에 따라 DTO의 종류를 다르게 하여 List 객체를 전송하도록 로직을 구성 List carDtos = carRepo.findAll(); restTemplate.postForObject(".../api/car/receive", carDtos, Void.class); 2. 컨트롤러에 해당 요청 수령 시(/receive) 데이터를 처리하는 로직을 작성하였는데 이때, 하나의 API에서 DTO의 종류에 따라 처리 방식을 다르게 하기 위하여 @RequestBody의 데이터 타입을 List으로 설정하였더니 해당 에러가 발생 원인 - 해당 에러는 Spring에서 컬렉션의 제네릭 타입을 지.. 2024. 4. 11. JPA 정의 JPA(Java Persistence API)- 자바 진영의 ORM 기술 표준 (자바에서 RDB를 사용하는 방식을 정의한 인터페이스)- ORM(Object Relational Mapping) = 객체와 RDB의 데이터를 자동으로 매핑(연결)해주는 것=> 어플리케이션의 객체를 RDB 테이블에 자동으로 영속화 해주는 것- 자바 환경에서 반복적인 SQL CRUD 처리에 용이함- Repository 인터페이스 개발 후 구현체 선언 시 인터페이스명+[Impl]로 구현체명을 정의해야 Spring Data JPA가 인식- JPA는 persistence.xml을 사용해서 필요한 설정 정보를 관리※ Persistence(영속성) = 데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성 테이블 매핑 .. 2024. 4. 8. JPQL(Java Persistence Query Language) 정의 - 객체 지향 DB의 엔티티에 대한 쿼리를 정의하기 위한 객체 지향 쿼리 언어로 JPA의 일부분 중 하나 - DB의 테이블(Table)이 아닌 Spring에서 정의한 엔티티(Entity)를 기준으로 함 테이블과 엔티티의 차이 - 테이블 = DB 혹은 SQL 상에 실제로 존재하며 행과 열의 물리적인 구조를 가지고 있음 - 엔티티 = DB나 SQL 상에 실제로 존재하지 않고 OOP에서 개체를 나타내는 추상적인 개념이며 Java와 같은 객체 지향 언어에서 필드와 메소드를 포함하는 클래스로 정의됨 주의 사항 1. 쿼리문에 *를 사용할 수 없음 2. 오류는 발생하지 않지만 엔티티명의 첫 글자는 대문자로 입력하는 것이 일반적인 관례 3. @Entity(name=)을 통해 엔티티명을 별도로 지정하지 않는 경우 .. 2024. 4. 5. spring.jpa.hibernate.ddl-auto ddl-auto 속성 - DB 스키마 생성 및 갱신과 관련된 설정 - 개발자가 어플리케이션을 실행할 때 JPA가 데이터베이스 스키마를 자동으로 생성, 갱신 또는 유지하도록 할지를 결정함 spring.jpa.hibernate.ddl-auto=update create - 애플리케이션을 실행할 때마다 DB 스키마를 새로 생성 - 만약 DB에 테이블이 있는 상태라면 기존 테이블을 모두 삭제하고 새로 생성함 create-drop - create와 같이 애플리케이션을 실행할 때마다 DB 스키마를 새로 생성하지만 애플리케이션이 종료되면 스키마를 다시 삭제함 - 주로 테스트 환경에서 사용하며, 애플리케이션의 실행 사이에 스키마를 생성하는 것이 효율적일 때 유용 update - 현재 DB 스키마를 기준으로 JPA 엔티티.. 2024. 3. 19. JDBC와 DB 연동 JDBC (Java DataBase Connectivity) - Java를 통해 관계형 데이터베이스(RDB)와 통신할 수 있도록 해주는 자바 API JDBC Driver - Java 프로그램이 관계형 데이터베이스와 통신할 수 있도록 해주는 소프트웨어 모듈 DB 종류별 JDBC Driver MySQL = com.mysql.cj.jdbc.Driver MariaDB = org.mariadb.jdbc.Driver Oracle = oracle.jdbc.driver.OracleDriver SQLite = org.sqlite.JDBC PostgreSQL = org.postgresql.Driver MSSQL = com.microsoft.sqlserver.jdbc.SQLServerDriver DB 종류별 의존성 설정 (.. 2024. 3. 19. 암호화 패딩 종류 패딩(Padding) 암호화에서 사용되는 기술 중 하나로 평문을 암호화하기 전에 일정한 규칙에 따라 데이터의 길이를 조정하는 과정 주로 블록 암호화에서 사용되며 평문의 길이가 블록 크기의 배수가 아니어서 블록 크기의 배수가 되도록 평문의 길이를 늘려야 할 때 사용 패딩을 통해 암호의 안전성이 더욱 강화됨 대칭 암호화에서는 PKCS5Padding, 비대칭 암호화에서는 OAEPPadding이 보안성이 가장 높아 주로 사용됨 PKCS5Padding, PKCS7Padding 패딩할 크기의 바이트를 모든 패딩의 바이트로 설정하여 패딩을 진행 가장 널리 사용되는 패딩 방식 PKCS5Padding과 PKCS7Padding은 기본적으로 동일한 것으로 간주됨 PKCS1Padding RSA 알고리즘과 함께 사용되며 데이터.. 2024. 3. 18. 블록 암호화 기법 종류 ECB (Electronic Code Book) 평문을 일정한 블록 단위로 나누어 순차적으로 암호화하는 구조로 가장 단순한 기법 동일한 평문 블록에 대해 동일한 암호문 블록이 생성 각각의 블록은 서로 독립적이며 한 개의 블록만 해독되어도 나머지 블록도 해독되기 때문에 보안상 매우 취약함 CBC (Cipher Block Chaining) 평문을 일정한 블록 단위를 나누어 이전 암호문 블록을 암호화하여 평문 블록과 XOR 연산을 수행하여 새로운 암호문 블록을 생성함 → 가장 강력한 암호화 모드로 여겨짐 최초 키의 생성 버퍼로 IV(초기화 벡터)를 사용하며 첫 번째 블록과 XOR 연산을 통해 암호화를 진행함 각각의 블록이 서로 독립적이지만 ECB와 다르게 동일한 평문 블록에 대해 동일한 암호문 블록이 생성되지.. 2024. 3. 18. 암호화 알고리즘 종류 대칭 알고리즘 DES (Data Encryption Standard, 데이터 암호화 표준) 1970년대에 IBM에서 개발한 AES 도입 이전까지의 표준 대칭 키 암호화 알고리즘 블록 크기가 64 bit (8 byte), 키 크기가 56 bit (7byte)로 고정 작동 원리 = 암호화할 데이터를 블록으로 나눈 후 각 블록 내의 데이터의 일련의 수학적 연산을 적용하여 작동 현재는 IT기술의 발전으로 안전성이 보장되지 않아 사용이 지양됨 3DES (Triple DES) DES를 3번 반복하는 방식의 대칭 키 암호화 알고리즘 DES와 마찬가지로 블록 크기가 64 bit (8 byte), 키 크기가 56 bit (7byte)로 고정 암호화를 3번 실행하기 때문에 속도가 느리고 DES의 사실상 퇴출로 사용이 지양.. 2024. 3. 18. javax.crypto.Cipher 정의 Java에서의 암호화 및 복호화 기능을 제공하며 JCE framework의 핵심을 구성 Java Cryptography Extension(JCE) = Java 보안 기능의 핵심을 담당하는 Java Crpytography Architecture(JCA)의 일부분으로, 애플리케이션에서 데이터 암호화, 복호화 그리고 개인 데이터의 해싱을 제공 암호학에서 원본 = Plaintext, 암호화된 문서 = Ciphertext라 부름 getInstance()에 "알고리즘/모드/패딩" 형식으로 파라미터를 입력해 암호화 방식을 지정하여 인스턴스 생성 지원 알고리즘 종류 대칭 알고리즘 AES (Advanced Encryption Standard) - 가장 일반적 DES (Data Encryption Standard) .. 2024. 3. 18. java.nio.file.Files 정의 - Java에서 파일 및 디렉터리의 경로 및 속성을 조작하는 데 사용되는 클래스 - 파일 시스템의 경로를 나타내며, 파일이나 디렉터리의 생성, 삭제, 검사, 탐색 등의 기본적인 파일 작업을 지원 - java.io.File와 용도가 같으나 더 유연한 작업을 지원하며 파라미터로 경로 입력 시 Path 객체를 사용 - 별도로 인스턴스(객체)를 생성하지 않고 Files.메소드 식으로 사용 주요 메소드 - copy(원본 경로, 복사본 경로) = 파일/디렉터리 복사 - move(이동 전 경로, 이동 후 경로) = 파일/디렉터리 이동 - delete(경로) = 파일/디렉터리 삭제 - createDirectory(경로) = 디렉터리 생성 - createFile(경로) = 파일 생성 - readAllBytes(경로.. 2024. 3. 12. @Pathvariable 슬래시(/) 처리 방법 문제 - 슬래시(/)는 URL에서 구분자로 사용되기 때문에 @PathVariable로 불러오는 파라미터 데이터에서 오류가 발생 - 슬래시(/)를 인코딩(%2f)하여 입력하여도 Spring Boot에서 이를 자동으로 디코딩하기 때문에 인코딩 소용 X ※ 또한, Spring Boot는 //처럼 슬래시(/)가 중첩되어 있는 경우에 이를 합쳐서 단일 슬래시(/)로 인식 해결 방법 - @Pathvariable이 아닌 @RequestParam으로 쿼리 스트링을 이용 - 파라미터를 RequestBody에 담아서 받기 2024. 3. 12. Jasypt (application.properties 암호화) 정의- .properties 파일을 간단히 암호화 및 복호화하여 관리할 수 있도록 하는 Java 라이브러리- .properties 파일에 DB 정보와 같은 보안 정보를 암호화하기 위해 주로 사용- 기본 라이브러리가 아니기 때문에 별도로 import 필요Gradleimplementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.3' 기본 세팅application.propertiesjasypt.encryptor.bean=jasyptEncryptorspring.datasource.password=ENC(jal14ljlkjdaslko2j3c)- application.properties에 ecnryptor bean을 정의- encryptor를 통해 .. 2024. 2. 28. @AllArgsConstructor 지양 이유 및 대책 @AllArgsConstructor의 문제점 - @AllArgsConstructor는 모든 필드를 파라미터로 받아 객체를 생성하기 때문에 일부 필드만 사용하는 경우에 불필요한 의존성을 발생 시킬 수 있음 - @AllArgsConstructor는 정의한 모든 필드를 가진 생성자를 생성해주는데 다음과 같이 같은 타입의 파라미터를 서로 바꿔 입력하였을 경우에도 에러가 발생하지 않는 문제가 발생함 @AllArgsConstructor public class carDto { private String carId; private int carNum; private String carUser; } // new carDto("Tom", 4123, "n1309afc2") 대책 (@Builder) - 원하는 필드를 설정할 .. 2024. 2. 26. 이벤트 종류 마우스 이벤트 - click=요소에 마우스를 클릭했을 때 이벤트가 발생 - dbclick= 요소에 마우스를 더블클릭했을 때 이벤트가 발생 - mouseover= 요소에 마우스를 오버했을 때 이벤트가 발생 - mouseout= 요소에 마우스를 아웃했을 때 이벤트가 발생 - mousedown= 요소에 마우스를 눌렀을 때 이벤트가 발생 - mouseup= 요소에 마우스를 떼었을 때 이벤트가 발생 - mousemove= 요소에 마우스를 움직였을 때 이벤트가 발생 - contextmenu= context menu(마우스 오른쪽 버튼을 눌렀을 때 나오는 메뉴)가 나오기 전에 이벤트 발생 키 이벤트 - keydown= 키를 눌렀을 때 이벤트가 발생 - keyup= 키를 떼었을 때 이벤트가 발생 - keypress= .. 2024. 2. 23. 이전 1 2 3 4 5 6 ··· 22 다음