Programming 94

Java) 컬렉션이나 배열같은 참조 변수의 캡슐화

Intro 행정안전부 소프트웨어 개발보안 가이드 https://www.mois.go.kr/frt/bbs/type001/commonSelectBoardArticle.do;jsessionid=TjAX2IwVk6hpONx8dKSZ4VTj.node10?bbsId=BBSMSTR_000000000015&nttId=88956 지난 주에 행정안전부의 소프트웨어 개발 보안 가이드를 읽다 보니 꽤나 인상적인 부분이 있었습니다. 자바의 캡슐화에 대해 단순히 private으로 변수를 생성하고 그에대해 Setter만 막아 두면, 해당 변수는 외부에서 변경이 불가능 하다고 너무나도 당연하게 여기고 있었는데 해당 문구를 보고 잠깐 고민을 해보니 자바의 캡슐화에 대해 너무 안일하게 생각하고 있었구나 싶었습니다. 캡슐화의 허점 Pub..

Programming/Java 2022.01.23

LDAP으로 스프링 시큐리티 인증하기

https://spring.io/guides/gs/authenticating-ldap/ 시작하기전에 우리는 이걸 할꺼에요. Spring Security의 임베디드 자바기반의 LDAP 서버에 의해 보안되는 간단한 웹 어플리케이션 몇몇 유저 셋을 포함한 데이터 파일과 LDAP 서버 로드 무엇이 필요해요? 15분의 시간 좋아하는 IDE 메모장도 상관 없어요! 하지만 STS나 IntelliJ IDEA가 있으면 더 쉽게 할 수 있어요. JDK 1.8 이상 Gradle 4 이상 혹은 Maven 3.2 이상 어떻게 따라해요? 대부분의 다른 Spring 가이드 문서들 처럼 완전 기초부터 하나씩 기본적인 단계를 따라하며 할거에요. 대부분 이미 익숙한 개념들이니 걱정 할 필요 없어요. 크게 두가지 방법이 있는데요. 어느 ..

CSV 포맷 소개 및 자바로 CSV 파일 작성 하기

CSV 파일형식 소개 CSV(Comma Separated Values)는 몇 가지 필드를 단순히 쉼표(,)로 구분한 텍스트 데이터 및 텍스트 파일 입니다. 장점으로는 표의 형태를 직관적으로 나타내는 간단한 형식이기 때문에 이해하기가 쉬우며, 소프트웨어로 처리하는 것 또 한 쉽습니다. 데이터에 , 가 포함되지 않았다면 간단한 코드 한 만으로도 구현이 가능 할 정도 입니다. 또한 쉼표만으로 구분하며 이스케이프 문자는 선택 사양이니 매우 경량입니다. 이름, 나이, 주소 Shane, 10, ThornHill Jenny, 20, Devonport Ann, 30, Queenstown 한눈에 보기에도 정말 간단합니다. 그 단점으로는 데이터에 쉼표가 포함된다면 곤란해 진 다는 것 입니다. 예를 들어 데이터중에 금액 데..

Programming/Java 2021.11.17

자바에서 YAML 파일 작성하기

YAML https://yaml.org YAML 이란 YAML은 사람이 읽을 수 있는(human-friendly) 데이터 직렬화 언어 입니다. 모든 프로그래밍 언어 사이에서 호환 됩니다. 서로 다른 시스템 간에 데이터를 주고 받기 위해서는 데이터 직렬화 뿐만 아니라, 데이터 포맷에 대한 약속이 필요한데요, 우리가 흔히 사용하고 있는 XML 이나 Json 등도 그 중 일부 입니다. 이전까지 xml이 많이 쓰였지만, json이 뜨면서 xml은 대부분 사장되었는데요, 아무래도 xml이 json 형태에 비해 굉장히 거추장 스럽고 한눈에 들어오지도 않았기 때문 이라고 생각합니다. XML에서 JSON으로 발전 한 것 처럼, YAML은 json 보다도 더 비교적 직관적이고 읽기 편리합니다. XML, JSON과의 비교..

Programming/Java 2021.11.16

java) 여러개의 파일 압축해 zip파일 생성

