반응형

 

Jasypt  소개

 

Jasypt(Java Simplified Encryption)는 자바 언어용으로 설계된 간단한 암호화 도구입니다.

이 도구는 주로 개발자가 데이터를 보호하고 보안을 강화하기 위해 사용됩니다.

Jasypt는 다양한 암호화 기술을 제공하며, 주로 데이터베이스 비밀번호, 사용자 인증 정보, 설정 파일 등을 보호하는 데 사용됩니다.

 

Jasypt 주요 특징


1. 간단한 사용법: Jasypt는 사용하기 쉽고 간단한 API를 제공하여 개발자가 쉽게 암호화 및 복호화를 수행할 수 있습니다.

2. 다양한 알고리즘 지원: Jasypt는 다양한 암호화 알고리즘을 지원합니다. 이는 강력한 보안을 위해 필요한 경우에 선택할 수 있습니다.

3. 다양한 통합 옵션: Jasypt는 다양한 플랫폼과 프레임워크에서 사용할 수 있습니다. 예를 들어, Spring Framework와의 통합이 강력하며, 설정 파일에서 암호화를 쉽게 처리할 수 있도록 지원합니다.

4. 다양한 운영 환경 지원: Jasypt는 Java EE 및 Java SE와 같은 다양한 자바 기반 환경에서 사용할 수 있습니다.

5. Jasypt의 기본 동작은 텍스트 기반의 데이터를 암호화하고 복호화하는 데에 초점을 맞추고 있습니다. 예를 들어, 데이터베이스 연결 문자열이나 프로퍼티 파일에 저장된 비밀번호를 암호화하여 보안을 강화할 수 있습니다.

예를 들어, Spring에서 Jasypt를 사용하여 설정 파일에서 암호화된 비밀번호를 관리할 수 있습니다. 이를 통해 개발자는 민감한 정보를 안전하게 보호할 수 있습니다.

 

 

Jasypt 사용 예

 

1. 의존성 추가 : pom.xml 파일에 Jasypt의 의존성을 추가합니다.

<dependency>
    <groupId>org.jasypt</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>3.0.4</version>
</dependency>

 

 

 

 

2. Configuration 작성 : 복호화 하기 위한 설정을 합니다.

package co.kr.api.config;

import org.jasypt.encryption.StringEncryptor;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimplePBEConfig;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
import org.jasypt.salt.RandomSaltGenerator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

@Configuration
@Component
@PropertySource("classpath:application.properties")
public class JasyptConfig {

	@Autowired
	private Environment environment;

	@Bean("jasyptStringEncryptor")
	public StringEncryptor stringEncryptor() {
		
		SimpleStringPBEConfig config = new SimpleStringPBEConfig();
		config.setPassword(environment.getProperty("pwdKey")); // 암호화 키 (암호화 키의 옵션값 - JVM 옵션)
		config.setAlgorithm("PBEWithMD5AndDES"); // 암호화 방식
		config.setKeyObtentionIterations("1000"); // 암호화 키를 얻기위해 반복해야하는 해시 횟수
		config.setPoolSize("1"); // 암호화 요청의 pool 크기 (설정하지 않을 경우 NULL)
		config.setProviderName("SunJCE");
		config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
		config.setStringOutputType("base64"); // 암호화 이후 어떤 형태로 값 받을지
		((SimplePBEConfig) config).setSaltGenerator(new RandomSaltGenerator());
        
        	PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
		encryptor.setConfig(config);
		return encryptor;
	}
}

 

 

 

 

3. 암호화 값 생성 : 암호화 된 문자열을 생성하기 위한 Class 입니다.

package co.kr.api.util;

import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;

public class JasyptConfigUtils {

	public static String jasyptEncoding(String value) {
		String key = "password"; // 암호화 키
		StandardPBEStringEncryptor pbeEnc = new StandardPBEStringEncryptor();
		pbeEnc.setAlgorithm("PBEWithMD5AndDES");
		pbeEnc.setPassword(key);

		return pbeEnc.encrypt(value);
	}

	public static void main(String[] args) {
		String dbPwd = "암호화 할 대상";
		System.out.println(jasyptEncoding(dbPwd));
	}
}

 

main 함수 실행 : 해당 class 에서 오른쪽 마우스 우클릭 - Java Application 선택 - Console에서 값 확인

 

 

 

 

