728x90
File Descriptor(FD)이란OS에서 I/O장치나 파일에 접근할 때 이들을 식별하기 위해 사용하는 특정한 정수 값이 있다. 이것이 File descriptor다. 특히나 Linux 혹은 Unix 계열 OS에서 프로세스가 파일을 다룰 때 사용하게 되는데, 프로세스에서 특정 파일에 접근할 때 0(stdin), 1(stdout), 2(stderr),...(파일을 열면서 추가적인 FD할당) 와 같은 상수를 쓰게 된다. 그럼 여기서 Windows는 FD가 없어요? 라는 궁금증이 있었는데, FD와 유사한 개념인 File Handle이 존재하나 FD과 동일한 것은 아니다. File Descriptor의 동작 과정✔️ 파일 열기1. 프로세스의 파일 열기 요청사용자 프로그램은 open()과 같은 System ..
환경구성- Nginx- centOS- 인증서파일(.crt, key) 사전 정보자체 서명과 인증기관 서명의 차이👼🏻: 자체 서명과 인증기관 서명의 차이는 무엇일까요?🍊: 말그대로 본인이 직접 발급했느냐와, 인증 기관의 인증이 있었냐는 뜻이죠. 직접 발급시에는 외부 사용자나 브라우저가 신뢰하지 않고요, 인증기관의 인증이 있었다면 대부분의 브라우저와 시스템에서 신뢰하게 됩니다.👼🏻: 그렇다면 용도는 뭘까요?🍊: 내부 테스트, 개발환경의 경우 자체 서명을 이용하며, 실제 운영 환경/상업용에서는 CA 인증서가 필요해요. 1. 자체 서명 SSL 인증서 생성openssl 패키지를 다운로드한다.yum install openssl 2. SSL 인증서 및 키 파일 생성mkdir -p /etc/nginx/ss..
JPA의 N+1 문제 발생 이유와 해결방법(ft. Featch 전략) JPA의 N+1 문제N+1 문제는 연관된 데이터를 로딩할 때 발생하는 성능 문제다. 예를 들어, 하나의 엔티티(A)가 연관된 엔티티(1, 2, 3… N)를 가질 때, 한 번의 조회로 A를 가져오고, 이후 연관된 N개의 엔티티를 각각 따로 조회하는 상황이 된다.이러한 경우, 총 N+1개의 쿼리가 발생하므로 불필요하게 많은 데이터베이스 Query가 실행된다.// User와 Order는 일대다 관계List users = userRepository.findAll(); // User에 대한 1번의 쿼리for(User user : users){ List orders = user.getOrders(); // 각 Order에 대한 총 N번의 쿼리} ..
코드import java.io.*;import java.util.*;public class Main { static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); static int N, M, X; static int[] toI; // [i][j]: i -> j로 갈 때의 비용 static int[] toX; static List> goTo; // 단방향 그래프 static List> goFrom; public static void..
인메모리 캐시 전략데이터를 DB나 원본 저장소에서 가져오는 게 아니라, 메모리에 저장하여 데이터 접근 속도를 높이는 방법이다.디스크 I/O 작업이 많은 기존 방식에 비해, 메모리 방식은 더욱 빠르기에 속도를 높일 수 있다. 따라서 자주 조회되거나 접근 속도가 중요한 데이터는 메모리에 임시 저장함으로써 바르게 반환하고자 하는 목적으로 쓰인다.다만, 캐시된 데이터가 실제 원본 데이터와 다를 수 있으므로 업데이트/무효화 전략이 요구된다. 캐시 일관성 유지 방법Write-Through 캐싱캐시를 통해(write through) 원본 데이터 저장소까지 바로 전달된다는 의미로, 데이터가 캐시에 저장될 때 Database에도 즉시 쓰여지게 한다. 캐시나 DB나 동일한 데이터가 있으니 일관성은 있는데 매번마다 쓰기 ..
https://www.acmicpc.net/problem/10942[10942. 팰린드롬?] 풀러가보자 기존의 투포인터 방식의 풀이 public static boolean isP(int lt, int rt) { while (lt 위의 경우, 이분탐색은 일반적으로 O(logN)의 빠른 시간 효율성을 가지지만 만약 주어진 배열의 모든 조합 (i, j까지의 부분 배열에 대하여) 확인한다고 치면 주어진 배열의 양 끝에서부터 중앙으로 비교하며 최악의 경우 O(N)을 갖게 될 수 있다.그렇게 되면 총 시간복잡도는 질문의수(M) * 수열의 길이(N) 만큼이므로 비효율적이다. 생각해보면 그 모든 케이스 안에서도 중첩된 경우의 수가 있으니, 이를 DP로 해결하고자 하는 아이디어가 나올 수 있다..