네이버 날씨를 검색해서 크롤링에 도전해보았다

 

먼저 터미널에서 라이브러리를 설치했다.

npm init -y 
npm install axios@0.21.1 cheerio@1.0.0-rc.9 puppeteer@9.1.1 lodash@4.17.20 date-fns@2.21.1 date-fns-tz@1.1.4  ❷

설치 후 비동기로 axios 해주고 예외처리도 해주기

const axios = require("axios");
const cheerio = require("cheerio");

const getHtml = async () => {
  try {
    return await axios.get(
      "https://search.naver.com/search.naver?where=nexearch&sm=top_sug.pre&fbm=1&acr=4&acq=%EB%82%A0%EC%94%A8&qdt=0&ie=utf8&query=%EB%82%A0%EC%94%A8"
    );
  } catch (error) {
    console.error(error);
  }
};

 

크롤링하고 싶은 사이트에 접속하여 타겟을 정한다

타겟은 주간예보 선택자를 정하기 위해 개발자 모드에 들어가서

선택자를 확인!

ul 이후로는 li 들 class 명이 동일하여 

기준( 아래 코드에서 $domElement)을 ul의 자식 li 태그를 잡아준다

  const $ = cheerio.load(html.data);
  // HTML을 파싱하고 DOM 생성하기
  const $domElement = $(
    ".cs_weather_new .weekly_forecast_area .list_box ul"
  ).children("li.week_item");

그리고 날짜랑 최고 / 최저 기온을 뽑기 위해 

 

리스트에 저장해준다

// CSS 셀렉터로 원하는 요소 찾기
  // 찾은 요소를 순회하면서요소가 가진 텍스트를 출력하기
  $domElement.each(function (idx, elem) {
    uiList[idx] = {
      date: $(this).find(".cell_date .date"),
      weather: $(this).find(".cell_temperature .temperature_inner"),
    };
    console.log($(elem).text());
  });
 

이후 Node 객체인 elem을 $로 감싸서 cheerio 객체로 변환 후

출력

음 굿

 

최종코드 

더보기
const axios = require("axios");
const cheerio = require("cheerio");

const getHtml = async () => {
  try {
    return await axios.get(
      "https://search.naver.com/search.naver?where=nexearch&sm=top_sug.pre&fbm=1&acr=4&acq=%EB%82%A0%EC%94%A8&qdt=0&ie=utf8&query=%EB%82%A0%EC%94%A8"
    );
  } catch (error) {
    console.error(error);
  }
};

getHtml().then((html) => {
  let uiList = [];
  const $ = cheerio.load(html.data);
  // HTML을 파싱하고 DOM 생성하기
  const $domElement = $(
    ".cs_weather_new .weekly_forecast_area .list_box ul"
  ).children("li.week_item");


  // CSS 셀렉터로 원하는 요소 찾기
  // 찾은 요소를 순회하면서요소가 가진 텍스트를 출력하기
  $domElement.each(function (idx, elem) {
    uiList[idx] = {
      date: $(this).find(".cell_date .date"),
      weather: $(this).find(".cell_temperature .temperature_inner"),
    };
    console.log($(elem).text());
  });
});

 

참고자료

▶ https://www.letmecompile.com/javascript-crawler-tutorial-part3/
▶ https://velog.io/@yesdoing/Node.js-%EC%97%90%EC%84%9C-%EC%9B%B9-%ED%81%AC%EB%A1%A4%EB%A7%81%ED%95%98%EA%B8%B0-wtjugync1m

 

 

api를 활용해보기 위해 도로교통공사에서 휴게소별 날씨 오픈api를 받아왔다

api 키를 발급받아서 json 형식으로 받는다.

const url = `http://data.ex.co.kr/openapi/restinfo/restWeatherList?key=${APIKey}&type=json&sdate=${date}&stdHour=12`;

