파일 업로드나 뷰어 기능을 테스트 할 때 다양한 종류의 파일들이 필요한 경우가 있습니다.

 

가령, 확장자 제한 기능은 Jpg, png, jar 파일 등 제한되는 확장자 파일이 필요하고

 

압축, 압축해제 기능은 ZIP파일, 용량 제한 기능은 대용량 파일( 1GB 등 )을 준비하지 않으면

 

용량 초과를 테스트하기 위해서 같은 파일을 여러번 올리는 일을 반복해야 합니다.

 

777번, 7777번과 같은 정밀한 숫자로 업로드 갯수를 테스트한다면 파일을 복사해서 갯수를 맞추는 것도 쉽지 않습니다.

 

또한 이미지 파일의 미리보기 기능처럼 실제로 해당 확장자가 쓰이는 기능일 테스트할 경우,

 

단순히 용량만 많은 것이 아니라 실제로 정상적으로 출력되는지를 확인할 수 있는 고용량 이미지 파일이 필요합니다.

 

 

이렇게 특수한 테스트 파일이 필요한 상황을 위한 파일 생성-변경 방법 세 가지를 소개합니다.

*이 글은 window 운영체제 기준으로 작성되었습니다.

 

1. 이름, 확장자, 용량을 지정해 더미파일 생성하기

windows에서는 CMD(Command Prompt), 혹은 PowerShell을 사용하여

파일 이름, 확장자, 용량을 지정한 더미파일을 생성할 수 있습니다.

 

먼저, CMD를 관리자 권한으로 실행합니다.

 

 

 

 

이후 CMD에 파일을 만들고 싶은 경로에 cd [경로] 커멘드로 이동합니다.

 

저는 cd C:\ 커멘드를 입력하여 C드라이브로 이동하였습니다.

 

 

더미파일을 생성하기 위해 다음과 같은 커멘드를 입력합니다.

*주의, 관리자 권한으로 실행해야 파일을 생성할 수 있습니다.

 

:: 파일 용량과 확장자, 이름을 생성하는 코드입니다. 
:: fsutil file createnew [파일이름] [파일사이즈] 

:: ex) 이름이 10MBFILE, 확장자가 txt이고 용량이 10MB인 파일을 생성합니다.

fsutil file createnew 10MBFILE.txt 10485760 

 

 

이후 위의 사진과 같이 “10MBFILE.txt 파일 작성” 이라는 알림이 뜨면 성공입니다.

 

실제 C드라이브 경로에 가면, 지정된 이름, 확장자, 용량의 파일이 생성되어 있는 것을 확인하실 수 있습니다

 

 

2. 텍스트 파일을 원하는 갯수만큼 복사하기

 

 

windows에서는 batch 파일이라고 하는 .bat 확장자의 파일을 이용하여 단순한 작업을 반복할 수 있습니다.

 

즉, 파일 복사라고 하는 반복작업을 Java의 for문을 활용하는 것처럼 자동화시킬 수 있습니다.

 

이 방법을 통해서 777개의 더미 텍스트 파일을 만드는 등, 원하는 갯수만큼 파일을 생성할 수 있습니다.

 

이전에 만들어 둔 10MBFILE이 있으므로, 이를 활용하여 자동복사를 진행해 보겠습니다.

 

먼저 txt 파일을 만들어 다음과 같은 내용을 붙여넣습니다.

 

:: 텍스트 파일을 원하는 수만큼 복사하는 배치 로직입니다. (주석) 

@echo off
:: 작업 시, 결과만을 출력하라는 명령입니다. 

SET i=0
:loop
SET /A i=i+1
:: 반복문과 반복문에 사용할 i를 선언합니다. 

if %i% GEQ 10 goto QUIT
:: i가 10에 도달하면 :QUIT 줄의 명령을 실행하도록 조건을 붙입니다. 

