전체 글 40

기본적인 쿼리문

DML(Data Manipulation Language) INSERT 문: 데이터 입력시 사용 INSERT INTO table_name (col1, col2, col3) VALUES(value1, value2, value3) SELECT 문을 사용하는 응용도 가능 INSERT INTO table2 (col1, col2) SELECT col1, col2 FROM table1 WHERE id>5; DELETE 문: 데이터 삭제시 사용. 주의하여 사용하여야 하며 트랜잭션을 사용할 것을 권장 DELETE table_name WHERE id=1; UPDATE 문: 기존의 레코드를 변경할 때 사용 UPDATE table_name SET col1=value1, col2=value2 WHERE id>5; DQL(Dat..

개요(데이터베이스를 공부하기로 시작한 이유)

백엔드에 입문한 이래로, 계속하여 대용량 데이터 혹은 대용량 트래픽처리는 어떻게 하는 것인가에 대한 생각을 하고 있다. 백엔드 개발자로써 모든 능력이 중요하겠지만, 대용량 트래픽을 감당할 수 있는 아키텍처 설계 및 구현보다 더 중요한 능력은 없다고 생각하기 때문이다. 아마 이는 병렬컴퓨팅과 비슷한 내용일 것이다. 병렬컴퓨팅은 여러 컴퓨터를 사용하여 하나의 거대한 계산을 처리하는 컴퓨팅 방법으로, 병목현상이 어디서 발생하는 지, 어떤 오버헤드가 발생할 지에 대해 끊임없이 생각하여야 한다. 물론 코드의 계산 효율을 고려하는 것은 당연시해야 한다. 아직은 잘은 모르겠지만, 대용량 트래픽 처리 역시 서비스에서 발생하는 병목지점을 찾고 이를 해결하는 방법에서 시작하리라 믿는다. 현재 존재하는 대부분의 어플리케이션..

HTTP 상태 코드

본 포스팅은 인프런 김영한 강사님의 "모든 개발자를 위한 HTTP 웹 기본지식 정리" 강의 내용을 정리 및 요약 내용입니다. 상태코드 1xx (Informational): 요청이 수신되어 처리중 2xx (Successful): 요청이 정상 처리 3xx (Redirection): 요청을 완료하려면 추가 행동이 필요 4xx (Client Error): 클라이언트 오류, 잘못된 문법 등으로 서버가 요청을 수행할 수 없음 5xx (Server Error): 서버 오류, 서버가 정창 요청을 처리하지 못함 2xx - 성공 200 Ok: 요청 성공 201 Created: 요청 성공해서 새로운 리소스가 생성됨 202 Accepted: 요청이 접수되었으나 처리가 완료되지 않았음(예, 요청 접수 후 1시간 뒤 배치 프로세..

HTTP 메서드 및 URI 설계

본 포스팅은 인프런 김영한 강사님의 "모든 개발자를 위한 HTTP 웹 기본지식 정리" 강의 내용을 정리 및 요약 내용입니다. URI 설계 동사형 보다는 명사형으로 따라서 리소스의 개념을 이해하는 것이 좋음 예) 회원정보를 조회해라 -> 회원이 리소스 /get-members-list -> /members 참고로 계층 구조상 상위를 컬렉션으로 보고 복수 단어를 사용할 것을 권장함. HTTP 메서드 GET: 리소스 조회 POST: 요청 데이터 처리, 주로 등록에 사용 PUT: 리소스를 대체하고 해당 리소스가 없으면 생성 PATCH: 리소스 일부 변경 DELETE: 리소스 삭제 기타 메서드 HEAD: GET과 동일하지만 메세지 부분을 제외하고, 상태 줄과 헤더만 반환 OPTIONS: 대상 리소스에 대한 통신 가..

좋지 않은 예외처리로 인하여 디버깅이 어려워지는 경우

import psycopg2 connect = psycopg2.connect(~~~) cursor=connect.cursor() query_output = cursor.fetchall() query_output 위 코드를 사용하여 redshift에 쿼리를 날리면 제대로 된 값을 전달받을 수 있다. from utils.redshift_data import RedshiftData redshift_data = RedshiftData(connect, query) data = redshift_data.get_data() 그런데 이와 같이 RedshiftData 클래스를 만들고, 쿼리를 날리면 자꾸 None 값이 리턴된다. 쿼리는 정상적인 것 같은데, 이유를 확인하는 작업에서 많은 삽질을 했다. 결과는 아래와 같다..

기타 2022.02.08

HTTP 통신

본 포스팅은 인프런 김영한 강사님의 HTTP 통신 강의 내용을 정리 및 요약 내용입니다. 웹 브라우저 요청 흐름 1. HTTP 요청 메세지 생성2. DNS 조회3. SOCKET 라이브러리를 통해 전달(TCP/IP 연결; 데이터 전달)4. TCP/IP 패킷 생성, HTTP 메세지 포함5. 네트워크 인터페이스를 통해 서버에 메세지 전달 패킷은 HTTP 메세지를 TCP/IP 패킷으로 감싸는 형태 HTTP(HyperText Transfer Protocol) HTML, TEXT, 이미지, 음성, 영상, 파일 등을 전송할 수 있음. JSON, XML 포맷으로 주고받을 수 있음 서버간의 데이터 통신도 대부분 HTTP를 사용 HTTP/2까지는 TCP 프로토콜을 사용하였으나, 3부터는 UDP도 사용되기 시작함. HTTP..

TCP/IP 프로토콜

본 포스팅은 인프런 김영한 강사님의 HTTP 통신 강의 내용을 정리 및 요약 내용입니다. 인터넷 프로토콜 스택의 4계층 애플리케이션 계층(HTTP, FTP) 전송계층(TCP, UDP) - OS 레벨 인터넷 계층(IP) - OS 레벨 네트워크 인터페이스 계층 (LAN 드라이버나 장비 등) 인터넷 프로토콜(IP)의 특징 지정한 IP 주소에 데이터 전달 패킷(packet)이라는 통신 단위로 데이터 전달 비연결성: 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송 비신뢰성: 중간에 패킷이 사라지거나, 패킷이 순서대로 오지 않을 가능성이 있음 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 두개 이상이면 혼란 초래 전송제어 프로토콜(TCP , Transmission Control Protocal)의..

To BLOB or Not to BLOB: Large Object Storage in a Database or a Filesystem?

Sears, R., C. Ingen, J. Gray, 2006: To BLOB or Not to BLOB: Large Object Storage in a Database or a Filesystem?, MSR-TR-2006-45 들어가기에 앞서 일반적으로 이미지나 동영상 파일을 DB에 저장할 때는, 파일은 파일시스템에 저장하고 그 링크만 DB에 저장한다(현재 부트캠프에서도 이와 같이 배웠다). 그런데, 링크만 저장할 경우에는 DB를 읽고, 그 링크에서 따로 파일을 로딩하는 로직을 따로 거쳐야 하는 코드를 작성하는 등 이중으로 로직을 작성해야 한다. 하지만, 이미지나 데이터를 DB에 바로 저장한다면 추가적인 작업이 필요가 없을텐데 라는 생각이 들어서 검색을 하게 되었다. 개발자 포럼 중 한 곳에서 DB에 ..

django ORM을 사용해서 MySQL에 get, post

코드를 작성하다보면 항상 같은 명령어를 찾아보는 것 같아서, 미리 블로그에 포스팅하면 굳이 찾아보는 수고를 하지 않을 것 같다. 1. MySQL DB 생성 CREATE DATABASE 데이터베이스명 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; SHOW DATABASES; USE 데이터베이스명; 2. 장고 앱 생성 django-admin startapp 앱이름 3.앱 디렉토리에 위치한 models.py 수정 from django.db import models class User(models.Model): username = models.CharField(max_length=45) password = models.CharField(max_length=256) em..

python/django 2021.12.16

django 환경설정하기

1. django-admin을 사용하여 프로젝트 생성 $ django-admin startproject 프로젝트이름 2. settings.py settings.py에 있는 정보를 SECRET_KEY, DATABASES 정보를 다른 파이썬 파일로 만들어야 한다. 이번 프로젝트의 경우에는 my_settings.py라는 파이썬 파일을 생성하여 SECRET_KEY와 DB정보를 옮겨두었다. # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = '시크릿 키' # Database # https://docs.djangoproject.com/en/3.2/ref/settings/#databases DATABASES = { 'defau..

python/django 2021.12.16