728x90
반응형

 

서버 렌더링의 이점

  • 데이터 가져오기: 데이터를 서버에서 직접 가져오면 더 빨리 가져올 수 있고, 클라이언트에서 요청할 필요가 줄어들어 성능이 좋아짐.
  • 보안: 중요한 정보나 로직을 서버에만 두면 클라이언트에게 노출되지 않아 보안이 강화됨.
  • 캐싱: 서버에서 렌더링한 결과를 저장해서 나중에 재사용하면, 매번 새로 렌더링할 필요가 없어서 성능이 좋아지고 비용도 절감됨.
  • 성능: 인터랙티브하지 않은 부분을 서버에서 렌더링하면 클라이언트에서 처리할 JavaScript가 줄어들어서, 느린 인터넷이나 성능이 낮은 기기에서도 더 나은 경험을 제공할 수 있음.
  • 초기 페이지 로드: 서버에서 HTML을 미리 생성하면, 사용자가 페이지를 더 빨리 볼 수 있음.
  • 검색 엔진 최적화: 서버에서 렌더링한 HTML을 검색 엔진이 인덱싱하기 쉽고, 소셜 네트워크에서 미리보기를 잘 생성함.
  • 스트리밍: 렌더링 작업을 나누어서 준비된 부분부터 클라이언트로 보내면, 사용자가 페이지의 일부를 더 빨리 볼 수 있음.

 

728x90
반응형
728x90
반응형

1. 예상 오류 처리 (Error Handling)

// 기본적인 try-catch를 사용한 오류 처리
async function getData() {
  try {
    const res = await fetch('https://api.example.com/data')
    if (!res.ok) {
      throw new Error('Failed to fetch data')
    }
    return res.json()
  } catch (error) {
    console.error('Error:', error)
    return null // 또는 기본값 반환
  }
}

2. 서버 작업에서의 오류 처리 (Server Actions Error Handling)

// app/actions.ts
'use server'

async function serverAction(data: FormData) {
  try {
    // 서버 작업 수행
    const result = await database.save(data)
    return { success: true, data: result }
  } catch (e) {
    // 구체적인 오류 타입 처리
    if (e instanceof DatabaseError) {
      return { success: false, error: '데이터베이스 오류' }
    }
    return { success: false, error: '알 수 없는 오류' }
  }
}


3. 서버 구성 요소의 오류 처리 (Server Component Error Handling)

// app/ServerComponent.tsx
async function ServerComponent() {
  const data = await getData()
  
  if (!data) {
    // 오류 상태를 명시적으로 처리
    return <div>데이터를 불러오는데 실패했습니다</div>
  }

  return <div>{data.map(item => <Item key={item.id} {...item} />)}</div>
}


4. 오류 경계 사용 (Error Boundaries)
이 부분이 특히 중요한데, Next.js 13 이상에서는 error.tsx 파일을 사용하여 오류 경계를 구현합니다:


// app/error.tsx
'use client' // 클라이언트 컴포넌트여야 함

interface ErrorBoundaryProps {
  error: Error
  reset: () => void
}

export default function ErrorBoundary({
  error,
  reset,
}: ErrorBoundaryProps) {
  return (
    <div className="error-container">
      <h2>문제가 발생했습니다!</h2>
      <p>{error.message}</p>
      <button onClick={reset}>다시 시도</button>
    </div>
  )
}


5. 중첩된 경로에서 오류 처리 (Nested Routes Error Handling)

app/
├── error.tsx      // 전역 오류 처리
├── layout.tsx
├── page.tsx
└── blog/
    ├── error.tsx  // 블로그 섹션 오류 처리
    └── page.tsx


6. 전역 오류 처리 (Global Error Handling)

// app/global-error.tsx
'use client'

export default function GlobalError({
  error,
  reset,
}: {
  error: Error & { digest?: string }
  reset: () => void
}) {
  return (
    <html>
      <body>
        <h1>심각한 오류가 발생했습니다</h1>
        <p>{error.message}</p>
        <button onClick={reset}>다시 시도</button>
      </body>
    </html>
  )
}


주요 포인트
1. 계층적 오류 처리
- error.tsx는 가장 가까운 상위 경로에서 오류를 포착
- 더 구체적인 오류 처리가 필요한 경우 하위 경로에 error.tsx 배치