echo %i%
copy c:\\10MBFILE.txt c:\\file%i%.txt
Goto loop
:: copy 라는 명령을 통해서 원하는 경로의 파일을 원하는 경로에 반복문이 도는 
:: 횟수만큼 붙여넣을 수 있습니다. 

:QUIT

:: 반복문이 끝나면 :QUIT 이후로 진행됩니다. 아무런 커멘드가 없으므로 종료됩니다. 

 

 

이 파일의 핵심은 “copy c:\10MBFILE.txt c:\file%i%.txt” 명령어입니다.

 

이 명령어는 두 단락으로, c:\10MBFILE.txt라는 파일을 똑같은 경로 c드라이브에 10번 순서대로 붙여넣겠다는 명령입니다.

 

이 “복사기능”을 for문으로 정해진 횟수만큼 실행하는 간단한 반복문이라고 할 수 있습니다.

 

이후 파일 이름 변경을 통해 확장자를 .bat 으로 변경합니다.

 

 

 

 

 

bat 파일을 더블클릭하여 실행시키거나, CMD 커맨드에 파일 경로로 가서 이름을 입력하여 실행합니다.

 

 

 

 

이후 C드라이브에서 확인해 보시면 파일이 정상적으로 복사된 것을 확인하실 수 있습니다.

 

파일 갯수가 많아질 경우에는 새 폴더 경로를 만들어 시도해보시기 바랍니다.

 

 

3. 고용량 이미지 파일을 크기별로 제작하기

 

 

window의 기본 기능인 그림판(Painting)은 크기조정 기능을 제공합니다.

 

이 기능을 활용하면 원하는 이미지 파일의 용량을 조작할 수 있습니다.

 

최대 90MB의 용량을 가진 이미지를 만들기 위해서는 5-7MB정도의 이미지가 필요합니다.

 

6.7MB의 이미지를 사용하여 기능을 활용 해보도록 하겠습니다.

 

마우스 오른쪽 클릭 후 이미지를 그림판으로 엽니다.

 

 

 

 

크기 조정에서 백분율, 혹은 픽셀을 조절하여 크기를 바꾸면 용량을 늘리거나 줄인 이미지를 얻을 수 있습니다.

*픽셀크기가 16384 x 16384를 넘을 경우 오버플로우되며 생성 불가 처리되므로 주의하세요

 

 

 

 

 

500%로 지정한 이후 저장하면, 크기가 90MB로 늘어난 것을 보실 수 있습니다.

 

 

 

 

 

이처럼 배율을 조절하여 5MB 기준 최대 90MB까지 대용량 이미지파일을 제작할 수 있습니다.

 

 

4. 실습용 파일 첨부

 

마지막으로 앞서 소개한 세 가지 기능의 실습을 위해서

2번의 .bat파일, 3번의 실습용 6.7MB 이미지 파일을 압축 파일로 첨부하여 제공해 드립니다.

 

더미데이터 종합 ZIP 파일이 세 가지 windows 기능을 활용한다면

대규모-대용량 업로드 등의 기능처리를 더 빠르고 쉽게 테스트 할 수 있습니다.

 

시간이 되신다면 파일을 받아 실습해 보시기 바랍니다. 감사합니다.

 

fileControlPractice.zip
6.71MB

참고자료

widow fsutil file Document ( fsutil file createnew command 문서 ) : fsutil file

 

fsutil file

사용자 이름으로 파일을 찾고, 파일에 대해 할당된 범위를 쿼리하거나, 파일의 짧은 이름을 설정하거나, 파일의 유효한 데이터 길이를 설정하거나, 파일에 대한 데이터를 0으로 설정하거나, 새

docs.microsoft.com

도스 .bat 파일에서 @echo off 의미 : 도스(DOS)/윈도우의, 배치 파일에서 echo off 란?

 

도스(DOS)/윈도우의, 배치 파일에서 echo off 란?

배치파일(Batch File)의 첫 부분에는 거의 모두 @echo off 이런 부분이 있습니다. @echo off 는, 배치 파일이 명령들을 쓸데없이 '복창'하지 않도록 만들어서, 화면을 간결하게 하기 위한 명령입니다. 가

