전체 글

전체 글

    도커(docker)

    컨테이너 기술 컨테이너란 OS상에 논리적인 공간(컨테이너)를 만들고, 필요한 라이브러리, 어플리케이션을 설치해 마치 별도의 서버인 것처럼 사용할 수 있게 만든 것이다. 즉 서버에서 컨테이너를 구동해 그 안에 존재하는 어플리케이션을 설정 없이 사용 할 수 있다. 컨테이너를 사용하는 이유 1. 개발자가 만든 코드를 개발환경에 상관없이 어디서든 동작시킬 수 있다. 따라서 배포가 쉽다. 개발을 하기위해서 하나의 환경을 구축하기는 많은 수고가 들어간다. 서버와 OS, 그리고 네트워크 통신 포트 구성과 개발 툴, 연동환경, 호환성, 버전 등 이러한 환경을 모든 개발자의 PC에 각각 설치하기엔 매우 불편하다. 따라서 컨테이너 기술을 통해 한번 설정한 세팅 환경을 각각 다른 서버에 배포하면 불필요한 수고를 줄일 수 있..

    시간복잡도 & 공간복잡도

    복잡도(Complexity)는 알고리즘의 성능을 나타내는 척도이다. 복잡도란 시간복잡도와 공간복잡도로 나뉜다. 동일한 기능을 수행하는 알고리즘이 있다면 일반적으로 복잡도가 낮을수록 좋은 알고리즘이다. 따라서 시간복잡도를 측정함으로써 알고리즘을 위해 필요한 연산의 횟수, 공간복잡를 측정함으로써 알고리즘을 위해 필요한 메모리의 양을 계산할 수 있다. 시간 복잡도 : 입력 크기에 대해 알고리즘이 얼마나 오래 걸리는지를 의미 공간 복잡도 : 입력 크기에 대해 알고리즘이 얼마나 많은 메모리를 차지하는지를 의미 하지만 효율적인 알고리즘을 사용한다고 했을 때, 보통 시간 복잡도와 공간복잡도는 일종의 거래 관계(trade off)가 성립된다. 메모리를 조금더 많이 사용하는 대신에 반복되는 연산을 생략하거나 더많은 정보..

    선택정렬(Selection Sort)

    선택정렬(Selection Sort) 정렬 알고리즘은 데이터를 특정한 기준에 따라 순서대로 나열한 것을 말한다. 프로그램에서 데이터를 가공할 떄 오름차순이나 내림차순 등 대부분 어떤 식으로든 정렬해 사용하는 경우가 많아서 가장 많이 사용되는 알고리즘이다. 데이터를 정렬하면 이진탐색(Binary Search)이 가능하다. 선택 정렬은 가장 원시적인 방법으로 컴퓨터가 데이터를 정렬할때를 생각해보면된다. 데이터가 무작위로 여러가지 있을 때 데이터 중에서 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸고, 그 다음 작은 데이터를 선택해 앞에서 두번째 데이터와 바꾸는 과정을 반복하는것이다. 즉, 매번 가장 작은 것을 선택한다는 의미에서 선택정렬이라고 한다. 주어진 배열에서 가장 작은 값을 찾는다. 찾은 가..

    OAuth 2.0 (Open Authorization)

    OAuth 개념 Open Authorization 2.0의 약자로 인증을 위한 프로토콜이다. 제 3자 인증방식으로 구글 , 카카오, 네이버 ,페이스북, 깃허브 등에서 제공하는 간편 로그인 기능을 말한다. 기본적으로 사용자는 서버를 신뢰하지 않고, 자신의 민감한 정보를 작성하는 것을 꺼린다. 서버 측 또한 마찬가지로 사용자의 민감한 정보를 관리하는데 리소스가 필요하다. 따라서 OAuth를 사용해 신뢰할 수 있는 서버에 정보를 맡겨놓고 접근 할 수 있는 권한을 주는 것을 말한다. OAuth 2.0 주체 - Resource Owner : 사용자 - Resource Server & Authorization Server : OAuth를 통해 인증, 인가를 제공해주는 서버 를 말한다. 사용자의 자원(이름, 이메일)..

    객체지향 설계 5원칙 - SOLID

    SOLID는 객체 지향 설계의 5가지 원칙을 말한다. SRP( Single Responsibility Principle, 단일책임원칙) 한 클래스에는 하나의 책임만 가져야 한다. 즉, 클래스를 변경하는 이유는 하나여야한다. 예를 들어 한 클래스 내에 A메소드가 있고 ,이 A메소드의 결과로 호출하는 B메소드 , 그리고 B메소드로 호출하는 C메소드가 존재할때, A메소드를 수정한다면 B와 C 메소드를 수정해야 할 상황이 발생할 수 있다. 이는 유지보수가 매우 비효율적이므로 잘 분리해야한다. OCP(Open - Closed Principle, 개방- 폐쇄 원칙) 확장에는 열려있느나 변경에는 닫혀있어야한다. 즉 , 코드를 수정하기 보다 반드시 새로운 코드를 추가하는 방식으로 설계해야 한다. 예를 들어 어떤 모듈의..

    Context Switching (문맥 교환) & PCB

    Context Switching CPU는 한번에 한가지일만 수행할 수 있다. CPU가 하나의 프로세스를 실행하고 있는 상태에서 요청(인터럽트 , 시스템콜)에 의해 다른 프로세스를 실행해야할 때, 기존의 프로세스 상태를 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스 상태를 교체하는 것을 말한다. 인터럽트(Interrupt) : 예상치 못하게 외부에서 발생한 이벤트로 인해 프로세스를 잠시 중단하는 것 시스템콜(system call )? : 커널모드와 사용자 모드의 인터페이스 역할 Context Switching 과정 멀티 프로세스 상황에서 Running 상태인 프로세스 1과 Ready 상태인 프로세스 2가 존재할때, 그리고 이 둘의 프로세스는 인터럽트 요청에 의해 서로 상태가 전이된다고 가정한..

    Mysql JOIN

    Join : 두 개이상의 테이블을 연결해 하나의 테이블처럼 만드는 것을 말한다. 먼저 employee(사람)와 titile (직업) 테이블이 존재할 때 , Left Join (= Left Outer Join) 왼쪽 A 테이블 기준으로 B 테이블을 붙이는 것 select * from employees A left join title B on A.title_id = B.id 왼쪽 테이블의 데이터를 모두 가져오고 , 오른쪽 테이블은 match 됐을때 가져옴 따라서 오른쪽 테이블에서 없는 값들은 Null로 표시된다. 이때 순수 A테이블 데이터만 가져오고 싶다면 select * from employees A left join title B on A.title_id = B.id where B.id is null R..

    데이터베이스 정규화(Normalization)

    1. 정규화란?RDBMS 설계에서 중복을 최소화해 데이터를 구조화하는 과정을 정규화라고 한다.1.1 정규화의 목적중복된 데이터를 허용하지 않음으로 무결성을 유지해 DB의 저장용량을 줄일 수 있다 .무결성이란? 모든 데이터가 완전하고 일관되고 정확한지를 말한다.데이터베이스 구조 확장 시 재디자인을 최소화할 수 있다. 정규화된 DB에서 새로운 데이터 형의 추가로 인한 확장시, 구조변경을 하지 않아도 되거나 일부만 변경해도 된다. 이는 DB와 연결된 응용 프로그램에 최소한의 영향을 준다.insert/update/delete 시 발생할 수 있는 각종 이상 현상(Anomaly)를 방지할 수 있다.이상현상(Anomaly)란?삽입 이상(Insertion anomaly) : 불필요한 정보를 함께 저장하지 않고서는 정보..