All

·PHP/Laravel
Laravel Reverb는 Laravel 팀에서 제공하는 first-party 오픈소스 웹소켓 서버다. Laravel의 BroadCasting, Pulse, Laravel Echo 등 다양한 기능들과 통합을 지원한다. 속도를 위해 미세 조정되었고, 단일 서버에서 수천 개의 연결이 가능하다고 한다.  Laravel Reverb - Real-time WebSocketLaravel Reverb brings real-time WebSocket communication to Laravel applications.reverb.laravel.com 개요운영중인 서비스에 중복로그인 및 실시간 알림이 필요하여 웹소켓 서버가 필요했다. 운영중인 서비스의 API 서버는 Laravel 애플리케이션이었다. Nest.js를 사..
·Javascript
배경맡고 있는 프로젝트가 Electron, React로 개발된 데스크탑 애플리케이션으로 초기에 모놀리식 아키텍처로 개발 되었다. 혼자 진행하던 프로젝트라서 모놀리식 구조를 유지하였다.모놀리식 아키텍처는 단일 코드 베이스의 애플리케이션 구조를 의미한다. 프로그램의 전통적인 구조로 모든 기능이 하나로 결합되어 있으며 타 애플리케이션과 독립적인 것이 특징이다. 프로젝트가 통합되어 있어 단순하며 보편성이 장점이다. 하지만 규모가 커졌을 경우 복잡도로 인해 유지 보수 및 유연한 확장이 어려울 수 있다. 하지만 UI 변경이 있을 때마다 앱을 새로 빌드하고 배포하는 과정이 비효율적이었다. 반복되는 작업이 점점 번거로워지면서, Electron과 React 코드를 분리해 멀티레포 방식으로 전환했다. React 앱은 S3..
·Javascript
span, div와 같은 비대화형 컨텐츠에 focus 기능을 추가한다. tabindextabindex 특성을 갖는 요소는 포커스가 가능하며 Tab 키를 사용하는 연속적인 키보드 탐색에서 어느 순서에 위치할지 지정한다. 정수 값을 지정할 수 있다.양수(1)tab을 이용한 키보드 탐색 시 값의 순서로 탐색된다0모든 양수 값 요소 탐색 이후에 document 소스 순서에 따라 탐색된다.음수(-1)tab을 이용한 키보드 탐색에서 제외된다. tabindex: 0을 사용하는 것이 일반적인 방법인 것 같다.주의tabindex 값은 0 또는 음수(-1)를 권장하고 있다. 요소의 순서를 변경할 수 있는 CSS 속성 보다 큰 값을 사용할 경우 키보드 사용자가 컨트롤하기 어려워 진다고 한다. 참고https://develop..
·Javascript
JavaScript에서 연속적으로 이벤트가 발생할 경우 핸들러 내부의 코드가 여러 번 실행된다. 예를 들어 핸들러가 서버에 HTTP 요청을 한다고 가정했을 때 연속적으로 이벤트가 발생하면 서버에 부담을 줄 것이다. Debouncing과 Throttling은 이런 상황을 방지하여 성능을 최적화하는 프로그래밍 기법이다. 대표적으로 스크롤, 버튼 클릭, 텍스트 입력 등과 같이 연속으로 발생하는 이벤트에 사용된다. 1. Debouncing특정 이벤트가 연속해서 발생할 때, 마지막 이벤트가 발생하고 일정 시간이 지난 후에 함수를 실행하는 방법이다. 에 입력하는 동안 불필요한 HTTP 요청을 줄이기 위해 많이 사용한다. 예를 들어 검색창을 구현할 때, 텍스트 입력이 완료되고 일정 시간이 지난 후에 요청을 보낸다.예..
·Server
Nginx access_log에 OPTIONS 메서드로 요청된 부분이 기록되어 있어 궁금하였다. 확인해보니 몇몇 특정 HTTP 요청 이전에 기록되고 있었다. 1. HTTP OPTIONS 메서드?OPTIONS 메서드는 클라이언트가 서버로부터 특정 리소스에 대해 허용된 메서드와 HTTP 헤더, 인증 요구 사항 등 통신에 필요한 정보를 요청하는 용도로 사용된다. 주로 서버와 클라이언트 간의 CORS (Cross-Origin Resource Sharing) 설정을 확인할 때 사용된다. 즉, 실제 데이터를 가져오지 않고, HTTP 통신이 가능한지 확인하기 위해 사용된다.    2. OPTIONS 메서드의 주요 헤더Allow: 서버가 해당 리소스에 대해 허용하는 HTTP 메서드를 응답한다.예를 들어 Allow: G..
·VSCode
1. VSCode Settings(Ctrl + ,) 열기 2. features terminal 검색 후 terminal > intergrated > shellIntegration 설정 비활성화 3. 터미널 종료 후 재실행
·Java
문제  나의 제출(오답)import java.io.*;import java.util.*;public class Main { public static BufferedReader br; public static BufferedWriter bw; public static int n; public static int[] s; public static boolean[] visited; public static int max; public static StringBuffer sb = new StringBuffer(); public static void main(String[] args) throws IOException { br = new BufferedRea..
·Java
문제나의 제출(오답)import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); int N = Integer.parseInt(br.readLine()); boolean[][] line = new boolean[N + 1][N + 1]; ..
·Java
나의 제출import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); String S = br.readLine(); char[] arr = S.toCharArray(); Stack stack = new Stack(); ..
·Java
Day2나의 제출import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); StringTokenizer st = new StringTokenizer(br.readLine()); int length = Integer.parseInt(st.ne..
helperwoo
'분류 전체보기' 카테고리의 글 목록