전체 702

오픈소스

오픈소스란 - 소스코드가 공개되어 있고 제작자의 권리를 지키면 누구나 자유롭게 사용할 수 있는 소프트웨어 - 빠르게 서비스를 만들어야 하는 현대 사회에서 필수적인 요소 오픈소스 라이센스 - 오픈소스 개발자와 이용자간의 사용방법 및 조건의 범위를 명시해 놓은 계약 - 오픈소스는 내부에서 사용할 경우 의무사항의 적용을 받지 않고, 외부로 배포 및 판매할 경우 적용된다. - 종류 : GPL(가장엄격), Apache license, MIT 등

요구사항

요구사항 - 고객의 관점에서 고객의 요구를 정확히 파악, 만족시키고 소프트웨어를 효과적(납기지연, 예산초과를 방지)으로 만들 수 있게 함. - "요구사항 개발"과 요구사항이 제대로 반영되어 있는지 지속적인 관리를 수행하는 "요구사항 관리"로 구분 - 요구 시스템의 정확한 목표 식별 - 요구사항 변경관리 위원회(CCB, Change Control Board)설정 요구사항 변경 및 추적관리 - 요구사항의 변경이 필연적이므로 변경 통제와 추적활동이 필수적 - 일관성과 무결성을 제공함 - 요구사항 단위로 관리되어야 효과적 - 문서단위가 아닌 문장단위로 요구사항을 추적해야 함

리펙토링

리펙토링이란 - 프로그램 내부 구조를 개선하는것으로 외부에서 보는 프로그램 동작은 변하지 않는다 - 유지 보수성을 향상시키고, 품질을 높이는 활동 - 소규모 변경 후 동작여부를 테스트하고 다음 리펙토링의 단계로 진행. 만약 작동하지 않을경우 리펙토링 undo 리펙토링의 장점 - 복잡한 코드가 단순화 가독성이 높아진다 - 디버깅이 용이해진다 - 요구사항 변경에 빠르게 대응할 수 있다. 리펙토링 수행절차 1. 조직구성 2. 수행 통제 : 변경관리, 형상관리 3. 수행기법 : 디자인 패턴 4. 테스트 : 단위/통합 테스트, 회귀테스트 5. 결과 정리 : 문서화, 현행화 리펙토링 기법 1. 메소드 정리 - extract method : 그룹으로 묶을 수 있는 코드조직을 별도의 매소드로 뽑아냄 - replace ..

테스팅

테스팅이란 - 어플리케이션 또는 시스템의 동작,성능,안정성이 고객이 요구하는 수준을 만족하는지 확인하는 행위 테스팅 과정 테스트유형 목적 수행주체 환경 단위테스트 단위 모듈 내의 결함 개발조직 개발환경 통합테스트 단위 모듈간의 인터페이스에서 결함 발견 개발조직 또는 테스트 조직 개발환경 또는 테스트환경 시스템 테스트 실제 환경과 유사한 환경에서 전체적 기능, 비기능적 테스트 테스트 조직 실제 사용자 환경과 유사한 환경 인수 테스트 요구사항과의 일치성 확인 사용자 사용자 환경 테스팅 기법 1. 화이트박스 테스트 - 소스코드 내부 구조를 아는 상태에서 코드가 잘 동작하는지 확인하고 오류를 찾아 내는 것 - 개발자의 단위테스트에 많이 사용됨 - 테스트 종류 구분 내용 루프 테스트 루프구조에 제한 조건 테스트 ..

유지보수

유지보수란 - 소프트웨어 생명을 연장시키는 운영중심의 작업단계 - 결함제거, 성능향상, 변화된 환경 적응등의 처리를 함 - 소프트웨어 생명주기에서 차지하는 기간 및 비용이 크다 유지보수의 종류 1. 사유에 의한 유지보수 - 수정유지보수 : 오류로 인한 유지보수 - 적응유지보수 : 데이터 환경과 인프라 환경 변화 적응을 위한 처리 - 완전화유지보수 : 새로운 기능 추가, 변경, 품질을 위한 유지보수 2. 시간에 의한 유지보수 - 계획유지보수 : 주기적 유지보수 - 예방유지보수 : 예방차원의 유지보수 - 응급유지보수 : 유지보수의 사후 승인 필요시 3. 대상에 의한 유지보수 - 데이터/프로그램 보수 : 데이터의 conversion등 - 문서화 유지보수 : 문서표준의 변경이나 기타 필요시 - 시스템 유지보수 ..

형상관리

