Java38 MultipartRequest, ServletFileUpload 혼용 문제 현상게시글 작성 페이지의 폼에서 method="post" enctype="multipart/form-data"를 통해 보낸 데이터를 다음과 같이 처리하였더니 MultipartRequest를 활용한 multi.getParameter()는 데이터가 정상적으로 조회되는데 ServletFileUpload를 활용한 items는 조회가 아무것도 되지 않았음 원인ServletFileUpload 생성 전에 request는 이미 MultipartRequest 객체 생성 시 MultipartRequest에 의해 처리된 후라서 ServletFileUpload를 사용하면 request 객체에서 이미 처리된 필드에 대한 접근이 제한되어 빈 값이 반환됐던것 해결 방법MultipartRequest, ServletFileUpload.. 2024. 11. 6. 페이징 시 값 고정 현상jsp 게시판 검색 페이지에서 다른 페이지를 눌러 페이징을 실행했을 때 오류 발생 원인검색에 이용했던 option과 keyword가 유지되지 않고 빈값으로 초기화 된 상태로 전달되어 SQL 상에서 에러가 발생하여 데이터를 못 불러와 화면에 데이터가 출력되지 않음 → request에 저장되어 있던 option과 keyword 값이 페이지 이동 시 소멸하기 때문 (HTTP의 stateless 특성)※ 무상태성(stateless) = 서버가 클라이언트의 상태를 보존하지 않는 특징 ※ 성능과 효율성을 높이기 위하여 서버는 각 요청을 독립적으로 처리하고 요청 처리가 완료되면 해당 요청과 관련된 모든 데이터는 소멸되기 때문에 다음 요청(페이지 이동)에서는 이전 요청의 데이터를 사용할 수 없음 해결option과.. 2024. 11. 4. java.io.IOException: Corrupt form data: premature ending 현상 Controller@WebServlet("/main")public class BoardController extends HttpServlet { private static final long serialVersionUID = 1L; private BoardDAO dao = new BoardDAO(); protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String saveDir = getServletContext().getRealPath("/upload"); int maxSize = 10 * 10.. 2024. 11. 1. Jsoup 정의- HTML 파싱 JAVA 외부 라이브러리- 웹 스크래핑, 데이터 추출, HTML 문서 수정 및 웹 페이지의 내용 분석에 널리 사용 - DOM과 CSS 선택자를 사용하여 HTML 요소를 쉽게 다룰 수 있음- DOM의 데이터 타입에 대응하는 Document, Element, Elements, Attributes 클래스가 존재 DocumentDocument doc = Jsoup.connect("https://example.com").get();Document doc = Jsoup.parse(new File(./example.html));- Jsoup.parse(File file) 혹은 Jsoup.connect(String url).get()을 통해 HTML 파일에 접근- 위 과정을 통해 얻은 Docume.. 2024. 10. 23. 순수 Java로 서버 구동 과정1. HttpServer를 통해 HTTP 서버 생성HttpServer.create(InetSocketAddress address, int backlog) 메서드를 사용해 HttpServer 객체(서버) 생성InetSocketAddress(ip, port) = 지정한 IP 주소와 포트 번호를 서버의 주소 및 포트로 설정하여 소켓 생성2. createContext()를 통해 특정 경로로 들어오는 요청에 대한 Handler 정의해당 Handler는 HttpHandler 인터페이스를 구현HttpHandler 인터페이스의 handle(HttpExchange exchange)에서 client 요청을 처리HttpExchange = 서버와 클라이언트 간의 HTTP 요청과 응답을 처리하는 데 사용되는 클래스 exc.. 2024. 10. 23. CopyOnWriteArrayList 정의- java.util.concurrent.CopyOnWriteArrayList- Java에서 제공하는 스레드 안전한 리스트 클래스 - 리스트의 크기가 매우 크고 변경이 빈번한 경우에는 성능 저하가 발생할 수 있음 특징스레드 안전성: 리스트의 내용을 변경하는 작업이 복사본을 만들어 쓰기 때문에 다른 스레드가 영향을 받지 않아 여러 스레드가 동시에 CopyOnWriteArrayList에 접근해도 안전하게 사용 가능 읽기 작업이 많은 상황에 적합: 리스트에 대한 변경이 드물고, 대신에 자주 읽기 작업이 발생하는 경우에 유용내부 복사: 리스트에 요소를 추가하거나 제거할 때마다 내부적으로 새로운 배열이 생성되어 변경 작업이 빈번하지 않은 경우에는 효율적이지만 변경 작업이 많이 발생하는 경우에는 성능이 저하될.. 2024. 5. 2. RestTemplate와 WebClient RestTemplate정의- org.springframework.web.client.RestTemplate- Spring 프레임워크에서 제공하는 HTTP 통신을 간편하게 처리할 수 있는 동기적인 클라이언트 - REST API를 위한 다양한 메서드를 제공하여 개발자가 HTTP 요청을 손쉽게 보내고 응답을 처리할 수 있도록 지원 - Spring Boot에 기본 탑재되어 있어서 별도 import 필요 X 특징- 멀티 스레드- Blocking I/O 주요 메소드- getForObject() = HTTP GET + 결과값 Object로 반환- getForEntity() = HTTP GET + 결과값 ResponseEntity로 반환 - postForLocation() = HTTP POST + 결과값으로 헤더에 .. 2024. 4. 12. 암호화 패딩 종류 패딩(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. 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. java.io.FileWriter & FileReader FileWriter - 텍스트 파일을 출력(입력)할 때 사용하는 클래스 - 생성자가 파일의 경로 또는 File 객체를 통하여 객체 생성 가능 → 파일 경로 오류 시 IOException 발생 (FileNotFoundException X) 생성자 종류 - FileWriter(String filepath) = 파일 경로로 FileWriter 객체 생성 - FileWriter(File file) = File 객체로 FileWriter 객체 생성 ※ 생성자 파라미터에 boolean append 추가 시 true면 이어쓰기, false면 덮어쓰기 진행 FileReader - 텍스트 파일을 읽을 때 사용하는 클래스 - 생성자가 파일의 경로 또는 File 객체를 통하여 객체 생성 가능 → 파일 경로 오류 시 IOEx.. 2024. 1. 29. com.google.gson.Gson 정의 - Java 객체 ↔ JSON 변환 기능을 제공하는 Google에서 제공하는 오픈 소스 JSON 처리 라이브러리 - 단순 객체 만이 아니라 Map, List, Array와 같은 Java 컬렉션들도 JSON으로 변환 가능 import com.google.gson.Gson; import com.google.gson.GsonBuilder; GSon gson = new Gson(); Gson gson = new GsonBuilder().create(); String jsonStr = "{\"id\":\"1\",\"name\":\"Tom\"}"; Map map = gson.fromJson(jsonStr, Map.class); String str = gson.toJson(map); // {"id" : "1",.. 2024. 1. 15. 이전 1 2 3 다음