본문 바로가기

컴퓨터

PHP로 구현한 파일 캐시 클래스 앞선 글에서 캐시가 무엇인지와 캐싱을 사용하는 이유에 대해서 알아보았다. 이 게시물에서는 PHP를 이용해서 파일 캐시를 직접 구현한 클래스를 소개하고자 한다.
캐싱을 하는 이유 캐싱은 동일한 요청이 여러 번 들어 왔을 때 매 요청마다 계산을 한 다음에 보여주는 것이 아닌 기존에 한 번 계산했었던 내용을 저장해서 해당 내용을 보여주는 것이다. 그렇기 때문에 웹서버의 부하를 줄일 수 있는 기술이라고 할 수 있다. 아래는 캐싱을 하지 않았을 경우에 사용자 - 웹서버 - DB 사이에서 사용자에게 요청이 들어왔을 때의 실행 과정이다. 사용자가 웹서버에 요청을 보내면(1), 웹서버는 해당 요청을 읽고 DB에 필요한 내용을 질의한다(2). 그리고 DB는 해당 질의 내용에 대한 응답을 웹서버에 보내주고(3), 웹서버는 해당 내용을 가공해서 사용자에게 출력을 해준다(4). 사용자가 간단한 내용만 질의한다면 캐싱을 하는데 있어서 의미가 없지만 DB 쿼리 내용이 복잡하거나 사이트 파싱과 같은 시간..
클립보드 텍스트 데이터 가져오기 외부 모듈을 따로 설치하지 않고 클립보드에 저장된 텍스트 데이터를 가져오는 방법이다. 물론 윈도우에 기본으로 내장되어 있는 기능인 "캡처 도구"를 이용해서 클립보드에 이미지를 복사했을 경우에는 Pillow 모듈을 설치하여 사용해야 한다. 코드는 아래와 같고 클립보드가 비어있을 경우에는 클립보드가 비어있다고 알려준다. from tkinter import Tk from _tkinter import TclError def get_clipboard(): root = Tk() root.withdraw() result = None try: result = root.clipboard_get() except TclError as e: print('클립보드 데이터가 비어있습니다.') return result val = ..
배열없이 3개 정수 정렬하기 3개의 정수에서만 사용할 수 있는 트릭을 사용한 코드이다.최솟값과 최댓값을 알면 나머지 한 값도 알 수 있는 방식이다. #include #include int main(int argc, char const *argv[]) { int m, M, val, i, t; m = INT_MAX, M = INT_MIN, t = 0; for(i = 0; i val) m = val; if(M < val) M = val; t ^= val; } t ^= m ^ M; printf("정렬한 결과 : %d %d %d\n", m, t, M); return 0; }
삼중자(Trigraph) C언어에서 기본으로 사용하는 문자집합(Character set)은 ASCII입니다.하지만 일부 국가들에서 ISO/IEC 646를 기준으로 하는 키보드를 사용하는데, 우리나라도 여기에 포함됩니다. 여기서 ISO/IEC 646이란 7비트로 문자를 표기하는 방식을 선언해놓은 것으로 미국의 체계인 ASCII를 기반으로 합니다. 숫자나 알파벳은 공통적인 부분과 일부 문장부호(!, ", #, $, &, :, ?, @, [, \, ], ^, _, `, {, |, }, ~)에 대해서 각 나라의 상황에 맞게 변경할 수 있는 부분으로 구성되어 있습니다. 한국의 경우 백슬래시(\)가 원화(\)로 표기됩니다. 그래서 일부 C언어 책자에서 처음에 등장하는 Hello, World!를 출력하는 과정에서 \가 등장하는데 이 문자를 ..
int형 변수를 이진수로 출력하기 int 형 변수를 이진수로 출력하는 함수를 만들면 아래와 같다. 아이디어 자체는 간단하다. 입력받은 정수를 Shift 연산을 이용해서 비트 이동을 시켜서 우리가 원하는 비트를 LSB에 오도록 만들고, 이 숫자를 1과 &연산을 하면 LSB의 숫자가 나오기 때문에 그 때의 값을 출력하는 방식이다. void print32bit(int a){ int i; for( i=31; i>=0; --i){ printf("%d", (a>>i)&1); if(i%4==0) printf(" "); } } 그리고 if 문의 경우에는 4bit씩 끊어서 출력을 하기 위해 추가한 내용이다.
[acmicpc.net] 11726 2×n 타일링 문제 링크 : https://www.acmicpc.net/problem/11726 문제 내용2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. 소스코드 #include int main(){ int d[1000+1]; int N; d[0] = 1; d[1] = 1; scanf("%d", &N); for(int i=2; i
[acmicpc.net] 2293 동전 1 문제 링크 : https://www.acmicpc.net/problem/2293 문제 내용n가지 종류의 동전이 있다. 각각의 동전이 나타내는 가치는 다르다. 이 동전들을 적당히 사용해서, 그 가치의 합이 k원이 되도록 하고 싶다. 그 경우의 수를 구하시오. (각각의 동전은 몇 개라도 사용할 수 있다.) 소스코드 #include using namespace std; int main() { int n, k; int *value; int **result; cin >> n >> k; value = new int[n]; result = new int*[2]; for(int i=0; i> value[i]; } for(int i=0; i