2. 오류 복구 전략

// app/posts/error.tsx
'use client'

export default function ErrorBoundary({
  error,
  reset,
}: {
  error: Error
  reset: () => void
}) {
  useEffect(() => {
    // 오류 로깅
    console.error(error)
  }, [error])

  return (
    <div>
      <h2>포스트를 불러오는데 실패했습니다</h2>
      <button 
        onClick={() => reset()}
        className="retry-button"
      >
        다시 시도
      </button>
    </div>
  )
}


3. 오류 UI 구성
- 사용자 친화적인 메시지 제공
- 복구 옵션 제시 (reset 함수 활용)
- 필요한 경우 대체 콘텐츠 표시

4. 오류 타입별 처리

try {
  await someOperation()
} catch (error) {
  if (error instanceof NotFoundError) {
    // 404 처리
    notFound()
  }
  if (error instanceof AuthError) {
    // 인증 오류 처리
    redirect('/login')
  }
  // 기타 오류는 error.tsx에서 처리되도록 전파
  throw error
}

 

오류 핸들링을 통해
- 예측 가능한 오류 상황을 우아하게 처리
- 사용자 경험 개선
- 디버깅 및 유지보수 용이성 향상
- 애플리케이션의 안정성 확보

728x90
반응형

'코딩공부 > Next.js' 카테고리의 다른 글

Next.js의 Layout과 Template  (1) 2024.10.31
728x90
반응형

1. 레이아웃(Layout)
- 상태와 상호작용이 유지됩니다
- 여러 페이지에서 공유되는 UI를 위해 사용됩니다
- 렌더링 시 레이아웃은 자식 컴포넌트 간에 상태를 보존합니다
- 주로 사용되는 경우

// app/layout.tsx
export default function RootLayout({
  children,
}: {
  children: React.ReactNode
}) {
  return (
    <html>
      <body>
        <nav>공통 네비게이션</nav>
        {children}
        <footer>공통 푸터</footer>
      </body>
    </html>
  )
}



2. 템플릿(Template)
- 각 자식 페이지나 레이아웃이 새로 마운트될 때마다 새 인스턴스가 생성됩니다
- 상태가 유지되지 않고 DOM 요소가 재생성됩니다
- 페이지 전환 시마다 다시 마운트되어야 하는 기능에 적합합니다
- 주로 사용되는 경우

// app/template.tsx
export default function Template({
  children,
}: {
  children: React.ReactNode
}) {
  return (
    <div>
      {/* 애니메이션 효과나 로깅 등이 필요한 경우 */}
      {children}
    </div>
  )
}


사용 사례 비교:

레이아웃 사용이 적합한 경우:
- 헤더, 푸터, 사이드바와 같은 지속적인 UI 요소
- 전역 상태나 컨텍스트를 공유해야 하는 경우
- 페이지 간 이동시에도 상태를 유지해야 하는 경우

템플릿 사용이 적합한 경우:
- 페이지 전환 애니메이션
- 페이지 접속시마다 초기화되어야 하는 카운터나 타이머
- useEffect 훅이 페이지마다 다시 실행되어야 하는 경우
- 페이지별 피드백이나 분석 기능

실제 사용 예시

// app/layout.tsx (레이아웃)
export default function Layout({ children }) {
  const [user] = useState(getUser()) // 상태 유지됨
  
  return (
    <UserContext.Provider value={user}>
      <nav>
        <Logo />
        <UserProfile />
      </nav>
      {children}
    </UserContext.Provider>
  )
}

// app/template.tsx (템플릿)
export default function Template({ children }) {
  useEffect(() => {
    // 페이지 방문마다 실행됨
    logPageView()
  }, [])

  return (
    <div className="page-transition">
      {children}
    </div>
  )
}



핵심 차이점을 정리하면
1. 상태 유지: 레이아웃은 유지, 템플릿은 초기화
2. 마운팅: 레이아웃은 한 번, 템플릿은 매 페이지 전환마다
3. 용도: 레이아웃은 공통 UI, 템플릿은 페이지별 기능
4. 성능: 레이아웃이 더 효율적 (재렌더링이 적음)

728x90
반응형

'코딩공부 > Next.js' 카테고리의 다른 글

Next.js의 오류처리  (4) 2024.10.31
728x90
반응형