4. 암호화 문자열 추가 : application.properties 또는 application.yml 파일에 암호화 관련 설정을 추가합니다.

 - 원본 값 대신에 ENC(암호화된문자열) 형식으로 속성 값을 설정합니다.

 - Jasypt는 해당 값을 암호화하고 자동으로 복호화하여 사용합니다.

# DB 비밀번호 
spring.datasource.password=ENV(jYEEDA4/mHdSKBdVos20gxj6nKzQFD/WJjREjfCo5OE=)

 

 

 

 

5. Spring Boot 실행 : JVM 속성값으로 암호화 KEY를 가져와 실행합니다.

프로젝트 우클릭 - Run As - Run Configurations - 해당 프로젝트의 VM arguments에 작성

 

728x90
반응형
반응형

커밋로그의 연간 자료가 필요하게 되어 찾아보던 중 파일로 export 하는 방법을 찾게 되어 기록합니다.

git bash를 이용하여 커밋로그의 내역을 파일 다운로드 해보겠습니다.

 

 

1. git bash에서 프로젝트 폴더로 이동합니다.

프로젝트 폴더로 이동

 

2. git log 명령어로 파일 내보내기 방법 확인

명령어로 파일 내보내기의 옵션이 다양합니다.

옵션을 확인하는 여러가지 방법도 확인해 보았습니다.

 

 git Documentation

※ git log Documentation (https://www.git-scm.com/docs/git-log/2.27.0)

 

git log Documentation

 

git log -help

git log -help로 option확인해보기

 

 

git log --help
(해당 커맨드를 입력하면 기본설정 브라우저에서 html 파일이 열립니다.)

 

 

3. git log 명령어로 파일 내보내기
git log --all --after="2021-01-01" --date=format:'%Y-%m-%d %T' --pretty=format:%an,%ad,%s > ./log-history.csv

 

git log 명령어 파일 내보내기 결과

 

 

프로젝트 폴더 위치에 파일이 생성되었습니다.

내용을 한번 확인해 볼까요.

먼저 파일탐색기에서 해당 프로젝트 폴더에 만들어진 파일은 확인하였습니다.

파일탐색기로 프로젝트 위치에서 확인

 

 

 

다음은 csv 파일의 내용 입니다.

엑셀로 파일을 열어 보았더니 한글이 다 깨집니다.😱

내보내기 파일 내용

 

 

파일의 인코딩을 한번 확인해 봅시다.

파일 오른쪽마우스 클릭 > 연결 프로그램 > 다른 앱 선택
메모장 한번만 선택

 

 

메모장에 csv 파일을 열어보면 구분자는 ","으로 메모장에서는 한글 깨짐없이 잘 보입니다.

인코딩을 확인해보니 UTF-8이라고 하네요.

메모장에서 인코딩 확인

 

 

엑셀에서 UTF-8의 한글내용을 확인 할 수 있는 방법도 많이 있습니다.

저는 Notepad ++을 이용해서 파일을 열고

구분자 ","를 탭(Tab)으로 치환해서 엑셀파일에 붙여넣기 하는 방식을 사용했습니다.

Notepad++ 모두 바꾸기

 

 

바꾸기 한 내용을 엑셀에 붙여봅니다.

 

 

 

커밋로그의 설명 부분에 구분자 ","가 포함 되어 있을 경우 탭으로 치환되었을 겁니다.

그래서 설명부분을 엑셀의 함수(CONCAT)를이용하여 문자열을 이어주었습니다.

엑셀 함수 concat
엑셀 수식 concat

 

 

 

 

 

엑셀파일로 생성 완료 !!

엑셀파일내용

 

 

 

내보기한 파일은 GIT의 커밋로그 백업용도로 사용 할 수 있을 것 같습니다.

하나의 프로젝트의 커밋로그 전체를 엑셀파일로 확인 해보니 내용 파악이 잘 되는 느낌적인 느낌이었습니다.🤣

커밋단위를 더 세분화하고 커밋설명을 더 상세히 담아야 겠다는 생각이 들었습니다.

 

 

 

 

오늘도 한가지 배웠습니다~

728x90
반응형
반응형
1. 전화번호 마스킹

전화번호 가운데 자리 끝2자리 마지막 자리 처음2자리 마스킹 처리

예) 01012341234 -> 01012****34

