전체 글 315

[Web 일반] CORS 란?

CORS 란Cross-Origin Resource Sharing(CORS)는 웹 브라우저에서 서로 다른 출처(origin) 간의 자원 요청을 허용 또는 제한하기 위해 사용하는 보안 기능.  (CORS 는 대부분 브라우저 관련 이슈) 교처 출처에 대한 자원 요청을 허용 하더라도 보안적으로 안전하게 하기 위한 작업을 수행. CORS 배경Origin 에 대해 다르다는 것은 다음 3가지 요소들이 다를 때 출처가 다르다고 한다.도메인 (예: example.com)프로토콜 (예: http, https)포트 (예: 80, 443) 웹 브라우저는 보안상의 이유로 기본적으로 동일 출처 정책(Same-Origin-Policy)를 따른다. 동일 출처 정책 : 한 출처(fe-domain.com) 에서 로드된 웹 페이지가 다른..

[좋은 DB 설계하기] 테이블 명 설계 비교 (_log, _results, _history)

배경회사나 팀마다 로깅성 혹은 어떤 작업에 대한 변화 히스토리나 결과에 대해서 테이블 화 할 때 각자 정한 테이블명 규칙이 있거나 라이브러리 등 연동시 기본적으로 생성해주는 테이블명 등 혹은 개인적으로 어울린다고 생각하는 테이블 명이 있을 것 이라 생각한다. 나름의 기준으로 테이블 명 규칙을 적어보았다. log, result, history_log정의 : 시스템 레벨의 정보 저장인 경우, 시간의 흐름에 따른 경우, 일정 시간 후에 삭제 가능 경우예시- request_response_log : 요청/응답 로그- web_log : 웹 전반에서 발생하는 로그- system_log : 시스템에서 발생하는 로그- cron_log : 크론 등에서 발생하는 시스템 성 로그 _results 정의 : 작업(계산, 분석 ..

[Django, DB] haversine 두 지점의 거리 Django Func 사용하기

두 지점의 거리 구하기 공식 - haversine하버사인 공식(Haversine Formula) 공식은 구위의 두 점 사이의 거리를 경도와 위도를 고려하여 계산하는 공식 지도 맵 서비스 등에서 두 지점 간 거리를 재는데 사용 가능하다. 아래 그림의 P와 Q사이의 거리를 계산해준다.    haversine - PostgreSQL, MySQLDB에 맞춰 사소한 문법 등은 달라 질 수 있다.  만약 MySQL을 사용한다면, 기존에 내제되어 있는 Point 필드 등을 사용한 거리 계산도 가능하다. -- 두 위경도 사이의 거리 계산CREATE OR REPLACE FUNCTION haversine( lat1 numeric, lon1 numeric, lat2 numeric, lon2 numeri..

Python/Django 2024.06.30

[WEB 일반] MIME Type, Content-Type 이란

MIME Type 이란MIME Type(Multipurpose Internet Mail Extensions)는 인터넷에서 전송되는 데이터의 형식을 나타내는 표준 방식 MIME 타입은 클라이언트(브라우저)가 데이터를 처리하는 방식을 결정하는 데 중요한 역할웹에서는 HTTP 통신시 Content-Type 이란 Key값으로 Header에 담겨 사용됩니다. MIME Type 구성MIME 타입은 타입(Type)과 / 서브 타입(Subtype) 으로 구성 (ex. type/subtype => text/plain)타입(type): 데이터의 일반적인 범주, ex) 텍스트, 이미지, 오디오, 비디오 서브타입(subtype): 특정 타입(type) 내에서 데이터의 구체적인 형식을 나타냄. ex) 텍스트 - plain, h..

[Python] 모듈과 패키지

모듈과 패키지의 관계모듈은 하나의 .py 파일들 / 혹은 파일 내 클래스, 함수, 변수 등을 지칭함파이썬 모듈은 다음과 같이 사용함# random 내장 라이브러리 모듈 importimport random# random 모듈의 shuffle() 함수 importfrom random import random_shuffle# random 모듈의 shuffle() 함수 importimport random.random_shuffle  패키지는 모듈(혹은 패키지)을 포함하는 디렉토리(directory)를 지칭함# Ipython 폴더의 display 폴더의 Image 라는 모듈을 importfrom IPython.display import Image  폴더 구조의 __init__.py__init__.py 란 다음 ..

