본문 바로가기

전체 글77

DNS DNS DNS(Domain Name System)는 IP 주소와 도메인 이름을 상호 교환하는 프로토콜이다. DNS는 IP 주소에 도메인 이름을 붙여, 사람이 이해하기 쉬운 현태로 통신할 수 있게 한다. 도메인 이름 도메인 이름은 (.)으로 구분된 문자열로 구성된다. 이 문자영 하나하나를 라벨이라고 부른다. 도메인 이름은 FQDN(Fully Qualified Domain Name, 전체 주소 도메인 이름)이라 불리며 호스트 부분과 도메인 부분으로 구성되어 있다. 호스트 부분은 FQDN의 가장 왼쪽에 있는 라벨로 컴퓨터 그 자체를 나타낸다. 도메인 부분은 오른쪽부터 '루트, 탑레벨 도메인(TLD, Top Level Domain), 세컨드 레벨 도메인(2LD, 2nd Level Domain, 서드 레벨 도메인.. 2023. 3. 12.
SSL / TLS SSL / TLS 란? SSL / TLS는 애플리케이션을 암호화하는 프로토콜이다. HTTPS는 HyperText Transfer Protocol Secure의 약자로 HTTP를 SSL로 암호화한 것. SSL에서 이용하는 암호화 방식 공통키 암호화 방식 공통키 암호화 방식은 암호화키와 복호화키로 동일한 키(공통키)를 사용하는 암호화 방식. 대칭키 암호화 방식이라고도 한다. 공통키 암호화 방식은 스트림 암호와 블록 암호로 나뉜다. 스트림 암호 1비트 단위 또는 1바이트 단위로 암호화 처리하는 암호화 방식. 블록 암호에 비해 빠르게 처리할 수 있지만, 대표적인 스트림 암호인 RC4에 취약성이 발견되어 지금은 사용하지 않는 경향이 있다. 블록암호 데이터를 일정 비트 수 단위(블록)로 구분해 하나하나 암호화 처리.. 2023. 3. 11.
Controller 단위 테스트 시 406 에러 406 Not Acceptable 하이퍼텍스트 전송 프로토콜(HTTP)의 406 Not Acceptable 클라이언트 에러 응답 코드는 서버가 요청의 주도적인 콘텐츠 협상 헤더에 정의된 허용 가능한 값 목록과 일치하는 응답을 생성할 수 없으며, 서버가 기본 표현을 제공하지 않음을 나타냅니다.서버가 올바른 데이터를 주지 못한 경우 발생하는 것 같았다. 나 같은 경우 동일한 응답을 주기 위해서 공통 응답 클래스를 응답하도록 했다. public class Response { private final int code; private final T data; private Response(int code, T data) { this.code = code; this.data = data; } public stati.. 2023. 3. 1.
뮤텍스, 세마포어, 모니터 뮤텍스(Mutex) 뮤텍스는 상호배제를 위한 동기화 기법이다. 한 순간에 오직 하나의 스레드만 공유자원에 접근할 수 있도록 보호한다. 뮤텍스는 임계영역에 진입할 때 락을 걸고, 임계영역에서 나올 때 락을 해제한다. 세마포어(Semaphore) 세마포어는 공유자원의 접근을 제한하는 동기화 기법이다. 여러개의 스레드가 동시에 공유자원에 접근할 수 있지만, 제한된 개수의 스레드만이 동시에 접근할 수 있도록한다. 세마포어는 정수형 변수로 선언하며, 이 변수를 통해 스레드의 접근을 제어한다. 세마포어는 두 가지 연산을 제공한다. P(wait) 연산은 세마포어 값을 감소시키고, 0 이하가 되면 스레드를 블록한다. V(signal) 연산은 세마포어 값을 증가시키고, 블록된 스레드 중 하나를 깨운다. 모니터(Monit.. 2023. 3. 1.
클래스 로더, 클래스 로딩 클래스 로더(ClassLoader) Java 프로그램이 실행될 때 클래스 파일을 로드하는 데 사용되는 핵심 구성요소. Java ClassLoader는 Java 클래스 파일을 JVM에 로드하여 해당 클래스를 사용할 수 있도록 합니다. Bootstrap ClassLoader JVM에는 먼저 Bootstrap ClassLoader가 로드된다. 이 ClassLoader는 Java 표준 라이브러리에 포함된 클래스 파일을 로드한다. Extension ClassLoader Java 확장 라이브러리를 로드하는데 사용된다. System ClassLoader 사용자가 작성한 클래스 파일을 로드하는 데 사용된다. 클래스 로딩(Class Loading) JVM이 클래스 파일을 읽어들이는 과정. 1. 로딩 클래스 로더가 클래스.. 2023. 3. 1.
[LeetCode] Longest Substring Without Repeating Characters - (Kotlin) https://leetcode.com/problems/longest-substring-without-repeating-characters/description 처음 방법은 Map을 이용해서 인덱스를 관리하면서 해결했다. 중복키가 나오면 맵을 지우고 인덱스를 처음 중복된 곳 바로 앞으로 가도록 했다. var max = 0 var i = 0 val map = hashMapOf() while (i < s.length) { if (map.containsKey(s[i])) { i = map[s[i]]!! + 1 max = max(map.size, max) map.clear() } map[s[i]] = i++ } max = max(map.size, max) return max 정답은 맞았지만, Solutions를 .. 2023. 3. 1.
[모던 자바 인 액션] 리액티브 프로그래밍 리액티브 프로그래밍 리액티브 프로그래밍에서는 다양한 시스템과 소스에서 들어오는 데이터 항목 스트림을 비동기적으로 처리하고 합쳐서 문제를 해결한다. 이런 애플리케이션은 발생한 데이터 항목을 바로 처리함으로 사용자에게 높은 응답성을 제공한다. 1. 리액티브 매니패스토 리액티브 매니패스토reactive manifesto(https://www.reactivemanifesto.org)에 리액티브 애플리케이션과 시스템 개발의 핵심 원칙을 정의한다. 반응성(responsive) 일정하고 예상할 수 있는 반응시간을 제공한다. 회복성(resilient) 장애가 발생해도 시스템은 반응해야 한다. 탄력성(elastic) 작업 부하가 발생하면 자동으로 관련 컴포넌트에 할당된 자원 수를 늘린다. 메시지 주도(Message-dr.. 2023. 2. 4.
[모던 자바 인 액션] CompletableFuture : 안정적인 비동기 프로그래밍 CompletableFuture: 안정적 비동기 프로그래밍 1. Future의 단순 활용 비동기 계산을 모델링하는 데 Future를 이용할 수 있으며, Future는 계산이 끝났을 때 결과에 접근할 수 있는 참조를 제공한다. 시간이 걸릴 수 있는 작업을 Future 내부로 설정하면 호출자 스레드가 결과를 기다리는 동안 다른 유용한 작업을 수행할 수 있다. Future는 저수준에 스레드에 비해 직관적으로 이해하기 쉽다는 장점이 있다. Future를 이용하려면 시간이 오래 걸리는 작업을 Callable 객체 내부로 감싼 다음에 ExecutorService에 제출해야 한다. ExecutorService executor = Executors.newCachedThreadPool(); Future future = .. 2023. 1. 20.
[LeetCode] Majority Element - (Kotlin) https://leetcode.com/problems/majority-element Majority Element - LeetCode Majority Element - Given an array nums of size n, return the majority element. The majority element is the element that appears more than ⌊n / 2⌋ times. You may assume that the majority element always exists in the array. Example 1: Input: nums = [3 leetcode.com 정수 배열에서 가장 많이 나타난 수를 찾는 문제이다. 언듯 보기에는 쉬워보이지만, 문제 조건에 시간복잡도 O.. 2023. 1. 20.