분류 전체보기

Infra/CI&CD

Django Channels 배포

Deubot 프로젝트 Django와 Django Channels로 만든 앱을 배포하기 위해 검색을 한 결과 Nginx, Daphne, Gunicorn 세개의 서버로 구축하게 되었다. Deubot 프로젝트 구조를 간략하게 도식화하면 아래와 같다. 우선 Nginx 서버를 리버스 프록시 서버로 설정한 뒤 HTTP 요청은 Gunicorn 서버가 WS 요청은 Daphne 서버가 처리하도록 설정한다. Nginx 서버는 정적 컨텐츠를 제공하고 Gunicorn, Daphne 서버는 동적 컨텐츠를 제공한다. Gunicorn 설정 1. Gunicorn 설치 pip install gunicorn 2. gunicorn 서비스 파일 생성 (서비스로 만듬) sudo vi /etc/systemd/system/django-gunic..

카테고리 없음

피로도 - Brute force

import java.util.*; class Solution { static ArrayList list; public int solution(int k, int[][] dungeons) { int answer = -1; list = new ArrayList(); for(int i=0; i

Java/Basic

Java 정렬

Array 정렬 배열의 정렬은 Java.util.Arrays의 sort 정적 메서드를 사용한다. 기본 자료형 배열 정렬 int, double, float와 같은 기본 자료형 배열은 오름차순으로 정렬된다. 만약 내림차순으로 정렬하고 싶다면 wrapper class로 변환 후 객체 배열을 정렬하는 방법을 사용하자. import java.io.*; import java.lang.*; import java.util.*; public class Main { public static void main(String[] args) { int[] arr = {3,5,6,4,1,3}; Arrays.sort(arr); for(int num : arr) System.out.print(num + " "); } } 객체 배열 정..

Computer Science/Network

[데이터통신 - 10] 전송 계층

전송 계층 OSI 4계층인 전송 계층은 종단 간의 데이터 전송을 위한 계층이다. 네트워크 계층이 데이터를 최적의 경로로 다른 네트워크로 보내준다면 전송 계층은 종단 간의 데이터 전송이 원활하게 되도록 제어한다. 핵심 기능 : 종단 간 데이터 전송의 오류제어, 흐름제어오류 제어와 흐름 제어전송 계층의 핵심 기능은 종단 간 데이터 전송의 오류제어와 흐름제어이다. 오류제어와 흐름제어 덕분에 우리는 신뢰성 있는 통신을 할 수 있다. 그런데 2계층인 데이터링크 계층의 핵심 기능도 인접한 노드(네트워크 장비)간의 오류제어와 흐름제어다. 왜 비효율적으로 같은 작업을 반복할까? 예를 들어 아래의 상황이 발생하면 오류를 감지하고 오류 회복 기능이 수행되어야하지만 데이터링크 계층은 아래 상황 발생 시 어떠한 오류도 감지할..

Computer Science/Network

DMZ

DMZ (DeMilitarized Zone) 회사의 LAN(내부망, 사내망)은 보안을 위해 네트워크 내에 방화벽과 DMZ를 둔다. 방화벽은 미리 정의된 보안 규칙에 따라 패킷의 송수신을 결정하는 네트워크 보안 시스템이다. 그리고 DMZ는 외부망과 내부망 사이에 위치한 네트워크 영역(서브넷)이다. 외부, 내부에서 DMZ로 접근할 수 있다. 왜 DMZ를 둘까? 회사의 웹서버, 메일서버, DNS 서버등은 내부에서만 사용할 수도 있지만 외부에서의 접근이 필요할 수도 있다. 회사의 웹서버나 메일 서버를 외부에 공개할 때 필요하다. 하지만 내부망 전체를 외부에 공개해서는 안된다. 특히 파일 서버, DB 서버가 외부에 노출되어 서버의 제어권을 뺏기면 심각한 일이 일어난다. 그래서 외부에 공개할 서버는 DMZ에 두고 ..

Computer Science/Algorithm

투포인터, 슬라이딩 윈도우

투포인터, 슬라이딩 윈도우 리스트 완전 탐색 시 성능이 좋지 않을 때 적용할만한 알고리즘이다. 투포인터 : 리스트에서 두 개의 포인터를 조작하여 원하는 결과를 얻는 방식의 알고리즘. O(n)의 성능을 낸다. 슬라이딩 윈도우 : 고정 크기의 윈도우가 이동하면서 원하는 결과를 얻는 방식의 알고리즘. 처음 윈도우만 계산한 뒤 윈도우를 이동시킨다. 이동시킬때 이전 윈도우의 값을 조작한다. O(n)의 성능을 낸다. 투포인터 투포인터 관련 문제이다. https://www.acmicpc.net/problem/1806 1806번: 부분합 첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, ..

Computer Science/Network

사설망, NAT

사설망 (Private Network) 사설망은 사설 ip 주소를 사용하는 네트워크이다. 사설 ip 주소는 오직 사설망(내부망)에서만 사용이 가능하며 공인망(외부망)에서는 사용이 불가능하다. IPv4의 공인 ip 주소가 부족하니 오직 사설망에서만 사용가능한 주소인 사설 ip 주소를 사용하는 것이다. 공인 ip 주소가 전세계에서 유일해야한다면 사설 ip 주소는 사설망 안에서만 유일하면 된다. 사설 ip 주소 대역은 아래 표와 같이 정해져있다. NAT (Network Address Translation) IP 패킷의 ip 주소, 포트 번호를 변환시키면서 라우터를 통해 패킷을 주고받는 기술을 NAT이라 한다. 사설 ip 주소는 공인망에서 사용할수 없다. 그래서 NAT을 사용해 패킷이 공인망으로 나갈때 사설 i..

Computer Science/Algorithm

재귀 함수

재귀 함수 재귀(Recursion)란 어떠한 것을 정의할 때 자기 자신을 참조하는 것을 말하며 재귀 함수란 함수 안에서 자기 자신을 호출하는 함수를 말한다. 재귀 함수는 짧은 코드로 재귀적인 작업을 수행하는 강력한 함수이지만 그 이해가 쉽지 않다. 이 글에서는 재귀 함수를 잘 쓰기 위해 3단계로 작성하는 법을 소개한다. 재귀 함수 4단계 작성법 재귀 함수를 꼭 써야하나? 재귀 함수로 풀수 있는 문제는 대부분 반복문으로도 풀 수 있다. 반복문이 재귀 함수보다 성능이 좋기 때문에 반복문으로 구현하는 것이 좋다. 따라서 재귀를 쓰기 전에 반복문으로도 풀 수 있는지 고민해보자. 1. (가장 중요) 재귀 함수를 작성하기 전에 재귀 함수가 어떤 일을 하고, 어떤 함수인지 명확히 정의한다. 이를 통해 아래 단계를 쉽..

gunjoon98
'분류 전체보기' 카테고리의 글 목록 (15 Page)