전체 글 60

[Python] GIL

1)GIL이란? GIL은 파이썬 인터프리터에 한 갱의 Thread가 하나의 바이트 코드를 실행할 수 있도록 걸어두는 Lock이다. 하나의 Thread는 파이썬 인터프리터의 모든 자원을 사용하나, 다른 사용할 수 없도록 Lock을 걸어둔다는 의미이다. 예시) import threading x = 0 def foo(): global x for _ in range(1000000): x += 1 def bar(): global x for _ in range(1000000): x += 1 thread1 = threading.Thread(target=foo) thread2 = threading.Thread(target=bar) thread1.start() thread2.start() thread1.join() th..

개발언어/Python 2023.09.20

[Spring] 빌드 관리 도구

1. 빌드 관리 도구? 우선, 빌드는 소스코드가 적혀있는 파일을 컴퓨터에서 실행할 수 있는 독립적인 형태로 변환하는 과정을 말한다. 예를 들어 .java, .xml, properties 등의 파일을 jvm이나 톰캣같은 was서버가 인식할 수 있도록 변환해주는 것이다. 빌드 관리 도구는 소스 코드가 빌드 하는 과정에서 여러가지 외부 라이브러리를 사용하는데, 빌드 관리 도구는 사용자가 관리할 필요 없이 필요한 라이브러리들을 자동으로 관리해주는 것이다. 크게 Ant, Maven, Gradle 세 가지가 있다. 빌드 관리 도구의 과정은 아래와 같다. 종속성 다운로드 소스코드를 바이너리 코드로 컴파일 바이너리 코드 패키징 테스트 실행 시스템에 배포 2. Maven (1) maven이란? - Maven은 Java용..

FrameWork/Spring 2023.07.31

[Docker] Docker 동작 원리

1. Docker의 구조 물리서버 > 리눅스 운영체제 > 도커 엔진 > 컨테이너 도커와 컨테이너는 서버에서 사용되며, 위 그림과 같이 운영체제 위에 도커가 위치해있다. 또, 그 도커 위에 컨테이너가 위치해있다. 우선 컨테이너 안에는 어떤 구조로 되어있을까? 모든 컨테이너는 '리눅스 운영체제 비슷한 무언가'가 들어있다. 본래 운영체제는 '커널'과 '그 외 주변 부분'으로 이루어져있는데, 이 컨테이너 안에 '그 외 주변 부분'이 들어있는 것이다. - 도커와 컨테이너는 완전히 분리되어 있어서 밑바탕인 리눅스 운영체제의 주변 부분이 컨테이너 속 프로그램 명령을 직접적으로 전달을 주고 받을 수 없다. 무조건 도커 엔진을 커져야 한다. - 이처럼 그 외 주변 부분만 컨테이너가 담고 있고, 커널은 밑바탕에 있는 것들..

DevOps/Docker 2023.07.12

[네트워크] 동기화 예제

1. 사용자모드와 커널 모드 1.1) 사용자 주소 공간과 커널 주소 공간을 분리하는 이유는? 운영체제는 컴퓨터 전체 메모리를 사용자 공간과 커널 공간으로 나누는데 사용자 공간은 응용 프로그램을 탑재하고 사용되는 공간이고, 커널 공간은 디바이스 드라이버를 포함하여 커널 코드가 탑재된다. 이유는 커널 공간에 있는 코드와 데이터를 보호하기 위해 분리한다. 1-2) 사용자 모드, 커널 모드가 구체적으로 뭔데? 사용자 모드에서 응용프로그램 코드가 실행되고, 커널 모드에서 커널 코드가 실행된다. 둘을 나누는 이유는 데이터에 접근하기 어렵게 만드는 것이다. 또한, 사용자 공간은 분리되지만, 커널 공간은 공유된다는 특징이 있다. 2. 동기화 기법 2-1) 유저 모드 동기화 커널의 힘을 빌리지 않는(커널 코드가 실행되지..

[Design Pattern] 템플릿 메소드 패턴

1. 템플릿 메소드 패턴이란? 알고리즘의 골격을 정의한다. 템플릿 메소드를 사용하면 알고리즘의 일부 단계를 서브클래스에서 구현할 수 있으며, 알고리즘 구조는 그대로 유지하면서 알고리즘의 특정 단계를 서브클래스에서 재정의할 수도 있다. "알고리즘의 틀을 만들기 위한 패턴" 2. 예시 1) 커피와 홍차가 만들어지는 법 비교해보기 1. 커피 만드는 법 1) 물을 끓인다. 2) 끓는 물에 커피를 우려낸다. 3) 커피를 컵에 따른다. 4) 설탕과 우유를 추가한다. 2. 홍차 만드는 법 1) 물을 끓인다. 2) 끓는 물에 차를 우려낸다. 3) 차를 컵에 따른다. 4) 설탕을 추가한다. 여기서 음료를 준비하는 단계는 물 끓이기 → 우리기 → 컵에 붓기 → 첨가물 추가하기 순으로 이루어진다. 아래 클래스를 보자. pu..