01-1 컴퓨터 네트워크를 알아야 하는 이유

  • 네트워크의 네트워크, 인터넷
    • 전 세계의 컴퓨터들이 서로 연결되어 통신할 수 있는 거대한 네트워크
    • TCP/IP 프로토콜을 기반으로 한 통신망
    • 정보 공유와 통신을 가능하게 하는 핵심 인프라
  • 개발자가 컴퓨터 네트워크를 알아야 하는 이유
    • 프로그램을 만드는 업무에서 네트워크 지식을 활용하는 경우
      • 웹 애플리케이션 개발
      • API 통신 구현
      • 데이터베이스 연동
      • 분산 시스템 구축
    • 프로그램을 유지 보수하는 업무에서 네트워크 지식을 활용하는 경우
      • 성능 최적화
      • 네트워크 오류 디버깅
      • 보안 취약점 분석
      • 트래픽 모니터링

01-2 네트워크 거시적으로 살펴보기

  • 네트워크의 기본 구조
    1. 호스트 (Host):
      • 설명: 네트워크에 연결된 모든 컴퓨터 장치를 의미합니다. 주로 서버와 클라이언트
      • 서버: 데이터를 저장하고 네트워크를 통해 다른 컴퓨터에 서비스나 자원을 제공하는 컴퓨터. 예를 들어, 웹 서버는 웹 페이지를 호스팅하고, 파일 서버는 파일을 저장합니다.
      • 클라이언트: 서버의 자원을 사용하거나 서비스를 요청하는 컴퓨터. 일반 사용자들이 사용하는 PC, 스마트폰 등이 여기에 해당됩니다.
    2. 네트워크 장비 (Network Devices):
      • 라우터 (Router): 서로 다른 네트워크 간의 데이터 패킷을 전달하고, 최적의 경로를 찾아주는 장치. 인터넷 연결을 가능하게 합니다.
      • 스위치 (Switch): 네트워크 내의 여러 장치를 연결하고, 데이터 패킷을 올바른 목적지로 전송합니다. LAN(Local Area Network)에서 주로 사용됩니다.
      • 허브 (Hub): 네트워크 장치들을 연결하는 기본 장치로, 데이터를 모든 포트로 전송하여 네트워크 트래픽이 많아질 수 있습니다. 스위치보다 비효율적입니다.
    3. 통신 매체 (Transmission Medium):
      • 유선 (Wired):
        • 이더넷 케이블 (Ethernet Cable): 가장 일반적인 유선 네트워크 매체로, 데이터를 전기 신호를 통해 전송합니다. 안정적이고 빠른 속도를 제공합니다.
        • 광섬유 케이블 (Fiber Optic Cable): 빛을 통해 데이터를 전송하며, 매우 빠른 속도와 긴 전송 거리를 제공합니다.
      • 무선 (Wireless):
        • Wi-Fi: 무선 네트워크 기술로, 라우터를 통해 무선 신호를 전송하여 장치들이 네트워크에 연결됩니다. 케이블 없이도 편리하게 사용 가능합니다.
        • Bluetooth: 단거리 무선 통신 기술로, 주로 주변기기 연결에 사용됩니다.
    4. 메시지 (Message):
      • 설명: 네트워크에서 전송되는 데이터 단위입니다. 패킷이라는 작은 단위로 쪼개져 전송되며, 최종적으로 재조합되어 사용자에게 전달됩니다.
      • 패킷 (Packet): 데이터가 전송되는 기본 단위로, 헤더와 페이로드로 구성됩니다. 헤더는 목적지와 출발지 주소를 포함하고, 페이로드는 실제 전송 데이터입니다.
      • 프레임 (Frame): 패킷을 포함한 데이터 링크 계층에서의 데이터 단위로, 물리적 네트워크에서 전송됩니다.
  • 범위에 따른 네트워크 분류
    • 설명: LAN은 물리적으로 가까운 위치에 있는 컴퓨터와 장치들이 연결된 네트워크입니다. 보통 한 건물 내 혹은 근처 여러 건물로 이루어진 작은 지역을 커버합니다.
    • 특징:
      • 한정된 공간: 학교, 사무실, 공장, 또는 캠퍼스와 같은 작은 지리적 범위에서 사용됩니다.
      • 높은 속도: 네트워크 속도가 매우 빠르며, 일반적으로 1Gbps 또는 그 이상의 속도를 지원합니다.
      • 낮은 오류율: 신호의 전송 거리가 짧고, 데이터 손실이 적습니다.
    • 예시: 학교 네트워크, 회사 내부 네트워크, 집안의 Wi-Fi 네트워크.
    WAN (Wide Area Network: 광역 통신망)
    • 설명: WAN은 넓은 지리적 범위에 걸쳐 있는 네트워크로, 서로 떨어진 위치에 있는 여러 LAN을 연결합니다. 이 네트워크는 전 세계에 걸쳐 있을 수 있습니다.
    • 특징:
      • 넓은 지역: 국가나 대륙을 포함하는 넓은 범위에서 사용됩니다.
      • 인터넷 연결: 인터넷 서비스 제공업체(ISP)를 통해 네트워크를 연결합니다. WAN은 다양한 통신 기술을 사용하여 데이터를 전송합니다.
      • 속도와 신뢰성: WAN의 속도는 ISP와 사용 기술에 따라 다르며, 신뢰성을 보장하기 위해 다양한 프로토콜을 사용합니다.
    • 예시: 인터넷, 기업의 국제 네트워크, 대규모 통신망.
  • LAN (Local Area Network: 근거리 통신망)
  • 메시지 교환 방식에 따른 네트워크 분류
    1. 회선 교환 방식 (Circuit Switching):
      • 설명: 통신을 시작하기 전에 두 지점 사이에 전용 통신 경로를 설정합니다. 이 경로는 통신이 끝날 때까지 유지되며, 다른 통신이 동일한 경로를 사용할 수 없습니다.
      • 특징: 고정 대역폭을 보장하고, 실시간 통신에 적합합니다. 예를 들어, 전화망이 대표적입니다.
      • 장점: 전용 경로로 인해 안정적인 연결과 낮은 지연 시간.
      • 단점: 비효율적 자원 사용, 사용되지 않는 동안에도 경로가 점유됨.
    2. 패킷 교환 방식 (Packet Switching):
      • 설명: 데이터를 작은 단위인 패킷으로 나누어 전송합니다. 각 패킷은 독립적으로 목적지로 전송되며, 최종 목적지에서 다시 조립됩니다.
      • 특징: 네트워크 자원을 효율적으로 사용하며, 각 패킷이 독립적인 경로로 전송될 수 있습니다. 인터넷이 대표적인 예입니다.
      • 장점: 효율적인 대역폭 사용, 동적 라우팅으로 안정성 증가.
      • 단점: 지연이 발생할 수 있으며, 실시간 통신에는 덜 적합할 수 있음.
  • 주소와 송수신지 유형에 따른 전송 방식
    1. 유니캐스트 (Unicast):
      • 설명: 1대1 통신 방식으로, 하나의 송신자가 하나의 수신자에게 데이터를 전송합니다.
      • 특징: 대부분의 일반적인 인터넷 통신 (예: 웹 브라우징, 이메일 등)이 유니캐스트 방식입니다.
      • 장점: 정확하고 개인화된 데이터 전송.
      • 단점: 많은 수신자에게 데이터를 전송할 때 비효율적.
    2. 브로드캐스트 (Broadcast):
      • 설명: 1대 다수 통신 방식으로, 하나의 송신자가 네트워크에 연결된 모든 장치에 데이터를 전송합니다.
      • 특징: 주로 로컬 네트워크(LAN)에서 사용됩니다. 모든 장치가 데이터를 수신합니다.
      • 장점: 네트워크의 모든 장치에게 동시에 정보를 전달.
      • 단점: 네트워크 트래픽 증가 및 효율성 저하.
    3. 멀티캐스트 (Multicast):
      • 설명: 1대 그룹 통신 방식으로, 하나의 송신자가 특정 그룹의 장치에만 데이터를 전송합니다.
      • 특징: 실시간 스트리밍, 온라인 회의 등에서 자주 사용됩니다.
      • 장점: 특정 그룹의 수신자들에게만 데이터를 전송하여 대역폭을 절약.
      • 단점: 네트워크와 장치의 멀티캐스트 지원 필요.