압축파일 생성 java에서도 파일을 압축 하고 압축을 해제 할 수 있습니다. 심지어 java.util.zip 에 기본적으로 포함 되어 있기 때문에 외부 라이브러리를 사용하지 않고도 손쉽게 구현 할 수 있습니다. 아주 간단한 예제를 만들어서 실습 해 보겠습니다. 사전준비 사실 준비라고 할 것도 없고, 그냥 압축 할 파일을 몇개 준비시켜 둡니다. Terminal 을 켜서 파일들의 경로도 미리 확인을 해 둡니다. 코드작성 세개의 파일을 토대로 File 객체를 생성 한 후, ArrayList에 담아서 순회하고, 압축파일을 생성하는 코드를 작성 해 보았습니다. 딱히 어려운 내용이 없으니 코드를 보면 내용들이 이해 되실거에요. package com.tistory.shanepark.file.zip; import ja..

Programming/Java 2021.11.11

JAVA에서 비동기 HTTP 요청시 멀티파트 파일 전송 (ContentTooLongException: Content length is unknown)

문제 Multipart 요청을 비동기로 다른 API 서버에 보내려고 하는데 에러가 발생했습니다. 사용자가 업로드 한 파일에 문제가 있는지 (금지 단어 포함 등) 를 확인 하기 위해 어플리케이션 내부에서 해당 파일을 또 다른 어플리케이션(파일 검사API)으로 보내는 로직을 수행하도록 구현을 하고 있었습니다. 사용자에게서 받은 Multipart file을 그대로 다시 API 서버로 전송을 하는데, Single Thread로 수행 했을 때는 문제가 없었습니다. 하지만 Single Thread로 수행 시, 요청한 사용자 입장에서는 파일 업로드에 걸리는 시간이 사용자 -> 어플리케이션서버 -> 검증API서버 이렇게 이렇게 두배로 늘어나게 됩니다. 그래서 어플리케이션 내부에서 검증 서버로의 전송은 비동기 요청으로 ..

Programming/Java 2021.11.05

JAVA) proxy 사용해 연결

이전 글 SSH를 이용한 Proxy, Dynamic Port Forwarding (SOCKS) 을 통해 proxy 서버를 열어 보았습니다. 거기에 이어서, 열어둔 서버로의 프록시 접속을 웹 브라우저 에서 뿐만 아니라 자바 어플리케이션을 통해 접속을 해 보겠습니다. 이미 설정 해 둔 프록시 서버가 있지 않다면 이전 글을 먼저 참고 해 주세요. ​ 크게 두 가지 방법이 있습니다. ​ 1.System.getProperties()를 이용한 설정 ​ 일단 간단하게 UrlConnection을 연결 해서 www.ifconfig.me 주소로 신호를 보내는 프로그램을 작성 해 보았습니다. URL url = new URL("https://www.ifconfig.me"); StringBuffer sb = new String..

Programming/Java 2021.10.29

JAVA) String을 LocalDateTime 으로 변환하기

API 호출을 하던 중에 JSON 형식으로 받아 온 시간 데이터를 JAVA에서 LocalDateTime 형식으로 받아야 하는 일이 있었습니다. 이럴때는 간단하게 DateTimeFormatter를 이용하면 어떤 형식의 날짜 데이터도 LocalDateTime으로 변환 할 수 있습니다. ​ 일단 제가 parsing 해야 하는 문자열은 아래와 같습니다. "2021-11-05 13:47:13.248";​ 흔하다면 흔한 형식 중에 하나지만 시간값은 어떤 형식으로 올 지 확인 하기 전까진 알기 힘듭니다. 시간 형식이 정확하게 규격화 되어서 한가지만 쓰면 참 좋을텐데 말이죠.. 자바스크립트에서는 moment.js 라이브러리를 자주 쓰게 되더라고요. ​ 일단 code assist 를 받아보니 ofPattern 메서드로 ..

Programming/Java 2021.10.22

Java) POI 활용해 DB데이터 엑셀 파일로 저장하기

사용자에게 요구 데이터를 보여 주는 방법은 여러가지가 있습니다. 보통은 웹 페이지를 통해 화면을 보여주는데요, 사용자가 해당 내용을 확인하기 위해서는 항상 해당 웹 페이지에 방문 해야만 하며, 인터넷에 연결되어있어야만 한다는 제약이 생깁니다. 그래서 파일로 조회 데이터를 저장하고자 하는 수요는 반드시 생기고, 그 수요를 충족시키기 위한 여러가지 라이브러리들이 나와 있습니다. 그 대표적으로 Apache POI가 있습니다. ​ Apache POI (Poor Obfuscation Implementation) https://poi.apache.org Apache POI는 아파치 소프트웨어 재단에 의해 운영되는 오픈소스 프로젝트 입니다. 순수 자바 라이브러리로서 Microsoft Office의 Word, Powe..

