옐그's 코딩라이프

[TOPCIT][01] VIII. 프로그래밍 언어와 개발환경 (에센스 정리 요약) 본문

TOPCIT

[TOPCIT][01] VIII. 프로그래밍 언어와 개발환경 (에센스 정리 요약)

옐그멍이 2023. 2. 22. 15:37

학습 목표

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) 및 동작 테스트

- 소프트웨어 제품을 매일 전체적으로 다시 컴파일하고, 기본 동작을 검증하기 위해 필요한 일련의 테스트를 거치는 공정

- 일일 빌드는 소프트웨어 통합 실패, 낮은 품질, 낮은 프로젝트 가시성과 같은 리스크를 줄이고 시간을 절약하여 프로젝트 효율성을 높이면서 고객 만족도를 높일 수 있음

 

소프트웨어 배포

- 사용할 소프트웨어 시스템을 만드는 모든 행위

- 배포 프로세스는 그들 사이에 가능한 전환과 함께 상호 활동으로 구성됨

728x90