01-3 네트워크 미시적으로 살펴보기

  • 프로토콜: 네트워크 통신 규칙
  • 네트워크 참조 모델
    • OSI 모델
      • 7계층 구조
        • 물리 계층: 실제 물리적 연결을 담당.
        • 데이터 링크 계층: 데이터 프레임 전송 및 오류 검사.
        • 네트워크 계층: 패킷 전달 및 라우팅.
        • 전송 계층: 데이터 전송 신뢰성 보장.
        • 세션 계층: 통신 세션 관리.
        • 표현 계층: 데이터 변환 및 암호화.
        • 응용 계층: 사용자 애플리케이션과의 인터페이스.
    • TCP/IP 모델
      • 네트워크 인터페이스 계층: 데이터 링크 및 물리 계층 기능.
      • 인터넷 계층: 패킷 전달 및 라우팅.
      • 전송 계층: 데이터 전송 신뢰성 보장.
      • 응용 계층: 사용자 애플리케이션과의 인터페이스.
      • 실제 인터넷에서 사용되는 표준 모델로, 네트워크 통신을 효율적으로 수행
      • 참고링크: https://pyoja.tistory.com/261
  • 캡슐화와 역캡슐화
    1. 캡슐화: 데이터가 상위 계층에서 하위 계층으로 전달될 때, 각 계층은 데이터에 특정 헤더를 추가해요. 예를 들어, 응용 계층에서 생성된 데이터는 전송 계층으로 전달되며, 전송 계층은 데이터에 세그먼트 헤더를 추가합니다.
    2. 역캡슐화: 데이터가 하위 계층에서 상위 계층으로 전달될 때, 각 계층은 헤더를 제거해요. 예를 들어, 데이터 링크 계층에서 받은 프레임은 네트워크 계층으로 전달되며, 네트워크 계층은 프레임 헤더를 제거하고 패킷을 처리합니다.
  • PDU: 각 계층별 데이터 단위를 의미
    • 응용 계층: 메시지
    • 전송 계층: 세그먼트
    • 네트워크 계층: 패킷
    • 데이터 링크 계층: 프레임
  • 트래픽과 네트워크 성능 지표
    1. 처리율 (Throughput):
      • 설명: 단위 시간당 실제로 전송되는 데이터양.
      • 측정 단위: bps (bits per second).
      • 의미: 네트워크의 실질적인 성능 지표.
    2. 대역폭 (Bandwidth):
      • 설명: 네트워크에서 최대로 전송할 수 있는 데이터의 양.
      • 의미: 네트워크의 이론적인 최대 전송 용량.
      • 특징: 실제 처리율은 대역폭보다 작음.
    3. 패킷 손실 (Packet Loss):
      • 설명: 네트워크에서 전송 중 손실되는 패킷의 비율.
      • 원인: 네트워크 혼잡, 하드웨어 문제 등.
      • 영향: QoS(서비스 품질)에 영향을 미치는 중요 요소.

 

 

 

 

