전체 글 186

[Python/파이썬] 백준 알고리즘 11053번 - 가장 긴 증가하는 부분 수열 (DP)

사실 이 문제를 볼 때 부분 수열을 만들 때 기존 수열의 순서를 그대로 따라야하는지가 헷갈렸다. 하지만 그렇다면 그냥 set으로 중복을 제거하고 수를 구하면 될 것이다... 그래서 아마 이것은 아니겠지 하고 풀었다. 처음에는 완전 탐색으로 풀 생각을 했다.. """ 1. 아이디어 - 가장 작은 수 하나를 구한다 - 이후 뒤 수열을 for문으로 돌며 큰 수를 찾는다. 2. 시간 복잡도 - 두개의 포인터 : O(N) - 전체 조회 : O(N^2) = 1,000,000 -> 가능 3. 변수 - N : int - A : int[] """ import sys input = sys.stdin.readline N = int(input()) A = list(map(int, input().split())) max_len..

[Python/파이썬] 백준 알고리즘 1504번 - 특정한 최단 경로 (다익스트라/Dijkstra)

""" 1. 아이디어 - 우선 반드시 지나야 하는 두 정점 사이의 최소 거리를 구한다. (다익스트라) - 그리고 1번 정점과 v1, v2 / N번 정점과 v1, v2 사이의 거리를 구한 뒤 더 짧은 거리를 선택한다. 2. 시간 복잡도 - O(3 * ElgV) = 5 * 200000 * lg(800) =~ 2,903,089 -> 가능 3. 변수 - 정점의 개수, 간선의 개수 : int - 힙 : (비용, 노드번호) - 거리배열 : int[] - 인접 간선 리스트 : (비용, 노드번호)[] """ import sys import heapq INF = sys.maxsize input = sys.stdin.readline N, E = map(int, input().split()) edge = [[] for _ ..

[NginX] NginX 502 Error 문제 해결

잘 실행되던 서비스가 다운되는 일이 생겼다... Github Action 에서 수동으로 재배포해주면 해결되긴 하였는데, 다운되는 일이 최근 잦아졌다. 백엔드 엔드포인트 url로 접속하면 위와 같이 502 에러가 떴다. (필자는 CloudFlare를 앞에 붙여둬 CloudFlare의 에러화면이 뜬다.) 아무리 개인 프로젝트라해도 적지 않은 사람들이 사용하는 서비스인데 문제가 있다 판단하였고 바로 해결을 시도하였다. 하지만 생각보다 문제 원인을 찾기가 쉽지않았다. 구글링, 개발관련 오픈톡방, ChatGPT, 지인 등을 총동원해 원인을 분석해보았다. 먼저 CloudFlare에서 문제가 발생한게 아닐지 확인해보았다. 하지만 이전에 문제 발생 시, 재배포해주면 해결되었기에 이는 CloudFlare의 문제보다는 A..

[Flutter] 푸시 알림 보내기 (FCM push notification)

저번 글에 이어 클라이언트 단에서의 푸시 알림 구현을 진행해보겠다. 구현할 코드를 크게 세 부분으로 나누면, 1. FCM 인증 및 초기 설정 2. 알림 구현 3. Firebase Token 발급 으로 나눌 수 있다. 먼저 구현에 앞서 패키지를 설치하겠다. firebase_core: ^2.8.0 firebase_messaging: ^14.3.0 flutter_local_notifications: ^13.0.0 패키지 설치 및 프로젝트 - Firebase 연결은 어렵지 않아 생략하도록 하겠다. fcmSetting.dart Future _firebaseMessagingBackgroundHandler(RemoteMessage message) async { // If you're going to use other..

[SpringBoot] FCM을 통해 Push 알림 보내기 (FCM push notification)

FCM은 Firebase Cloud Messaging의 약자로 기존 GCM에서 모든 플랫폼에 푸쉬를 쉽게 보낼 수 있도록 통합된 솔루션이다. Notification 콘솔의 GUI나 Admin SDK를 이용해 서버 등에서 FCM의 백에 요청을 보내면, FCM에서 각 플랫폼 별로 메시지를 전송하는 방식이다. 이 글에서는 이 FCM을 활용해 Spring Boot에서 Notification을 보내는 방법에 대해 알아보겠다. 글 작성에 앞서 firebase 프로젝트 생성 부분은 생략하고 이미 되어있는 것을 가정하겠다. 1. Admin SDK 서버에서 Firebase 와 상호작용하기 위해서는 먼저 Admin SDK를 추가해야한다. (아래 공식문서 참고) 서버에 Firebase Admin SDK 추가 5월 10일, ..

[React-Query / Spring Boot] 무한 스크롤 구현하기 (Full Stack Version) (useInfiniteQuery 무한 스크롤, Spring 무한 스크롤, No Offset)

필자는 Next.js와 Spring Boot를 이용해 서비스를 개발하고 있다. 이번에 무한 스크롤 기능이 필요했는데, No-Offset 방식의 레퍼런스가 많이 없어 애를 먹었다. 시행착오 끝에 잘 작동하여 이를 정리해보고자 한다. 근데 No-Offset이 뭐지? No-Offset 페이지네이션은 Offset을 사용하지 않고 페이지네이션을 진행한다는 말이다. Offset은 게임 개발할 때 많이 쓰이는 단어이기도 하다. 일반적으로 Offset을 사용하는 페이지네이션은 Offset(어디부터) limit(몇개의) 데이터를 불러올지 결정한다. 즉, 네이버 카페 같은 곳에서 볼 수 있는 위와 같은 번호들이 페이지 넘버이고 이 페이지 넘버가 Offset이라고 생각하면 된다. No-Offset은 이러한 Offset을 사..

[React-Query] useMutation 커스텀 훅 (react query useMutation Custom Hook Typescript)

React-Query의 useMutation을 커스텀 훅으로 만들어두면 편하다. 필자는 여기에 더해 mutate를 다루는 handler 함수를 정의하고 반환하는 방식의 커스텀 훅을 구현하였다. 아래는 예시 코드이다.(Typescript) 주석친 부분은 무시해도 된다. interface MutationProps { postId: number updatePostRequest: UpdatePostType } function usePostMutation( postInfoBeforeUpdate: PostInfoType, userId: number, updatedTitle: string, updatedContent: string, updatedIsAnonymous: boolean ): { handlePostMuta..

[Flutter] webview 양방향 통신 (flutter webview two way communication)

최근 하이브리드 앱을 많이 만들었다. 하이브리드 앱은 네이티브 앱에 비해 스토어(구글 플레이스토어, 애플 앱스토어)에 덜 종속적이고 별도의 심사과정없이 최초 등록만 되면 빠른 업데이트가 가능하다는 차별점이 있다. 하지만 하이브리드 앱은 웹뷰를 이용하기에 네이티브 앱에 비해 신경써야할 부분이 조금 더 많다. 이 중 하나가 바로 Flutter와 Webview에 띄워진 웹 간의 통신이다. 필자는 Flutter의 웹뷰 패키지로 아래 webview_flutter 패키지를 사용하였다. (4.0.0 이상 버전 사용) webview_flutter | Flutter Package A Flutter plugin that provides a WebView widget on Android and iOS. pub.dev 1. ..

[Flutter] 웹뷰 뒤로가기 구현 (+ 앱 종료시 다이얼로그 띄우기) (webview_flutter 4.0.0 버전)

ios의 경우 제스쳐로 뒤로가기가 가능하지만 기본적인 시스템 뒤로가기가 없다. 하지만 안드로이드의 경우 기본적으로 시스템 네비게이션 바가 있기에 웹뷰로 작동하는 어플리케이션이 비정상적으로 종료되는 것처럼 보일 수 있다. 때문에 웹뷰 구현 시 따로 뒤로가기에 대한 구현을 해줘야한다. 필자는 가장 좋아요 수가 많은 flutter 공식 팀에서 만든 웹뷰 패키지인 webview_flutter 패키지를 사용하였다. https://pub.dev/packages/webview_flutter webview_flutter | Flutter Package A Flutter plugin that provides a WebView widget on Android and iOS. pub.dev 이번에 4.0.0 버전으로 업그레..

[AWS] CodeDeploy 로그 확인하는 법

ec2에 배포 후 문제가 발생할 수 있다. CI에 문제가 없다면 CD 쪽을 살펴야하는데 필자는 AWS의 CodeDeploy를 사용했다. codedeploy의 로그 파일은 깊숙한 곳에 숨어있어 찾기 어려운 경우가 많은데, 리눅스의 tail 명령어를 사용하면 손쉽게 확인할 수 있다. tail -f /opt/codedeploy-agent/deployment-root/deployment-logs/codedeploy-agent-deployments.log 리눅스의 tail 명령어는 파일의 마지막 행을 기준으로 지정한 행까지 파일 내용 일부(기본값은 마지막 10줄)를 출력해주는 명령어이다. tail 명령어는 일반적으로 로그와 같이 실시간으로 변하는 파일을 분석하는데 많이 사용된다. -f 옵션은 tail을 종료하지 ..

Infra/AWS 2023.01.25
반응형