mwultong.blogspot.com

윈도우 배치 파일 : 배치 파일 - 위키백과, 우리 모두의 백과사전

 

배치 파일 - 위키백과, 우리 모두의 백과사전

이 문서는 MS-DOS 스크립트에 관한 것입니다. 다른 종류의 배치 프로그래밍에 대해서는 셸 스크립트 문서를 참고하십시오. MS-DOS, OS/2, 윈도우에서 쓰이는 배치 파일(batch file)은 명령 인터프리터에

ko.wikipedia.org

 

Base64의 정의 

Base64 인코딩 표

 

Base64란, 바이너리 데이터를 ASCII 문자열로 전환하기 위한 인코딩 중 하나입니다. 

 

보통은 바이너리 데이터로 표현되는 실행 파일 등을 전송하는 데 Base64 방식을 이용하여 작업합니다. 

 

또한 클라이언트-서버 단에 전송되는 데이터 타입을 통일하여 데이터타입을 잘못 입력하여 발생하는 문제를 방지하거나 

 

요청-응답에 대해 Filter단에서 문자열 치환- XSS 방지 기능을 거칠 경우 Base64를 통해 우회하기도 합니다. 

 

Javascript Base64 인코딩-디코딩 

 

Javascript에서는 전역객체 window의 btoa() , atob() 함수를 이용해 Base64 인코딩-디코딩 기능을 사용할 수 있습니다. 

 

btoa() 함수를 사용할 때는, 인코딩 방식에 주의하여 사용해야 합니다. 

 

MDN의 btoa() 함수에 대한 설명을 보면, Javascript String 객체를 기준으로 설계되어 있기 때문에 

하나의 문자열이 1Byte를 넘는 경우 ( 이모지 등 ) 에러가 발생합니다. 

 

이때는 해당 문자열을 Javascript String 기준의 UTF-16에 맞추어 변환시켜주어야 합니다. 

 

Java Base64 인코딩-디코딩 

Java는 java.util 패키지에 Base64 클래스를 제공합니다. 

 

Nested Class(내부클래스)로 Base64.encoder, Base64.decoder를 제공합니다. 

 

java.net의 urlDecoder 역시 base64 형태로 보내진 URL을 UTF-8 등으로 디코딩할 수 있습니다.

 

 

 

여러분도 Javascript의 btoa(), atob(), 

 

Java의 java.util.Base64 Class를 이용하여 바이너리 데이터를 전송해보시기 바랍니다. 

 

 

 

참고자료 

 

Java Document, Java.util.Base64 :  https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/util/Base64.html

 

Base64 (Java SE 15 & JDK 15)

public class Base64 extends Object This class consists exclusively of static methods for obtaining encoders and decoders for the Base64 encoding scheme. The implementation of this class supports the following types of Base64 as specified in RFC 4648 and RF

docs.oracle.com

 

MDN, btoa()  :  https://developer.mozilla.org/en-US/docs/Web/API/btoa

 

btoa() - Web APIs | MDN

The btoa() method creates a Base64-encoded ASCII string from a binary string (i.e., a string in which each character in the string is treated as a byte of binary data).

developer.mozilla.org

 

MDN, Base64  : https://developer.mozilla.org/en-US/docs/Glossary/Base64

 

Base64 - MDN Web Docs Glossary: Definitions of Web-related terms | MDN

Base64 is a group of similar binary-to-text encoding schemes that represent binary data in an ASCII string format by translating it into a radix-64 representation. The term Base64 originates from a specific MIME content transfer encoding.

developer.mozilla.org

 

Redis란? 

레디스는 2009년 최초 출시되었습니다.

 

Redis는 대표적인 오픈소스 인-메모리(In-Memory) 데이터베이스입니다. 

  

  Redis는 인-메모리(In-Memory) 데이터베이스의 정의에 의거하여

 외부 저장장치에 데이터를 보관하는 기존의 데이터베이스와는 달리

 휘발성 메모리에 저장하여 데이터 접근속도를 더 빠르게 만듭니다. 

