오히려 좋아..

상황이 나쁘게만 흘러가는 것 같을 때 외쳐보자.. .

궁금한 마음으로 포트폴리오 보기

분류 전체보기 245

[Python] 정적 메소드 staticmethod, classmethod

파이썬 클래스의 코드들을 보면 종종 메서드 위에 데코레이터로 다음과 같은 것들이 붙어있을 때가 있다. @staticmethod @classmethod 오늘은 파이썬의 정적 메서드를 만드는 방법인 staticmethod, classmethod에 대해서 알아보도록 하자 본격적인 글에 앞서서 정적메서드(static method)란 무엇일까? 정적 메서드는 클래스가 생성되지 않아도 즉 인스턴스 없이도 사용할 수 있는 함수로 인스턴스에서는 호출 할 수 없는 함수를 가리킨다. 1. staticmethod staticmethod는 메서드를 정적 메소드로 바꿔주는 것으로 데코레이터를 이용해 바꿔준다. 일반적으로 메서드에는 맨 앞의 argument로 self를 넣어주지만 staticmethod에는 넣어주지 않는다. cl..

Language/Python 2021.03.27

[Design Pattern] 싱글톤 패턴(파이썬)

1. 싱글톤 패턴(Singleton Pattern)이란? 전역적으로 접근 가능한 하나의 객체만을 허용하는 패턴 즉 프로세스(?)내에 하나밖에 존재하지 않는 것을 보장해주는 패턴을 의미한다. 그럼 어떤 때 유용하게 사용할까? 싱글톤 패턴은 하나의 리소스에 대한 동시 요청의 충돌을 막기 위해 많이 사용된다 예로는 로그나 데이터베이스와 관련된 작업에 많이 사용된다. 싱글톤 디자인 패턴의 목적은 다음과 같다. 1. 클래스에 대한 단일 객체 생성 2. 전역 객체 3.공유된 리소스에 대한 동시접근 제어 2. 싱글톤 패턴 구현(Implementation of Singleton Pattern) class Singleton(object): """ Definition of Singleton Pattern """ def _..

Paradigm/OOP-t 2021.03.25

[postgresql] Ubuntu에서 postgresql 설치하고 외부 접속 열어주기

1. PostgreSQL 설치 apt-get을 업데이트하고 postgresql과 postgresql-contrib을 다운로드 받아준다. sudo apt-get update sudo apt-get install -y postgresql postgresql-contrib postgresql-contrib은 postgresql을 사용하기 위한 확장팩이라고 생각하면 된다. 2. 계정 및 데이터베이스 생성 postgresql을 다운받으면 자동으로 postgres라는 유저가 생성되는데 먼저 postgres로 postgresql shell에 접근할 수 있다. 만약 그냥 접근하려고 하면 아래와 같이 해당 유저가 존재하지 않는다고 나온다. 먼저 접속된 유저를 바꿔주기 전에 postgres 유저의 비밀번호부터 바꿔주자 아..

Web Programming 2021.03.19

[Ubuntu] Ubuntu에 redis 설치하고 포트 열어주기

Ubuntu에서 redis를 사용할 일이 있어서 설치와 외부 접속 허용 방법에 대해 적어 놓는다. 1. Redis 설치 sudo apt-get update sudo apt-get install redis-server 2. 레디스 데몬 실행 sudo systemctl start redis 실행하게 되면 아무 창도 뜨지 않으면 성공적으로 실행된 것이다. 만약 redis의 상태를 보고 싶다면 아래 명령어를 작성해주자 sudo systemctl status redis 3. 포트 개방 redis를 로컬로 사용하는 경우는 흔치 않다. 따라서 외부에서 접속할 수 있도록 포트를 열어줘야 하는데 그 방법은 아래와 같다. 먼저 redis 설정 파일을 열어주자 sudo vi /etc/redis/redis.conf 설정 파일..

Web Programming 2021.03.19

[postgresql] postgresql 명령어 모음

