728x90

Computer Science 10

CI/CD

CI/CD 개념 CI (Continuous Integration) 지속적인 통합과 CD (Continuous Delivery | Continuous Deployment) 지속적인 배포 를 합친 용어입니다. CI 는 코드의 변경 사항이 정기적으로 빌드 및 테스트되어 작업중인 레포지토리 혹은 환경에 통합되는 것을 뜻하고 CD 는 Continuous Delivery 의 경우 공유 레포지토리 혹은 환경으로 자동으로 Release 하는 것, Continuous Deployment는 자동으로 배포까지 되는 것을 의미합니다. CI 가 중요한 이유는 자동화와 테스트에 있습니다. 새로운 기능을 추가하거나 업데이트시에 매번 커밋과 머지를 해야하는 상황이 오는데, 이를 하루에 수십번씩 할 때도 있다는 점이 문제입니다. 모든..

동기 Vs 비동기

동기 동기 방식은 서버에 요청을 보내고 요청이 끝나면 다음 동작을 실행하는 방식입니다. 순서에 맞추어 진행되어 코드를 구성하거나 제어하기 쉽습니다. 하지만 여러가지 요청을 동시에 처리할 수 없어 효율이 떨어집니다. 비동기 비동기 방식은 서버에 요청을 보낸 뒤 요청이 끝나기 기다리지 않고 다음 요청을 바로 실행하는 방식입니다. 작업을 기다릴 필요없이 동작하기 때문에 자원을 효율적으로 사용할 수 있습니다. 하지만 작업이 완료된 결과를 제어하기 어렵습니다. 예를 들어 A 의 결과를 B 에서 사용하는 경우 A 와 B 가 동시에 실행되면 B 에서 오류가 날 수 밖에 없습니다. 또 비동기 요청의 응답을 처리할 콜백 함수를 함께 설정하게 되는데, 여러 개의 콜백함수가 중첩되어 콜백 헬이 발생하는 단점이 있습니다. 또..

아스키 코드 Vs 유니코드 Vs UTF-8

아스키 코드 아스키코드(ASCII)는 128개의 문자로 이루어진 7비트 부호입니다. 알파벳, 숫자, 특수기호와 컴퓨터에 필요한 몇 가지 문자만 정의되어 있습니다. 출처 - https://velog.io/@exploit017/%EC%95%84%EC%8A%A4%ED%82%A4-%EC%BD%94%EB%93%9C%ED%91%9C 유니코드 점점 여러 나라에서 컴퓨터를 사용하다 보니 아스키코드만으로는 문자들을 표현하기 부족해져서 만들어진 코드 체계입니다. 숫자와 글자가 1:1 로 매핑되는 형태를 가지고 있습니다. 16비트를 표현해 최대 65536자를 표현 가능하며 영문, 숫자, 한글, 한자 등 모든 글자는 이론적으로 2 바이트를 띄고 있습니다. 다만 일부 문자는 2바이트를 초과할수도 있습니다. UTF-8 유니코드를..

Call By Value Vs Call By Reference

Call By Value 개념 함수에서 변수를 호출할 때 값을 직접 호출하는 방식입니다. 호출되는 순간 메모리 공간에 이를 위한 임시 공간이 생성되고 변수의 값을 복사하여 바로 전달합니다. 복사된 값은 함수 안에서 로컬 변수의 특성을 가지게 되며 함수 안에서 값이 변경되어도 외부 변수의 값은 변경되지 않습니다. def add_int(a, b): a += b return a a = 10 b = 15 sum_ab = add_int(a, b) 위와 같은 방식으로 함수를 정의했다고 생각하겠습니다. a 의 값에 b 를 더한 뒤 a 를 리턴해주는 방식으로 구성되어있는데, 단순히 a 와 b 의 값을 불러와서 함수에 사용했으므로 함수 안에서 a 가 변경되어도 변경사항이 외부의 a 에 적용되지 않습니다. Call By ..

메모리 구조

메모리 구조 개념 프로그램이 실행되기 위해서는 프로그램이 메모리에 로드되어야 합니다. 또 프로그램에서 사용되는 변수들을 저장할 메모리도 필요합니다. 이를 위해 컴퓨터의 운영체제는 프로그램의 실행을 위해 다양한 메모리 공간을 제공합니다. 대표적인 메모리 공간은 네 영역으로 나눌 수 있습니다. 코드(code) 영역 데이터(data) 영역 스택(stack) 영역 힙(heap) 영역 이 영역을 그림으로 표현하면 오른쪽과 같습니다. 코드 영역 코드 영역은 실행할 프로그램의 코드가 저장되는 영역입니다. 또 텍스트 영역이라고도 부릅니다. 코드 역역에 저장된 명령어는 CPU 에 의해 하나씩 처리됩니다. 데이터 영역 데이터 영역은 프로그램의 전역 변수와 정적 변수가 저장되는 영역입니다. 프로그램의 시작시 할당되며, 프로..

RESTful api