async function getData(i) {
  const response = await fetch(url);
  //json형태로 필요한 정보를 data에 넣어줌
  const data = await response.json();
  const info = data.list.map((val) => [
    val.출력할것
  ]);
  // x,y좌표를 이용해 위/경도를 표시하기 위해 따로 latlng 리스트 생성
  const latlng = data.list.map((val) => [val.xValue, val.yValue]);
  makeJson(latlng);
  i = show(info, i);
}
 

 

https://apis.map.kakao.com/web/sample/basicClusterer/

위 링크에 있는 클러스터러 지도를 적용하기 위해

옆에와 같이 json 형태로 만들어보려 한다.

 

 

 

 

 

일단 무작정 모양을 똑같게 하기 위해 코드를 짜봤지만, for문 밖에서는 젤 마지막 객체만 접근이 가능하여 답답했다

그러다 지인에게 물어보니 내가 짠것 처럼 push해주면 된다고 했다.

무슨말인지 몰라서 한참을 json파일을 쳐다보다 갑자기 떠올랐다

 

json파일 형태를 보면 객체 안에 배열 안에 객체가 존재하는것을 깨달았다

 

그래서 일단 객체1 (코드에서 container)를 만들고, 그 안에 배열을 만들고 또 객체2 (코드에서 position)를 만들어 논 후

position객체에 값을 넣고, 그 객체를 container객체의 키값이 positions인 val로써 넣어줬다.

 

드디어 for문 밖에서도 객체 전체를 볼 수 있었다.. 몇시간동안 이걸 해매고 다른 api로 바꿔보고 했는데,, 

이 해결해냈을때의 뿌듯함은 프로그래밍의 매력이다,. 놓을 수 없는..

 

다음에 또 api를 사용하여, 데이터를 추출하고, 그 데이터를 조물조물 만지는 것을 해매지 않게 하기 위해 이 글을 써논다.

 

현재 개발 상황

이제 json형식으로 만들어놓은 위/경도에 접근하여 클러스터러를 형성해줘야 한다.

추출한 형태를 json파일로 만드는 방법과 어떻게든 접근해보려고 시도해 볼 것이다.

비지원으로도 온라인 강의가 가능한 패스트캠퍼스에서 java&spring 강의를 선택

01.18 ~ 03/15

백엔드는 처음이라 설레는 마음으로 패스트캠퍼스에서

진행하는 열공챌린지를 시작하려고 합니다. 

매 주 공부한 내용을 올리고 가능하다면, 

중간에 토이프로젝트 내용도 작성하려고 합니다.

 

저는 젤 접근성이 좋은 JavaScript로 만 코딩을 해왔습니다.

코딩에 흥미를 느끼고 난 후 정보처리기사를 취득했었고,

Java 는 혼공자 책으로 언어만 배우고 직접 해본적은 없습니다.

 

그 외 다른 언어들과 자료구조/ 알고리즘은 전공수업에서 들은 적이 있습니다.

하지만 비전공자 입니다.

 

<계획>

1주차 - 강의 ch1(자료형, 연산자) + 혼공자 ch01-02

2주차-강의 ch1(조건/반복문,인스턴스) + 혼공자 ch03

3주차 - 강의 ch2(인스턴스, 생성자, 오버로딩) + 혼공자 ch04,06

4주차 - 강의 ch2(참조,캡슐화,객체) + 혼공자 ch05-06

5주차 - 강의 ch2(static,배열) + 혼공자 ch07-08

이후 계획은 추후에 다시 세울 예정

참고가이드: https://apis.map.kakao.com/web/guide/

(index.html의 head안에)
<script
      type="text/javascript"
      src="//dapi.kakao.com/v2/maps/sdk.js?appkey=발급받은APPKEY&libraries=services"
></script>
Appkey는 js key로 복붙해준다
 
처음에 appkey뒤에 .이 찍혀있어서 계속 지도가 뜨지 않았다 
 
(오류메시지)
Failed to load resource: the server responded with a status of 401 (Unauthorized)
 
그래서 그냥 &이하는 다 지우고 시도 

드디어 떴다......

그리고 다시 라이브러리를 추가해보니
 
해결완료

 

(목적)

전에 코생아 시절 ,, 리스트로 모두 html파일에 적어서 만들어 본 적이 있다.