장고로 마이그레이션을 할 때면 종종 python manage.py dbshell을 이용해 직접 DB에 접근하는 경우가 있다. 이번 포스트에서는 이럴 때 필요한 postgresql 명령어에 대해 알아보겠다. 대괄호가 들어가 있는 명령어가 있는데 대괄호는 제외하고 작성하면 된다. 1. 접속 데이터 베이스 변경 \c [DBName] [Connection User] 예시 \c django_test test_db_admin 2. 목록 조회 명령어 (DB, 테이블, Sequence, Function, VIew) \list : DB 목록 조회 \dt : 테이블 목록 조회 \df : Function 목록 조회 \ds : Sequence 목록 조회 \dv : View 목록 조회 \du : User 목록 조회 3. 테이블..

Web Programming 2021.03.16

[Computer Science] 캐시란?

시간이 없으신 분들을 위한 한 줄 정리 캐시는 요청이 빈번하게 발생하는 데이터들을 읽는 속도가 빠른 저장매체에 저장시켜 응답하는 방식이다. 웹 개발이나 CS 공부를 할때 캐시라는 말을 굉장히 많이 듣게 된다. 오늘은 캐시가 뭔지 알아보는 시간을 가져 보겠다. 1. 시간과 공간의 상대성 먼저 캐시를 말하기 전에 컴퓨터 공학에서 중요한 개념 하나를 집고 가야한다. 바로 시간과 공간의 상대성이다. 뭔 물리학에서 나올 법한 애기를 하냐고 의아해 할 수 있다. 하지만 물리학에서 상대성 이론과는 전혀 다른 이야기이다. 컴퓨터 공학에서의 시간/공간 상대성은 아주 단순하다. 데이터를 찾는데 걸리는 시간을 단축 시키고 싶으면 공간을 더 많이 사용하면 된다는 것이다. 비유를 통해 이해해 보자. 어떤 개발자 A의 방은 매우..

Technology 2021.03.14

[BOJ] 2146 다리 만들기 파이썬

www.acmicpc.net/problem/2146 2146번: 다리 만들기 여러 섬으로 이루어진 나라가 있다. 이 나라의 대통령은 섬을 잇는 다리를 만들겠다는 공약으로 인기몰이를 해 당선될 수 있었다. 하지만 막상 대통령에 취임하자, 다리를 놓는다는 것이 아깝다 www.acmicpc.net 1. 문제 여러 섬으로 이루어진 나라가 있다. 이 나라의 대통령은 섬을 잇는 다리를 만들겠다는 공약으로 인기몰이를 해 당선될 수 있었다. 하지만 막상 대통령에 취임하자, 다리를 놓는다는 것이 아깝다는 생각을 하게 되었다. 그래서 그는, 생색내는 식으로 한 섬과 다른 섬을 잇는 다리 하나만을 만들기로 하였고, 그 또한 다리를 가장 짧게 하여 돈을 아끼려 하였다. 이 나라는 N×N크기의 이차원 평면상에 존재한다. 이 나..

[postgresql] Mac에서 Postgresql 설치 하기

오늘은 Postgresql을 MAC에 설치하는 방법에 대해 알아보겠다. Postgresql은 Django와 자주 사용하는 데이터 베이스이다. 나의 경우에는 ArrayField를 사용하기 위해 Django에서 디폴트로 설치하는 sqlite 대신 Postgresql을 사용하려고 시도하였다. (물론 이 이유뿐만 아니라 장고 공식 문서에서 실제 배포 시 Sqlite를 권장하지 않는다.) 어쨌든 딴 소리는 차치하고 이제 본격적으로 Postgresql을 설치해보자! 1. Brew로 Postgresql 설치하기 일단 MAC에는 Window에는 없는 brew라는 멋진 명령어가 있다.(어그로..) 아래와 같이 마법의 주문을 터미널에 외워보자! 다운로드 될 것이다. brew install postgresql 다운로드 중 ..

Web Programming 2021.03.09

[Django] 이미지 파일업데이트시 기존 파일 삭제하기

1. 직접 구현 원하는 모델의 save method를 아래와 같이 오버라이드 해주면 된다. import sys class Blablabla(model.model): def save(self, *args, **kwargs): #해당하는 model 클래스를 갖고온다. mod = getattr(sys.modules[__name__], self._meta.object_name) try: obj = mod.objects.get(id=self.id) except: obj = None else: for field in obj._meta.fields: field_type = field.get_internal_type() #필드 이름이 FileField나 ImageField 라면 if field_type == 'File..