일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 1*1000
- 운동해서 광명찾자
- mysql not equal null
- 버전 문자열 비교
- pooled-lo
- load order
- getDateCellValue
- RootGraph
- createEntityGraph
- deserializer
- NamedEntityGraph
- yml
- fractional seconds
- sendFractionalSeconds
- 티스토리챌린지
- AuditingEntityListener
- @CreateDate
- MYSQL
- 오블완
- MSSQL
- Protecle
- mysql =
- @EntityListeners
- +9:00
- mysql equal null
- spring boot
- EmbeddedId
- getEntityGraph
- https
- apatch poi
- Today
- Total
목록전체 글 (95)
Hello
기준시간을 UTC로 사용하고 사용자가 설정한 타임존에 맞춰 시간을 표시하고 처리가 필요했다. ZonedDateTime, moment-timezone js 를 사용해 서버-클라이언트 처리한 내용을 간단하게 정리하려고 함. ZonedDateTime은 날짜-시간과 시간대 값을 가진 객체이다. ex) 2021-08-01T00:00+09:00[Asia/Seoul] 타임존 서버 : UTC 클라이언트 : 개별 타임존 시간 포맷은 'YYYY-MM-DDTHH:mm:ssZ' 사용. 클라이언트 -> 서버 클라이언트 클라이언트가 로드 될 때 설정한 타임존을 moment default timezone 설정 선택한 날짜-시간 값을 moment-timezone을 사용해 타임존 적용 format() 함수 사용 시 패턴을 입력하지 않..
어떤 이벤트가 생겼을 때 client ui를 업데이트가 필요했습니다. SSE(Server-Sent-Event)라는 것을 알게 되어 이를 공부한 내용을 간략하게 작성합니다. SSE는 단방향 통신으로 서버에서 전송한 데이터를 클라이언트는 받기만 할 수 있습니다. HTTP/2(100개)를 사용하지 않으면 SSE 는 열려 있는 최대 연결 수에 대한 제한이 있습니다. HTTP를 사용할 때 브라우저당 6개로 설정 되어 있습니다. 구독 //동일 도메인 구독 const eventSource = new EventSource('/api/subscribe/sse'); //다른 도메인의 이벤트 구독, URI와 옵션 지정 const eventSource = new EventSource('//example.com/api/subs..
아래구조와 동일한 객체 조회 시 lazy 로 동작해 n+1이 발생했다. 특정 쿼리문에서만 join을 사용해 관련된 테이블을 모두 조회해야할 필요가 있어, EntityGraph를 사용해 해결한 방법을 정리하고자 글을 작성합니다. 어떤 게임에서 건축물을 지을 때 해당 건축물은 여러 옵션을 갖고 있다. 건축물은 옵션을 가지며, 옵션은 실제 효과를 여러개 가질 수 있다. 옵션과 효과 객체를 n:m 매핑 테이블을 만들어 사용이 필요하다. Building 조회시 Option, OptionEffect, Effect를 가진 join 쿼리 적용 방법 @NamedEntityGraph 정의 @Entity @Table(name = "tb_building") @NamedEntityGraph(name = "building.opt..
유니크 컬럼에 중복값을 넣으려고 할 때, DataIntegrityViolationException이 발생해 db호출이 일어나는 메소드에서 Exception을 잡아 IllegalArgumentException으로 감싸 넘기려고 했는데 캐치 되지 않고 해당 에러가 리턴되었다. @Transactional public void addMemberPhone(MemberPhoneRequest memberPhone) { MemberPhone memberPhone = new MemberPhone(); ... try{ memberPhoneRepo.save(memberPhone); }catch (DataIntegrityViolationException e){ throw new IllegalArgumentException("..
@ManyToOne 관계 매핑 시 연관 테이블의 PK가 아닌 컬럼으로 관계 매핑 설정 시 ClassCastException이 발생하게 됩니다. 에러 내용을 보면 해결 방법이 나와 있어 문제 해결 하는 방법은 간단 합니다. 연관된 엔티티 객체가 Serializable를 구현하는 것 입니다. java.lang.ClassCastException: com.example.demo.ServerInfoEntity cannot be cast to java.io.Serializable 예시 테이블을 사용해 방법과 이유에 대해 간략히 설명합니다. FK 컬럼 조인 방법 @JoinColumn 조인할 컬럼명 referencedColumnName 명시 연관 엔티티 객체가 Serializable 구현 @Entity @Table(n..
, != 같이 안음 연산자 사용 시 Null 값은 제외하고 조회 하는 것을 알게되어 간단하게 정리하려고 합니다. ,!= 같지 않음 연산자 아래 테이블을 예시로 내용을 정리해보려고합니다. 예) 2000이 아닌 레코드 조회 : 4개의 레코드가 조회 될 것을 기대했으나, id 5만 조회가 되었습니다. 방법 1 null 값에 대한 조건을 포함 조회될 수 있도록 해야합니다. 논리 연산자 우선 순위에 따라 결과값이 달라질 수 있어 ()로 조건을 묶어주는 것이 좋습니다. SELECT * FROM tb_null_test WHERE (CODE IS NULL OR CODE 2000); 방법 2 NOT, 연산자를 사용해 비교하는 방법 null-safe 동일 성비교 연산자와 not 연산자를 사용해 2000이 아닌 값(null..
Spring Data JPA @Query를 사용해 write 쿼리 작성하는 방법을 정리합니다. 짧게 이야기하면 @Query 사용해 write 쿼리를 작성 할 때 @Modifing 어노테이션이 필요합니다. @Modifying docs를 보면 @Query 어노테이션을 사용해 정의된 메서드 쿼리에서 INSERT, UPDATE, DELETE, DDL 작성 시 필요하다고 설명되어 있습니다. 아래처럼 delete 쿼리 작성 후 호출 하게 되면 '해당 쿼리는 DML 작업을 지원되지 않는 에러가 발생합니다. @Query("delete from Test1 t where t.test3 is not null") void deleteByTest3IsNotNull(); ERROR JAVA 8 org.hibernate.hql.i..
gradle 기본 경로 : $USER_HOME \.gradle\caches\modules-2\files-2.1 ├── caches │ ├── 4.8 │ ├── 4.9 │ ├── ⋮ │ ├── jars-3 │ └── modules-2 ... 공식 홈페이지를 보면 modules-2에 공유 캐시( ex: 종속성 아티팩트 )로 구성된다는 내용이 있습니다. gradle 캐시 위치는 GRADLE_USER_HOME 환경 변수 값에 따라 다릅니다. gradle home을 변경해, 변경된 gradle home 기준으로 \.gradle\caches\modules-2\files-2.1에 생성되게 됩니다. + maven 기본 경로 : ~\.m2\repository intellij 수정 방법 1) Override 체크 후 lo..
자바에서 점으로된 문자열 비교해 소팅이 필요한 경우가 생겨 maven-artifact 라이브러리를 사용한 내용을 정리하려고 합니다. maven denpendency org.apache.maven maven-artifact 3.9.6 version compare test code public class VersionCompareTest { @Test void version_compare_test() { List list = new ArrayList(); for (int i = 0; i < 100; i++) { Test1 test1 = new Test1(); test1.setSeq(i + 1000); test1.setName("slot" + i); test1.setVersion((i / 50) + "." +..
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를 반환해야 하..