Java153 바이너리(binary) 파일을 다운로드하는 프로세스와 버퍼를 사용해야하는 이유 Java를 사용한 바이너리(binary) 파일을 다운로드하는 프로세스 사용자가 파일을 업로드 하게되면, 서버에서는 사용자가 해당 파일을 다운로드를 할 수 있게 다운로드 기능을 제공할 수 있습니다. 이를, 서버의 파일 디렉토리에서 바이너리 파일을 읽은 다음 클라이언트의 웹 브라우저로 전송함으로써, 구현할 수 있습니다. 구현하기 위해서는 다음과 같은 절차로 진행되어야 합니다. 파일 객체 생성 사용자 에이전트 확인 응답 헤더 설정 요청 브라우저에 따른 파일 이름 인코딩 콘텐츠 길이 설정 바이너리 데이터 읽기 및 쓰기 파일 객체 생성 InputStream in = null; File file = null; boolean skip = false; try { file = new File(UPLOAD_PATH, sa.. 2023. 5. 29. Multi-Thread 환경에서 싱글톤 패턴으로 구현했을 경우 발생할 수 있는 문제 Servlet과 Servlet Container Servlet은 Servlet Container가 시작할 때, 인스턴스를 하나만 생성하도록 다음과 같이 클래스를 정의했습니다. /** * 클라이언트로부터 모든 요청을 수신하는 서블릿 컨테이너 */ @Slf4j @WebServlet(name = "dispatcher", urlPatterns = "/", loadOnStartup = 1) public class DispatcherServlet extends HttpServlet { private Map requestMap; @Override public void init() { requestMap = new HashMap(); requestMap.put("/boards", new ShowBoardsControl.. 2023. 5. 29. Initialized DataBase / 톰캣(Tomcat) 실행 시 데이터베이스 초기화 Initialized DataBase 해당 글은 테스트 환경을 구성하기 위한 글입니다. 톰캣이 실행될 때마다 다음과 같은 작업이 자동화 됩니다. 기존 테이블을 모두 삭제 DROP TABLE … 테이블 생성 CREATE TABLE … 샘플 데이터 추가 INSERT INTO board (…) VALUES (…) 필자의 환경은 다음과 같습니다. Window Intellij Gradle Tomcat 9.0 MySQL 8.0 Gradle 의존성 추가 sql을 읽어 데이터베이스에 대한 초기화 작업을 하기 위해 스프링 프레임워크에서 제공하는 기능을 활용합니다. 관련된 모든 의존성에 대해서 기재했습니다. build.gradle implementation 'org.springframework:spring-core:5.3.. 2023. 5. 23. SQL Injection(SQL 삽입) SQL Injection(SQL 삽입)? SQL Injection은 악의적인 SQL문을 실행되게 함으로써 데이터 베이스를 비정상적으로 조작하는 코드 인젝션 공격 방법입니다. 주로 사용자(Client)가 입력한 데이터를 서버에서 필터링, 이스케이핑 작업을 스킵했을 때 발생할 수 있습니다. 다음과 같은 users 테이블과 데이터가 있습니다. 1. users 테이블 CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(50), age INT, email VARCHAR(100), password VARCHAR(50) ); 2. users 테이블의 데이터 아래와 같은 로그인 화면에 로그인을 시도해보겠습니다. 그렇다면, 사용자는 다음과 같이 입력한다고 가정해보겠습니다. U.. 2023. 5. 22. 데이터 베이스 커넥션 객체를 전역변수로 선언한다면? 데이터 베이스 커넥션 해당 글은 데이터베이스 커넥션 풀 (DBCP)에 대해서는 다루지 않습니다. 웹 애플리케이션과 데이터베이스는 서로 다른 시스템이며, 데이터베이스 드라이버를 사용하여 데이터베이스에 연결해야 합니다. 데이터베이스 연결의 생애주기는 다음과 같습니다. 데이터베이스 드라이버를 사용하여 데이터베이스 연결 열기 데이터를 읽고 쓰기 위해 TCP 소켓 열기 TCP 소켓을 사용하여 데이터 통신 데이터베이스 연결 닫기 TCP 소켓 닫기 위와 같이 데이터베이스 연결을 수립하고, 해제하는 과정은 비용이 많이 들어가는 작업입니다. DAO 클래스의 Connection 객체 아래 설명할 코드는 데이터베이스 접근 로직을 담당하는 DAO 클래스입니다. 주의깊게 봐야할 점은 전역변수로 관리하고 있는 Connection.. 2023. 5. 21. ENUM 활용한 Refactoring - 파일 확장자에 대한 유효성 검사는 어떻게 할까? ENUM 활용한 Refactoring - 파일 확장자에 대한 유효성 검사는 어떻게 할까? > 현재 게시판을 주제로 한 프로젝트를 진행 중에 있습니다. 해당 게시판에서 파일의 업로드 개수는 최대 3개까지 가능합니다. 파일 확장자에 대한 유효성 검사를 진행한다고 가정해봅시다. 업로드 가능한 파일의 확장자는 다음과 같습니다. png, jpeg, bmp, gif, jpg, docs 이러한 요구사항이 있을때, 어떻게 유효성 검사를 하면 좋을지 고민해보았습니다. 다음과 같이 설계한 File 이라는 도메인 객체에서 유효성 검증을 진행했습니다. public class File { private final long FileIdx; private final String FileName; private final long .. 2023. 5. 21. 이전 1 2 3 4 5 ··· 26 다음