(10자리 또는 11자리 번호가 아닐때는 마스킹 하지않음)

String t1 = "01012341234";

String w1 = null;
String w2 = null;

if (t1.length() == 11) { // 01012341234 -> 01012****34
    w1 = t1.substring(0, 5);
    w2 = t1.substring(9, t1.length());

    System.out.println(w1 + "****" + w2);

} else if (t1.length() == 10) { // 011123123 -> 0111****23
    w1 = t1.substring(0, 4);
    w2 = t1.substring(8, t1.length());

    System.out.println(w1 + "****" + w2);

} else {
    System.out.println(t1);
}

전화번호 마스킹 결과

 

 

 

2. 이름 마스킹 하기

예) 홍길동-> 홍*동, 원빈 -> 원*, 나라사랑-> 나*사랑

(1자리는 마스킹 하지 않음)

String t1 = "홍길동";

String w1 = null;
String w2 = null;

if (t1.length() >= 2) { 
    w1 = t1.substring(0, 1);
    w2 = t1.substring(2, t1.length());

    System.out.println(w1 + "****" + w2);

} else {
    System.out.println(t1);
}

이름 마스킹 결과

 

 

 

 

 

 

 

 

주의: 입력값은 null 체크 필요!!

728x90
반응형
반응형
데이터베이스 전체 백업
[root@localhost ~]# mysqldump -u [아이디] -p[패스워드] --all-databases > [백업파일명].sql

 

데이터베이스 명 지정 백업
[root@localhost ~]# mysqldump -u [아이디] -p[패스워드] [DB명] > [백업파일명].sql​

※ -p 옵션 : 패스워드는 -p와 띄워쓰지 않고 붙여서 사용한다. 

 

 

서버에서 자동 백업 

1. DB 백업 실행 스크립트 파일 생성 

[root@localhost backup]# vi backup_db_daliy.sh
#!/bin/bash

# 오늘일자
TODAY=`date +%y%m%d`

# 백업폴더경로
BACKUP_DIR=/data/backup/

# 백업실행
mysqldump -u [아이디] -p[패스워드] [DB명] > $BACKUP_DIR"db-bakcup_"$TODAY.sql

# ctime속성 기준 +3 기간이 지난 백업파일 삭제
find $BACKUP_DIR -ctime +3 -exec rm -f {} \;

2. 스크립트 실행파일 권한부여

[root@localhost ~]# chmod 711 backup_db_daliy.sh

실행권한 확인

3. 자동 실행 등록(crontab)

[root@localhost ~]# crontab -e
# 매일 1시 실행
0 1 * * * /data/mysql/backup/backup_db_daliy.sh

작성 후 저장

 

저장 후 나타나는 메시지

 

4. 등록확인

[root@localhost ~]# crontab -l

crontab 등록 확인

 

 

참고사이트 : https://foxydog.tistory.com/94

 

 

728x90
반응형
반응형

 

 

 

 

Rest Template를 이용하여 file type의 데이터를 POST 전송하는 소스입니다.

MultipartFile 파일을 resource()로 requestBody 담아야합니다.

@Controller
@RequestMapping(value = "/image-file")
public class ImageFileController{

	@Autowired
	private RestTemplate client;
	
	@RequestMapping(method = RequestMethod.POST)
	public @ResponseBody String uploadImage(@ModelAttribute MultipartFile uploadFile) {

		MultiValueMap<String, Object> requestBody = new LinkedMultiValueMap<>();
		requestBody.add("file", uploadFile.getResource());
        
        	String apiUrl = "http://www.apixxx.xx.xx";
        	HttpHeaders headers = new HttpHeaders();
        	headers.setContentType(MediaType.MULTIPART_FORM_DATA);
        
        	client.postForEntity(apiUrl, new HttpEntity<>(requestBody, headers), ResData.class).getBody();
        
		return "success";
	}
}

@Data //lombok
class ResData {
	private String code;
	private String value;
}

 

참고 사이트 : https://spring.io/blog/2009/03/27/rest-in-spring-3-resttemplate

 

REST in Spring 3: RestTemplate

