전체 글

이것 저것 공부해보기 좋아하는 초보 개발자로, 제가 공부하는 내용들을 제가 이해하기 쉽게 작성합니다. 질문이나 지적은 언제나 환영합니다.
· Database
MariaDB -- 해당 데이터가 존재할 경우 새로운 로우를 삽입하지 않는다. INSERT IGNORE INTO [TABLE NAME](COLUMN1, COLUMN2, ...) VALUES(VAL1, VAL2, ...); -- 해당 데이터가 존재할 경우 해당 로우를 업데이트 한다. INSERT INTO [TABLE NAME](COLUMN1, COLUMN2, ...) VALUES(VAL1, VAL2, ...) ON DUPLICATE KEY UPDATE COL1 = VAL1, COL2 = VAL2, ... Oracle INSERT INTO [TABLE NAME](COLUMN1, COLUMN2, ...) VALUES(VAL1, VAL2, ...) WHERE NOT EXISTS(SELECT * FROM [TAB..
· Database
'SELECT COUNT(*) FROM ... WHERE ...'와 같이 특정 조건의 데이터 여부를 확인할 때 COUNT 함수를 사용하곤 하는데, 이 경우에는 조건에 맞는 데이터를 모두 쿼리한 다음 그 수를 세기 때문에 이럴 경우에는 EXISTS를 사용하는 것이 좋습니다. 'SELECT EXISTS(SELECT * FROM ... WHERE ...)'와 같이 EXISTS 함수를 사용하는 것이 훨씬 좋습니다.(이 경우에는 한 번만 쿼리합니다.) MariaDB SELECT COUNT(*) FROM TABLENAME WHERE VAL_COL1 = ? SELECT EXISTS(SELECT * FROM TABLENAME WHERE VAL_COL1 = ?) Oracle SELECT 1 FROM DUAL WHERE ..
서버에서 받아온 바이너리 파일을 다시 파일 데이터로 변환하는 방법입니다. 일전에 파일을 바이너리 타입으로 변환해 DB에 저장한 상태라고 가정하겠습니다. 추가적으로, 복수의 파일을 다운로드할 경우에는 zip 형태의 파일로 저장하게끔 하는 요청사항이 있다고 간주해보겠습니다. const result = (await axios.get(url)).data; const blobData = result.blob; const extension = result.type; let fileType = getFileType(extension); File 타입 지정 바이너리 데이터를 다시 파일로 변환하기 위해서는 파일의 확장자에 따라 다른 파일 타입을 지정해주어야 한다. 저는 주로 MS Office에서 다뤄지는 확장자들(특히 ..
이 게시글에서는 Javascript를 이용해 파일을 바이너리 데이터로 변환하거나 그 반대의 경우에 어떤 개념들이 이용되는지와 어떻게 해야하는지를 설명하고 있습니다. File Javascript에서 파일 데이터를 처리하기 위해 지원하는 인터페이스입니다. Blob의 한 종류로 Blob의 여러 기능을 사용할 수 있습니다. 아래와 같이 HTML의 File의 값을 받아올 때에도 해당 유형의 데이터로 받을 수 있습니다. 개발자 도구로 확인해보게 되면 name, type 등을 속성으로 가지나 데이터의 내용을 보여주지는 않습니다. const file = document.querySelector('#file').files[0]; File(또는 Blob)의 내용을 읽어오기 위해서는 FileReader라는 인터페이스를 이용..
· AWS
AWS Associate Developer 자격증을 준비하면서 EC2 관련 실습을 해보고 있습니다. 최근 EC2 인스턴스를 생성하면서 부트스트래핑될 때 특정 기능을 수행하도록 사용자 데이터를 추가해주었는데, 생성된 인스턴스의 Public IP로 액세스가 안되는 문제가 발생했습니다.. 뒤늦게 사용자 데이터가 잘못 쓰였음을 깨닫고 수정을 했으나 아무리 재부팅을 반복해도 접근되지 않는겁니다.. 하하 결국엔 새로운 EC2 인스턴스를 만들자 바로 접근이 되었습니다. 알고보니, EC2 생성시에 작성한 사용자 데이터는 부팅 주기에 실행되지만 최초 한 번의 주기에만 실행되는 것이 기본값이라고 합니다. 만약 주기를 변경하고자 한다면 MIME 멀티파트 타입 파일을 통해 실행 빈도를 재정의할 수 있습니다. 이와 관련된 공식..
· Backend/Java
Annotation 어노테이션은 사전적인 정의로 주석이라는 의미를 가집니다. 흔히 개발할 때 접할 수 있는 대표적인 어노테이션들로 @Override, @Deprecated 부터 시작해서 Spring에서는 @Service, @Controller등이 있습니다. JDK 1.5 버전 이상에서 사용 가능하며, 자바 소스 코드에 사이에 @ 기호를 앞에 붙여서 사용할 수 있습니다. 클래스, 필드, 메서드 및 기타 프로그램 요소의 선언부에 사용할 수 있으며, Java 8에 들어와서는 타입 매개변수에도 사용할 수 있게 되었습니다. (관련글 링크) 그렇다면, 왜 어노테이션을 사용할까? 1) 코드가 간결해진다. 개발을 하다보면 저같은 초보 개발자는 보일러 플레이트 코드를 마주하기 쉽습니다. 비슷한 동작을 필요로 하는 곳들마..
· Backend/Java
Annotation Java 8 부터 어노테이션을 1)타입 선언부에도 사용 가능하게, 2)중복해서 사용할 수 있게 바뀌었다. 타입 선언부 제네릭 타입 변수 타입 매개변수 타입 예외 타입 타입에 사용하기 위한 준비 사항 @Target 을 통해 해당 클래스가 어노테이션으로써 사용될 수 있는 곳을 정의할 수 있다. Java 8에 TYPE_PARAMETER와 TYPE_USE 두 가지 타입이 추가되었다. 1) ElementType.TYPE_PARAMETER 해당 클래스를Type Parameter에만 사용 가능해진다. Cf. 하나 이상의 타입 매개변수(Type Parameter)를 선언하고 있는 클래스 혹은 인터페이스를 제네릭 클래스(제네릭 인터페이스)라고 하며,이를 모두 제네릭 타입이라고 한다. 예시로, 어노테이..
· Docker
특정 버전의 이미지 받기(생략시 기본적으로 latest가 붙음) $ docker pull [image name]:[version] 이미지 목록 조회 $ docker images 이미지 삭제 $ docker rmi [image ID] 해당 이미지의 컨테이너까지 삭제 $ docker rmi -f [image ID] 실행중인 컨테이너 조회 $ doc docker ps 전체 컨테이너 조회(option: -a, -all) $ docker ps -a 컨테이너 종료 $ docker stop [container ID] 컨테이너 삭제 $ docker rm [container ID]
이 글은 H2 데이터베이스의 이전 버전 중 1.4.199 버전을 도커 컨테이너로 실행시키는 방법에 대한 글입니다. 가장 최신 버전을 설치하고자 하실 때에는 도커 이미지의 버전을 명시하지 않으시면 되고, 다른 이전 버전을 설치하고자 하실 때에는 버전을 달리 입력하시면 됩니다. 1) 의존성 추가 dependencies { implementation org.hibernate:hibernate-entitymanager:4.3.10.Final implementation com.h2database:h2:2.1.210 } 2) 도커를 통해 H2 설치 이미지 받기 저는 oscarfonts/h2 이미지를 받았습니다. 아래 링크는 도커 허브의 해당 이미지 주소입니다. https://hub.docker.com/r/oscar..
문자열 배열을 Set으로 만들어 중복되는 요소를 제거하고, 이를 다시 스프레드 연산자를 통해 배열로 만들 수 있다. const arr = ['a', 'b', 'c', 'd', 'a', 'c']; const set = new Set(arr); // {'a', 'b', 'c', 'd'} const result = [...set]; // ['a', 'b', 'c', 'd']
devYH
모르는 것이 많습니다