Programming/Java 2021.10.15

이제는 Cookie 대신 Web Storage 가 대세

이제는 Cookie 대신 Web Storage 가 대세 ​ HTML Web Storage 참고자료 : https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API 웹 스토리지를 이용하면 웹 어플리케이션은 데이터를 사용자의 브라우저에 내부적으로 저장 할 수 있습니다. HTML5 이전에는 어플리케이션의 데이터가 Cookie 에 저장되어야 했는데요, 그로 인해 매번의 서버에 대한 요청마다 포함되어야 했었습니다. 웹스토리지는 더 보안상 안전하며 훨씬 큰 데이터를 저장 할 수 있습니다. 심지어 웹사이트의 퍼포먼스에도 전혀 영향을 주지 않습니다. ​ Cookie는 브라우저마다 최대 갯수와 최대 사이즈가 미묘하게 다르기는 하지만, 일단 최대 4096 bytes의..

JPA) 데이터베이스 스키마 자동 생성

참고 강의 : 우아한 형제들 김영한 팀장님 https://www.inflearn.com/course/ORM-JPA-Basic/dashboard ​ hibernate.hbm2ddl.auto hibernate 에서는 해당 프로퍼티를 설정 함으로서 SessionFactory 가 생성 될 때 스키마 DDL(Data Definition Language)을 검증하고 내보낼 수 있습니다. hibernate.dialect 속성을 통해 데이터베이스에 적절한 DDL을 생성 하는데 이렇게 생성된 DDL은 개발 단계에서만 사용하는게 좋습니다. ​ hibernate.hbm2ddl.auto 속성의 value 에 들어 갈 수 있는 값은 아래와 같습니다. 옵션 하는일 create 기존 테이블을 삭제 한 뒤에 새로 생성 create-..

H2 데이터베이스를 이용해 JPA 실습해보기

인프런에서 우아한 형제들 김영한님의 JPA 강의를 학습하며 내용을 정리 해 보았습니다. 해당 강의를 들어보시길 추천합니다. https://www.inflearn.com/course/ORM-JPA-Basic/dashboard ​ H2 데이터베이스는 자바기바느이 오픈소스 RDBMS(관계형 데이터베이스 시스템)입니다. 인메모리 DB 기능을 지원하며 굉장히 용량도 작고 가볍게 동작하기 때문에 번거롭게 데이터베이스를 구축 할 필요 없이 손쉽게 실습을 할 수 있어 편리합니다. ​ H2 DATABASE 설치 아래의 공식 사이트에서 다운 받습니다. 저는 MacOS 를 사용중이기 때문에 All platforms 를 클릭 해 다운 받았습니다. https://h2database.com ​ 이후 적당한 폴더에 위치 시킵니다...

스트림 (Stream)

스트림이란 ? https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html ​ Stream이 추가 되기 전인 Java 7 버전 까지에서는 많은 수의 데이터들을 다룰 때에 컬렉션이나 배열에 데이터를 담아 둔 후, 원하는 결과를 얻기 위해서 반복문 혹은 Iterator를 이용하는 방법 만으로 코드를 작성 해 왔습니다. package com.tistory.shanepark.stream; public class Stream01 { public static void main(String[] args) { int[] numbers = {1,2,3,4,5,6,7,8,9,10}; for(int n : numbers){ System.out.println(..

Programming/Java 2021.09.05 (1)

제발 한국인이라면 자바스크립트 Object를 Map 처럼 사용하지 맙시다.

제발 한국인이라면 자바스크립트 Object를 Map 처럼 사용하지 맙시다. ​ Photo by Steve Johnson on Unsplash. ​ 1. Introduction 오늘 코딩하던 중에 Javascript 에서 만든 Map을 Controller 쪽으로 어떻게 넘길지에 대해 고민 하는 일이 있었습니다. JavaScript 에서는 Object 를 사용하면 왠만하면 다른 언어에서의 Map 과 유사하게 사용 할 수 있기 때문에 딱히 Map을 사용 해 본 적이 없었는데요. ​ 특히 나중에 자바에서 스프링 부트에서 제공하는 JsonParser 를 이용하면 JSON 데이터를 List 아니면 Map 으로 Parsing을 하더라고요. Object 형태로 보내지 않고 Map을 Marshalling 해서 보낸다면 ..

Programming/Javascr¡pt 2021.09.02 (3)