Back-end
[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..
[Spring Websocket] In Memory Broker vs External Broker
🔍 Message Broker란? Publisher로부터 전달받은 메세지를 Subscriber로 전달해줄 때 중간에서 메세지를 주고 받게 해주는 중간 역할 🔍 In Memory Broker란? Spring websocket에서 STOMP 프로토콜을 사용해서 웹소켓 기능을 구현할 때 STOMP는 Message Broker가 필요하다. 이 때 아무 설정 없이 Spring 환경에서 STOMP 프로토콜을 사용한다면 메세지 브로커로 In Memory Broker를 사용하게 된다. 그렇다면 하나의 서비스를 만들 때 In Memory Broker를 메세지 브로커로 사용해도 상관 없을까? 상관있다... 아래를 보면, In Memory 브로커의 단점들이 존재한다. 세션을 수용할 수 있는 크기가 제한되어 있다. 장애 발생..
[Spring Websocket] STOMP - convertAndSendToUser 사용법
STOMP란? 문자 기반의 송수신을 위한 문자 기반 메세징 프로토콜 convertAndSendToUser() 채널에 구독하고 있는 사용자들 중 모두에게가 아닌 특정한 사용자에게 메세지를 보낼 수 있도록 해주는 메소드 convertAndSendToUser(String user, String destination, Object payload) 이때 convertAndSend와 같이 두 번째와 세 번째 파라미터에는 채널과 보낼 데이터를 넣어야 하는 것을 알 수 있다. 그러나 처음에 convertAndSendToUser를 사용하면서 첫 번째 파라미터인 user에는 무엇이 들어가야 할지를 알 수 없었다. 파라미터 처음에는 username을 입력해주면 되지 않을까 싶었다. 그러나 다시 생각해보니 username은 ..
[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를 ..
[Netty] 블로킹 소켓과 논블로킹 소켓
소켓이란? 네트워크 상에서 동작하는 프로그램 간 통신의 종착점 ( wiki ) 데이터를 통신할 수 있도록 해주는 연결부이기 때문에 통신할 서버와 클라이언트 모두에 소켓이 필요 블로킹이란? 요청한 작업이 성공하거나 에러가 발생하기 전까지는 응답을 돌려주지 않는 것 즉 자신의 수행결과가 끝날 때까지 제어권을 갖고 있는 것 논블로킹이란? 요청한 작업의 성공 여부와 상관없이 바로 결과를 돌려주는 것 이때 요청의 응답값에 의해서 에러나 성공 여부를 판단한다. 즉 자신이 호출되었을 때 제어권을 바로 자신을 호출한 쪽으로 넘기고, 자신을 호출한 쪽에서 다른 일을 할 수 있도록 하는 것