Python/Advanced 2024.06.22

[기술 면접 대비] Operating System 3 - 메모리, 명령어

메모리 영역 종류👉 메모리 영역 4가지Code : 실행 명령과 코드를 포함Data : 전역변수, 정적변수 (Static 변수나 Global 변수)Heap : 사용자가 동적으로 할당한 메모리를 위함Stack : 지역변수, 매개변수, 반환값 등 일시적인 값  👉 메모리 계층 비교레지스터 : 속도 빠름 / 용량 작음 / CPU 안에 있는 매우 빠른 임시 기억장치(휘발성)로 데이터를 저장할 방법이 없는 CPU는 레지스터를 거쳐 데이터를 전달함캐시 : 속도 빠름 / 용량 작음 / CPU와 주기억장치 간의 메모리 사용 속도 향상을 위해 사용하는 메모리 (L1, L2 캐시)주기억장치 : 속도 보통 / 용량 보통 / RAM과 같은 현재 CPU에서 활동되고 있는 메모리보조기억장치 : 속도 낮음 / 용량 많음 // H..

[기술면접 대비] Operating System 2 - Mutex, Semaphore, DeadLock

DeadLock , 임계영역👉 Deadlock (교착상태)의 개념과 막는 방법Deadlock은 서로 필요한 자원 사용을 위해 상대방의 종료를 기다리며, 무한 대기에 빠지는 상황ex) 첫 번째 스레드는 두 번째 스레드가 들고 있는 객체의 락이 풀리기를 기다리고, 두 번째 스레드도 첫 번째 스레드가 들고 있는 객체의 락이 풀리기를 기다리는 상황 예방 : 기존 deadlock이 프로세스들 끼리 자원 사용시 서로 상호 배제한단 것이 문제가 되었으니, 자원을 공유하게 하여, 대기에 빠지지 않도록 함회피 : 프로세스에 대한 교착 상태 가능성을 미리 판단하는 것, 예로 은행원 알고리즘 처럼 사전에 필요로 하는 최대 자원을 파악하여 교착상태를 최대한 피함탐지 및 회복 : deadlock이 발생함을 확인하고, 회복(e..

[기술면접 대비] Operating System 1 - Process, Thread

프로세스 & 스레드👉 프로세스와 스레드의 차이프로세스(Process) : OS로 부터 자원을 할당 받아 독립적으로 실행되고 있는 객체(프로그램)프로세스별로 각각 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당프로세스당 최소 1개의 스레드(메인 스레드)를 가짐.각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근 불가한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC, inter-process communication)을 사용해야 한다. (ex. 파이프, 파일, 소켓 등을 이용한 통신 방법 이용)Context Switching 비용이 비교적 큼 / 동기화 작업 (공유 자원 관리) 필요 x 스레드 :  프로..

[Django] Django Models 와 @property

@propertypython에서는 @property라는 decorator를 제공하는데,  해당 클래스의 객체 변수처럼 사용될 수 있게 하며, 캡슐화 목적으로 주로 사용된다. property 코드 예시class Profile: def __init__(self, first_name:str, last_name:str): self.first_name = first_name self.last_name = last_name @property def full_name(self): return self.first_name + self.last_nameprofile = Profile("홍","길동")print(profile.first_name) # "홍"print(p..

Python/Django 2024.06.16

[디자인 패턴] 구조 패턴 - Facade (파서드) 패턴

구조 (Structure) 패턴구조 패턴 이란 객체 간의 상호 작용에 대한 구조적 관계를 명확히 정의하여, 코드의 유연성과 재사용성을 높이는 디자인 패턴 주요 패턴으론 다음 사항들이 있다.어댑터 (Adapter) 데코레이터(Decorator) 복합자(Composite) 파셔드(Facade) 플라이웨잇(Flyweight)프록시(Proxy)브릿지(Bridge) 파서드 (Facade) 패턴 이란복잡한 클래스 세트/하위 시스템에 대해 클라이언트 에게 단순화 된 인터페이스를 제공하는 구조적 디자인 패턴아래 그림과 같이 안에는 복잡하지만, 최종 바깥 문 (=단순화된 인터페이스)를 제공하는 것  주로 다음 경우에 많이 사용된다.복잡한 하위 시스템에 대한 제한적이지만 간단한 인터페이스가 필요한 경우하위 시스템을 레이..