All

Computer Theory/Web

N + 1 Problem

이번에는 N + 1 쿼리 문제에 대해서 알아보고자 한다. N + 1 쿼리 문제 쿼리 한번으로 N건의 데이터를 가져 왔을 때, 원하는 데이터를 얻기 위해 N건의 데이터를 가져온 데이터 수만큼 반복해서 2차적으로 쿼리를 수행하는 문제를 의미한다. 이해를 돕기 위해서 Django의 코드를 통해 설명하고자 한다. visitors = Visitor.objects.filter(visit_date__year=2022) for visitor in visitors: print(f"{visitor.person.name}. visited on {visitor.visit_date}") # person은 visitor에 연결된 FK object다. 1. 먼저 Visitor model을 통해 오늘 방문한 방문객들의 Queryse..

Computer Theory/Web

Transaction과 ACID

오늘은 ACID에 대해서 알아보고자 한다. 트랜잭션(Transaction) 트랜잭션이란 데이터베이스의 상태를 변환시키는 기능을 수행하기 위한 하나 이상의 쿼리를 모아놓은 하나의 작업단위를 뜻한다. 데이터 베이스 트랜잭션은 ACID라는 특성을 가지고 있다. ACID ACID는 데이터베이스 내에서 일어나는 하나의 트랜잭션의 안정성을 보장하기 위해 필요한 성질을 말한다. ACID는 Atomicity(원자성), Consistency(일관성), Isolation(격리성, 고립성), Durability(지속성)을 줄인 말이다. Atomicity(원자성) 원자성이란 트랙재션의 안정성을 보장하기 위해 가져야 할 성질 중의 하나이다. 원자성이란 시스템에서 한 트랜잭션의 연산들이 모두 성공하거나 반대로 전부 실패하는 성질..

Computer Theory/Web

ORM(Object Ralational Mapping)

오늘은 ORM에 대해서 알아보고자 한다. ORM ORM은 객체를 연결해준다는 의미로 어플리케이션과 데이터베이스 연결 시 SQL언어가 아닌 어플리케이션 개발 언어로 데이터 베이스에 접근 할 수 있게 해주는 툴을 의미한다. ORM은 SQL문법 대신 어플리케이션 개발언어를 그대로 사용함으로써, 개발 언어의 일관성과 가동성을 높여준다는 장점을 가지고 있다. 아래는 Django에서 사용하는 ORM과 실제 SQL질의문을 나타낸 예이다. >>> queryset = Event.objects.all() >>> str(queryset.query) SELECT "events_event"."id", "events_event"."epic_id", "events_event"."details", "events_event"."yea..

Computer Theory/Web

RDB와 NOSQL DB

이번에는 RDB(Relational DataBase)와 NoSQL DataBase에 대해 알아보고자 한다. RDB 관계형 데이터베이스라고 불리는 RDB는 말그대로 관계형 모델을 기반으로 하는 데이터베이스를 의미한다. 이를 유지하고 관리하는 시스템을 RDBMS(Management System)이라고 부른다. 이러한 RDBMS는 주로 SQL(Structured Query Lang)을 이용해 데이터를 조회, 관리하게 된다. 관계형 데이터 베이스의 특징은 아래와 같다. 2차원 데이터로 표현한다. (행과 열) 상호 관련성을 가진 테이블의 집합으로 구성된다. 테이블 사이의 관계를 외래키로 나타낸다. 스키마의 변경이 어렵다. RDB는 매우 정교한 설계아래 만들어진다. 테이블 사이에 서로 의존성이 있고 쳇바퀴처럼 맞물..

Computer Theory/Os

POSIX란?

이번에는 POSIX가 무엇인지에 대해서 알아보고자 한다. POSIX POSIX란 Portable Operating System InterFace For Unix의 약자로 IEEE에서 지정한 운영체제간의 호환성을 유지하기 위해 서로 다른 UNIX OS의 공통 API을 정리하여 책정한 애플리 케이션 인터페이스 규격을 의미한다. POSIX를 준수하는 운영체제는 POSIX를 준수하는 다른 운영체제와 호환이 되어야 한다. POSIX가 등장하게 된 역사로는 운영 체제를 위한 소프트웨어가 각기 다른 환경과 시스템 인터페이스 속에서 개발되어 이를 다른 운영체제 이식하기 위해서 상당한 노력과 비용이 소모되어 해당 문제를 해결하고자 나왔다는 배경을 가지고 있다. Standard Stream 표준 스트림은 특정한 프로그램이..

