본문 바로가기

Archived(IT)

(55)
애자일(Agile) 방법론 애자일 방법론이 등장하게 된 배경은 SW의 불확실성에 기인한다. 기존의 폭포수(Waterfall) 방식에서는 계획을 통해 각 단계가 마무리되면 다음 단계로 넘어간다. 이러한 개발 방식은 현실적으로 끊임없이 수정을 요하는 SW의 불확실성에 대한 대처가 힘들었다. 이전 단계로 돌아가는 과정에 있어 많은 비용이 발생하고 또한 다음 단계에 대한 고려 없이 이전 단계를 마무리 짓는다는 것 자체가 현실적으로 맞지 않았다. 그래서 등장하게 된 것이 Agile(애자일) 방법론이다. 날렵한, 민첩한이라는 뜻을 지는 Agile에서 알 수 있듯이 개발 과정에서 빠르고 유연하게 대처한다. 정의는 다음과 같다. "애자일 방법론은 소프트웨어 개발 방법에 있어서 아무런 계획이 없는 개발 방법과 계획이 지나치게 많은 개발 방법들 사..
TCP / UDP 네트워크 및 통신의 기본이 되는 이론으로 TCP와 UDP의 차이점이다. TCP(Transfer Control Protocol) 인터넷 상에서 보내는 데이터들을 제어하기 위한 전송 계층 프로토콜이다. Stream을 통한 연결형 서비스로 가상회선 제공 방식을 제공한다. ACK와 Sequence Number를 통해 높은 신뢰성을 제공한다. 흐름 제어, 오류 제어, 혼잡 제어를 보장한다. 속도가 느리다. 3 Way HandShaking 을 통한 연결 / 4 Way HandShaking 을 통한 해제 UDP(User Datagram Protocol) Datagram을 제어하기 위한 전송 계층 프로토콜이다. Port 번호만을 통해 비연결형 서비스를 제공한다. 데이터를 전송 후에 별다른 제어가 없는 낮은 신뢰성을 지..
UI/UX 의미 여러 Application 또는 프로젝트를 수행하면서 UI/UX라는 단어를 종종 듣곤 했다. 추상적으로 무슨 의미인지는 이해하고 있는 줄 알았지만 누군가에게 설명하려 하니 쉽게 말문이 열리지 않았다. 그래서 이번 기회에 알아보고 정리해보고자 한다. 1. UI(User Interface) 말 그대로, 접점이라는 뜻이다. 사용자가 SW를 마주하게 되는 접점으로, SW와 상호작용에 있어 중요한 매개체이다. 디자인, 레이아웃과 같은 부분을 어떻게 구성하느냐에 대한 고민을 주로 UI로 표현한다. 주로 시각적인 부분에 집중한다. ex) 폰트, 컬러, 배경 등 2. UX(User Experience) 사용자 경험이라는 뜻. 사용자가 SW를 사용하며 느끼게 되는 종합적인 느낌이나 감정을 지칭한다. UX 설계는 주로 사..
컨테이너 기술 리눅스 시스템과 관련된 프로젝트를 진행하면서 도커라는 기술에 대해서 듣게 되었다. 처음에 도커라는 것이 뭔지 몰랐는데 컨테이너 기술 중 대표적인 것이라고 한다. 그래서 컨테이너 기술에 대해 살펴보고자 이렇게 정리해본다. 1. 컨테이너 기술이란? 컨테이너 기술이란 쉽게 말해 App과 필요한 library, binray, config 등을 패키지로 묶어 배포하는 것을 말한다. 즉, 묶어서 하나의 실행 환경을 구성할 수 있도록 하는 것이다. 운영체제를 제외한 실행에 필요한 모든 환경이 따라오므로 다른 컴퓨팅 환경에서도 오류를 최소화할 수 있다. 운영체제를 제외한 모든 환경을 패키지로 제공하기에 OS 레벨의 가상화라고도 부른다. cf) HW 레벨의 가상화 참고로, 컨테이너 기술은 OS 레벨의 가상화라고 불리면서..
웹 서버 Nginx_Apache 웹 서버는 대표적으로 Nginx와 Apache 두 가지를 많이 든다. 웹 어플리케이션을 개발해본 경험이 있다면 두 용어에 대해서는 접했던 경험이 있을 것이다. (나도 후에 알게 되었는데 EC2를 배포할 때 Nginx를 썼던 것이었다...) 1. Nginx Nginx의 가장 큰 특징은 Event-Driven으로 동작된다. 즉, 서버로 들어오는 요청을 Event로써 어떤 일을 해야 하는지에 대해서만 전달하고 다음 Event를 처리한다. 그래서 하나의 프로세스를 통해서 들어오는 많은 요청들을 빠르게 처리가능하다. Apache와 달리, CPU에 관계없이 모든 IO들을 전부 Event Listener로 미루기 때문에 흐름이 끊기지 않고 응답이 빠르게 진행이 되어 1개의 프로세스로 더 빠른 작업이 가능하게 될수 있..
메모리 단편화(페이징, 세그먼테이션) 단편화란 프로세스가 메모리를 요청할 때 할당 가능한 메모리가 충분히 존재함에도 메모리가 나누어져 존재하여 할당을 할 수 없을 경우를 말한다. 이러한 단편화는 외부 단편화와 내부 단편화로 구분한다. 외부 단편화: 할당 후 메모리 자체에 남는 공간 (페이징 기법-> 메모리를 페이지라는 단위로 나눈 다음 필요한 페이지 단위만큼 할당, 너무 작게하면 페이지 맵핑 비효율) 내부 단편화: 할당 후 프로세스 내부에서 남는 공간 (세그먼테이션 기법 -> 가상메모리를 서로 다른 논리적 크기인 세그먼트로 분할하여 제공, 실제 연속적인 공간에 저장)
정렬 알고리즘 1. 선택정렬(Selection Sort) 선택 정렬이란 n-1번 원소 넣을 위치를 선택하고 해당 위치의 원소를 정하는 알고리즘이다. 따라서 1번째 위치에서는 가장 우선순위가 높은 원소를 찾아 넣는다. 그 다음 2번째 위치에서는 2번째부터 n번째까지 원소 중 우선순위가 높은 원소를 넣는다. 이런식으로 n-1번째까지 반복하면 원소가 다 위치를 찾아들어간다. 시간복잡도는 O(n^2)이다. 참고로 이중선택정렬이라해서 처음부터 끝까지 훑어서 최소, 최대값을 동시에 탐색하여 넣으면서 탐색횟수를 절반으로 줄여주는 파생알고리즘도 있다. void Selection_Sort(int a[], int size) { int min_idx, temp; for (int i = 0; i < size - 1; i++) { min_i..
Rest와 Rest API (RestFull API) RESTFull이란 말을 Django 프레임워크를 하면서 한번씩 듣곤 하였다. 그래서 해당 언어가 어떤 뜻인지 나중에 찾아봐야지 생각만하고 미루다가 이렇게 뒤늦게 정리해보고자 한다. https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html [Network] REST란? REST API란? RESTful이란? - Heee's Development Blog Step by step goes a long way. gmlwjd9405.github.io https://medium.com/wasd/%EA%B0%84%EB%8B%A8%ED%95%98%EA%B2%8C-%EC%82%B4%ED%8E%B4%EB%B3%B4%EB%8A%94-rest-api-79422dfc0a7..