728x90
반응형
728x90
반응형

Chapter15. 파일 시스템

학습목표

  • 파일에 대해 이해합니다
  • 디렉터리에 대해 이해합니다
  • 파티셔닝과 포매팅이 무엇인지 이해합니다
  • 파일 시스템의 파일 할당 방법을 학습합니다
  • FAT 파일 시스템과 유닉스 파일 시스템을 학습합니다

파일

  • 하드디스크나 SSD와 같은 보조기억장치에 저장된 관련 정보의 집합
  • 의미 있고 관련 있는 정보를 모은 논리적인 단위

디렉터리(폴더)

  • 여러 개의 파일 또는 디렉터리를 묶어서 관리할 수 있음
  • 경로: 디렉터리를 이용해 위치를 특정 짓는 정보
  • 절대 경로: 루트 디렉터리부터 시작하는 경로
  • 상대 경로: 현재 디렉터리부터 시작하는 경로

파티셔닝

  • 저장 장치의 논리적인 영역을 구획하는 작업

포매팅

  • 파일 시스템을 설정하여 어떤 방식으로 파일을 저장하고 관리할 것인지를 결정하고, 새로운 데이터를 쓸 준비를 하는 작업

파일 할당 방법

  1. 연속 할당 (Contiguous Allocation):
    • 설명: 파일을 디스크의 연속된 블록에 할당합니다.
    • 장점: 간단하고 빠른 액세스.
    • 단점: 외부 단편화 문제가 발생할 수 있음.
  2. 불연속 할당 (Non-contiguous Allocation):
    • 설명: 파일이 디스크의 여러 비연속적인 블록에 할당됩니다.
    • 장점: 외부 단편화 문제를 해결.
    • 단점: 복잡한 관리, 탐색 속도 저하.
  3. 연결 할당 (Linked Allocation):
    • 설명: 파일 블록들이 링크 리스트로 연결되어 있습니다.
    • 장점: 외부 단편화 해결.
    • 단점: 탐색 속도 느림, 추가적인 저장 공간 필요.
  4. 색인 할당 (Indexed Allocation):
    • 설명: 파일의 모든 블록 번호를 색인 블록에 저장하여 관리합니다.
    • 장점: 빠른 액세스, 외부 단편화 문제 해결.
    • 단점: 색인 블록을 위한 추가 공간 필요.

