본문 바로가기
반응형

Framework & Lib & API/스프링16

[스프링] @async 비동기 사용법 여러 작업을 하나의 요청으로 처리할때 많은 시간이 소요되는 경우가 있습니다. 작업의 선후관계가 중요하지 않고 각각의 작업들이 독립적인 상황이라면 이를 비동기로 처리하여 요청에 대한 시간을 절약하는것이 좋은 방법이 될 수 있습니다. 저의 경우에도, 채팅을 하는 어플리케이션에서 소켓을 통해 상대방과 대화하고 상대방이 메세지를 안 읽은 상태이면 이를 푸시알림을 보내주게끔 구현을 했었습니다. 허나, 푸시알림을 보내는 과정에서 시간이 상당히 소요되어 채팅을 하는데 메세지가 2~3초 뒤에 표시되는 현상이 나타났습니다. 따라서 이를 비동기를 통해 메인쓰레드에서 소켓을 통해 채팅하고 DB에 메세지를 넣는 작업을 하고 새로운 쓰레드에서 푸시알림을 보내게끔하여 요청에 대한 응답을 빠르게 할 수 있었습니다. 이런식으로 비동.. 2021. 2. 22.
[스프링] logback 중복 제거 스프링에서 로깅을 해주는 logback을 통해 로그를 찍고 있었는데 똑같은 로그가 굉장히 많이 찍혀서 당황한적이 있다. 혹시 무엇이 잘못되었나, 스케줄링 작업에서 여러번 로그가 찍힌것이 확인되었는데 혹시 쓰레드가 여러개 생성되서 똑같은 동작이 여러번 작동되었나 걱정했었는데, 로그내용을 자세히 보니 로그마다 내용이 달라지지 않고 똑같은걸 보니 같은 동작이 여러번 작동된것 같지는 않고 logback에 대해 알아보니 logger는 기본적으로 정의한 패키지의 상위로부터 모든 appender를 상속받는다고 합니다. 따라서 로거가 여러개 찍히는 경우가 생기곤합니다. 성능에는 큰 상관이 없지만, 아무래도 로그가 여러개 찍히는것이 보기는 좋지 않으므로 중복로그를 제거하려면 아래와 같이 additivity="false".. 2021. 2. 19.
웹소켓 허트비트 heatbeat 설정(소켓 연결 상태확인) 안녕하세요. 스프링프레임워크 환경에서 sockjs와 stomp로 채팅기능을 구현하고 있습니다. 실제 채팅 어플리케이션에서 사용하는 메시지를 상대방이 읽었는지 안읽었는지 읽음/안읽음 기능을 구현하기 위해 소켓 연결생성시 실행되는 메소드와 연결종료시 발생하는 메소드를 사용해서 구현하려고 했기데 소켓이 연결되고 종료되는 시점을 채팅창을 벗어나면 서버에서 바로 알아차려야합니다. 사파리를 제외한 모든 브라우저에서 채팅창을 벗어나는 순간 소켓을 종료시키지만 사파리의 경우에만 최대 1분 정도의 딜레이 시간이 있었습니다. 정확히 말하면 윈도우용 사파리에서만 딜레이가 있습니다. 맥과 아이폰 환경에서 최신 사파리를 사용하면 다른 브라우저와 마찬가지로 페이지를 벗어나는 순간 소켓이 종료됩니다. 현재 사파리에서는 윈도우용 사.. 2020. 11. 30.
RecoverableDataAccessException 커넥션을 잃어버렸을때 에러 안녕하세요. 얼마전 스프링을 개발하다 RecoverableDataAccessExceptoin 에러를 마주하게되었습니다. 에러내용을 살펴보니 org.springframework.dao.RecoverableDataAccessException: PreparedStatementCallback; SQL [select email, password, enabled from members where email=?]; The last packet successfully received from the server was 107,705,271 milliseconds ago. The last packet sent successfully to the server was 107,705,271 milliseconds ago. i.. 2020. 3. 22.
반응형