<p>In an earlier <a href="http://blog.springsource.com/2009/03/08/rest-in-spring-3-mvc/">post</a>, I blogged about the REST capabilities we added to Spring @MVC version 3.0. Later, Alef <a href="http://blog.springsource.com/2009/03/16/adding-an-atom-view-t

spring.io

 

 

 

728x90
반응형
반응형

Jackson 이란?

- JAVA 대표적인 JSON 라이브러리

- 다른 형식의 데이터(XML, CSV)를 지원하는 data-processing 툴

- annotation 방식으로 사용, 각종 문서화와 유효성 체크 가능

- 스트림 방식으로 속도가 빠르고 유연

 

Object Mapper

Jackson objectmapper는 Java 오브젝트와 JSON 간에 직렬화, 역직렬화를 해주는 역할을 합니다.

 

사용예제

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(Include.NON_NULL); // NULL 제외
objectMapper.enable(SerializationFeature.WRAP_ROOT_VALUE); // @JsonRootName 애노테이션 사용

JsonSample jsonSample = new jsonSample('sampleId');
objectMapper.writeValueAsString(jsonSample);

@JsonRootName(value="jsonRootName")
class JsonSample{
    private String id;
    
    public JsonSample(String _id){
    	this.id = _id;
	}
}


// @JsonRootName, SerializationFeature.WRAP_ROOT_VALUE 적용 전
{
	"id" : "sampleId"
}

// @JsonRootName 적용 전, SerializationFeature.WRAP_ROOT_VALUE 적용 후
{
	"jsonSample":{
    	"id" : "sampleId"
    }
}

// @JsonRootName, SerializationFeature.WRAP_ROOT_VALUE 적용 후
{
	"jsonRootName":{
    	"id" : "sampleId"
    }
}

 

728x90
반응형
반응형

다른 API를 호출 하는 서비스가 필요하게 되어 

간단한 spring boot 만들어 보았습니다.

 

Spring Starter Project 생성

Create a project 클릭
Spring Boot > Spring Start Project 선택 > Next
Next 클릭 (Java는 1.8선택했음)
Spring Web 선택 > Next
Finish

Project 생성 후 java build path 설정

Project > Properties
Java Build Path 선택 > JRE System Library 선택 > Edit
JavaSE-1.8 (jre) 선택 > Environments 클릭
Installed JREs 선택 > Edit
개발환경(PC)에 설치 된 폴더 선택 > Finish
폴더 선택 후 Apply and Close

서비스 시작해보기 

DemoApplication.java 오른쪽마우스 클릭 > Run As > Spring Boot App

시작을 확인 하기 위한 Console 로그 창이 안보일 경우

Window > Show View > Consle

 

8080포트로 웹 서비스 시작 됨
브라우저에 8080 포트로 확인해보면 서비스는 시작 되었지만 index.html 파일이 없어서 페이지 나타나지 않음

 

index.html 추가 하기

서버는 구동 되었지만 표현할 페이지가 없으니 추가해보기

src/main/resources/static 폴더에 index.html 파일 생성
HTML 키워드로 검색해서 WEB > HTML File 선택 후 Next
index.html 생성
생성완료

index.html 파일 생성 후 서비스 재시작 및 확인

브라우저에서 index.html 페이지 확인

 

 

 

STS를 이용해서 프로젝트 만드는 법은 간단하고 아주 쉬움!

끝!

728x90
반응형
반응형

기본적인 게시판 사이트라도 리스트와 input, 버튼이 필요합니다.

디자인에 전혀 감각이 없으니 부트스트랩을 사용해서 그럴싸 하게 만들어 보려고 합니다.

 

부트스트랩 설치
npm install --save bootstrap

Visual Studio Code 터미널에 명령어를 입력하여 부트스트랩 설치

 

import "bootstrap/dist/css/bootstrap.min.css"
import "bootstrap"

main.js 파일에 부트스트랩 라이브러리, css import 코드 추가 후 저장

 

참고사이트: https://getbootstrap.kr/docs/5.0/getting-started/download/

 

다운로드

Bootstrap을 다운로드하여 컴파일된 CSS 및 JavaScript, 소스 코드를 얻거나 npm, RubyGems 등과 같은 즐겨쓰는 패키지 관리자를 사용해서 포함시키세요.

getbootstrap.kr

 

준비 끝.

728x90
반응형

+ Recent posts