일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- TOPCIT
- 시간초과
- 백트래킹
- Flutter
- 온라인처리
- boj 11659
- 객체 지향형 DB
- Backtracking
- 객체관계형DB
- 공간DB
- BOJ
- 정렬
- 멀티미디어DB
- 개발프레임워크의 기술 동향
- compare
- c++
- 프로그래밍 언어 기술 동향
- compare구조체
- aws winscp
- 메인 메모리 DB
- 소프트웨어아키텍처 기술 동향
- 프로그래밍 언어
- 계층형DB
- vector unique erase
- ANSI-SPARC
- 클라우드기반 IDE
- 개발프레임워크
- sync_with_stdio(0)
- 네트워크형DB
- 소프트웨어 개발도구
옐그's 코딩라이프
[TOPCIT][01] VIII. 프로그래밍 언어와 개발환경 (에센스 정리 요약) 본문
학습 목표
1. 프로그래밍 언어(비구조적 언어, 구조적 언어, 객체 지향 언어)의 특성을 설명할 수 있다.
2. 주요 프로그래밍 언어(C, C++, Java, Python, JavaScript)의 특징을 비교할 수 있다.
3. 소프트웨어 개발 프레임워크를 이해하고 그 종류를 설명할 수 있다.
4. 통합개발환경(IDE)을 이해하고 설명할 수 있다.
핵심 키워드
- 프로그래밍 언어, 컴파일러, 인터프리터
- 코드재사용
- 소프트웨어 개발프레임워크, 스프링프레임워크, 전자정부 표준프레임워크
- 통합개발환경
01 프로그래밍 언어의 개요
프로그래밍 언어 개념
- 사용자가 보다 친숙한 언어, 즉 일상적으로 사용하는 언어와 비슷한 언어를 가지고 프로그램을 짤 수 있게 하도록 한 것
- 프로그래밍 언어마다 쓰이는 용도가 달라 각 영역에서 적절한 프로그래밍 언어를 사용하여 원하는 생산성 및 품질을 확보하는 것이 필요함
구분 | 설명 | 대표적인 언어 |
저급언어(Low-Level Language) | - 기계 중심적인 언어로 실행 속도가 빠르고 기계마다 다른 코드를 가짐 - 컴퓨터가 이해하기 쉬운 이진법으로 이루어진 기계어와 기계어에 대응되도록 만든 어셈블리어가 있음 - 컴퓨터 기종 간 호환성이 없음 |
- 기계어 - 어셈블리어 |
고급언어(High-Level Language) | - 사람이 이해하기 쉬운 자연어에 가깝게 만들어져 저급언어에 비해 프로그래밍하기 쉽고 가독성과 생산성이 높음 - 특정 기계와 관계없이 독립적으로 프로그램을 만들 수 있고 컴파일러나 인터프리터에 의해 저급언어로 변환됨 |
- 포트란 (FORTRAN) - 코볼 (COBOL) - 베이식 (BASIC) - C, C++ - Java - Python |
영역 | 주요 프로그래밍 언어 |
플랫과학기술(수치계산용) | FORTRAN, ALGOL60 |
비즈니스용 | COBOL |
인공지능용 | LISP, PROLOG |
시스템 프로그래밍용 | PL/S, BLISS, ALGOL, C/C++, Java |
특수목적용 | GPSS(시뮬레이션을 위한 언어) |
인터프리터 언어
- 인터프리터는 중간과정 없이 원시 프로그램을 직접 저급 언어로 바꾸면서 동시에 실행함
- 종류: LISP, PROLOG
인터프리터 언어 장점
- 실행을 위해 완전한 기계어 번역을 기다리지 않고 필요 시 마다 실행
- 프로그램이 실행될 때까지 원시 언어 형태를 유지하므로 메모리 절약
인터프리터 언어 단점
- 재실행 시 매번 원시 프로그램을 디코딩하여 소요 시간 많음
컴파일러 언어
- 컴파일이란? 어느 특정 언어를 동등한 의미를 갖는 다른 언어로 바꾸는 것
컴파일러 언어 장점
- 번역된 목적 코드(Object Code) 저장 가능
- 컴파일 한 후 바로 재실행이 가능
- 재사용 프로그램인 경우, 한 번 컴파일 한 후에는 빠르게 재실행에 따라 실행시간 단축
컴파일러 언어 단점
- 기계어로 변환하는데 많은 시간 소요
- 한 줄의 원시 프로그램이 때로는 몇 백 줄의 기계어로 변역되어 메모리 낭비 발생
02 주요 프로그래밍 언어의 특징
C언어
- 1970년대 UNIX 운영체제를 위해 AT&A의 벨 연구소에서 일하던 데니스 리치에 의해 탄생함
C언어 특징
- 실행속도가 빠르고 효율적인 메모리 관리 용이
- 표기법이 간결하여 문단으로 기능 구현 가능
- 절차지향적인 언어: 프로그램 실행이 정해진 순서에 따라 진행
- 배열과 메모리 등을 고려한 프로그램이 필요하여 Java에 비해 어려움
- 실행환경 및 기계 변경 시 인식이 어려움
C++ 언어
- C++는 C의 대부분의 특징을 포함하고 있어서 시스템 프로그래밍에 적합하고 클래스, 연산자 중복, 가상 함수 등의 특징이 있어 객체 지향 프로그래밍에 적합함
- 객체 지향형 프로그래밍 기법을 이용하여 소프트웨어를 개발하면 소프트웨어의 재사용성, 확장성 및 유지보수성이 높아지기 때문에 대형 프로그램 작성에 좋고, 프로그램의 가독성이 좋음
C++ 언어 특징
- 객체 지향 특성
- 캡슐화와 자료 은닉 측면
- 상속성과 재사용성 측면
- 다형성 측면
Java 언어
- 1991년부터 선마이크로시스템즈사의 제임스 고슬링이 가전 제품을 제어하는 단순하고 버그 없는 프로그래밍 언어 Java를 개발하기 시작함
- 작고 단순한 구조로서 효율적으로 변화되어 실행되고, 기존 언어에서 에러의 원인이 되는 여러 기능들이 보완됨으로써 장점을 인정받음
- 현재 앱, 모바일 등에 가장 많이 사용하는 대중적인 프로그래밍 언어
Java 언어 특징
- C++로부터 나온 Java는 C/C++ 언어와 문법적으로 유사
- C++의 복잡성을 단순화
- 항상 자동 가빚지 콜렉션을 수행
- 객체 지향적, 객체개념을 적용하는 완벽한 객체 지향적 언어
- Java 프로그램은 자바 가상머신에 의해 실행됨으로 플랫폼에 독립적
Python 언어
- 1990년 Guido Van Rossum에 의해 개발된 인터프리터 언어
- 자주 사용하는 영어 키워드로 사용하여 가독성이 좋고 높은 생산성을 가진 객체 지향적 대화형 언어
- 최근에는 빅데이터 분석이나 인공지능 프로그램 개발에 많이 활용됨
Python 언어 특징
- 동적 타이핑으로 실행 시간에 자료형을 확인
- 문법이 쉽고 영어 구분과 유사하여 사용하기 쉬움
- 단일 이벤트 루프를 사용하여 비동기식 코드 작성에 유리
- 멀티패러다임 프로그래밍 언어(절차적 언어 지원, 함수형 프로그래밍 언어, 객체 지향 프로그래밍 지원)
JavaScript 언어
- 객체 기반의 스크립트 프로그래밍 언어
- 주로 웹 브라우저 내에서 사용
JavaScript 언어 특징
- 간단하게 코딩을 짜고 프로그래밍을 구현할 수 있지만, 보안에 취약할 수 있음
- 오픈 소스로 운영되기 때문에 개발자들 간의 공유가 활발하여 확장성 및 활용도 높음
- 별도의 컴파일 과정이 필요하지 않아 쉽게 배울 수 있는 언어
- 최근에는 Node.js, React.js 등의 자바스크리트 관련 라이브러리나 프레임워크가 개발자들 사이에서 활용도가 점차 높아짐
03 소프트웨어 개발 프레임워크
소프트웨어 개발 프레임워크 개념
- 효율적인 정보시스템 개발을 위한 코드 라이브러리, 인터페이스 규약, 설정정보 등의 집합
- 소프트웨어 구성에 필요한 기본 뼈대를 제공
장점 | 설명 |
코드 품질 향상 | 반복적인 코딩 작업 시 실수하기 쉬운 부분을 선 정의하여 처리, 코드 작성과정에서 발생하는 버그를 최소화하여 코드 품질 향상 |
개발 생산성 증대 | 컴포넌트, 통신처리방식, 데이터처리 방식 등 개발에 필요한 다양한 기능을 미리 제공하여 개발 생산성을 극대화시킴 |
유지보수성 향상 | 담당자가 변경되거나 사용자 환경 변화에 적응하기 위해 구조적이고 체계화된 개발 환경으로 분석 및 수정이 편리 |
신규시스템 위험 감소 | 검증된 기술과 표준화된 구조 기반 서비스를 재사용하여 신규 시스템의 위험을 감소시킴 |
스프링 프레임워크
- 자바 플랫폼을 위한 오픈소스 어플리케이션 프레임워크
- 자바기반의 엔터프라이즈 어플리케이션 개발 시 포괄적으로 사용할 수 있는 기반 구조를 제공하고 동적인 웹 어플리케이션 개발에 필요한 여러 가지 서비스를 제공함
스프링 프레임워크 특징
- POJO(Plain Old Java Object)로 불리는 경량 컨테이너를 사용하여 자바 객체의 생성, 소멸과 같은 라이프 사이클을 관리
- 설정 파일이나 어노테이션을 통해 객체 간의 의존관계를 설정하는 DI(Dependency Injection)를 통해 객체 간의 느슨한 결합을 보장
- JDBC, MyBatis 등 데이터베이스 라이브러리 제공
스프링 프레임워크의 구성
구성요소 | 설명 |
Spring Core | 스프링의 핵심부분으로 기능과 설정을 분리하기 위한 IoC 기능이 구현된 BeanFactory를 제공함 |
Spring Context | Core와 같이 스프링의 기본 기능으로 스프링 기반에서 구현된 기능 객체(Bean)들에 대한 접근 방법을 제공함 |
Spring DAO | JDBC에 대한 추상화 계층으로 ORM 프레임워크와 통합되어 트랜잭션 관리 기능을 향상시킴 |
Spring ORM | 객체/관계 맵핑을 위한 JDO, 하이버네이트, iBatis 등과 같은 통합을 위한 패키지로 객체 관계형 모델을 지원함 |
Spring AOP | 로깅, 보안, 트랜잭션 등과 같은 횡단 관심사의 분리로 유지보수성과 변경 용이성을 지원함 |
Spring Web | 일반적인 어플리케이션 개발에 필요한 기본 기능을 제공하고 웹 워크나 스트럿츠와의 통합을 위해 사용되는 패키지 |
Spring WebMVC | 스트럿츠와 같은 일반적인 WAF 기능을 스프링 버전으로 구현하고 있는 패키지 |
전자정부 표준프레임워크
- 자바 기반의 시스템 개발, 운영 시 필요한 기본 기능들을 표준화하여 미리 구현해 둔 공공사업용 표준개발프레임워크
- 민간과 정부에서 필요한 다양한 소프트웨어 개발에 기반이 되는 환경(실행, 개발, 관리, 운영)과 공통모듈을 미리 구현하여 제공한 것
전자정부 표준프레임워크의 목적
- 공공사업에 적용되는 개발 프레임워크의 표준 정립을 통해 응용 소프트웨어 표준화, 품질 및 재사용성 향상
전자정부 표준프레임워크의 특징
- 전자정부 서비스 품질향상
- 정보화 투자 효율성 향상
- 대, 중, 소기업이 동일한 개발 기반 위에서 공정한 경쟁
전자정부 표준프레임워크 구성
전자정부 표준프레임워크 구성요소
구성요소 | 설명 |
실행환경 | 전자정부 업무 프로그램 개발 시 필요한 화면, 서버 프로그램, 데이터 개발, 배치처리 기능 개발을 표준화가 용이하도록 지원하는 응용프로그램 환경 |
개발환경 | 데이터 개발도구, 테스트 자동화도구, 코드검사도구, 템플릿 프로젝트 생성도구, 공통컴포넌트 조립도구, 서버환경관리 도구, 배치템플릿 프로젝트 생성도구, 배치작업파일 생성도구 등 업무 프로그램 개발에 필요한 환경 |
운영환경 | 실행환경에서 운영되는 서비스를 관리하고 운영하기 위한 환경(모니터링, 배포, 관리 시스템 등) 배치환경을 운영하기 위한 환경(배치실행, 스케줄링, 결과모니터링 등) |
관리환경 | 개발 프레임워크 및 공통 서비스를 각 개발 프로젝트에 배포하고 관리하기 위한 모듈 |
공통컴포넌트 | 전자정부 사업에서 응용소프트웨어 개발 시 공통으로 활용하기 위한 재사용 가능한 개발 컴포넌트의 집합 |
04 통합개발환경(IDE)
통합개발환경(IDE) 개념
- 코딩, 디버깅, 컴파일, 배포 등 프로그램 개발에 관련된 모든 작업을 하나의 소프트웨어 안에서 처리하는 환경을 제공하는 개발용 소프트웨어
- 다양한 프로그래밍 언어를 지원하는 대중적인 통합개발환경으로는 비주얼 스튜디오, 이클립스, XCode 등
통합개발환경(IDE) 구성요소
구성요소 | 설명 |
편집기 | 프로그래밍을 위해 코드를 입력하고 편집하는 도구 |
빌드도구 | 프로그래밍 언어로 작성한 코드를 기계가 인식할 수 있는 코드로 변환하기 위한 컴파일러, 인터프리터, 링커와 같은 도구 |
디버거 | 프로그램을 실행시키면서 오류를 찾아내기 위한 도구 |
프로젝트 관리 | 팀 간 협업시스템을 제공하여 프로젝트를 관리할 수 있는 도구 |
CI(Continuous Integration) 개념
- 지속적인 통합(Continuous Integration)은 여러 명으로 구성된 팀이 작업한 결과를 자주 통합하는 소프트웨어 개발 활동
- 각 개발자가 자동화된 빌드 및 테스트를 수행한 후, 코드 변경 사항을 중앙 저장소에 주기적으로 병합하는 방식
CI(Continuous Integration) 필요성
- 빌드에 대한 형상관리
- 개발자가 개발 활동에만 집중할 수 있는 환경 제공
- 코드 통합 시 발생하는 문제점을 사전에 발견하여 처리
- 잦은 배포를 기반으로 자주 피드백을 얻는 개발 프로세스(애자일기법 등) 지원
CI(Continuous Integration)의 구성
소프트웨어 빌드(Software Build)
- 소스 코드 파일을 컴퓨터에서 실행할 수 있는 독립 소프트웨어 가공물로 변화하는 과정 또는 그에 대한 결과물
일일 빌드(Daily Build) 및 동작 테스트
- 소프트웨어 제품을 매일 전체적으로 다시 컴파일하고, 기본 동작을 검증하기 위해 필요한 일련의 테스트를 거치는 공정
- 일일 빌드는 소프트웨어 통합 실패, 낮은 품질, 낮은 프로젝트 가시성과 같은 리스크를 줄이고 시간을 절약하여 프로젝트 효율성을 높이면서 고객 만족도를 높일 수 있음
소프트웨어 배포
- 사용할 소프트웨어 시스템을 만드는 모든 행위
- 배포 프로세스는 그들 사이에 가능한 전환과 함께 상호 활동으로 구성됨
'TOPCIT' 카테고리의 다른 글
[TOPCIT][01] X. 소프트웨어 요구관리 (에센스 정리 요약) (0) | 2023.02.24 |
---|---|
[TOPCIT][01] IX. 소프트웨어 테스팅과 리팩토링 (에센스 정리 요약) (0) | 2023.02.23 |
[TOPCIT][01] VII. 사용자 인터페이스(UI)/사용자 경험(UX) 설계 (에센스 정리 요약) (0) | 2023.02.10 |
[TOPCIT][01] VI. 객체 지향 설계 (에센스 정리 요약) (0) | 2023.02.10 |
[TOPCIT][01] V. 소프트웨어 아키텍처 설계 (에센스 정리 요약) (0) | 2022.12.27 |