형상관리 - 소프트웨어 형상관리(SCM, Software Configuration Management)는 소프트웨어 개발과정에서 소프트웨어의 변경사항을 관리하기 위한 일련의 활동. - 소프트웨어 변경의 원인을 찾아 컨트롤하며 적절히 변경되고 있는지 확인하는 작업 - 소프트웨어 개발의 전체 비용감소. - 개발 단계에서 만들어지는 프로그램, 프로그램 설명 문서, 데이터 등을 통칭 형상관리가 필요한 이유 - 가시성 미흡 : 소프트웨어는 무형의 산출물이므로 가시성이 없음 - 컨트롤의 어려움 : 소프트웨어는 눈에 보이지 않으므로 컨트롤하기가 어려움 - 추적성 미흡 : 소프트웨어 개발 전체과정에 대한 추적이 어려움 - 감시의 미비 : 가시성 미흡 및 추적의 어려움으로 프로젝트 관리를 지속적으로 하기 어려움 - 끊임..

CI(Continuous Integration)

CI(지속적인 통합)이란? - 여러명으로 구성된 팀이 작업한 결과를 자주 통합하는 소프트웨어 개발 활동 - 각 개발자는 빌드 및 테스트를 수행한 후 코드 변경사항을 중앙 저장소에 주기적으로 병합. - 지속적인 품질제어(Quality Control)을 실행하여 품질향상과 배포 시 소요되는 시간을 최소화 (과거에는 개발이 완료된 후에 품질제어를 수행하여 시간이 오래걸림) CI의 필요성 - 빌드에 대한 형상 관리 - 개발자가 개발 활동에만 집중할 수 있도록 함 - 코드 통합시 발생하는 문제를 사전에 발견하여 처리 - 잦은 배포를 통해 자주 피드백을 얻는 개발 프로세스 가능 구성도

통합개발환경(IDE)

IDE란 코딩 디버깅 컴파일 등 모든 작업을 하나의 소프트웨어 안에서 처리할 수 있도록 환경을 제공하는 소프트웨어 구성요소 - 편집기 : 프로그래밍을 위한 코드를 입력하고 편집하는 도구 - 빌드도구 : 프로그래밍 언어로 작성한 코드를 기계가 인식할 수 있는 코드로 변화하기 위한 컴파일러, 인터프리터, 링커와 같은 도구 - 디버거 : 오류를 찾아내기 위한 도구 - 프로젝트 관리 : 현업시스템을 제공하여 프로젝트를 관리할 수 있는 도구

인터프리터와 컴파일러

인터프리터 - 원시 프로그램을 한줄씩 저급언어(기계어)로 바꾸어 os에 인식시키는 것 - 고레벨의 언어를 중간코드로 변환하고 이를 각 행마다 실행. - 플랫폼(하드웨어)에 종속되지 않는다 컴파일러 - 고급언어를 한번에 저급언어로 번역(컴파일) *빌드 : 소스코드를 실행가능한 소프트웨어 파일로 만드는것. 컴파일은 빌드과정의 일부분이다. (빌드를 도와주는 툴이 Ant, Maven, Gradle 등이 있다) - 최초 실행하면 실행파일이 생성되고 다음 실행시 생성된 실행 파일이 실행되므로 빠르다 - 하드웨어에 종속된다 - 링커에 의해 목적파일이 다른 목적파일(다른 c파일)과 함께 실행파일로 만들어진다 - 로더에 의해 실행파일이 매모리위에 로드된다 인터프리터, 컴파일러 차이 인터프리터 컴파일러 저급언어로 번역하는..

프로그래밍 언어와 종류

프로그래밍 언어란 - 프로그래밍 언어는 사용자가 일상적으로 사용하는 언어를 가지고 프로그램을 짤 수 있도록 한 것 - 사람과 (0,1만 이해할 수 있는 )컴퓨터가 소통할 수 있도록 하는 것 - 프로그래밍 언어마다 "컴파일러" 혹은 "인터프리터"가 사람이 작성한 코드를 컴퓨터가 이해하는 기게어로 바꿔준다 저급언어, 고급언어 구분 설명 대표적인 언어 저급언어 - 기계 중심적인 언어, 실행 속도가 빠르고, 기계마다 다른 코드를 가짐 - 컴퓨터가 이해하기 쉬운 이진법으로 이루어진 기계어와, 기계어에 대응되도록 만든 어셈블리어가 존재 기계어(machine lanaguage) 어셈블리어(assembly language) 고급언어 - 사람이 이해하기 쉬운 자연어에 가깝게 만들어져 프로그래밍하기 쉽고 가독성, 생산성..

UX와 UI의 차이

UX(User Experiance) - UX(사용자경험)은 사용자의 환경을 개선하려는 설계자의 사고와 행동 - 사용자가 어떤 시스템, 서비스를 통해 목적을 이루려 할 때 느끼는 경험, 감정, 지각, 태도 반응의 종합적인 경험. - 사용자를 위해 편리한 화면 설계와 환경을 연구하고 서비스를 기획하는 과정 UI(User Interface) - 인터페이스 : 두 물체 사이에 서로 접촉하는 부분. - 사용자와 시스템이 정보를 주고 받는 상호 작용이 잘 이루어지도록 하는 장치, 소프트웨어를 의미 차이 UX UI 보이지 않는 것을 연구 보이지 않는 것을 보이게 만드는 구체적 작업 사용자가 느끼는 태도, 행동, 느낌 사용자가 직접 대면하는 환경 사용자의 경험에 대한 통계를 기반으로 두는 연구(과정) UX연구를 통해 ..