하지만 데이터를 추가하는일이 너무 힘들었고 웹이 너무 무거워진것 같아 오랜만에 다시 만들어 보려 한다.

엑셀로 리스트를 정리해서 json 파일로 변환하여 react로 필터링 하여 보여주는 페이지를 만들려고 함.

필터링이 된다면 카카오api도 다시 사용하여 지역을 선택하면 지도가 뜨도록 해볼생각이다.

 

** 1-2일차 **

(엑셀)

그때마다 가고 싶은 카페 느낌? 이 다르기 때문에 테마별로 정리하고 off날과 주차여부를 정리해 보았고, json파일은 사이트에서 무료로 변환할 수 있어서 어렵지 않다. 그냥 엑셀.xlsx 형식으로 저장해서 업로드하면 파일이 추출된다.

 => 변환사이트 : https://products.aspose.app/cells/ko/conversion/excel-to-json

프레임워크는 react를 사용하기로 했다.

아직 미숙하지만 만들어가며 배우기로 한다.

일단 map()함수를 이용해 뿌려주었다.

이제 카테고리별로 필터링이 되도록 만드는게 목적이다.. 

(참고사이트: https://splopsky.tistory.com/48 ) 이 사이트를 보고 적용해보았다.

하지만 내 플젝에서는 자꾸 Uncaught TypeError: this.setstate is not a function 에러가 떠서 참고사이트 코드를 긁어서 select를 만들어서 해보았지만 잘 안된다.. 

 

이제 보니 저 사이트는 index.js에서 나는 app.js에서 하고 있어서 

class App extends Component {
  constructor() {
    super();
    this.state = {
      search: null,
    };
  } 
 
변경 이벤트핸들러에서 this.setstate가 안먹혀서 원래 사용하던데로 func App 사용하여 usestate객체를 만들어 사용했다.
이벤트 핸들러에 set함수들을 각각 주어서 잘 되었지만 다시 초기값으로 돌아갈땐 안나온다..
function App() {
  const [selectArea, setArea] = useState("");
  const [selectTh, settheme] = useState("");
const items = CafeInfo.filter((data) => {
    if (selectArea == null && selectTh == null) return data;
    else if (data.area.includes(selectArea) && data.theme.includes(selectTh)) {
      return data;
    }
  }).map((data, index) => {
    return ( ''''''''');
});
return (
<div className="selectBOx">
        <AreaSelect
          options={AREA}
          defaultValue="null"
          onChange={(e) => setArea(e.target.value)}
        ></AreaSelect>
        <ThemeSelect
          options={THEME}
          defaultValue="null"
          onChange={(e) => settheme(e.target.value)}
        ></ThemeSelect>
      </div>
      <div className="card_list">{items}</div>
);
}

테마도 선택하면 잘 필터링이 된다!!

 

다음 포스팅:

필터링시 지도 api 추가

 유지보수 Maintenance 

: SW개발 단계 중 가장 많은 노력과 비용이 투입되는 단계

: 유지보수를 용이하게 하려면 시험,수정 용이성/ 이해성/ 이식성등이 고려되어야 함

- 종류

> Corrective 수정적 : 잠재적 오류를 찾아서 수정

> Adaptive 적응적 : 환경의 변화를 기존sw에 반영하기 위함

> Perfective 완전적 : 새기능 추가, 성능개선을 위함

> Preventive 예방적 : 오류발생에 대비하여 유지보수, SW재공학 관점에서의 유지보수 유형

 

 SW 재공학 

: 기존 SW를 새로운 요구에 맞도록 기능을 수정/보완/추가하여 성능을 향상 시킴

= 예방적 유지보수

> 목적 : 시스템의 이해성 향상, 재사용성 개선

 

SW 재사용

> 이점 : 개발시간과 비용 단축, 실패위험 감소, 품질/생산성 향상

> 단점 : 표준화 부족, 새로운 개발방법론 도입 어렵 

 

 암호화 알고리즘 

암호화 = Cryptography

> 양방향

대칭키
(공개키 = 암호키)
> 스트림 암호 : 주기긴 난수열 발생 
LFSR, SEAL
> 블록암호 : 긴 평문 암호화, 고정길이 블록암호화 반복
DES, AES, SEED
비대칭키
(암호화- 공개키, 복호화- 개인키)
DH, ECC, RSA(속도↓, 파일크기↑, 소수활용)

> 일방향 (=단방향)

해시함수 변경감지 MDC 키 사용X, 감지코드로 메시지 무결성 보장
MD4, M5, SHA
메시지 인증 MAC 키 사용, 메시지 인증코드 무결성과 사용자 인증보장
HMAC, NMAC

> 데이터 암호화 (네트워크영역)

IPsec IP패킷 무결성, 데이터 무결성/기밀성 보장, Tunnel모드와 전송모드로 운영
ESP- 발신지 인증, HA- 발신지 호스트 인증
SSL/ TLS 전송-응용계층사이 클라이언트와 서버 간의 웹 데이터 암호화 역할
전송시 데이터 무결성 보장
S-HTTP  

+) Salt : 공격을 막기위해 동일 패스워드들이 다른 암호값으로 저장되도록 추가되는 값

 해싱 

: 검색/접근속도 빠름, 삽입/삭제 빈도가 높은 작업에 유리

: 해싱테이블(기억공간)에 할당 -> 해시함수 이용 -> 테이블내 홈주소 계산 후 기억장소 저장/ 검색작업 수행

> Overflow 발생시 개방주소법, 폐쇄주소법, 재해싱 

> 홈 주소 동일시 충돌Collision 발생 > 충돌이 발생한 레코드 집합: Synonym

> 충돌시 선형개방 주소법 사용 (충돌시 다음 버킷들을 차례대로 검색하여 최초의 빈 버킷에 저장함)

 해싱탐색  (키-주소 변환법)

: 키 값으로부터 레코드가 저장되어 있는 주소를 직접계산하여 산출된 주소로 바로 접근하는 방법

 해싱함수 

> 제곱법 : (레코드 키 값 K)^2 후 중간부분을 홈주소로 사용

> 숫자분석법 : K를 이루는 숫자의 분포를 분석하여 고른자리를 필요만큼 택하여 홈주소로 사용

> 제산법 : K를 해시표의 크키보다 크고 가장작은 소수로 나눈 나머지를 홈주소로 사용

> 폴딩법 : K를 여러부분으로 나누고, 각 부분의 값을 더하거나 XOR연산을 통해 나온 결과를 홈주소로 사용

 

 모듈 

: 독립된 1개의 SW,HD단위, 재사용/ 통합/ 단독 컴파일 가능

독립성 유지보수 용이성 ,응집도 (모듈내부 요소사이의 연관도) 

 
모듈크기, 결합도 (외부모듈과 연관도)

 - 응집도           (우논시 절교 순기응)

(낮음)

1. 우연적 : 서로 어떠한 연관관계가 없는 기능요소로 구성, 다른 상위모듈에 의해 호출되어 서로 다른기능 수행

2. 논리적 : 논리적으로 유사한 기능수행 but, 서로 관계는 밀접하지 않음

3. 시간적 : 특정시간에 실행되는 기능을 모아 작성

4. 절차적 : 반드시 특정 순서대로 수행

5. 교환적 : 요소들이 동일한 입출력 자료로 서로 다른기능을 수행

6. 순차적 : 한 요소의 출력data가 다음요소의 입력data로 사용

7. 기능적 : 모든 요소들이 단일 기능을 수행

(높음)

 - 결합도           (자스제외 공내)

(낮음)

1. 자료data (파라미터 통해 공유하는 경우)

2. 스탬프 (데이터구조 공유, 서로 다른 일부만 사용)

3. 제어 (다른 모듈로 정보를 넘기고 다른 모듈의 흐름을 제어하는 경우)

4. 외부

5. 공통(두 모듈이 같은 전역변수를 공유하는 경우)

6. 내용 

(높음)

 모듈화  : 기능단위 모듈로 분해하여 설계구현 기법,  Subroutine/function 등으로 표현
  : 지능적 관리에 도움, 복잡도 해결, 유지보수/ 수정 용이

 단위모듈 

: 한가지 동작(단위기능)을 모듈로 구현, 독립적 컴파일, 다른모듈에 호출,삽입가능

: 사용자나 다른모듈로부터 값을 전달받아 시작되는 작은 프로그램

> 구성요소 : 처리문, 명령문, 데이터구조

> 구현순서 : 단위기능 명세작성→ 입출력 구현기능→ 알고리즘 구현기능 (CLI와 GUI연동고려)

 공통모듈 

: 추상화, 성능향상, 공통 컴포넌트(자주 사용하는 기능) 구현기법, 재사용성/ 유지보수성↑

> 재사용 범위 :  컴포넌트, 객체, Application, Function

> 명세작성 기법 : 명확성/ 완전성/ 추적성/ 정확성(필요성을 알 수 있도록)/ 일관성(공통기능간 상호충돌되지 않도록)

   > 컴포넌트 명세서 :  컴포넌트 개요, 내부클래스 동작,인터페이스 통해 외부와 통신하는 명세 정의

   > 인터페이스 명세서 : 인터페이스 클래스의 세부조건/ 기능 정의

> Fan-in : 모듈을 제어하는 모듈의 수 (상위모듈 수) 

> Fan-out : 모듈에 의해 제어되는 모듈의 수 (하위모듈 수)

 

 효과적 모듈 설계방안 

: 결합도는 낮게 응집도는 높게 (독립성과 재사용성 향상)

: 복잡도와 중복성 낮게 (일관성 유지)

: 단일 입,출구/ 기능과 구조 이해하기 쉬운 크기로 분해

 

 GOF 디자인 패턴

: 생성패턴 5개/ 구조패턴 7개/ 행위패턴 11개로 구성, 서브시스템 컴포넌트와 그 관계를 설계

  PS.팩토리빌더 생성패턴    (암기방법)

 구조=F BAD comPosite 패턴   (암기방법)

 행위 mand MOV.st 패턴   (암기방법)


 모델링 

: 개발팀이 응용문제를 이해하는데에, 여러 분야 엔지니어들이 공통된 개념을 공유하는데 도움

> 사용하는 다이어그램 : UML, DataFlow(DFD), E-R 다이어그램

 DFD 

: 프로세스 위주의 모델링

> 구성요소 : Process , Data Flow ━>, Data Store , 단말

+ 다중값 속성

 UML 

: 의사소통을 위해 표준화한 모델링 언어, 시스템의 산출물을 규정/시각화/문서화하는 언어

: 단순화, 대규모 로드맵이나 개발을 위한 시스템 구축의 기본을 마련, 직관성↑

: SW시스템/ 업무 모델링 (시스템 상호작용, 업무흐름, 시스템 구조, 컴포넌트 관계등을 표시)

: 사물/ 관계/ 다이어그램으로 구성됨

 > 사물 

: 모델을 구성하는 기본요소, 다이어그램 안에서 관계가 형성될 수 있는 대상들

 - 구조사물 : 시스템의 개념적/ 물리적 요소를 표현

 - 행동사물 : 시간/공간에 따른 요소들의 행위를 표현

 - 그룹사물 : 요소들을 그룹으로 묶어서 표현

 - 주해사물 : 부가적인 설명이나 제약조건등을 표현

 > 관계 

일반화
Generalization
실체화
Relization
연관
Association
의존
Dependency
집합관계
Aggregation
구성(포함)
Composition
사물 -------▷기능 ━>
or

----------> ◇ 

- 일반화 : 하나의 사물이 다른사물에 비해 일반적인지 구체적인지 표현

- 실체화 : 오퍼레이션을 수행하도록 지정하는 의미적 관계

          : 사물이 할 수 있거나 해야하는 행위나 인터페이스로 서로를 그룹화 할 수 있는 관계

- 연관 : 2개이상의 사물이 서로 관련되어 있는 관계

- 의존 : 필요에 의해 짧은시간만 연관을 유지하는 관계, 명세 변경시 영향줌, 오퍼레이션의 매개변수로 사용

- 집합 : 하나의 사물이 다른 사물에 포함되어 있는 관계

- 포함 : 집합관계의 특수한 형태로 포함하는 사물의 변화가 포함되는 사물에게 영향을 미치는 관계

- 연산 Operation : 클래스의 동작 

 > 다이어그램 종류 

 구조다이어 Compo클래스 대패삼겹    (암기방법)

 행위다이어 Ase CommUse    (암기방법)


 E-R 다이어그램 

: 시스템안에 있는 모든 역할을 표현하여 뷰를 하나로 단일화 함

 > 표기법 

**

개체와 속성 연결 : 직선 

 >객체관계 모델

: 개념적 데이터 모델(논리적표현), 데이터 요소 간의 개체 간 관계가 기본요소임, DBMS 고려X, E-R다이어그램으로 표현

 

 Capability Maturity Model (CMM모델) 

1. 초기단계 (initial)

2. 관리단계 (Repeatable)

3. 정의단계 (Define)

4. 관리단계 (Managed)

5. 최적단계 (Optimizing)

 개체란? 

: 하나의 정보단위로 속성attribute가 모여 하나의 정보단위를 이룬 것

: 개체들 사이의 연관성 = 관계

 

 객체란? 

: 실세계에 존재하거나 생각할 수 있는 것, 식별가능한 이름, 상호연관성에 의한 관계가 형성됨

: 데이터와 데이터를 처리하는 함수를 캡슐화한 하나의 모듈, 반응가능한 메시지(행위)의 집합

   →속성, 상태(조건), 변수, 상수 자료구조  →객체상태 참조, 수단: 메소드, 서비스, 동작, 연산

: 클래스Class의 인스턴스Instance

 

 인스턴스란? 

: 객체를 실체화 한 것, 클래스에 속한 각 객체

 

 클래스란? 

: 공통된 속성attribute과 변수, 메서드, 연산을 갖는 객체들의 집합, 데이터를 추상화하는 단위

: 객체를 생성하기 위한 설계도/ 틀

 

 객체지향 

: 개체entity를 객체로 조립하여 작성할 수 있는 기법, 비절차적 언어

: 재사용/ 확장/ 유지보수가 용이함, 단계적/계층적표현으로 복잡한구조

> 구성 : 객체, 인스턴스, 클래스

> 설계원칙

> 설계절차 : 문제정의→ 요구 명세화→ 객체 연산자 정의→ 객체 인터페이스 결정→ 객체 구현

 

 객체지향 기법 

: 객체-속성/ 클래스-멤버 / 전체-부분(집단화) 으로 나누어 분석

            집단화  : 부분과 전체, 부분과 부분의 관계로 설명되는 연관성 

> 분석 방법론

Coad-Yourdon : 개체-관계모델 E-R다이어그램을 사용하여 객체의 행위를 데이터 모델링에 초점을 둔 방법
럼바우 : 데이터와 행위를 하나로 묶어 객체를 정의하여 추상화 시키는 방법
: 코드를 재사용하여 생산성 향상과 시스템 변경용이
분석활동
(객 동 기)
정보 - 객체모델링
 : 객체 다이어그램, 시스템에서 요구하는 객체 찾기, 가장중요, 객체 관계를 규정하여 표시함
상태 - 동적모델링
 : 상태다이어그램(상태도), 시간의 흐름에따라 동적인 행위를 표현함
흐름 - 기능모델링
 : 자료흐름도 DFD, 처리과정을 표현, 구조적분석
 > 구성요소 : 프로세스(○), 자료흐름(→), 저장소(-), 단말(□)
 > 기능모형설계 순서 : 입출력결정→ DFD작성→ 기능기술→ 제약사항 결정/최소화
 > 지침사항 : 프로세스 거쳐 변환시 새 이름을 부여함
 **프로세스가 출력자료 산출시 반드시 입력자료를 발생해야 함, 상위단계Process는 하위DFD의 자료흐름
Booch  : 미시적- 거시적 객체지향 방법

 

 정보은닉 

: 다른 모듈 구현에 영향받지 않게 설계, 모듈간 독립성 유지, 객체 속성/ 오퍼레이션의 일부를 감추어 외부접근 방지

: 대상 - 기본정보(IP,주소)같은 물리적 코드와 상세데이터 구조

 

 캡슐화 

: 중요 데이터를 보존/보호, 인터페이스만 밖으로 드러내며 그외 세부내용은 정보은닉 →외부모듈의 변경에 의한 영향 적음

: 외부에서 특정 메소드, 속성에 접근하지 못하도록 함 → 객체손상 방지, 재사용 용이, 오류파급 효과 적음

 

 상속 

: 자식이 부모를 선택, 부모클래스를 재사용하여 개발속도 향상됨 (하위 객체/클래스 기능 = 상위 객체/클래스 기능 + a)

: 코드중복 감소, 유지보수 용이, 객체의 다형성 구현가능

 

 다형성 

: 동일타입, 실행결과가 다양한 객체를 이용할 수 있는 성질, 자식객체들이 다른형태의 특성을 갖는 객체로 이용가능

: 객체/ 클래스는 동일한 메소드명 사용함, 객체 부품화 가능, 자식타입은 부모타입으로 자동 타입변환

 

 추상화 

: 불필요한 부분 생략, 객체 속성 중 가장 중요한것에 중점을 두어 모델화 한 것

: 완전한 시스템 구축 전, 시스템과 유사한 모델을 만들어 여러 요인들을 테스트 가능함 

 > 과정추상화(전반적 흐름파악 설계)

 > 데이터추상화(속성/용도 정의하지 않고 구조를 대표하는 표현으로 대체)

 > 제어 추상화(이벤트 발생 절차와 방법 정의하지 않고 대표하는 표현으로 대체)

 SW 생명주기(SDLC) 

요구사항 분석→ 설계→ 구현→ 테스트→ 유지보수

: 요구 분석부터 유지보수 전 공정을 체계화하는 절차 

=> Secure SLDC : 보안극복을 위함

 

 생명주기 개발표준 ISO/IEC 12207 

> 기본공정 프로세스 (획득, 공급, 개발, 운영, 유지보수)

> 조직공정 프로세스 (관리, 기반구조, 훈련, 개선)

> 지원공정 프로세스 (품질보증, 검증, 확인, 활동검토, 문제해결)

 

 개발표준 

+ SPICE = 수준 0(불완전단계) ~ 수준5(최적화단계)

 

 SW 비용산정법 

- 결정요소 : 프로젝트(복잡도, 크기, 요구신뢰도), (인적, HD, SW)자원, (개발자 능력, 기간)생산성

- 종류

 SW테스트 원리 

- 결함집중 : 파레토법칙 (오류의 80% 중 전체모듈의 20%내에서 발견됨)이 원인

               : 소수 특정모듈에 결함이 집중되어 추가 발생 가능성↑

- 초기집중 : 요르돈법칙이 원인, 개발 설계시부터 고려, 조기발견가능, 재유입 방지

 

+)브록스 법칙 : 프로젝트 진행 중에 새 인원 투입시 프로젝트 완성이 지연됨

 

 SW개발 프레임워크 

- 주요기능 : 예외처리, 트랜잭션처리, 메모리공유, 데이터소스 관리, 쿼리/로킹 서비스 관리

- 종류

Spring : JAVA 오픈소스의 경량형, 동적 웹사이트, 전자정부 프레임워크 기반 기술
전자정부 : 공공사업과 효과적 구축을 위한 필요기능과 아키텍처 제공, 품질/재사용성을 높이기 위함
: 공통컴포넌트 중복개발 방지
닷넷 : Windows사 개발, 실행환경제공, 가상머신CLR에서 작동, 코드실행관리

 

 SW개발 방법론 

: 개발, 유지보수 등에 필요한 수행법과 도구를 체계적으로 정리, 표준화 한 것으로 생산성과 품질이 향상 됨

 

+ Recent posts