[홈서버] 네트워크 3 – Zone-Based Firewall

Featured image for [홈서버] 네트워크 3 - Zone-Based Firewall

1. 수정하는 이유 지난번에 구성한 네트워크 구조를 조금 손보려고 한다. 굳이 지금까지 문제없이 잘 쓰던 네트워크 구성을 손보는 이유는 다음과 같다. 가. Default network를 비우고 싶다. Default Network는 초기 테스트나 임시 연결 용도로만 사용할 예정. 아무래도 시스템이 자동으로 생성한 기본 네트워크라 장치를 연결하고 서비스를 운영하는 것에 적합하지 않아 보인다. 실제로 Unifi에서 VLAN을 격리시키는 옵션을 활성화해도 … 더 읽기

그동안 글을 쓰지 않은 이유

Featured image for 그동안 글을 쓰지 않은 이유

1. 무슨 일이 있었는가…. 너무 오랜만에 글을 써서 굉장히 어색하다. 3월부터 8월까지 대략 5개월간 글을 못 썼다. 작년 7월부터 오늘까지 많은 일이 있었다. 살면서 가장 힘든 시간들이었다. 말하기도 부끄럽지만 지인에게 ‘사기’를 당했다. 모아놓은 재산도 없어지고 해결하는 과정에서 빚도 생겼다. 경제적으로도 어려웠지만 그것보다 정신적으로 너무 힘들었다. 몇 달간 거의 집에만 있었던 것 같다. 언제 끝날지, 어떻게 … 더 읽기

[Q&A] SpringBoot3 Test

Featured image for [Q&A] SpringBoot3 Test

이 글은 AI와의 질의응답 과정에서 얻은 정보를 요약하고 정리한 내용입니다. 1. WebMVCTest, SpringBootTest 차이점 Spring 테스트에서 사용되는 애너테이션인 @AutoConfigureMockMvc, @WebMvcTest, @SpringBootTest는 각각 테스트의 범위, 속도, 의존성 주입 대상 등을 다르게 설정하는 데 사용된다. 가. WebMvcTest 나. SpringBootTest 다. AutoConfigureMockMvc 라. 결론 애너테이션 목적 로딩 범위 MockMvc 자동 설정 테스트 속도 주의할 점 @WebMvcTest 단위 테스트 … 더 읽기

[1000줄 OS 구현하기] 파일 시스템

Featured image for [1000줄 OS 구현하기] 파일 시스템

파일 시스템 | OS in 1,000 Lines 1. tar 이 교안에서는 tar를 파일 시스템으로 사용했다. tar는 다수의 파일을 하나로 묶을 수 있는 아카이브 형식이고 각 파일의 내용뿐만 아니라 파일명, 생성일자 등 파일 시스템에 필요한 모든 메타데이터를 저장할 수 있기 때문이다. 가장 중요한 것은 tar의 데이터 구조는 FAT나 ext2 같은 일반적인 파일 시스템에 비해 매우 단순하다. … 더 읽기

[1000줄 OS 구현하기] 디스크 I/O

Featured image for [1000줄 OS 구현하기] 디스크 I/O

디스크 I/O | OS in 1,000 Lines 가상 디스크 장치인 virtio-blk를 위한 디바이스 드라이버를 구현한다. 1. Virtio Virtio는 Virtual I/O의 약자로 가상 장치(virtio devices)를 위한 디바이스 인터페이스 표준이다. 디바이스 드라이버가 가상 장치를 제어하는 데 사용하는 API로, 네트워크, 디스크, 그래픽스와 같은 다양한 I/O 작업을 가상 환경에서 처리할 수 있게 해 준다. virtio-blk의 ‘blk’는 ‘block’의 약자로, 블록 … 더 읽기

[1000줄 OS 구현하기] 시스템 콜

Featured image for [1000줄 OS 구현하기] 시스템 콜

시스템 콜 | OS in 1,000 Lines 애플리케이션이 커널 기능을 호출할 때 사용하는 시스템콜을 구현해 보자. 1. 시스템 콜 구현 User mode에서도 ecall을 통한 시스템 콜 구현하기. ecall 명령어가 실행되면 예외 핸들러가 호출되어 제어권이 커널로 넘어갑니다. 2. 시스템 콜과 예외 가. 시스템 콜을 요청하는데 예외가 발생하는 이유 ecall은 RISC-V 아키텍처에서 예외(exception)로 처리된다. RISC-V뿐만 아니라 x86 … 더 읽기

[1000줄 OS 구현하기] 유저 모드

Featured image for [1000줄 OS 구현하기] 유저 모드

유저 모드 | OS in 1,000 Lines 유저 애플리케이션을 실행해 보자. 1. 바이너리 파일로 프로세스 생성 앞서 “[1000줄 OS 구현하기] 애플리케이션”에서 shell.bin.o를 만들었다. shell.o의 메모리 매핑 정보를 날려버렸기 때문에 kernel.h에 따로 주소를 저장한다. 애플리케이션의 바이너리 이미지를 페이지 단위로 반복하면서 메모리를 할당하고 매핑. 각 반복마다 새 페이지를 할당하고 이미지 데이터를 할당된 페이지에 복사. 사용자 접근 권한(PAGE_U) … 더 읽기

[1000줄 OS 구현하기] 애플리케이션

Featured image for [1000줄 OS 구현하기] 애플리케이션

애플리케이션 | OS in 1,000 Lines 앞서 가상 메모리를 paging을 통해서 관리하도록 기능을 구현했다. 이제 커널 위에서 애플리케이션을 동작시키기 위해서 고민해 보자. 1. 메모리 레이아웃 애플리케이션을 위한 주소 공간을 배치하기 위해서 애플리케이션용 링커 스크립트를 추가한다. 내용은 커널의 링커 스크립트와 거의 비슷하다. 프로그램이 시작될 때 스택 영역도 0으로 초기화된 상태에서 시작되어야 하기 때문에, 스택을 .bss 섹션에 … 더 읽기

[1000줄 OS 구현하기] 페이지 테이블

Featured image for [1000줄 OS 구현하기] 페이지 테이블

페이지 테이블 | OS in 1,000 Lines 앞서 “[1000줄 OS 구현하기] 프로세스”에서 간단한 멀티프로세싱을 구현해 보았다. Paging으로 가상 메모리를 관리하는 기능을 학습하고 구현해 보자. 1. 메모리 관리와 가상 주소 프로그램이 메모리에 접근할 때, CPU는 지정된 가상 주소(논리 주소)를 물리 주소로 변환한다. 이를 주소 바인딩(Address Binding), 주소 변환이라고 한다. 가상 주소와 물리 주소를 매핑하는 페이지 테이블이 … 더 읽기

[1000줄 OS 구현하기] 프로세스

Featured image for [1000줄 OS 구현하기] 프로세스

프로세스 | OS in 1,000 Lines 1. 프로세스 운영체제는 프로세스의 생성, 실행, 일시 중지, 종료 등의 상태 전환을 관리. 각 프로세스가 사용하는 시스템 자원(메모리, 파일 등)을 할당 및 관리한다. 2. PCB 가. PCB PCB에 포함되는 주요 정보 설명 프로세스 ID 각 프로세스를 고유하게 식별할 수 있는 번호 프로세스 상태 실행 중, 준비 완료, 대기 등 … 더 읽기