목록전체 글 (69)
be programmer
인터럽트는 CPU가 현재 작업을 수행하는 도중 외부 장치의 요청이나 내부 예외 등의 사건을 처리하도록 제어 흐름을 변경하는 메커니즘이다.운영체제는 인터럽트를 이용해 입출력 완료, 타이머 만료, 하드웨어 오류 등의 사건을 처리한다.2.1 폴링과 인터럽트의 차이폴링(Polling) 은 CPU가 장치의 상태 레지스터 등을 반복적으로 확인하는 방식이다.장치가 준비되었는지 CPU가 직접 확인한다.구현이 단순하다.확인 주기가 너무 짧으면 CPU 자원이 낭비될 수 있다.인터럽트 기반 처리(Interrupt-driven I/O) 는 장치가 처리가 필요한 상황에 인터럽트를 발생시켜 CPU에 알리는 방식이다.CPU가 장치 상태를 계속 확인하지 않아도 된다.입출력 대기 중 다른 작업을 수행할 수 있다.인터럽트 처리와 문맥 ..
컴퓨터 시스템의 하드웨어 구조 및 동작 원리1. 컴퓨터 시스템의 기본 구조컴퓨터 시스템은 크게 CPU(중앙처리장치), 메인 메모리(RAM), 입출력 장치(I/O Devices), 입출력 컨트롤러(I/O Controller) 로 구성된다. 각 구성요소는 시스템 버스(System Bus) 또는 이에 해당하는 내부 인터커넥트를 통해 데이터를 주고받는다.1.1 컴퓨터 시스템의 구성 요소text+---------------------------------------------------------+| CPU || +----------------+ +----------------+ +-------------+ || |..
Redis를 Spring에서 쓰는 프로젝트를 하고있다.’ 일반적으로 관계형 DB는 디스크로부터 I/O를 하는데, Redis를 사용함으로써 I/O의 횟수가 줄어 프로그램이 획기적으로 빨라진다는 이점이 있다.일반 관계형 DB는 데이터가 디스크에 있고, Redis는 메모리에 있으므로, Redis는 디스크로부터 데이터를 읽어오는 느린 I/O가 발생하지 않는다. 가장 느린 I/O가 덜 발생하여 결과적으로 프로그램이 빨라지게 된다는 것이다.다만 디스크로부터의 I/O는 줄어들지만, 네트워크로부터의 I/O는 늘어날수 있다. Spring 애플리케이션과 Redis 서버가 다른곳에 있다면 네트워크 I/O는 더 발생할수 있다.Redis 자체의 디스크 I/O (선택): Redis는 메모리 기반이지만 데이터 백업(영속성)을 위해..
Redis(Remote Dictionary Server)는 메모리(RAM)에 데이터를 저장하여 매우 빠른 속도를 제공하는 오픈소스 기반의 인메모리(In-Memory) 키-값(Key-Value) 구조의 NoSQL 데이터베이스 관리 시스템(DBMS)이다.디스크에 직접 데이터를 쓰는 일반적인 관계형 데이터베이스(RDBMS)와 달리, 메모리에서 데이터를 처리하므로 1밀리초(ms) 미만의 매우 빠른 읽기 및 쓰기 속도를 자랑합니다.
현재 내가 배포까지 할때 사용한 코드는 이것인데public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/api/**") .allowedOriginPatterns("*") .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") .allowCredentials(true); }gemini에게 자문을 구해보니, 다음과 같이 수정해서 사용하길 바란다고 한다.1. CSRF(교차 사이트 요청 위조) 공격 노출.allowedOriginPatterns("*")와 .allowCredentials(true)가 동시에 켜져 있으면, 악의적인 제3의 사이트에서도 사용자의 쿠키나 인증 정보를 이용해 이 ..
MSA 방식으로 홈쇼핑을 개발하던 와중, 나는 DB에 무결성을 지킨다고 하는것이, DB에는 getter 역할을 하는것 외에 어지간하면 아무것도 안들어가는것이 무결성을 보존한다고 여기고 있었다.왜냐하면 Entity에는 무결성 보존을 위해 setter 어노테이션을 사용하지 않는것이 권장되었기 때문이다.하지만 다른 홈쇼핑 개발한 코드들을 본 결과 내 생각이 틀렸다.Setter는 객체의 문을 완전히 열어두는 위험한 행동이지만, 비즈니스 메서드는 유효성 검증과 비즈니스 규칙을 세우는 것이라 오히려 무결성이 보존되기 때문이라고 한다. 오히려 이렇게 갖다놓아져 있어야 객체 지향 프로그래밍의 원칙 중 하나인 캡슐화가 보장이 된다고 한다.AI에게도 질문해 보니 다음의 예시를 들어주었다.Setter의 문제점 (produc..
🗃 리눅스의 주요 디렉토리bin기본 명령어들이 저장된 디렉토리boot부팅에 필요한 가진 파일들이 저장되는 곳dev시스템 디바이스 관련 파일들이 저장되는 것etc시스템 설정에 관련된 각종 파일들이 저장되는 곳home사용자의 홈 디렉토리가 생성되는 곳lib커널과 프로그램에 필요한 각종 라이브러리가 저장되는 곳mediaCD, USB같은 외부 장치를 연결하는 곳mnt탈부착 가능한 장치들을 임시로 연결하는 곳(WSL의 경우 윈도우의 디렉토리와 연결)opt추가 패키지가 설치되는 곳rootroot(최고관리자)계정의 홈 디렉토리run실행중인 서비스와 관련된 파일들이 저장되는 곳sbin시스템 관리자용 명령어들이 저장되는 곳sys리눅스 커널 관련 정보가 있는 곳tmp시스템 사용중 발생하는 임시데이터가 저장되는 곳usr기..
Spring 환경에서 기존 jakarta.servlet.http.Cookie 대신 org.springframework.http.ResponseCookie를 사용할 때 얻는 가장 큰 장점은 강력한 보안 옵션 지원과 빌더 패턴을 통한 높은 편의성입니다.구체적인 장점을 비교 분석해 드리겠습니다.1. 크로스 도메인 보안 (SameSite 속성 지원)기존 Cookie: SameSite 속성을 직접 설정하는 메서드가 없습니다. 크롬 등 최신 브라우저의 CSRF 차단 정책에 대응하기 위해서는 response.setHeader("Set-Cookie", "...")와 같이 문자열로 직접 헤더를 포매팅해야 했습니다.ResponseCookie: .sameSite("Lax"), .sameSite("Strict"), .same..
