setup

  • 새로운 옵션
  • 컴포넌트 안에서 composition api 사용하는 진입점

호출 시점

  • 컴포넌트 instance가 생성될때 props 초기화 이후
  • beforeCreate 훅 이전에 호출
  • object 반환
  • object 속성은 컴포넌트 템플릿에서 사용된다
<template>
  <div>{{ count }} {{ object.foo }}</div>
</template>

<script>
  import { ref, reactive } from 'vue'

  export default {
    setup() {
      const count = ref(0)
      const object = reactive({ foo: 'bar' })

      // expose to template
      return {
        count,
        object
      }
    }
  }
</script>

setup을 통해서 반환되는 refs는 자동적으로 템플릿 접근 시 감싸있지 않다. 그래서 .value를 사용할 필요가 없다

  • setup은 render 함수를 반환 할 수 있음

    같은 범주에 선언되어 있는 reative state를 바로 접근 할 수 있게 해줌

import { h, ref, reactive } from 'vue'

export default {
  setup() {
    const count = ref(0)
    const object = reactive({ foo: 'bar' })

    return () => h('div', [count.value, object.foo])
  }
  • aruguments

    • props의 첫번째 인자를 함수에서 받음

        export default {
          props: {
            name: String
          },
          setup(props) {
            console.log(props.name)
          }
        }
    • props 객체는 반응성임

      watchEffect, watch로 새로운 props가 전달될 때 확인할 수 있음

        export default {
          props: {
            name: String
          },
          setup(props) {
            watchEffect(() => {
              console.log(`name is: ` + props.name)
            })
          }
        }

      props객체를 해체를 하면 반응성을 잃음

        export default {
          props: {
            name: String
          },
          setup({ name }) {
            watchEffect(() => {
              console.log(`name is: ` + name) // Will not be reactive!
            })
          }
        }

      props객체는 개발하는 동안 불변

      만약, 사용자 코드를 변경하려고 시도하면 경고함

      setup의 두번째 인자는 context 객체(vue2와 this처럼 ) 제공

        const MyComponent = {
          setup(props, context) {
            context.attrs
            context.slots
            context.emit
          }
        }

      attrs와 slots는 내부 구성요소의 proxy

      이를 통해 항상 최근 값을 노출하고 오래된 참조에 접근 하지 않고도 값을 구조화 할 수 있음

        const MyComponent = {
          setup(props, { attrs }) {
            // 최근 상테를 가져옴
            function onClick() {
              console.log(attrs.foo) // 가장 최근 참조 보장
            }
          }
        }
  • this

    setup()에서는 사용 불가

'Vue.js > vue3' 카테고리의 다른 글

[vue3] Reactivity Utilities  (0) 2020.09.30
[vue3] composition API  (0) 2020.09.30
[vue3] Reactivity APIs  (0) 2020.07.02
[vue3] vue 2 > vue3  (0) 2020.07.02

사용해야하는 이유

  • 큰 컴포넌트의 가독성을 높임
  • 뷰 2는 코드 재사용시 약점 있음
  • typescript 지원 제한

가독성 문제점

vue2 문제점

  • 검색창을 만드는 경우 vue2는 같은 정보를 여러 곳에 추가해야 함
  • components, props, data, computed, methods, lifecycle methods ⇒ 6개의 옵션이 있음
  • 아주 복잡함 !!! 한번에 두면 더 읽기 쉬울 것 같음
export default{
    data() {
        // search data
        // sorting 
    }
    methods:{
        // search data
        // sorting
    }
}

vue 3 해결책

  • composition api 를 통해 새로운 구문을 만듦
  • 단, 문제점이 있음
    • setup 에 다 넣는 경우 setup이 길어 질수 있음
export default {
    setup() {
        // search data
        // sorting
    }
}
  • 해결책
export default {
    setup() {
        return { ...useSearch(), ...useSorting() }
    }
}
function useSearch() {
    // search data
}
function useSorting() {
    // sorting
}

컴포넌트 재사용의 문제점

vue 2 문제점- mixins

단점

  • 변수명 충돌 가능
  • 관계가 명확하지 않음
  • 재사용 하기 어려움
const productSearchMixin = {
    data () {
        return {
                // search data
        }
    },
    methods: {
        // search func
    }
}

const resultSortMixin = {
    data() {
        return {
            // sorting data
        }
    },
    methods: {
        // sorting func
    }
}
export default {
    mixins: [productSearchMixin, resultSortMixin]
}

vue3 해결책

  • 각각의 함수는 수정 가능한 mixins을 반환

장점

  • 재사용 용이
  • 관계가 분명해짐

단점

  • 명확한 이름을 지정해 줘야함
  • 복잡한 porperty 추가시 mixin 어떤 porperty가 보여지는지 알아야함
// mixins/factories/search.js
export default function searchMixinFactory({...}) {
    // search function
}
//  mixins/factories/sorting.js
export default function sortingMixinFactory({...}) {
    // sorting function
}
// search.vue
// 이 파일에서 위의 두개의 파일로 각각의 설정들을 보냄
import searchMixinFactory from '@mixins/factories/search'
import sortingMixinFactory from '@mixins/factories/sorting'

export default {
    mixins: [
        searchMixinFactory({
            namespace: 'productSearch'
        }),
        sortingMixinFactory({
            namespace: 'resultSorting'
        })
    ]
}

Mixins problem 해결책 - scoped slots

단점

  • 들여쓰기 증가
  • 노출된 properties 만 템플릿에서 사용가능하다
  • 한 개 대신 세 개의 컴포넌트를 사용해야함 > 약간 귀찮음
// componets/generic-sorting.vue
<script>
export default {
    props: ['input','options'],

}
</script>
<template>
    <div>
        <slot v-bind ="{options, index,output}"/>
    </div>
</template>
// componets/generic-search.vue
<script>
export default {
    props: ['getSearch']
}
</script>
<template>
    <div>
        <slot v-bind="{query, results, rum}"/>
    </div>
</template>
// search.vue
<template>
    <GenericSearch :get-results="getProducts" v-slot="productSearch">
        <GenericSorting 
            :input = "productSearch.result"
            :options=resultSortingOptions"
            v-slot="resultSorting"
        >

vue3 의 composition api

장점

  • 약간의 코드로 컴포넌트에 쉽게 넣을 수 있음
  • 친숙한 코드
  • mixins과 scoped slot 의 유연성 (함수에서만)

단점

  • 배움이 필요함
// use/search.js
export default function useSearch(getResults) {
    // search func
}
// use/sorting.js
export default function useSorting({input, options}) {
    // sorting func
}
// search.vue
import useSearch form '@use/search'
import useSorting from '@use/sorting'
export default {
    setup() {
        const productSearch = useSearch(~)
        const resultSorting = useSorting({~~})

        return {productSearch, resultSorting}
    }
}

언제 composition api 사용하는가

  • 컴포넌트가 너무 커지고 구조화를 원할때
  • 컴포넌트 재사용 높임
  • typescript support

'Vue.js > vue3' 카테고리의 다른 글

[vue3] Reactivity Utilities  (0) 2020.09.30
[vue3] composition API  (0) 2020.09.30
[vue3] Reactivity APIs  (0) 2020.07.02
[vue3] setup  (0) 2020.07.02

문제

[링크] 프로그래머스 이중우선순위큐

아이디어

  • 처음에는 priority_queue로 풀려고 했는데 생각해보니 priority_queue는 index를 직접 접근을 못하는걸로 알고 있다

  • 그래서 앞뒤로 삽입,삭제 가능한 deque를 사용하기로함

  • string 이 값이므로 일단 D인지 I인지를 구문해야함

  • 구분한후 뒤에 숫자는 문자이기에 string 헤더를 넣어서 stoi(문자열을 숫자로 바꿔주는 함수) 사용

풀이 순서

  1. 일단 I가 나오는 경우는 삽입 후 소팅 바로 함 (오름차순)
  2. D인경우 중 문제에서 보면 비어있는데 삭제 하려는 경우는 무시하라고 함 -> 여기에서 비어있지 않은 경우 연산을 하도록 조건 걸어줌
    1. 1이면 가장 큰 값 삭제
    2. -1 이면 가장 작은 값 삭제
  3. 큐가 비어있는경우 0,0 강제로 넣음
  4. 큐에 값이 있는 경우 가장 큰 수, 가장 작은 수 순으로 넣음

코드

#include <string>
#include <vector>
#include<queue>
#include<string>
#include<iostream>
#include<cstdio>
#include<functional>
#include<deque>
#include<algorithm>
using namespace std;

vector<int> solution(vector<string> operations) {
    vector<int> answer;
    deque<int> dq;
    for(int i=0;i<operations.size();i++){
        string s=operations.at(i);
        int num = stoi(s.substr(2, s.length()-2));

        if(s[0]=='I'){
            dq.push_back(num);
            sort(dq.begin(),dq.end());
        } else if(!dq.empty()) {
              if (num==1){
                dq.pop_back();
                } else if (num == -1){
                dq.pop_front();
            }
        }
    }
    if(dq.empty()){
        answer.push_back(0);
        answer.push_back(0);
    } else {
        answer.push_back(dq.back());
        answer.push_back(dq.front());
    }
    return answer;
}

정답확인

깃 링크

[링크] 이중우선순위큐-프로그래머스

'Algorithm' 카테고리의 다른 글

[개념] Union-Find 기법  (0) 2020.10.21
[프로그래머스] 디스크컨트롤러 - 힙  (0) 2020.06.24
[프로그래머스-그리디] 체육복  (0) 2020.05.11

문제

문제: 프로그래머스-디스크컨트롤러

주의

  • 문제를 잘 읽어야한다
  • 작업하는 것이 없는 경우 나머지 작업들중 가장 시작이 빠른 작업 진행

문제 해결 아이디어

  • 전제가 아무것도 없는 경우 가장 먼저 작업하는 것을 실행하기에 배열을 sort해야함
    • sort하는 경우 시작 시간이 같으면 시간이 더 오래걸리는 순으로 소팅
  • 우선순위 큐에서 정렬하는 기준은 소요 시간이 가장 긴것을 기준으로 정렬
    • 왜? 그래야 빨리 끝냄 오래된것 먼저 해결~
  • 변수 - 작업 여부관련 변수(idx), 시작 시간 판별 변수(time)
  • idx가 jobs보다 작거나 pq가 비어있지 않은 경우 진행 가능
    • 만약 시작 시간이 현재 시간보다 작거나 같고 (AND) idx가 jobs크기보다 작으면
      • 큐에 삽입 & idx++ 계속 진행
    • 작업 시작 시간이 현재 시간보다 크면 작업 시간이 큰것 부터 실행 단 비어있을때까지
      • 첫번째 값 time+=큐의 첫번째 진행시간
      • answer = answer+ (time + 큐의 진행시간) - 큐의 시작시간
        즉, answer+=time-큐의 시작시간
    • 큐 비어있는데 아직 작업 완료 안함 그리고 아직 시작 시간이 먼 경우
      • time 기준을 현재 idx의 시작 시간으로 변경

코드

#include<cstdio>
#include<queue>
#include<iostream>
#include<algorithm>
#include<vector>
#include<functional>
using namespace std;
// 아무작업도 하고있지 않는 경우 먼저 들어온 요청 부터 작업 수행
// idea 
// 1. 실행순으로 입력값을 sort한다 만약 시작 시간이 같으면 진행시간이 더 짧은걸루
// 2. 우선순위 큐 조건에서 실행시간이 짧은 것 먼저 pop
// 
bool jobscompare(vector<int> a, vector<int> b){
    if(a[0]==b[0]){
        return a[1]<b[1];
    }else {
        return a[0]<b[0];
    }
}
struct compare{
    bool operator()(vector<int> a, vector<int> b){
        return a[1]>b[1];
    }
};
int solution(vector<vector<int>> jobs){
    int answer=0;
    int time=0; // 현재 시간
    int idx =0; // 작업 관련 index

    sort(jobs.begin(), jobs.end(), jobscompare); 
    priority_queue<vector<int>, vector<vector<int>>, compare> pq;
    while(idx<jobs.size()||!pq.empty()){
        if(idx<jobs.size()&&time>=jobs[idx][0]){
            pq.push(jobs[idx]);
            idx++;
            continue;
        }
        if(!pq.empty()){
            vector<int> tmp = pq.top();
            time+=tmp[1];
            answer+=time-tmp[0];
            pq.pop();
        } else {
            // pq가 비어있으면서 다음 값이 있는데 엄청 멀리 있는경우 time을 멀리있는 작업의 시작시간으로 설정 
            time=jobs[idx][0];
        }
    }
    return answer/jobs.size();
} 
int main(){
    vector<vector<int>> jobs{{0,3},{1,9},{2,6}};
    int ans = solution(jobs);
    cout<<ans;
}

인증

배운점

  • 문제를 잘 읽자 이번에는 아무것도 없으면 먼저 시작하는것부터 시작한다를 빼먹어서 삽질좀함
  • priority_queue할때 맨마지막 비교 관련 함수는 구초체로 선언해야한다

'Algorithm' 카테고리의 다른 글

[개념] Union-Find 기법  (0) 2020.10.21
[프로그래머스]이중우선순위큐 - 힙  (0) 2020.06.25
[프로그래머스-그리디] 체육복  (0) 2020.05.11

기본

  • 안드로이드를 프로젝트를 세팅했을 때
  • 프로젝트 이름으로 titleBar가 생성되는 것을 볼 수 있다.
  • 하지만 커스텀하게 titleBar을 만들수가 없어 titleBar가 없는 App이 많다

TitleBar 없애는 법

  • 처음 세팅시 생기는 /res/values/styles.xml

    • 해당파일은 프로젝트 스타일 세팅 파일
        <resources>

        <!-- Base application theme. -->
        <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
          <!-- Customize your theme here. -->
          <item name="colorPrimary">@color/colorPrimary</item>
          <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
          <item name="colorAccent">@color/colorAccent</item>
        </style>
  • title Bar을 없애고 싶은 경우 아래 코드를 추가 해주면 된다

    <resources>
    
      <!-- Base application theme. -->
      <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
          <!-- Customize your theme here. -->
          <item name="colorPrimary">@color/colorPrimary</item>
          <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
          <item name="colorAccent">@color/colorAccent</item>
      <!--        no titleBar    -->
          <item name="windowActionBar">false</item>
          <item name="windowNoTitle">true</item>
      </style>
    

```

초기세팅

  1. git repository 생성
  2. 내 컴퓨터에서 directory 생성 수 git repository clone
$git clone ~~~~~

cf ) git repository 와 내가 생성한 dir 명이 다른 경우 매번 파일을 옮겨야 하는 불편함이 생김

그러니 repository 와 dir 을 같게 하는게 편함

  1. 내 컴퓨터에서 git repository clone 한 dir 에서 .git 파일을 찾음
$ls -al 
  1. vue 초기 세팅 설치
$vue init webpack <project-name>
  • webpack 을 이용한 vue-cli 초기 세팅

  • 예시 ) 해당 값들은 package.json 에서 변경 가능

  1. vue-cli을 이용한 내 컴퓨터의 초기 프로젝트 세팅을 git에 올림
# add
# . 은 현재 stage에 있는 모든 파일 올림
$ git add . 

# commit 
$ git commit -m '~~~~커밋할 메시지~~~'

# push
# 처음 push할때는 git 계정 물어봄
# 만약 게정을 물어보지 않으면 권한 문제가 있어 github에서 따로 설정해줘야함
$ git push

# status
# 현재 내 브랜치에서 깃 상태 보기위한 명령어
$ git status

Vue 파일 실행 원리

vue 는 웹팩을 통해 웹에서 읽을 수 있는 html 형태로 바꿔줌

  1. index.html

    • 처음 읽히는 파일 여기에서 App.vue를 불름
  2. App.vue

    • 찐으로 뷰가 처음 시작되는 부분
  3. main.js 를 처음 읽음

  4. main.js 안에 http import

  5. import 시킨 http관련 파일(http/index.js) 를 처음 읽음 여기에서 라우터 사용하면서 페이지 불러옴

  • main.js
    • 용도 - router, vuex 와 같은 plugins import 관련만 사용
    • 주의 - 로직은 안들어가는게 좋음
      • 왜? 유지보수 때문에, 문제가 생기면 언제 main.js를 다 까봄..?
      • 다른 js파일로 뺄것 예를 들면 http/index.js , store.js , etc
  • config
    • 어떤 포트로 띄우며 url 가 뭐고 이런거 설정되어있음
    • 서버에 따라서 설정을 다르게 하려면 파일을 나누면됨
    • config/env.js
      • 포트번호, url과 같은 환경 설정 파일
      • 서버 프로필 어디를 물로 실행 하는지에 관한 설정파일
  • http/index.js
    • .config 에서 설정한 환경 설정을 불러다가 씀
    • axios 관련
// index.js 파일 내용
// BASE_URL 은 .config 에서 설정해놓은거 불러다가 http 요청할거다라고 명시
axios.defaults.baseURL = process.env.BASE_URL

cf ) main.js , index.js 관계는 무엇?

  • index.js - 뭣도 없는 html 뷰
  • main.js - 라우터 등등 javascript, 포트.. 등등

cf ) 파일 구조 잡을 때 주의

  • views dir - 실제 그려지는 뷰
  • component dir - 페이지에서 공통으로 쓰는 것들
    • ex ) 뷰 타이알로그를 여러곳에서 쓰는데 이걸 커스터마이징 하고 싶을 때 여기에 넣음# 1주차 (2020-06-11)

초기세팅

  1. git repository 생성

  2. 내 컴퓨터에서 directory 생성 수 git repository clone


$git clone

~\\~

cf ) git repository 와 내가 생성한 dir 명이 다른 경우 매번 파일을 옮겨야 하는 불편함이 생김

그러니 repository 와 dir 을 같게 하는게 편함

  1. 내 컴퓨터에서 git repository clone 한 dir 에서 .git 파일을 찾음

$ls -al
  1. vue 초기 세팅 설치

$vue init webpack <project-name>
  • webpack 을 이용한 vue-cli 초기 세팅

  • 웹펙이란?

프로젝트 세팅 방법

  • 예시 ) 해당 값들은 package.json 에서 변경 가능

![1%202020%2006%2011%20bcfcec2f4dfa4a758ba34a5b88da46bd/_2020-06-11__5.52.54.png](1%202020%2006%2011%20bcfcec2f4dfa4a758ba34a5b88da46bd/_2020-06-11__5.52.54.png)

  1. vue-cli을 이용한 내 컴퓨터의 초기 프로젝트 세팅을 git에 올림

# add .

# . 은 현재 stage에 있는 모든 파일 올림

$ git add .

# commit

$ git commit -m '~

~커밋할 메시지~

'

# push

# 처음 push할때는 git 계정 물어봄

# 만약 게정을 물어보지 않으면 권한 문제가 있어 github에서 따로 설정해줘야함

$ git push

# status

# 현재 내 브랜치에서 깃 상태 보기위한 명령어

$ git status
  • cf ) windows 에서 계정이 엉켰을때 참고 한 사이트

https://yunseul-light.blogspot.com/2017/08/github-windows-git.html

Vue 파일 실행 원리

vue 는 웹팩을 통해 웹에서 읽을 수 있는 html 형태로 바꿔줌

  1. index.html
  • 처음 읽히는 파일 여기에서 App.vue를 불름
  1. App.vue
  • 찐으로 뷰가 처음 시작되는 부분

    1. main.js 를 처음 읽음

    2. main.js 안에 http import

    3. import 시킨 http관련 파일(http/index.js) 를 처음 읽음 여기에서 라우터 사용하면서 페이지 불러옴

  • main.js

    • 용도 - router, vuex 와 같은 plugins import 관련만 사용

    • 주의 - 로직은 안들어가는게 좋음

    • 왜? 유지보수 때문에, 문제가 생기면 언제 main.js를 다 까봄..?

    • 다른 js파일로 뺄것 예를 들면 http/index.js , store.js , etc

  • config

    • 어떤 포트로 띄우며 url 가 뭐고 이런거 설정되어있음

    • 서버에 따라서 설정을 다르게 하려면 파일을 나누면됨

  • config/env.js

    • 포트번호, url과 같은 환경 설정 파일

    • 서버 프로필 어디를 물로 실행 하는지에 관한 설정파일

  • http/index.js

    • .config 에서 설정한 환경 설정을 불러다가 씀

    • axios 관련


// index.js 파일 내용

// BASE\_URL 은 .config 에서 설정해놓은거 불러다가 http 요청할거다라고 명시

axios.defaults.baseURL = process.env.BASE\_URL

cf ) main.js , index.js 관계는 무엇?

  • index.js - 뭣도 없는 html 뷰

  • main.js - 라우터 등등 javascript, 포트.. 등등

cf ) 파일 구조 잡을 때 주의

  • views dir - 실제 그려지는 뷰

  • component dir - 페이지에서 공통으로 쓰는 것들

  • ex ) 뷰 타이알로그를 여러곳에서 쓰는데 이걸 커스터마이징 하고 싶을 때 여기에 넣음

OSI7계층

  • 최하위인 물리계층, 데이터링크계층, 네트워크 계층, 전송 계층, 세션계층, 표현계층, 응용계층으로 이루어 져있다
  • 전달기능 : 물리계층 데이터링크계층, 네트워크계층, 전송계층
  • 통신기능 : 세션계층, 표현계층, 응용계층
  • 계층     전송단위    역할/프로토콜
    응용계층 Data 사용자에게 직접 제공하는 서비스 및 응용 프로그램 간의 정보 교환 / HTTP,SMTP,POP3,IMAP,FTP,TELNET,SSH
    표현계층 Data 송수신할 정보의 표현에 차이가 있는 응용프로그램에게 연결 제공 / SMB,AFP,ASN.1
    세션계층 Data 응용프로그램 간의 통신을 관리하기 위한 방법으로 동기화를 유지하는 서비스제공 / SSL,TLS,NESBIOS
    전송계층 Segments 정보의 신뢰성있고 투명한 데이터 전송에 관한 서비스 제공 / TCP,UDP,RTP
    네트워크계층 Packets 정보의 전송을위한 경로 선택 / IP, ICMP, ARP, RIP, IPX
    데이터링크계층 Frames 물리적인 링크를 통해 신뢰성 있는 정보의 전송을 위한 통신로설정 / 이더넷, 토큰 링, ATM
    물리계층 bits 전송매체를 통한 전송 / RS-232, 10BASE-T, 100BASE-TX, DSL

네트워크 장비

LAN 구성장비

  • 네트워크 카드
    • 네트워크 안에서 컴퓨터끼리 통신하는데 쓰이는 하드웨어로 네트워크 어댑터
  • 케이블
    • 신호를 전송하게 되는 물리적인 전송매체
    • 장점 : 잡음에 강함, 대역폭이 넓어 여러 채널 동시 사용가능, 빠르게 전송가능
    • 단점 : 한 개의 컴퓨터가 문제가 생기면 전체 네트워크에 영향을 받을수 있어 그리 안전하지 않다
  • 광케이블 : 빠른 전송속도와 넓은 대혁폭을 가지고 있다. 또한 빛을 이용해 정보를 보내 전기적 간섭을 받지않고 오류 발생도 매우적다
  • 허브
    • 이더넷 네트워크에서 여러 대의 컴퓨터 및 네트워크 장비를 연결하는 장치
  • 인터네트워크 장비(게이트웨이)
    • 네트워크와 네트워크를 연결하는 것
    • 게이트웨이는 서로 다른 통신망과 프로토콜을 사용하는 네트워크 간에 통신 기능을 가능하게 해주는 장치를 뜻함
    • 리피터
      • osi모델에서 첫번쨰 물리계층에서 동작
      • 물리적으로 입력된 신호를 증폭하여 중계하는 장치
  • 브리지
    • 데이터 링크계층에 있는 여러 개의 네트워크 세그먼트를 연결해준다
  • 라우터
    • 물리계층, 데이터링크계층, 네트워크 계층의 기능을 지원하는 장비

Ethernet/LAN의 기본이해

LAN(Local Area Network)

  • 집, 사무실, 등 건물과 같은 가까운 지역을 네트워크 매체를 이용해 하나로 묶는 근거리 통신망

스타(star)형

  • 중앙에 위치한 중앙 컴퓨터가 각 컴퓨터 통신하는 방식(point to point 연결)
  • 고속의 대규모 네트워크에 이용
  • 일부장애 발생시에도 전체 네트워크에 영향을 주지 않음
  • 단말기 추가나 오류 진단이 용이
  • 단점 : 중앙 컴퓨터 고장시 전체 네트워크 중단, 회선수 증가시 제어 복잡, 고비용

버스(BUS)형

  • 하나의 통신 회선에 여러 컴퓨터를 연결해 전송하는 방법
  • 한번에 한컴퓨터만 전송가능
  • 단점 : 장애발생시 발생지 위치 주적 어려움

링형

  • 원형의 통신회선에 컴퓨터와 단말기를 연결하는 형태
  • 연결된 앞 컴퓨터로부터 수신한 내용을 다음 컴퓨터에 재전송하는 방법

망형

  • 스타형과 링형의 혼합된 형태로 각 네트워크 장비가 여러 인터페이스를 가지고 상호간에 그물망 형태로 연결
  • 장애발생시에도 다른 시스템에 영향이 적고 신뢰성이 높다
  • 단점 : 설치비용과 운영이 어렵고 장애발생시 고장지점 찾기어려움

LAN 전송방식

이더넷과 CSMA/CD(Carrier Sense Multiple Access with Collision Detection)

  • MAC주소를 기반으로 상호간에 데이터를 주고 받을수 있도록 만들어졌다

토큰링

  • 여러 스테이션을 하나의 링에 이어져 형성되고 데이터는 한쪽 방향으로 흐르도록 하여 한컴퓨터에서 다른 컴퓨터 순으로 순서대로 전달된다
  • 특히 데이터 전송을 위한 네트워크 채널을 사용하려면 토큰이라는 일종의 사용권을 획득해야한다

FDDI(Fiber Distributed Data Interface)

  • 광섬유 케이블을 사용해 설계된 링 구조의 통신망으로 네트워크 액세스를 제어하기위해 토큰 패싱 방법을 사용

MAN(Metropolitan Area Network)

  • LAN과 WAN의 중간 형태로 위성 도시등을 연결한 형태를 말한다

WAN(Wide Area Network)

회선 교환방식

  • 송식 호스트와 수신호스트가 데이터를 전송하기 전에 연결 경로를 설정하여 일종의 물리적 전용선을 연결하는 방식
  • 모든 데이터는 같은 경로로 전달되고 고정된 대역폭을 할당받아 전송됨, 안정적인 데이터 전송률을 지원한다

패킷 교환방식

  • 패킷이라고 부르는 정보블록을 이용해 전송하는 방식
  • 전달하고자 하는 정보를 일정 크기로 분할하고 각각에 송수신 주소를 비롯한 관련 정보를 추가해 만든 데이터 블록
  • 고정대역을 할당 하지 않기 때문에 이론상 호스트들을 무제한 수용가능하고 패킷별로 우선순위 부여가능
  • 단점 : 회선 교환 방식에 비해 더많은 지연이 발생가능, 각패킷마다 오버헤드 비트가 존재
  • 패킷 교환방식
    • 데이터그램 방식: 비연결형 서비스를 이용해 전달되는 패킷들이 독립적으로 전송되고 연결설정하기 위한 과정이없고 경로를 미리 할당하지 않아 패킷도착순서를 예측할수 없다.
    • 가상 회선 방식 : 연결형 서비스를 지원하기 위한 기능으로 모든 패킷이 동일한 경로로 전송되어 도착순서를 알수 있다

X.25

  • 패킷망에서 DCE(회선 종단 장치)와 DTE(데이터 단말 장치)사이에 이루어지는 상호작용을 규약한 프로토콜
  • 네트워크 계층의 대표적인 프로토콜로 가변길이 프레임 전송을 지원하는 프레임릴레이의 근간을 이룬다

프레임 릴레이

  • LAN또는 WAN상에서 단말 지점간의 효율적인 데이터 전송을 위한 고안된 방법으로 패킷 대신에 프레임이라고 불리는 가변 길이 단위에 데이터를 넣고 재전송과 같은 오류 정정 기능은 단말지점에 맡기는 방식

셀릴레이 : ATM(Asynchronous Transfer Mode)

  • 셸이라고 부르는 고정길이패킷을 이용해 순서대로 자료를 전송하는 방식
  • 가상 채널 기반의 연결형 서비스로 프레임 릴레이 처럼 양 끝의 단말간의 오류제어와 흐름 제어를 한다

프로세스의 정의

  • 실행중인 프로그램
  • PCB(Process Control Block)를 지닌 프로그램
  • 프로그램 카운터를 지닌 프로그램
  • 능동적 개체로 순차적으로 수행하는 프로그램

프로세스의 생성

  • 시스템 호출 방법
    • fork : 새로운 프로세스 위해 메모리를 할당받아 복사본 형태의 프로세스를 실행하는 형태로 기존의 프로세스는 그대로 실행됨, 새롭게 생성된 프로세스는 원래 프로세스랑 똑 같은 코드를 기반으로 실행됨
      따로 말이 없을 경우 fork형태 수행
    • bash 라는 프로세스를 할당받고 명령내리면 fork형태로 실행
    • exec : 원래의 프로세스를 새로운 프로세스로 대체하는 형태로 호출한 프로세스의 메모리에 새로운 프로세스의 코드를 덮어씌워버린다 새로운 프로세스를 위한 메모리를 할당하지않고 exec에 호출된 프로세스만 메모리에 남겨둔다

프로세스의 종류

  • 포어그라운드 : 보통 셸에서 명령실행시 해당 프로세스가 종료될때까지 기다리는프로세스
  • 백그라운드 : 뒤에서 실행시키는 프로세스 , 다중작업을 수행시 유용, 작업번호[1]로 나타내고 뒤에는 PID가 붙음

멀티태스킹과 작업변환

  • 다수의 프로그램들을 백그라운드 프로세스로 실행시킨 상태에서 추가로 포어그라운드 프로세스로 다른 작업을 수행하는 것
  • [CTRL]+[z] : 포어 프로세스를 백그라운드 프로세스로 전환시키기
  • ”jobs “: 작업상태 확인하기
  • bg : 포그라운드 프로세스를 일시중단된 상태에서 백그라운드 프로세스로 전환
  • fg [%]작업번호 : 백그라운드 프로세스를 포어그라운드 프로세스로 전환하기
  • 나타나는 결과에서 +는 가장늦게 실행한 프로세스 작업번호없이 fg명령수행하면 이 작업이 포어그라운드 프로세스로 전환됨
  • 결과에서 -가 붙으면 +붙은작업 다음우선순위 작업

시그널

  • 특정 프로세스가 다른 프로세스에게 메시지를 보낼 때 시그널이 발생한다
  • kill-l’에서 명령어 확인가능
  • 일반적으로 사용하는 시그널
  • 종류
    이름: 설명
    SIGHUP : 로그아웃과 같이 터미널 접속이 끊겼을때 보냄
    SIGINT: 키보드로부터 오는 인터럽트 시그널로 실행을 중시 [ctrl]+[c]입력시 보냄
    SIGQUIT : 키보드로부터 오는 실행 중지 시그널 [ctrl]+[&#93;입력시 보냄
    SIGKILL : 무조건 종류, 프로세스강제종료할때 보냄
    SIGTERM : 정상종류 시그널로 kill명령의 기본 시그널
    SIGCONT : STOP시그널 등에의해 정지된 프로세스를 다시 실행시킬 때 보냄
    SIGSTOP : 터미널에서 입력된 정지 시그널
    SIGTSTP: 실행정지후 다시 실행을 계속하기위해 대기시키는 시그널 [ctrl]+[z]입력시 보냄

프로세스 관리의 이해

데몬

  • 데몬 - 주기적이고 지속적인 서비스를 요청하기위해 계속 실행되는 프로세스로 백그라운드로 실행된다. 주로 이름에 d를 붙임
  • standalone방식 - 프로세스의 상태를 확인하는 ps명령으로 확안한다. 보통 부팅시실행되어 해당 프로세스가 메모리에 계속 상주하면서 클라이언트의 서비스 요청을 처리하는 방식
  • inet방식: 프로세스가 메모리에 항상 상주하는 것이아니라 클라이언트의 서비스 요청이 들어왔을때 관련 프로세스를 실행 시키고 접속 종료후에는 자동으로 프로세스를 종료시키는 방식

데몬의 실행

  • 주기적이고 지속적인 서비스 요청을 처리하기 위한 프로세스
  • /etc/rc.d/init.d 디렉터리
    • 서비스에 대해 시작과 중지를 시킬수있는 스크립트를 포함하고있다
    • service : /etc/rc.d/init/d 디렉터리에 존재하는 스크립트를 쉽게 시작하거나 중지시킬수 있는 스크립트로 절대경로로 전부 입력하는 대신 간단히 서비스명과 인자값을 지정해 실행가능
  • rc0.d~rc6.d 디렉터리
    • init프로세스가 실행 레벨 n을 시작하면 rcn,d디렉터리에 존재하는 모든 링크를 점검한다
    • 기본형식 : [K|S] [번호] [init.d_이름]
    • 의미
      • K : Kill을 의미하며 실행되지 않을 서비스를 말한다
      • S : Start를 의미하며 해당 실행 레벨에서 실행되어야하는 서비스를 말한다
      • 번호 : 순차적인 번호로 시작이나 중지순서를 나타내는 번호이다
      • init.d_이름 : 관습에 따라 링크가되는 스크립트명을 사용

데몬관련 유틸리티

  • ntsysv
    • 텍스트 환경에서 커서를 이용하여 부팅중 자동으로 실행되는 서비스를 설정할 수 있는 유틸리티
    • 사용법 : #ntsysv[option]
    • 주요옵션
      • level 실행레벨: 특정실행 레벨을 편집 없을 경우 현재 구동중인 레벨 의 서비스 데몬 설정
  • chkconfig
    • 텍스트 기반의 명령 프로그램으로 실행 레벨에 따른 서비스의 on off설정 리스트를 출력하거나 설정
    • 사용법 : #chkconfig option [service]
    • 주요옵션
      • --list : 각실행 레벨에서의 서비스의 설정 상태를 보여준다
      • --add/del 서비스: 서비스를 추가 /삭제
      • -level 레벨서비스 /on/off/reset : 해당레벨에서 특정서비스의 상태를 설정

+ Recent posts