Computer Theory/Web

브라우저 작동 방식

이번에는 브라우저가 어떻게 작동하는지에 대해서 알아보고자 한다. 브라우저에서 중요한 것 웹 성능에 있어서 가장 주요한 문제는 지연시간과 대부분 브라우저가 싱글 쓰레드로 동작한다는점이다. - 지연시간 : 빠른 로딩에 있어서 지연시간은 이겨내야 할 중요한 문제이다. 빠른 로딩을 위해 최대한 빠르게 요청하는 것과 웹 최적화를 통해 페이지 로드가 최대한 빠르게 이루어지도록 한다. - 싱글 쓰레드 : 대부분의 브라우저는 싱글 쓰레드이다. 원활한 상호작용을 하기 위해서는 메인 쓰레드가 요청된 모든 작업을 수행하면서도 유저의 상호작용에 반응할 수 있도록 하는 렌더링 시간이 가장 중요하다. 따라서 이를 위해 메인 쓰레드의 책임을 줄여주는 방식으로 웹 성능 향상을 이루고자 한다. 브라우저 동작 흐름 브라우저는 다음과 같..

Computer Theory/Web

HTTP 와 HTTP Request/Response 구조

HTTP HyperText Transfoer Protocol 이라고 하며, HTML 문서를 교환하기 위해 만들어진 protocol (통신 규약)을 의미한다. TCP/IP 기반으로 되어있으며 request와 response 구조로 되어있다. 주로 http request을 서버에 보내고, http response을 보내는 구조로 이루어 진다. 클라이언트와 서버의 모든 통신은 요청과 응답으로 이루어 진다. Request Message HTTP Request Message는 공백을 제외하고 3가지로 나누어진다. Start Line Headers Body Start line HTTP Request Meassge의 시작 라인으로, 3 가지 부분으로 구성되어 있다. HTTP method : HTTP 메소드 Reque..

Computer Theory/Web

인터넷의 역사와 작동방식

이번 포스팅은 인터넷이 어떻에 동작하는지에 대한 배경과 동작방식에 대해서 다뤄보고자 한다. 짧게 보는 인터넷 역사 인터넷은 처음 1960년대 미 육군의 프로젝트에서 시작되었다. 사실 군사 통신 목적으로 개발이 되으며, 시간의 지남에 따라 1980년대 많은 국립 대학에서 연구 시설 용도로 많이 사용되었고 발전을 거듭해 공공의 기반의 용도로 변화되었다 작동 방식과 변화 과정 두 개의 컴퓨터가 통신이 필요할 때, 일반적으로 다른 컴퓨터와 물리적(선)으로 혹은 무선으로 서로의 컴퓨터를 연결한다. 하지만 이는 2개의 컴퓨터의 통신에서만 제약되어 있는 상황인 것이고, 만약에 많은 컴퓨터가 서로 통신이 필요하다면 어떻게 될까? 아마도 다음과 같은 상황이 벌어질지도 모른다. 각 컴퓨터에 잘 연결이 되었지만, 이런 환경..

Programing Language/Python

문자열 모듈 String을 이용해서 문자열 모음 가져오기

코딩 테스트 문제 (백준, 프로그래머스)를 풀때, 조건에서 a - z까지의 영어 문자열이 필요하다던가 1 ~ 9까지의 숫자 혹은 그 외의 어떤 문자들의 집합이 필요한 경우가 많습니다. 이런 경우에는 a - z까지 일일이 다 적어줘야 하기 때문에 만사 귀찮은 문제가 되어 버리는데요 이러한 문제를 해결하기 위해서 파이썬에서는 String이라는 모듈을 제공하고 있습니다. string 모듈이 뭔가요? Python 에서는 특정 분류에 따른 문자 집합을 제공하는 모듈이 존재하는데 이를 string 모듈이라고 합니다. 앞서 설명했듯이 주로 문자열에 대한 규칙성이나 관련 코드를 작성할 때 자주 사용합니다. Python string 모듈에서 제공하는 문자의 집합은 아래와 같습니다. string.ascii_letters ..

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