Docker 를 사용할때 Container 안에 생성된 파일을 Host로 옮기거나 Host 에 파일을 Container 복사가 필요할 때가 있다. 이럴때 Dokcer 명령어 중 CP를 사용해서 복사할 수 있다. 간단한 예제로 사용법을 알아보자 1.파일 생성 "docker copy host from to container" 라는 문자열을 포함한 docker-test.txt 파일을 생성한다. 2. container 확인 및 파일 복사 seoul-data-searcher 라는 container를 확인할 수 있다. 해당 container 안으로 파일을 복사해 보겠다. ➜ docker cp [호스트파일경로] [컨테이너명]:[컨테이너저장위치] 3. container 진입 및 복사된 파일 확인 실행중인 contain..
7~8 년쯤 반도체 부품 제조 업체 프로젝트를 했었다. 개발 중에 레거시 시스템과 보안에 민감한 데이터를 주고 받을 일이 있었다. 그래서 암호화가 필요했는데 당시 업체의 SM 전산실 현업쪽에서 암호화 처리를 위해 아래와 같은 샘플 코드를 받았다. byte[] bytes = Base64.encodeBase64(inputString.getBytes()); ...이하 생략 당시 라이브러리를 뭘 사용했는지 모르겠지만 Base64 인코딩 처리를 하는 코드였다. 그래서 "Base64 인코딩은 암호화 방법이 아니다." 라고 말했다가 오히려 성화를 입은 적이 있다. 요즘도 폐쇠적인 곳의 전산팀과 일을 하다 보면 암호나 기타 민감 정보를 주고 받을 때 Base64 인코딩을 암호화 방식이라면 사용하는 곳을 보게 된다. 이..
윈도우 운영체제에서 웹 애플리케이션을 데몬으로 가장 적절한 방법은 윈도우 서비스로 등록하는 방법이다. 업무 중 윈도우에 서비스를 배포할 일이 있어서 검색하는 중 아주 간단히 윈도우 서비스를 등록하는 방법이 있어 기록한다. NSSM Non-Sucking Service Manager 의약자이고 윈도우 서비스 등록을 아주 간결하게 할 수 있게 지원한다. 아래 그림처럼 최신 버전의 nssm 을 다운로드 받는다. 윈도우 서비스 등록 압축을 해제하면 32bit 용 64bit 용 2개의 nssm.exe 실행 파일이 나오는데 운영체제에 맞게 사용하면 된다. 먼저 bat 파일을 작성하고 아래와 같이 등록하면 된다. -myapp-start.bat @ECHO OFF #call -jar .jar call c:\programf..
Optional 클래스는 Java 8 의 새로운 기능 중 마지막으로 작성할 내용이다. 자바8 이전에도 Google Guava 같은 유틸 라이브러리 지원을 받아 사용할 수 있었는데 자바 8에 와서는 공식적으로 지원하게 됐다. 오늘은 이 Optional 클래스에 대해서 간단하게 알아보자. Optional 무엇인가? Optional 클래스는 Wrapping 클래스이다. 자바는 객체 지향 언어이기 때문에 모든 type 에 클래스를 제공한다. int, long, char 같은 Primitive data type 도 Integer 나 Long , Character 같은 Wrapping 클래스를 제공한다. 물론 목적의 차이가 있지만 값을 Wrapping 하거나 편의 메서드를 제공하는등 기능적으로 볼때는 비슷한 맥락이..
Java8 이전 버전에서는 날짜,시간 등의 작업을 위해서 java.util.Date 나 Time 클래스를 이용했다. 하지만 이 클래스들은 동시성 부분이나 TimeZone 으로 인한 어려움이 있었다. 그래서 자바 8 부터는 날짜 시간 작업을 위해 개선된 클래스가 소개됐는데 LocalTime , LocalDate 그리고 LocalDateTIme 클래스이다. LocalTime LocalTime 클래스는 오직 시간을 위한 클래스이다. 날짜 정보는 없고 시간 작업시 사용한다. 예를 들어 현재 시간이나 현재 시간 부터 몇 시간 후 등이다. 몇 가지 예제로 사용법을 알아보자. LocalTime now = LocalTime.now(); System.out.println(now); //16:11:24.625 now = ..
axios 를 쓰던 ES6 의 fetch 를 사용하던 다른 출처(Cross Origin)를 통해 로그인을 시도할 경우 정상적으로 JSESSIONID 값을 저장하지 못하는 경우가 있다. 오늘은 그 원인과 해결 방법을 알아보자 Cross Origin 이란? cross origin 이란 서로 다른 출처를 말하는 것 이다. 예를 들어 같은 호스트여도 port 가 다르면 출처가 다르다. 이 건 SOP 정책에 의한 것인데. 프로토콜, 도메인, Port 중 하나라도 다를 때 적용된다. //not same origin http://localhost:3000 http://localhost:8080 Request.Crendentials fetch API 를 이용할 경우 Request 라는 인터페이스를 이용한다. 해당 인터..
Jenkins 에서 Build 중 Shell 명령어에 sudo 를 포함하고 있으면 아래 메세지를 만날수 있다. sudo: no tty present and no askpass program specified. sudo 명령어 실행시 패스워드를 입력 받기 때문에 해당 부분에서 오류가 발생한다. 결국 jenkins 계정에 SUDO 명령어 입력시에 패스워드 받지 않고 바로 실행할 수 있게 설정하면된다. 방법은 /etc/sudoers 파일을 아래와 같이 수정하면 된다. $sudo vi /etc/sudoers ~~~~ 생략 # See sudoers(5) for more information on "#include" directives: #includedir /etc/sudoers.d jenkins ALL=(ALL..
유용한 linux 명령어 트랙킹을 위한 공간이다. (Ubuntu 18.x 기준) du 파일아이템 크기별 정렬 du -hs * |sort -h * 만약에 위 명령어가 지원되지 않으면 별도 util 패키지를 설치해서 사용 가능하다. brew install coreutils du -hs * | gsort -h apt-get apt(Advanded Packaing Tool) 패키징 관리 툴이다. 패지킹 관리 툴은 라이브러리 의존성 및 설치 삭제를 위한 명령어 도구이다. apt-get 관련 몇가지 명령어를 알아보자. apt list --installed apt-get 을 이용해 설치된 프로그램 목록을 확인한다. apt list --installed service --status-all 현재 활성화된 서비스 목록을..
랜덤한 int를 원소로 같는 리스트가 있다. 이 리스트에 원소들의 합을 구하기 위해서는 보통은 아래와 같은 코드로 작성할 것이다. List numbers = Lists.newArrayList(11, 21, 45, 69, 10, 24, 12, 51, 22, 31, 20); int sum = 0; for (Integer number : numbers) { sum += number; } 하지만 자바 8+ 에서는 아래와 같은 코드 작성이 가능하다. int sum = numbers.stream() .mapToInt(Integer::intValue) .sum(); 어쩌면 더 복잡하게 느껴질 수도 있는 코드이다. 뭐 어쨌든 위와 같은 코드 형태가 자바 8에서 소개된 Stream API이다. Collection처럼 연..
Java 8 에서 람다표현식나 Collection Stream API가 추가 되면서 인터페이스에 필연적인 변화가 생겼다. 인터페이스에도 defaut, static 메서드를 통해 구현된 메서드를 추가할 수 있는 방법이 생긴 것이다. 예제를 통해 한번 알아보자 1.default method java8 에 default method 가 추가 됐다. default method 가 추가된 이유는 기존 인터페이스들의 호환성을 위해서다. 특정 인터페이스에 메서드를 추가하면 해당 인터페이스를 구현하고 있는 모든 클래스의 변경이 필요하다. 그렇기 때문에 구현체가 있는 default 메서드를 정의하면 하위 클래스에서 오버라이드 할 필요가 없기 때문에 기존 인터페이스에 안전하게 추가할 수 있다. 아래는 인터페이스에 추가된 ..
- Total
- Today
- Yesterday