반정규화 기법

계산된 컬럼 추가 - 총 판매액, 평균잔고, 계좌 평가 등을 미리 계산하고, 결과를 특정 칼럼에 추가 테이블 수직 분할 - 하나의 테이블을 두 개 이상의 테이블로 분할하여 새로운 테이블을 만드는 것. 테이블 수평 분할 - 하나의 테이블에 있는 값을 기준으로 테이블을 분할하는 방법 테이블 병합 - 1:1관계의 테이블을 하나의 테이블로 병합하여 성능 향상 - 1:N관계의 테이블을 병합하여 성능을 향상시킨다. - 슈퍼 타입과 서브 타입 관계가 발생하면, 테이블을 통합하여 성능을 향상시킨다 * 슈퍼타입, 서브타입 1. 고객 엔티티(슈퍼타입)는 개인고객(서브타입)과 법인 고객(서브타입)으로 분류 2. 베타적관계는 서브엔티티중 하나만(고객은 개인고객이거나 법인고객 둘중 하나만 될 수 있음), 포괄적 관계는 서브엔..

DB/SQL 2022.02.18

옵티마이저 조인

nested loop 조인 - 하나의 테이블에서 데이터를 먼저 찾고 그 다음 테이블을 조인 - 먼저 조회하는 테이블을 외부 테이블, 그 다음 조회하는 테이블을 내부 테이블이라고 한다. - 외부테이블의 크기가 작은것을 먼저 찾는것이 중요 - random access가 많이 발생하므로 이를 줄여야 성능 향상. Sort merge 조인 - 두 개의 테이블을 sort_area라는 메모리 공간에 모두 로딩하고 sort수행 - 두개의 테이블이 sort가 완료되면 두개의 테이블을 merge - sort가 발생하기 때문에 데이터양이 많아지면 성능이 떨어진다 hash 조인 - 두 개의 테이블 중에서 작은 테이블을 hash 메모리로 로딩하고, 두개의 테이블의 조인키를 사용하여 해시 테이블을 생성 - 해시함수를 사용해서 ..

DB/SQL 2022.02.18

옵티마이저

옵티마이저란? - SQL의 문법적 오류를 확인한다 - SQL의 실행 계획을 수립하고, SQL을 실행하는 데이터베이스 관리 시스템의 소프트웨어 - 가장 빠른 데이터 접근 경로를 작성하고 채택한다. (동일한 결과가 나오는 SQL도 어떻게 실행하느냐에 따라 성능이 달라진다) ex) A 테이블과 B 테이블의 and연산을 할 때 크기가 작은 테이블을 먼저 읽어올 때 속도가 빨라진다. 옵티마이저 특징 - 데이터 딕셔너리에 있는 오브젝트 통계, 시스템 통계 등의 정보를 사용해서 예상되는 비용을 산정한다 - 최저비용을 가지고 있는 계획을 선택해서 SQL을 실행한다. 옵티마이저 실행 계획 - 개발자가 sql실행시 파싱(parsing)을 실행하여 sql의 문법 검사 및 구문분석 수행 - 옵티마이저가 규칙기반 or 비..

DB/SQL 2022.02.18

테이블 파티션의 종류

Range Partition - 값의 범위를 기준으로 여러 개의 파티션으로 데이터를 나누어 저장하는것 - ex) 봉급을 기준으로 200~4000이하인 파티션과, 5000~7000천 이상인 파티션 생성 List Partition - 특정 값을 기준으로 분할하는 방법 - 부서번호가 10번인 파티션과, 20번인 파티션으로 분류 Hash Partition - 데이터베이스 관리시스템이 내부적으로 해시함수를 사용하여 데이터를 분할 - 데이터베이스 관리 시스템이 알아서 분할하고 관리하는것

DB/SQL 2022.02.17

group by 관련함수

ROLLUP - 계층별로 group by를 수행 - rollup 뒤에 컬럼이 두개이상오면, 순서에 따라 결과가 달라짐 - 예시 SELECT DEPTNO,JOB,sum(sal) FROM table GROUP BY ROLLUP(DEPTNO,JOB) - 결과 GROUPING SET - 조합별 group by 쌍을 확인한다. - 예시 SELECT JOB,DEPTNO,count(*) FROM table GROUP BY GROUPING SETS(JOB,DEPTNO) - 결과 CUBE - 조합별, 소계 등 모든 경우의 group by 쌍을 확인한다. - 코드예시 SELECT DEPARTMENT_ID,JOB_ID,SUM(SALARY) FROM table GROUP BY GROUPING CUBE(DEPARTMENT_I..

DB/SQL 2022.02.15