본문 바로가기

프로젝트/협업 프로젝트(2023.12.18-2024.01.25)20

[Key Word 개발기] 친구 검색 쿼리 개선기 최근 인덱스에 대해서 공부하다가 프로젝트를 생각해보니 검색 쿼리 속도 개선을 하면 좋을 거같아서 테스트하는 도중에 좋은 개선사항이 있어 적어본다. 쿼리 수정기 해당 프로젝트에서 친구관련 리스트를 가져올때 총 3가지의 경우가 존재한다. 1. 내가 친구한테 친구를 요청한 경우 2. 친구가 나에게 요청한 경우 3. 이미 친구인 경우 1,3번의 경우 밑에 코드를 이용한다. @Query("SELECT f.friend.memberId FROM Friend f JOIN f.friend friend JOIN f.memberRequest memberRequest " + "WHERE memberRequest.memberId = :memberRequestId AND f.status = :friendStatus ORDER B.. 2024. 3. 11.
[Key Word 개발기] Redis pub/sub 실시간 알림 적용기 이전 블로그에서 sse와 ConcurrentHashMap을 이용하여 실시간 알림을 구현해봤다. 그러나 ConcurrentHashMap은 문제점이 존재한다. 스케일 아웃시 코드가 제대로 동작하지 않는다. 그 이유는 SseEmitter객체를 서버의 메모리에서 저장하고 있기때문이다. 예를 들어 A는 was1에 접속했고 B는 was2에 접속했다. 앞서 말했듯이 SseEmitter객체는 서버의 메모리에 저장하고 있기때문에 A가 B에게 알림을 보낼 수 없다. 이 문제를 해결하기 위한 방법이 Redis pub/sub이다. Redis pub/sub 위의 그림같이 레디스 pub/sub기능을 제공한다. 특정 채널을 구독한 subscriber들에게 메세지를 전달하는 것이다. 이 구조를 통해 scalueout된 모든 애플리케.. 2024. 2. 9.
[Key Word 개발기] Server-Sent Events ?? 알림기능?? 협업프로젝트가 마무리 되었지만 아직 알림기능이 구현이 안되었다. 그래서 알림 담당 팀원분이 데모데이끝나고 알림기능을 구현하시고 계시는데 어려우시다고 하셨다.물론 나도 개인프로젝트때 반만 이해하고 했던지라... 좀 초반에 개념을 이해하기 어렵다는 걸 알고 있었다.. 그래서 팀원분께 저도 공부하고 있을테니 공부계속하시라고 일단 말씀드리고 나도 개인프로젝트 리팩토링도 할겸 sse에 대해서 공부하게 되었다. HTTP 다 알고 있겠지만 HTTP는 비연결성 프로토콜이다. 즉 한번 연결되고, 요청과 응답을 주고 받으면 끝난다.(연결이 끊긴다) 뿐만 아니라 HTTP는 클라이언트 - 서버 아키텍처를 따른다. 음..그니까 서버가 클라이언트의 요청을 수동적으로 기다린다. 만약 클라이언트가 서버에 요청을 보내면 서버는 요청에.. 2024. 2. 8.
[Key Word 개발기] maria db 대소문자 문제 우리 프로젝트에 mariadb를 사용했는데 로컬에서 어플리케이션을 실행해보니 갑자기 테이블이 없다고.. 오류가 나왔다... 뿐만 아니라 배포한 상태에서도 아래의 오류가 나왔다. Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table [테이블 명] 문제상황 그래서 찾아보니 리눅스 환경의 경우 db에서 대솝문자를 구분하게 설정하여 설치되어 있을 수도 있다고 한다. 처음 들어보는 이야기다... 그냥 항상 잘되서 아무 문제 없을 줄 알았는데... 그래서 다음 명령어를 통해 대소문자를 구분하는 지 확인 하였다 show variables like 'lower_case_table_name'; Valu.. 2024. 1. 25.
[Key Word 개발기] 스프링 이벤트 적용하기 갑자기 배포를 해야해서 이 기능은 적용한지 좀 오래됬는데 지금에서야 쓰는 나... 스프링 이벤트..?? 협업프로젝트를 진행하면서 S3를 이용해서 프로필 이미지를 저장하고, 삭제, 수정하는 기능을 도입했다. 이미지 삭제의 경우 수정할때 사용하는데 과연 삭제와 수정이 같은 트랜젝션안에 있어야하는 가에 대해 고민하게되었다. 내 생각의 경우 다른 트랜젝션이라고 생각했다. 그 이유는 s3에서 이미지 삭제 실패했다고 해서 핵심 로직에 큰 영향을 주지 않기 때문이다. 이미지 수정에만 성공하면 s3쪽에 이미지가 저장되고 db의 내용도 잘 변경된다. 그렇다면 이미지 삭제에 에러가 났다고 롤백하는게 좋은 방향일까?? 라고 질문을 던졌을때 좋은 방향은 아닌것같았다. 그래서 도입하게된 스프링 이벤트! 스프링 이벤트를 도입하게.. 2024. 1. 21.
[Key Word 개발기] 젠킨스 파이프라인 스크립트 형상관리 현재 파이프라인 스크립트를 젠킨스 쪽에서 수정하고 배포하고 있다. 그러다보니 수정이 필요할때마다 젠킨스에 들어가야하고 변경사항에 대해서 매번 따로 기록해야하는 번거로움이 생겼다. 그래서 파이프라인도 형상관리를 할 수 없을까 고민하게되었다. 젠킨스 형상관리 젠킨스쪽에서 구성에서 가면 pipeline script scm이라는 부분이 있다. 여기서 scm이란?? GIT처럼 변경사항을 추적하고 통제하는 것을 말한다. 젠킨스는 pipeline script scm을 통해 파이프라인 스크립트를 형상관리를 지원하고 있었다. 형상관리를 통해 젠킨스 서버와 독립적으로 깃에서 파이프라인 스크립트를 관리할 수 잇었다. 따라서 스크립트에 문제가 발생한다면 이전 스크립트를 사용할 수 있게 할 수 있다. 깃 레포지토리 파이프라인 .. 2024. 1. 21.
728x90