파일 시스템

FAT 파일 시스템 (File Allocation Table)

  • 설명: FAT는 마이크로소프트가 개발한 파일 시스템으로, 주로 플로피 디스크와 초기 하드 드라이브에 사용되었어요. FAT12, FAT16, FAT32와 같은 여러 버전이 있습니다.
  • 장점:
    • 간단하고 널리 사용됨
    • 호환성이 뛰어남 (다양한 운영체제와 디바이스에서 사용 가능)
  • 단점:
    • 큰 파일과 드라이브에서 비효율적 (특히 FAT12, FAT16)
    • 보안과 고급 기능이 부족

유닉스 파일 시스템 (UFS, ext 등)

  • 설명: 유닉스 파일 시스템은 유닉스 및 유닉스 계열 운영체제 (리눅스 포함)에서 사용됩니다. 일반적인 예로는 ext2, ext3, ext4, UFS 등이 있습니다.
  • 장점:
    • 안정적이고 효율적
    • 대용량 파일과 드라이브에서 성능이 우수
    • 저널링, ACL(액세스 제어 목록), 스냅샷 등의 고급 기능 제공
  • 단점:
    • FAT보다 복잡하여 설정 및 관리가 어려울 수 있음
    • 호환성이 제한될 수 있음 (특히 윈도우 시스템과)

마운트

  • 운영체제에서 저장 장치를 사용하기 위해 특정 파일 시스템을 디렉터리 트리에 연결하는 과정
  • 외부 저장 장치를 운영체제에 인식시키고, 해당 장치의 데이터를 읽고 쓸 수 있게 해주는 작업
728x90
반응형

'코딩공부 > 운영체제' 카테고리의 다른 글

Chapter14. 가상 메모리  (1) 2024.10.25
Chapter13. 교착 상태(데드락)  (0) 2024.10.24
Chapter12. 프로세스 동기화  (0) 2024.10.24
Chapter10. 프로세스와 스레드  (2) 2024.10.24
Chapter09. 운영체제 시작하기  (0) 2024.10.24
728x90
반응형

Chapter14. 가상 메모리

학습목표

  • 스와핑이 무엇인지 이해합니다
  • 연속 메모리 할당 기법과 외부 단편화 문제를 이해합니다
  • 가상 메모리 관리 기법인 페이징의 개념과 작동을 이해합니다
  • 요구 페이징의 개념과 페이지 교체 알고리즘을 이해합니다
  • 스래싱과 그를 해결하기 위한 프레임 할당을 이해합니다

스와핑

  • 현재 실행되지 않은 프로세스들을 임시로 보조기억장치 일부 영역으로 쫓아내고, 그렇게 해서 생긴 메모리상의 빈 공간에 또 다른 프로세스를 적재하여 실행하는 방식
  • 스왑 영역: 프로세스들이 쫓겨나는 보조기억장치의 일부영역
  • 스왑 아웃: 프로세스가 메모리에서 스왑 영역으로 옮겨지는 것
  • 스왑 인: 반대로 스왑 영역에서 메모리로 오는 것

메모리 할당

  • 최초 적합: 프로세스가 적재될 수 있는 공간을 발견하는 즉시 메모리를 할당하는 방식
  • 최적 적합: 프로세스가 적재될 수 있는 공간 중 가장 작은 공간에 배치하는 방식
  • 최악 적합: 프로세스가 적재될 수 있는 공간 중 가장 큰 공간에 배치하는 방식