Design Pattern 2023.03.05

[네트워크]Https 동작과정 ( SSL, TLS, 대칭키, 공개키,CA)

1.HTTPS? 1-1. 정의 HTTPS는 기존 HTTP레이어에서 SSl 또는 TLS프로토콜을 얹어 평문 데이터를 암호화하고 암호화, 인증, 무결성 보장을 통해 더 안전히 만들어 주는 프로토콜이다. 1-2. 목적 SSL이나 TLS와 같은 프로토콜을 사용하여 인증서를 통해 메시지를 암호화하고, 통신하고자 하는 상대방이 맞는 지 인증하는 것이다. 2.SSL과 TLS SSL(Secure Sockets Layer)는 TLS(Transport Layer Security)의 과거 명칭이다. 즉, TLS는 SSL을 보다 안전하고, 프로토콜을 더 정확하고 안정성 높이도록 하기 위해 고안되었다. 구체적으로는 TCP,UDP와 같은 일반적인 인터넷 통신에 안전한 Layer(계층)을 추가하는 것이다. 이 기술을 웹 서버에 적..

[Design Pttern] 데코레이터 패턴

1. 데코레이터 패턴? - 데코레이터 패턴으로 객체에 추가 요소를 동적으로 더할 수 있는 패턴이다. - 데코레이터를 사용하면 서브클래스를 만들 때보다 훨 씬 유연하게 기능을 확장할 수 있다. [역할] Component : 실질적인 인스턴스를 컨트롤하는 역할 ConcreteComponent : Component의 실질적인 인스턴스의 부분으로 책임의 주체의 역할 Decorator : Component와 ConcreteDecorator를 동일시 하도록 해주는 역할 ConcreteDecoreator : 실질적인 장식 인스턴스 및 정의이며 추가된 책임의 주체 2. 데코레이터 패턴의 장단점 장점 1. 기존 코드를 수정하지 않고도 데코레이터 패턴을 통해 행동을 확장시킬 수 있다. 2. 구성과 위임을 통해서 실행중에 ..

Design Pattern 2023.02.05

[네트워크] Streaming service

1. 스트리밍 서비스? - 음악이나 동영상 등의 멀티미디어 파일을 전송, 재생하는 방식으로 서비스를 제공한다. - 파일을 다운로드하는 것과 더불어 재생함으로써 기다리는 시간을 줄일 수 있다. ex) 왓챠, 유튜브, 넷플릭스 등등 2. 스트리밍 프로토콜? - 스트리밍 프로토콜이란 위 서비스를 위해 데이터를 전달하는 방식이다. 2.1 종류 1) Progressive Download - 웹 서버로부터 동영상을 다운로드하면서 파일이 도착하는 대로 재생해주는 방식이다. [장점] - 웹 서버에 업로드 후 클라이언트 쪽에 URL만 알려주면 되므로, 구현이 쉽다. [단점] - 전체 파일을 가져오는 방식으로 유료 서비스에 적용하기 어렵다. - 시청한 만큼의 용량이 아닌 다운로드 한 만큼의 네트워크 트래픽을 사용하므로, ..

[Oracle] 프로시저, 사용자 정의 함수, 트리거

1. 절차형 SQL이란? I) 개념 SQL도 일반 프로그램 언어와 유사하게 절차 지향적인 프로그램이 가능하도록 하는 트랜잭션 언어이다. II) 종류 1) 프로시저 일련의 쿼리들을 하나의 함수처럼 실행하기 위한 쿼리의 집합 2) 사용자 정의함수 일련의 SQL 처리를 수행하고 수행 결과를 단일 값으로 반환할 수 있는 절차형 SQL 3) 트리거 데이터베이스 시스템에서 CURD 이벤트가 발생할 때마다 관련 작업이 자동으로 수행되는 절차형 SQL III) 특징 - 단일 SQL 문장으로 실행하기 어려운 연속적인 작업을 처리하는데 적합하다. - DBMS 내부에서 직접 처리하기 때문에 일반적으로 입출력 데이터가 적다. IV) 필수 구성 요소 - DECLARE(선언) : 대상의 이름 및 변수등을 선언 - BEGIN(시작..

Database/Oracle 2023.01.16

[Design Pattern] MVC패턴

1. MVC패턴이란? Model + View + Controller를 합친 용어이다. Model : 어플리케이션에서 사용되는 데이터와 그 데이터를 처리하는 부분 View : 사용자에서 보여지는 UI 부분 Controller : 사용자의 입력을 받고 처리하는 부분 2. MVC패턴의 흐름 클라이언트가 입력하여 요청 (ex. 저장버튼 클릭) 서버에 데이터를 요청, Controller에 요청한다. Controller에서 사용자에게 받은 데이터를 처리하기 위해 로직을 수행한다. Controller는 필요한 데이터들을 Model과 주고 받음 Controller는 View에게 결과를 전달한다. 사용자에게 화면 결과를 보여줌 3. MVC패턴 코드 //Controller 모델을 통해 데이터를 받아 View로 보낸다 Cl..

Design Pattern 2023.01.09