본문 바로가기

STUDY/Java

(17)
JPA | TIMESTAMP 저장 시간이 일치하지 않을 때.. JPA를 사용해 DB에 저장할 때, 시간이 다르게 저장된다.. 1. TimeZone변경 JVM의 TimeZone을 변경하는 방법 @PostConstruct public void started() { TimeZone.setDefault(TimeZone.getTimeZone("UTC")); } @PostConstruct는 스프링 부트가 실행 되면서 Bean설정이 완료 된 직후 실행된다. 2. properties 수정* spring.jpa.hibernate.jdbc.time_zone= Asia/Seoul로 설정한다. spring: jpa: hibernate: jdbc: time_zone: Asia/Seoul
JPA | 복합 키 (Composite Key) 사용하기 (@IdClass) JPA에서 식별자(@Id)를 둘 이상 사용하려면 별도의 식별자 클래스를 만들어야 한다. JPA는 복합 키를 지원하기 위해 @IdClass와 @EmbeddedId 두 가지 방법을 제공하는데 @IdClass는 관계형 데이터베이스에 가까운 방법이고 @EmbeddedId는 좀 더 객체지향에 가까운 방법이다. 출처: 김영한 저 자바 ORM 표준 JPA 프로그래밍 256p. @IdClass 엔티티 클래스에서 @IdClass애노테이션을 사용한다. USER라는 테이블의 기본키를 id와 regDate(가입일)을 조합하여 사용한다고 가정할 때, 엔티티 클래스를 아래와 같이 작성한다. @Id애노테이션을 가진 필드가 두 개 이상. 즉 복합키를 사용해야 하고, @IdClass()애노테이션에 복합 키를 매핑하기 위한 클래스를 지..
Java | SHA-256 SHA Secure Hash Algorithm 가장 널리 사용되는 암호화 해시 함수 중 하나 텍스트 혹은 데이터 파일에 대한 서명을 만드는 데 사용 Java에서 라이브러리 제공 SHA-256은 256bit(32bit)의 해시를 생성 224, 256, 384, 512bit 의 해시를 생성할 수 있음 단방향 함수로, 결과를 원래 값으로 해독할 수 없음 MessageDigest Java에서 제공하는 SHA-256해시를 위한 내장 클래스 MessageDigest는 MD5, SHA-1, SHA-256의 해시 함수를 제공한다. MessageDigest digest = MessageDigest.getInstance("SAH-256"); 해시 얻기 public static String encrypt(String str..
Java | AES-256 암/복호화 AES? AES(Advanced Encryption Standard): 고급 암호화 표준 암호화와 복호화에 동일한 키를 사용하는 대칭키 알고리즘방식 대칭키 방식을 사용하기 때문에 비대칭키 보다 빠른 속도 AES-128, AES-192, AES-256의 종류가 있음 (뒤에 붙은 숫자는 키의 길이(단위: bit)) Java에서는 AES 암/복호화를 위한 API를 제공하고 있다! (java.security, javax.crypto) AES 암/복호화에 필요한 것들 SecretKey 말그대로 암/복호화에 사용되는 key다. 종류(AES 128, 192, 256)에 따라 길이가 달라진다. private static final String SECRET_KEY = "fUjXn2r5u8x/A?D(G+KbPdSgVkYp..
Java | Excel 파일 생성하기 apache poi 라이브러리를 사용하면 엑셀파일을 읽고, 쓰기가 가능하다. 라이브러리 다운로드 및 추가 아래 라이브러리들이 모두 필요함..^-^ mvnrepository.com/ 인텔리제이 외부 라이브러리 추가 방법 커맨드(⌘) + ; 혹은 File - Project Structure... 엑셀 시트 작성하기 작성법은 매우 간단하다.. Workbook - Sheet - Row - Cell 순서로 생성, 추가 해주면 된다. workbook이 하나의 엑셀 파일로 생성된다. Workbook workbook = new XSSFWorkbook();sheet생성 Sheet sheet = workbook.createSheet("sheet name");row추가 (0부터 시작한다.) Row titleRow = she..
Java | 정규식으로 특정 문자 사이 값 추출하기 정규식은 너무 어렵다.. \b는 단어의 경계를 의미 ()괄호로 묶은 값은 group이다. matcher.group(2)는 (.*?)의 값을 의미한다. private String getDefaultValue (String str) { Pattern pattern = Pattern.compile("(\\b특정단어\\b)(.*?)(\\b특정단어\\b)"); Matcher matcher = pattern.matcher(str); if(matcher.find()){ // 정규식과 매칭되는 값이 있으면 return matcher.group(2).trim(); // 특정 단어 사이의 값을 추출한다 } return null; } 정규식 테스트 해볼 때 유용한 사이트 RegExr: Learn, Build, & Test ..
Java | Builder패턴 (Lombok @Builder) 빌더 패턴(Builder pattern)이란 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴이다. 출처: 위키백과 - 빌더패턴 빌더 패턴은 아래와 같이 구현할 수 있다. public class User { private int id; private String name; private String email; private String nickname; // getter 생략 (setter는 생성하지 않는다) // private 생성자 private User(Builder builder) { this.name = builder.name; this.email = builder.email; this.nickname = builder.nick..
Java | MultipartFile image width와 height 알아내기 private void checkImageSize(MultipartFile file) { try { BufferedImage bufferedImage = ImageIO.read(file.getInputStream()); int width = bufferedImage.getWidth(); int height = bufferedImage.getHeight(); System.out.println(String.format("width = %d height = %d", width, height)); } catch (IOException e) { e.printStackTrace(); } }