외부 단편화

  • 프로세스를 할당하기 어려울 만큼 작은 메모리 공간들로 인해 메모리가 낭비되는 현상

페이징

  • 메모리의 물리 주소 공간을 프레임 단위로 자르고, 프로세스의 논리 주소 공간을 페이지 단위로 자른 뒤 페이지를 프레임에 할당하는 가상 메모리 관리 기법
  • 페이징 시스템에서의 스왑 아웃은 페이지아웃, 스왑 인은 페이지 인이라고 부름
  • 페이지 테이블: 페이지의 번호를 이용해 페이지가 적재된 프레임을 찾을 수 있음

요구 페이징

  • 프로세스를 메모리에 적재할 때 처음부터 모든 페이지를 적재하지 않고 필요한 페이지만을 메모리에 적재하는 기법

순수 페이징 기법

  • 프로그램이 실행되기 전에 모든 페이지를 메모리에 미리 로드하지 않고, 필요한 페이지만 요청 시 메모리에 로드합니다. 쉽게 말해, 필요한 순간에만 필요한 데이터를 가져오는 방식

페이지 교체 알고리즘

  • 새로운 페이지를 메모리에 로드할 때 어떤 페이지를 제거할지 결정하는 방법
  1. FIFO (First-In, First-Out)
    • 설명: 가장 먼저 들어온 페이지를 가장 먼저 제거하는 방식입니다.
    • 장점: 단순하고 구현이 쉬움.
    • 단점: 오래된 페이지가 반드시 덜 사용된 것은 아니므로 비효율적일 수 있음.
  2. LRU (Least Recently Used)
    • 설명: 가장 오랫동안 사용되지 않은 페이지를 제거하는 방식입니다.
    • 장점: 자주 사용되는 페이지를 유지하여 성능 향상.
    • 단점: 구현이 복잡할 수 있음.
  3. LFU (Least Frequently Used)
    • 설명: 사용 빈도가 가장 적은 페이지를 제거하는 방식입니다.
    • 장점: 자주 사용되지 않는 페이지를 제거하여 효율적.
    • 단점: 사용 빈도 계산이 복잡할 수 있음.
  4. OPT (Optimal)
    • 설명: 미래에 가장 늦게 사용할 페이지를 제거하는 이상적인 방식입니다.
    • 장점: 가장 효율적인 방법.
    • 단점: 미래 예측이 불가능하므로 실제 구현이 어려움.

스래싱

  • 프로세스가 실제 실행되는 시간보다 페이징에 더 많은 시간을 소요하여 성능이 저하되는 문제

스레싱을 해결하기 위한 프레임 할당 방식

  1. 고정 할당 방식:
    • 설명: 각 프로세스에 고정된 수의 프레임을 할당하는 방식입니다.
    • 장점: 예측 가능한 메모리 사용, 간단한 구현.
    • 단점: 비효율적인 메모리 사용 가능성.
  2. 가변 할당 방식:
    • 설명: 프로세스의 필요에 따라 동적으로 프레임을 할당하는 방식입니다.
    • 장점: 메모리 활용도 극대화, 유연성 증가.
    • 단점: 복잡한 관리, 예측 어려움.
  3. 워킹 셋(Working Set) 모델:
    • 설명: 프로세스가 일정 기간 동안 자주 참조하는 페이지 집합을 기준으로 프레임을 할당하는 방식입니다.
    • 장점: 효율적인 메모리 사용, 스레싱 방지.
    • 단점: 매개변수 설정 복잡.
  4. 페이지 폴트 빈도(Page Fault Frequency) 모델:
    • 설명: 페이지 폴트 발생 빈도를 기준으로 프로세스의 프레임 수를 조절하는 방식입니다.
    • 장점: 스레싱 방지, 동적 조절.
    • 단점: 정확한 페이지 폴트 빈도 측정 필요.
728x90
반응형

'코딩공부 > 운영체제' 카테고리의 다른 글

Chapter15. 파일 시스템  (1) 2024.10.25
Chapter13. 교착 상태(데드락)  (0) 2024.10.24
Chapter12. 프로세스 동기화  (0) 2024.10.24
Chapter10. 프로세스와 스레드  (2) 2024.10.24
Chapter09. 운영체제 시작하기  (0) 2024.10.24
728x90
반응형

