TIL 15주차

이상인·2023년 8월 21일
0

8월 21일

웹브라우저에 알림을 어떤 방식으로 구현하는 것이 좋을까?
후보는 SSE, WebSocket, FCM이었다.

처음에는 SSE를 통해 구현할 계획을 세웠다.
설정이 간편하고 단방향 통신방식을 이용하고 싶었기 때문이다.
하지만, 사용자가 접속중이지 않을 경우 알림을 대기시켜뒀다가 보내야 하는 점과 잘 사용되지 않는다는 점으로 인해 계획을 변경하기로 결정하였다.

WebSocket 역시 연결을 유지하며 사용해야 하기에 최종적으로 FCM을 사용하기로 결정하였다.

FCM은 사용자가 웹 페이지를 이용하지 않을 때에도 푸시기반 알림을 보낼 수 있으며 다양한 플랫폼에서 사용 가능하기 때문에 좋은 선택지가 된 것 같다.

8월 22일

FCM 기반의 알림기능을 구현하는데 시간이 소비된 부분은 최신버전의 의존성을 주입받지 않은 것이었다.
이로 인해 버전이 올라가며 사라진 message.getToken 메서드를 사용하여 토큰을 받아오지 못하였다.
공식문서를 참고하여 getToken 메서드로 변경이 되었음을 찾아 해결하였다.

firebase의 설정을 초기화하는 initializeFirebaseApp 메서드는 빈으로 등록할 필요가 없었다.
이처럼 initializeFirebaseApp()' is never used와 같은 경고메시지가 나타나는 경우에도 문제가 없을 수 있으니 자동완성기능을 무분별하게 사용하면 안된다.

엑세스키와 시크릿키 등 코드에 직접 포함하면 안되는 민감한 정보는 환경변수로 주입받는 등의 방법으로 사용해야 한다.

8월 23일

검색기능 구현 방식 후보

  1. Spring Data JPA의 Query Methods
  • 장점
    • 간단하고 직관적이다
    • 메서드 이름으로 검색 기능을 표현하여 가독성이 좋다.
  • 단점
    • 복잡한 쿼리를 표현하기 어렵다
    • 동적인 검색 조건을 다루기 어렵다
  1. JPQL (Java Persistence Query Language)
  • 장점
    • 객체 간의 관계를 고려한 검색 가능
    • 일부 쿼리 튜닝 가능
  • 단점
    • 쿼리가 문자열로 작성되어 컴파일 타임에 오류를 잡아내기 어렵다.
    • 복잡한 쿼리를 작성할 경우 가독성이 낮아질 수 있다.
  1. Specification과 Criteria
  • 장점
    • 동적인 검색 조건을 쉽게 다룰 수 있다.
    • 복잡한 검색 기능을 구현할 수 있다.
    • 안전한 쿼리 작성이 가능하다.
  • 단점
    • 복잡한 쿼리 조합에 대한 코드가 비교적 복잡할 수 있다.
    • 일부 코드 중복이 발생할 수 있다.

도입 이유
유저가 원하는 내용의 게시글을 골라서 볼 수 있는 편의성을 제공하기 위함

문제 상황
검색기능을 구현하는 방법 중 현재 게시판 상황에 맞는 효율적인 방법이 필요

해결 방안
1안) Query Method
간단하고 직관적이며 가독성이 좋다.
복합한 쿼리의 표현, 동적인 검색 조건을 다루기 어렵다.

2안) JPQL
객체간 관계를 고려한 검색과 일부 쿼리 튜닝이 가능하다.
쿼리가 문자열로 작성되어 컴파일 타임에 오류를 잡기 어렵다.
복잡한 쿼리 사용시 가독성이 낮아진다.

3안) Specification과 Criteria
동적인 검색조건을 쉽게 다루고 복잡한 검색 기능을 구현할 수 있다.
복잡한 쿼리 조합에 대한 코드가 비교적 복잡할 수 있으며 일부 코드 중복이 발생할 수 있다.

의견 조율
게시판에서의 검색은 복잡한 검색조건을 가지고 있지 않다.
작성일, 조회수 등의 정렬방법이 필요할 수 있다.
제목, 작성자, 날짜 범위 등 복잡한 검색조건이 필요할 수 있다.

의사 결정
모집글 게시판의 특성상 모집 완료 된 글의 중요성은 떨어지기 때문에 조회수나
날짜, 기간과 관련된 정렬이나 검색조건의 중요성 또한 떨어진다.

※ 따라서 간단한 검색기능을 구현하기 위해 QueryMethod 방식을 채택하도록 한다.

8월 24일

Pageable 페이징을 처리하기 위한 인터페이스
Page<> 페이징 된 데이터를 담을 수 있는 자료구조

return searchResultPage.map(PostResponseDto::new);

map 말고 다른 방법은 없는가?

  • stream( 결국 map 들어감 )
  • for루프 등 방법이 있다.
  • map이 가장 간단하다.

if' statement can be replaced with 'switch' statement

  • Switch문은 변수의 값에 따라 여러 가지 경우를 처리할 때 주로 사용
  • if 문은 조건을 판단하여 두 가지 블록 중 하나를 실행할 때 사용
  • 여러 가지 조건이 복잡하게 얽혀 있는 경우 'if' 문이 더 유연하게 처리

0개의 댓글

관련 채용 정보