장치가 꺼질 경우 사라지는 메모리를 사용하기 때문에 서비스의 모든 데이터를 저장하기는 어렵습니다.

 

 

공식 홈페이지에 따르면

다른 인메모리 데이터베이스와 달리 많은 데이터 자료형을 지원하며 

  기존의 데이터베이스와 유사한 쿼리문, 서브쿼리문 형태로도 데이터조회가 가능하다고 합니다. 

 

 

  

 

Redis의 기능 

 

  • 데이터베이스를 복제하여, 데이터 부하를 줄이고 장애 발생 시 서비스를 계속 제공할 수 있습니다. 
  • 세션(Session)에 저장된 데이터와 같은 데이터를 다른 WAS(Web Application Server)와 공유할 수 있습니다. 
  • 빠른 속도, 많은 자료형, 정렬 기능 등으로 간단한 데이터 제공의 경우 쾌적한 사용자 환경을 유지할 수 있습니다. 

 

Redis Stack

Redis는 여러 모듈들을 단일 기능으로 통합한 어플리케이션을 제공하고 있습니다. 

 

공식 홈페이지에는 Redis-Stack과 연동될 수 있는 대표적인 기술들을 소개하니 참고하시면 좋을 것 같습니다. 

 

참고 자료 

 

Redis 공식 소개 홈페이지 

https://redis.io/

 

Redis

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker

redis.io

SmallTalk 알아보기 

 

객채지향 언어를 이야기 할 때 빠지지 않고 등장하는 것이 언어 SmallTalk 입니다. 

 

GNU의 GNU SmallTalk User's Guide를 참조해서 SmallTalk의 특징을 살펴보면 다음과 같습니다. 

 

https://www.gnu.org/software/smalltalk/manual/html_node/

 

GNU Smalltalk User’s Guide: Top

This document describes installing and operating the GNU Smalltalk programming environment. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version publis

www.gnu.org

"smallTalk 언어에서는 모든 것이 객체입니다. 숫자나 데이터 구조뿐만 아니라 클래스, 메서드, 메서드 안의 코드블록, 스텍 프레임 등이 포함됩니다..." -GNU SmallTalk User's Guide Overview- 

 

철저한 객체 지향적 코드를 준수하기 위하여 구현할 수 있는 최대한의 요소를 객체로써 다루도록 설계한 언어입니다. 

 

Github와 GNU에 오픈소스로써 gnu SmallTalk를 이용할 수 있으나, 윈도우 환경에서 빠르게 가동할 수 있는 

 

Pharo를 통해서 순수한 Object로 구현된 smallTalk 방식의 언어를 실습해보도록 하겠습니다. 

Pharo, smallTalk에 영향을 받은 객채 지향적 언어 

https://pharo.org/web

 

Pharo - Welcome to Pharo!

The immersive programming experience Pharo is a pure object-oriented programming language and a powerful environment, focused on simplicity and immediate feedback (think IDE and OS rolled into one). It is open source and available for Mac, Windows and Linu

pharo.org

Pharo는 Pharo 언어의 장점을 다음과 같이 표현하고 있습니다. 

 

"Simple & powerful language: No constructors, no types declaration, no interfaces, no primitive types. Yet a powerful and elegant language with a full syntax fitting in one postcard! Pharo is objects and messages all the way down." 

 

기존의 복잡한 Contructor, Type선언, Interface, 기본형 등을 모두 없에고 객체와 메시지만을 남겼다고 합니다. 

 

https://www.youtube.com/watch?v=WLoXXFxU8lw 

유튜브에는 Pharo를 통해서 SmallTalk 형식의 Object를 구현해 볼 수 있는 간단한 튜토리얼이 있습니다. 

 

다음 글에서는 Pharo를 이용한 Object 구현 튜토리얼을 직접 실습해보도록 하겠습니다. 

+ Recent posts