Chapter13. 교착 상태(데드락)

학습목표

  • 교착 상태가 무엇인지 이해합니다
  • 교착 상태는 어떤 상황에서 발생하는지 이해합니다
  • 교착 상태를 예방하고, 회피하고, 검출하는 방법을 학습합니다

**교착 상태(Deadlock)**란?

  • 여러 프로세스나 스레드가 서로 자원을 기다리며 무한정 대기 상태에 빠져 작업을 진행하지 못하는 상황

발생 상황

  • 상호 배제 상황일 때
  • 자원을 점유하고 대기할 때
  • 자원을 비선점 상태일때
  • 자원을 해제하지 않고 무한 대기할 때

예방 방법

  • 자원 할당 전에 모든 자원을 확보
  • 요청 순서를 정해 자원 할당

회피 방법

  • 자원 상태를 모니터링해 교착 상태가 발생하지 않도록 조정
  • 은행원 알고리즘을 사용

검출 방법

  • 시스템의 자원 그래프를 사용해 교착 상태를 검사
  • 주기적으로 검사하여 교착 상태를 해결
728x90
반응형

'코딩공부 > 운영체제' 카테고리의 다른 글

Chapter15. 파일 시스템  (1) 2024.10.25
Chapter14. 가상 메모리  (1) 2024.10.25
Chapter12. 프로세스 동기화  (0) 2024.10.24
Chapter10. 프로세스와 스레드  (2) 2024.10.24
Chapter09. 운영체제 시작하기  (0) 2024.10.24
728x90
반응형

Chapter12. 프로세스 동기화

학습목표

  • 동기화란 무엇인지 알아봅니다
  • 공유 자원과 임계 구역 문제를 이해합니다
  • 임계 구역 문제를 해결하기 위한 동기화 기법을 학습합니다

동기화의 의미

  • 프로세스 동기화: 프로세스들 사이의 수행 시기를 맞추는 것
    • 실행 순서 제어: 프로세스를 올바른 순서대로 실행하기
    • 상호 배제: 동시에 접근해서는 안 되는 자원에 하나의 프로세스만 접근하게 하기
  • 즉, 동기화에는 실행 순서 제어를 위한 동기화가 있고, 상호 배제를 위한 동기화가 있다

공유자원과 임계 구역

  • 공유 자원: 프로세스들이 사용하는 공동의 자원
    • 동시에 실행하면 문제 발생
  • 임계 구역: 동시에 실행하면 문제가 발생하는 자원에 접근하는 코드 영역
  • 운영체제는 임계 구역 문제를 아래 세 가지 원칙 하에 해결함
    • 상호배제
    • 진행
    • 유한 대기

동기화 기법

  1. 뮤텍스 락 (Mutex Lock):
    • 설명: 상호 배제를 통해 한 번에 하나의 스레드만 리소스에 접근할 수 있도록 하는 락.
    • 용도: 한 스레드가 작업을 끝낼 때까지 다른 스레드가 접근하지 못하게 막음.
    • 장점: 단순하고 직관적.
    • 단점: 데드락 발생 가능성.
  2. 세마포 (Semaphore):
    • 설명: 카운터를 이용해 특정 수의 스레드가 동시에 리소스에 접근할 수 있도록 하는 동기화 도구.
    • 용도: 리소스 접근 제한, 큐 크기 조절 등.
    • 장점: 다수의 스레드 동시 접근 허용.
    • 단점: 관리 복잡도 증가.
  3. 모니터 (Monitor):
    • 설명: 락과 조건 변수를 포함한 고수준의 동기화 매커니즘.
    • 용도: 객체의 상태를 보호하고, 조건에 따라 스레드 실행을 제어.
    • 장점: 코드가 더 간결하고 유지보수 쉬움.
    • 단점: 구현 복잡.
728x90
반응형

'코딩공부 > 운영체제' 카테고리의 다른 글

Chapter15. 파일 시스템  (1) 2024.10.25
Chapter14. 가상 메모리  (1) 2024.10.25
Chapter13. 교착 상태(데드락)  (0) 2024.10.24
Chapter10. 프로세스와 스레드  (2) 2024.10.24
Chapter09. 운영체제 시작하기  (0) 2024.10.24

+ Recent posts