java
[JPA] native query 사용 시 enum을 변수로 하기 ( SpEL expression )
🙂 Native Query 란? JPQL을 사용해서 쿼리 메소드를 사용하는 것이 아닌 MySQL과 비슷한 형식으로 쿼리를 만들어 적용할 수 있다. 그러나, JPQL에서는 표준 SQL의 대부분의 기능을 지원하지만, 지원하지 못하는 문법들도 존재한다. ( ex. sub query ) 이때 Native Query를 사용하면 JPQL에서 지원하지 못하는 문법들을 사용할 수 있다. 🙂 Native Query 를 사용하는 방법 //-- JPQL @Query(value="SELECT M from Member M" ) //-- Native Query @Query(value="SELECT * from Member m", nativeQuery= true ) 🙂 Native Query에서 @Param에 Enum을 넣는 방법..
[JPA] JPA native query 사용시 dto mapping
보통 조인을 많이 사용하게 될 상황이 생기면 JPA Native query를 사용한다. 이 때, 조인되어지는 테이블들의 column 값을 사용해야하는 상황에는 Entity에 맵핑을 시켜줄 수 없는 문제가 있다. 이럴 때에는 바로 원하는 변수가 있는 DTO에 맵핑을 시켜주어야 하는데,, 어떤 방법들이 있을까? 1. Entity에서의 `@SqlResultSetMapping` 사용 @Entity @NamedNativeQuery( name = "find_books', query = "SELECT " + " 생략.... ", resultSetMapping = "book_dto" ) @SqlResultSetMapping( name = "book_dto", classes = @ConstructorResult( tar..
[F.Y.R] Jitter? ( Retry의 전략 )
맡고 있는 프로젝트에서 다른 서버와 통신을 하는 코드를 보던 중, 통신을 하는 서버에서 동시성 이슈로 재시도를 원하는 에러코드가 내려왔고, 이에 잠깐의 sleep을 한 후에 재시도하는 것을 볼 수 있었다. Retry? MSA구조에서는 서로 다른 서버와 통신을 할 일이 많다. 그렇기 때문에 서로 다른 서버와 통신할 때 실패율을 줄이는 것이 중요하며, 호출 재시도를 하며 실패율을 줄일 수 있다. 보통 Sleep을 해주는 이유는 동시에 요청이 왔을 때, 바로 재시도를 하게 된다면 동시성 이슈에 있어서 성공률은 떨어지기 때문이다. 그래서 보통은 Exponential Backoff Algorithm ( 백오프 ) 를 사용해야하는 걸로 알고 있었다. 1번째 재시도 : 1초 -> 2번째 재시도 : 2초 -> 3번째 ..
[Error] org.hibernate.LazyInitializationException: could not initialize proxy
😀 원인 파악 코드를 열심히 작성해서 리뷰를 받고, 즐거운 마음으로 라이브 배포를 했다.. 그러나 몇 분이 지나지 않고 error alert이 나오기 시작했고,,, 정말 어처구니 없는 실수를 했다는 것을 깨달았다. 에러 내용은 JPA에서 나온 오류였다.. org.hibernate.LazyInitializationException: could not initialize proxy 위와 같은 오류가 생긴 원인을 파악하기 위해서 구현한 부분을 다시 보았고, Entity 객체를 DTO 객체로 변경하기 위해 BeanUtils copyProperties로 간편하게 하려고 했던 부분해서 문제가 있다는 것을 발견할 수 있었다.. (괜히 빠르게 하려다가..) BeanUtils copyProperties란? 스프링에서 제..
[Netty] 차근차근 시그널링 서버 ( Signaling Server ) 만들기 ( feat. WebRTC ) - (1) 설계
💡 개요 WebRTC를 사용하기 위해서는 사용자의 연결 정보를 전달해주기 위한 시그널링 서버가 필요하다. 네티를 이용해 시그널링 서버를 개발해보자 시그널링 서버를 만들기 전에 우선 WebRTC가 시그널링 서버를 필요로 하는 이유를 알아보자 withseungryu.tistory.com/130 [WebRTC] Signaling Server ( 시그널링 서버 ) WebRTC에 대해서 이야기를 해봤는데 WebRTC를 유기적으로 잘 사용하기 위해서는 아래와 같은 서버가 필요하다. Signaling - Always needed NAT Traversal - need for production Media - depends on the app 이번.. withseungryu.tistory.com 🔍 설계 WebRTC를 ..
[WebRTC] Signaling Server ( 시그널링 서버 )
WebRTC에 대해서 이야기를 해봤는데 WebRTC를 유기적으로 잘 사용하기 위해서는 아래와 같은 서버가 필요하다. Signaling - Always needed NAT Traversal - need for production Media - depends on the app 이번 포스트는 Signaling Server에 대해 다뤄볼 것이다. 😃 Signaling Server란? 이전 글에서 알 수 있듯이 WebRTC란 사용자 간의 P2P Connection을 통해 Object를 교환하는 방식이다. 그런데 그냥 P2P Connection만 존재하면 다 통신이 가능해지는 것일까???? 물론 아니다! 우리는 상대방과 통신을 하기 위해서는 상대방(보낼 주체)이 누구인지를 먼저 파악해야 한다. 이를 위해 Sign..