RESTful api 개념 RE presentational S tate T ransfer 의 약자로 api 작동 방식에 대한 소프트웨어 아키텍쳐입니다. 즉 네트워크 상태의 전이에 대한 표현입니다. 일반적으로 Resource(URI), Method(GET, POST 등), Representation of Resource(데이터의 표현 방식, JSON, XML 등) 을 통해 상태를 표현한다면 우리는 RESTful 한 api 를 작성했다고 말 합니다. 규칙 REST 아키텍쳐는 몇 가지 규칙이 있습니다. 균일한 인터페이스 서버가 표준 형식으로 정보를 전송하는가 에 관한 문제입니다. 예를 들어 서버는 데이터를 텍스트로 저장하고 HTML 형식으로 전송할 수 있습니다. 요청은 리소스를 식별해야 합니다. 이를 위해 균..

프레임워크 Vs 라이브러리

프레임 워크 개념 프레임 워크는 이름에서 볼 수 있듯 개발을 하기 위한 프레임, 뼈대를 제공해줍니다. 전체 동작 방식은 프레임워크가 제공하고 우리는 프레임워크의 일정 부분만 개발하는 것으로 프로그램을 만들 수 있습니다. 굳이 표현하자면 독립을 해서 집을 구했는데 매매가 아닌 전세로 들어가는 것과 비슷하다고 보면 됩니다. 통제권은 집주인이 쥐고 있어 집에 소파를 놓거나 티비를 놓는 작업은 마음대로 할 수 있지만, 베란다를 터서 방을 넓힌다거나 벽을 허물고 창문을 설치하는 등의 행위는 할 수 없는 느낌입니다. 즉 통제권은 프레임워크가 쥐고 있고 우리는 허용범위 내에서만 코드를 작성할 수 있습니다. 원래는 프로그래머가 가지고 있던 객체의 제어를 프레임 워크가 대신 해준다는 의미로 제어역전 이라는 용어를 사용하..

절차적 프로그래밍 Vs 함수형 프로그래밍 Vs 객체지향 프로그래밍

절차적 프로그래밍 개념 절차적 프로그래밍은 절차지향 프로그래밍 혹은 절차지향적 프로그래밍이라고도 불립니다. 또 명령형 프로그래밍과 동의어로 쓰이기도 합니다. 그리고 일반적으로 프로시저 호출의 개념을 바탕으로 하는 프로그래밍 패러다임을 뜻합니다. 프로시저는 루틴, 서브루틴, 메서드, 함수 등으로 부르기도 합니다. 수행되어야 할 계산과정들을 포함하고 있고 아무 위치에서나 호출할 수 있으며 다른 프로시저, 자기 자신에서도 호출할 수 있다는 특징이 있습니다. 특징으로는 모듈성이 있는데, 코드의 재사용성이 늘어나고 프로그램의 흐름을 더 쉽게 파악할 수 있게 됩니다. 입력과 출력 그리고 그 사이의 규칙을 정하여 구현하는데 일반적으로 쓰는 함수가 그렇습니다. 또 스코프 개념을 통해 변수를 보호하고 프로시저 사이의 독..

명령형 프로그래밍 Vs 선언형 프로그래밍

명령형 프로그래밍 개념 명령형 프로그래밍은 선언형 프로그래밍과 반대되는 개념입니다. 프로그래밍의 상태와 상태를 변경시키는 구문의 관점에서 연산을 설명하는 프로그래밍 패러다임인데, 쉽게 설명하자면 컴퓨터가 수행할 명령들을 순서대로 써 놓은 것입니다. 즉 '어떻게' 수행할지에 주목하는 패러다임이라고 할 수 있습니다. 한번 조금만 더 쉽고 대략적으로 이해해보겠습니다. 어떤 리스트 안에 속한 수들의 합을 구할 때, 아래의 방식으로 for 문을 이용해 합을 구할 수 있습니다. 이런 일반적으로 풀어서 쓴 방식을 명령형 프로그래밍이라고 보면 될 것 같습니다. nums = [1, 2, 3, 4, 5] sum_nums = 0 for num in nums: sum_nums += num 거의 대부분의 하드웨어들은 기계어를 ..

구조적 프로그래밍 Vs 비구조적 프로그래밍

구조적 프로그래밍 개념 구조적 프로그래밍은 절차적 프로그래밍 혹은 절차지향적 프로그래밍이라 불리는 패러다임의 하위 개념으로 볼 수 있는 프로그래밍 패러다임입니다. 비 구조적 프로그래밍의 문제점을 해결하고자 등장했으며 역사적으로 몇가지 다른 구조화 기법과 방법론이 개발되어왔는데, 가장 일반적인 세 가지는 다음과 같습니다. 잭슨의 구조적 프로그래밍 다익스트라의 구조적 프로그래밍 다익스트라의 관점에서 파생된 관점 하지만 대부분의 구조적 프로그래밍이라고 말하는 것은 첫 번째를 제외한 둘 중의 하나를 말하는 것인데, 일반적으로는 GOTO문을 없애거나 GOTO문에 대한 의존성을 줄여주는 것으로 유명합니다. 흐름제어를 사용하지 않기때문에 코드의 가독성이 좋고 유지보수가 쉬우며, 재사용성도 높습니다. 다익스트라는 Go..

728x90