legacy (151) 썸네일형 리스트형 [운영체제] TLB(Translation Lookaside Buffer) page table은 메모리에 저장되는데, CPU는 프로세스를 사용하기 위해 메모리에 두 번 접근해야 한다.메모리에 저장된 page table에 접근가상 주소를 물리 주소로 변환하기 위해 page table에 접근한다.page table 기반으로 실제 메모리에 접근page 테이블에서 얻은 물리 주소를 통해 실제 물리 메모리에 접근한다. CPU에서 메모리에 접근하는 것은 시간이 소요되는 작업이다. 따라서 메모리에 두 번의 접근이 필요하면 상당한 시간이 소요된다. 이러한 문제를 해결하기 위해서는 메모리에 접근하는 횟수를 줄여야 한다. 1. TLB(Translation Lookaside Buffer)1-1. TLB란?TLB(Translation Lookaside Buffer)는 메모리 접근 횟수를 줄이고자 .. [운영체제] 프로세스 주소 공간과 TLS(Thread Local Storage) 1. 프로세스 주소 공간스택(Stack) 영역컴파일 시점에 크기가 결정된다.함수의 호출과 관계있는 지역 변수와 매개 변수 그리고 함수의 실행을 마치고 복귀할 주소가 저장되는 영역이다.스택 영역은 함수의 호출과 함께 생성되고 종료와 함께 소멸된다.메모리의 높은 주소에서 낮은 주소 방향으로 할당된다.재귀가 너무 깊게 호출되면 StackOverFlow 예외가 발생하는데, 이는 제한된 스택 영역을 초과하였기 때문에 발생한다.프로그램 실행 중에 변경될 수 있으므로 Read-Write로 설정되어 있다.힙(Heap) 영역런타임 시점에 결정되는 영역이다.사용자에 의해 동적으로 할당되고 명시적으로 해제해야 한다.malloc(), new(), free()주로 참조형 데이터가 할당된다.프로그램 실행 중에 변경될 수 있으므로.. [Spring] java.time.format.DateTimeParseException: Text '2024-05-25 14:33:07.049436' could not be parsed at index 10 RedisRedis에서는 마지막으로 알림이 조회된 시간을 저장한다.hget Notification:notification lastNotificationTime"2024-07-09T23:39:39.101337"@Getter@RedisHash("Notification")@AllArgsConstructor(access = AccessLevel.PRIVATE)public class NotificationRedis { @Id private String notification; // key private LocalDateTime lastNotificationTime; // value public static NotificationRedis of(String notification, LocalD.. [네트워크] HTTP와 HTTPS 1. HTTP1-1. HTTP란?HTTP란 Hyper Text Transfer Protocol의 약자로써, 서버/클라이언트 모델에서 데이터를 주고받기 위한 프로토콜이다. HTTP는 80 포트를 사용하며 클라이언트로부터 요청이 오기를 기다린다. 1-2. HTTP 구조GET /index.html HTTP/1.1Host: www.example.comUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q.. [Kotlin] sealed class 1. 등장 배경부모 클래스가 있고 자식 클래스가 3개가 존재할 때, 컴파일러 입장에서는 부모 클래스를 상속하는 클래스가 몇 개인지 알 수 없다. 1-1. 부모 클래스open class Car( val name: String, val color: String) { internal fun carInfo() { println("차의 종류는 ${name}이며 색깔은 ${color}입니다.") }} 1-2. 자식 클래스class Honda( name: String, color: String) : Car(name = name, color = color)class Hyundai( name: String, color: String) : Car(name = name.. [Kotlin] Accessing non-final property number in constructor 1. 상위 클래스open class Base( open val number: Int = 100) { init { println("Base Class") println("Base Class number ${number}") }} 2. 상위 클래스를 상속받는 하위 클래스class Derived( override val number: Int): Base(number) { init { println("Derived Class") println("Derived Class number : ${number}") }} 3. 하위 클래스를 인스턴스화하기fun main() { val derived = Derived(1)} 4. 의도와.. [운영체제] 외부 단편화와 내부 단편화 1. 외부 단편화란?외부 단편화란 남아 있는 총 메모리 공간이 요청 메모리 공간보다 크지만, 남아 있는 메모리 공간이 연속적으로 위치하지 않아 요청한 메모리를 적재할 수 없는 현상이다. 아래 예시를 보자.남아 있는 총 메모리 공간 : 100MB (50 + 50)요청 메모리 크기 : 80MB총 메모리 공간만 보았을 때 충분히 요청 메모리를 적재할 수 있으나, 남아있는 두 메모리가 연속적으로 위치하지 않아 적재할 수 없다. 1-1. 외부 단편화가 발생하는 이유총 메모리 공간은 충분함에도 남아 있는 메모리들이 연속적으로 위치하지 않기 때문이다. 2. 외부 단편화 해결하기외부 단편화가 발생한 이유는 남아있는 메모리가 연속적으로 위치하지 않았기 때문이다. 그렇다면 남아 있는 메모리를 연속적으로 위치할 수 있도록.. [Spring] 생성자 주입(constructor injection)을 사용하는 이유 1. 생성자 주입이란?생성자 주입 방법은 객체를 생성하기 위해 생성자를 호출하는 시점 1회에만 호출되는 것을 보장한다.@Servicepublic class UserService { private UserRepository userRepository; @Autowired public UserService(UserRepository userRepository) { this.userRepository = userRepository; }} 스프링 프레임워크는 생성자 주입을 적극적으로 지원하고 있기 때문에 아래와 같이 생성자가 1개만 존재하는 경우에는 @Autowired 사용 없이 주입이 가능하다.@Servicepublic class UserService { private .. 이전 1 2 3 4 5 6 7 ··· 19 다음