일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 오블완
- NamedEntityGraph
- mysql =
- @CreateDate
- 버전 문자열 비교
- 운동해서 광명찾자
- mysql equal null
- Protecle
- apatch poi
- pooled-lo
- yml
- MSSQL
- 티스토리챌린지
- RootGraph
- load order
- +9:00
- https
- fractional seconds
- getDateCellValue
- createEntityGraph
- AuditingEntityListener
- sendFractionalSeconds
- mysql not equal null
- spring boot
- EmbeddedId
- 1*1000
- getEntityGraph
- @EntityListeners
- MYSQL
- deserializer
- Today
- Total
목록java (20)
Hello
Auditing는 '감사하다' 의미를 갖고 있습니다. 엔티티의 시간 데이터가 변경돨 때마다 입력/수정 코드를 구현해야한다. 하지만, JPA Auditing를 사용해 공통으로 처리할 수 있습니다. 1. 표준 JPA를 사용해 구현하는 방법 2. Spring Data JPA를 사용해 구현하는 방법 표준 JPA를 사용 JPA에는 Auditing(감사) API가 명시적으로 포함되어 있지 않지만, 엔터티 수명 주기 이벤트를 사용하여 이 기능을 구현할 수 있습니다. + https://www.baeldung.com/jpa-entity-lifecycle-events @PrePersist, @PreUpdate 등 jpa 엔티티 수명 주기 이벤트를 목적에 맞게 사용할 수 있습니다. 콜백 메서드는 항상 void를 반환해야 하..
ajax 통신 할 때 json 구조를 사용하는 경우가 자주 있다 이때, string to enum, string to date, number to boolean 등 데이터 타입 변환이 필요한 경우가 있습니다. 이 때 상황에 따라 개발자는 custon serializer, deserializer를 작성해서 사용할 수 있습니다. pom.xml com.fasterxml.jackson.core jackson-databind 아래 abstract class를 구현해 사용할 수 있습니다. com.fasterxml.jackson.databind.JsonSerializer com.fasterxml.jackson.databind.JsonDeserializer number to boolean 예시 Serializer im..
Java8 기준 MultipartFile을 받아 InputStream으로 문자열로 변환하는 방법을 정리 1. InputStream의 read()를 사용해 문자열로 변환하는 방법 -available() 현재 읽을 수 있는 바이트 수 -read(byte[]) byte[]만큼의 데이터를 읽어서 매개변수에 저장하고 읽은 바이트 수 반환 private String readFileToContents(MultipartFile file) throws IOException { try (InputStream is = file.getInputStream()) { byte[] buf = new byte[is.available()]; int read = is.read(buf); return new String(buf, 0, r..
서킷 브레이커 란 예상치 못한 장애(네크워크 이슈, 서버 다운 등)가 발생해 어떤 원격 서버 하나가 요청에 응답하지 못하는 상태일 때 클라이언트는 Timeout이 될 때 까지 응답을 기다리거나 무의미한 요청을 보내며 자원을 낭비하게 될 것입니다. MSA(Microservice Architecture)에서는 이 클라이언트가 또 다른 누군가의 서버가 될 수도 있는데요. 그렇다면 이 서버의 클라이언트 역시 똑같은 문제를 겪게 될 것입니다. 이렇게 장애가 계속 전파되며 한 원격 서버에서 발생한 장애가 모든 시스템에 큰 영향을 줄 수 있습니다. 이런 문제를 해결하기 위해 등장한 개념이 바로 '서킷 브레이커(circuit breaker)'입니다. 서킷 브레이커 패턴은 Michael Nygard의 저서 Release..
@Embeddable, @EmbeddedId를 사용해 일대일 조인테이블 Entity 만드는 방법을 간단하게 정리합니다. @Entity public class Buff { @Id @GeneratedValue private Integer id; private Integer type; private Integer value; } @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; } @Entity public class BuffUser { @EmbeddedId private BuffUserPk id; @MapsId("userId") @ManyToOne @JoinColumn(name ..
GenerationType.enum JPA는 기본키 생성 전략의 타입을 정의한 enum을 제공합니다. AUTO(default) JPA 제공자가 DB에 대해 적절한 전략을 선택 IDENTITY 데이터베이스 auto-increment 의존 JPA는 insert를 수행한 후 또는 트랜잭션 커밋 시 기본 키 값을 할당 MySQL, SQL Server, PostgreSQL, DB2, Derby, Sybase 지원 SEQUENCE 데이터베이스 SEQUENCE 를 사용해 기본키 생성 트랜잭션 커밋 되고 EntityManager.persist() 호출 후에 기본키를 생성 Oracle, PostgreSQL, DB2 지원 TABLE 키 생성 관리 테이블을 만들어서 SEQUENCE처럼 사용 EntityManager.pers..
Excel 빈값 처리 Row.MissingcellPolicy 클래스는 null 및 빈 셀의 경우 다른 가능한 정책을 지정하는 데 사용한다. Row 클래스는 3개의 final MissingCellPolicy 필드를 갖고 있다. /** Missing cells are returned as null, Blank cells are returned as normal */ public static final MissingCellPolicy RETURN_NULL_AND_BLANK = new MissingCellPolicy(); /** Missing cells are returned as null, as are blank cells */ public static final MissingCellPolicy RETURN_..
데이터 포멧이 미국시인 데이터를 받아 한국시로 변환해 처리해야하는 일이 있었다. 단순하게 미국시+8을 생각했는데 ST(Summer time) 혹은, DST(Daylight saving time)라고 하는 시간제가 적용된 시간 처리가 필요했다. 먼저 DST에 대해 알아볼 필요가 있다. 하절기에 표준시를 원래 시간보다 한 시간 앞당긴 시간을 쓰는 것을 말한다. 필요하다면 링크를 통해 DST사용 국가 확인 후 적용하면 된다. 2023년 DST는 2023년3월12일 - 2023년11월05일에 종료된다. 여름에는 오전 2시부터 시작되는데 시계는 1시간 당겨쓰게 되어 오전 3시부터 시작되고, 가을에는 시계가 오전 2시부터 시작되어 당겨쓴 1시간을 반납해 1시로 되돌아 갑니다. 즉, 2023-03-12 02:00:0..
엑셀에서 날짜를 읽어 db 저장 후 조회 시 날짜값이 다르게 들어갔다는 이슈를 전달 받았다. 디버깅을 해보니 엑셀은 아래와 같은 시간인데 실제로 읽은 데이터는 다르게 읽혀 굉장히 당황 스러웠다. 구글링을 해보니 엑셀이 밀리초 없이 날짜 시간 값을 표시하면 내부적 으로 초로 반올림해 날짜를 표시한다는 글이 있어 확인을 해보니 getDateCellValue() 내부적으로 getNumbericCellValue()를 호출해 Date 객체를 만드는데 이 때 millisecond 값이 995로 들어가서 59초로 만들어지게 된다. 그래서 14:20을 기대했으나 14:19:59라는 결과를 얻게 된다. 그래서 자바에서도 반올림을 해 처리를 해야 하는 것을 알게 되었다. getDateCellValue() 에서 DateUt..
옵저버 패턴이란 한 객체의 상태가 바뀌면 의존하고 있는 모든 객체에 변경됨을 알려주는 일대다 의존성 관계를 정의한다. 주제(subject) / 옵저버(observer)로 표현한다. 두 관계는 느슨하게 결합되어있다. 주제는 옵저버가 인터페이스만 갖는다. 내부가 어떻게 구현되어있는지는 알지 않는다. 주제는 옵저버 인터페이스를 구현한 객체라면 새로 구상된 옵저버 클래스를 추가 할 수 있다. 서로 느슨한 결합이기 때문에 구현이 바뀌어도 주제 / 옵저버 구현만 되어있다면 영향을 미치지 않는다. 예) 유튜브 채널을 구독했다면 새로운 영상이 등록 되었을 때 알람을 보낸다. 채널을 구독한 사람들은 새로운 영상이 올라왔다는 알람을 받게 된다. 예) 집을 판매하기 위해 여러 부동산에 등록한다. 집을 판매하게 되면 부동산에..