분류 전체보기
-
[Python] Decorator개발 2024. 5. 17. 10:45
파이썬에선 함수위에 데코레이터를 둬서 함수의 실행전후에 특정한 작업을 주입할 수 있다. 아래 코드에선 foo 함수에 logging 이란 데코레이터를 추가했고 실행 전에 before 실행 후엔 after 를 출력하도록 했다. def logging(func): def wrapper(*args, **kwargs): print("before") ret = func(*args, **kwargs) print("after") return ret return wrapper@loggingdef foo(): print("foo")foo() 실행 결과 의도했던 대로 출력된다. 로깅이나 실행 전후에 처리하고 싶은 로직을 넣어야하는 경우 유용하게 사용할 수 ..
-
[파이썬] 파이썬은 모든것이 객체다개발 2024. 5. 9. 11:52
파이썬은 모든것이 객체다 파이썬에선 모든것이 객체라는 말이 있다. 이게 무슨 말인지 모르더라도 파이썬을 사용하는데 큰 문제는 없다. 하지만 좀더 깊게 들어가고 싶다면 한번쯤 공부해보고 가는 것이 좋다. 우선 아래 코드를 실행하면class A: passa = A()print(type(a)) # class A 라고 출력된다. 변수 a 는 A 라는 클래스의 객체이기 때문이다. 그런데 배열과 정수, 문자열에 대해서도 동일하게 출력해보면, 타입 정보와 함께 앞에 class 가 붙여서 나온다.print(type([1,2,3,4])) # print(type(5)) # print(type("1234")) # 심지어 추가한 함수와 len 처럼 빌트인 함수도 클래스의 일종이다.def foo(): passpr..
-
[python] __all__ 을 이용해 전체 임포트 막기개발 2024. 5. 8. 10:27
메타클래스 __all__ 을 활용하면 패키지 전체 임포트시 특정 클래스나 메소드만 임포트 되도록 제한할 수 있다. transporation.py 에서 Bus, Taxi, Subway 클래스를 선언하고 __all__ 에는 Bus와 Taxi 만 추가했다# transporation.pyclass Bus: passclass Taxi: passclass Subway: pass__all__ = ["Bus", "Taxi"] main.py 에서 transporation.py 파일 내부 클래스를 전체 임포트하고 사용하면from transporation import *sb = Subway() Subway 를 찾을 수 없다고 나온다.➜ clean-python python3 main.pyTraceback (..
-
__init__.py 를 이용한 모듈 관리개발 2024. 5. 8. 10:17
파이썬 3.3 이전에는 __init__.py 는 디렉토리가 파이썬 패키지임을 명시할 때 필요했었다면 이제는 __init__.py 가 없어도 없어도 자동으로 디렉토리를 패키지로 인식한다. 대신에 __init__.py 를 사용하면 패키지 내부에 있는 클래스 선언을 하나로 모아줄 수 있는 장점이 있다. 이런 프로젝트 구조를 가지고 있고├── main.py└── phone ├── galaxy.py └── iphone.py galaxy.py 와 iphone.py 에서 각각 클래스를 선언했다면# galaxy.pyclass Galaxy: def __init__(self) -> None: pass# iphone.pyclass Iphone: def __init__(self) -> No..
-
파이썬 - 리스트 컴프리헨션개발 2024. 5. 3. 13:12
개인적으로 파이썬은 가독성이 좋은 언어라고 생각하는데 가독성을 돕는 대표적인 기능이 리스트 컴프리헨션이다 리스트 요소들에 제곱 값을 새로운 리스트로 만들기 위해선 아래 코드처럼 map 이라는 함수를 사용해서 구현하는데numbers = [1, 2, 3, 4, 5]square_numbers = map(lambda num: num**2, numbers) 리스트 컴프리헨션을 사용하면 함수없이 구현할 수 있다. square_numbers = [num**2 for num in numbers] 처음 사용할 때는 문법이 익숙하지 않을수도 있다. 연산이 먼저 나오고 뒤에 for 문이 나오는 문법이 대부분 프로그래머한테 익숙한 형태는 아니다. 그런데 자주 사용하다보면 따로 함수를 만들지 않아도 되기 때문에 편하게 쓸 수..
-
OLAP vs OLTP 데이터베이스개발/기술 2024. 4. 16. 11:36
데이터베이스는 어떤 기능에 초점을 두느냐에 따라 OLAP, OLTP 데이터베이스로 나뉜다. 좀 거칠게 단순화하면 쓰기 성능은 떨어지더라도 읽기 성능을 극대화 할때는 OLAP (Online Analytic Processing), 읽기 성능이 떨어지더라도 안정적인 트랜잭션을 제공하는데 초점을 둔다면 OLTP (Online Transaction Processing) 데이터베이스로 구분할 수 있다. 사용 케이스에 따라 구분할 수 있는데 은행, 온라인 쇼핑, 항공기 예약처럼 사용자의 쓰기 데이터가 빠르게 처리돼야 하는 경우 OLTP 데이터베이스를 사용하고 데이터 분석 툴처럼 복잡한 쿼리 검색이 빠르게 처리돼야 하는 경우 OLAP 데이터베이스를 사용한다. MySQL, PostgreSQL, Maria DB 처럼 우리..
-
Clickhouse 가 빠른 이유개발/기술 2024. 4. 11. 11:48
Clickhouse 는 Online Analytic Processing(OLAP) 에 최적화된 데이터베이스로 다른 데이터베이스에 비해 월등한 검색 속도를 자랑한다. 이번 포스트에서는 어떤 요소들 때문에 Clickhouse 가 속도가 빠른지 정리했다 Column oriented DBMS Clickhouse 는 칼럼형 데이터베이스를 사용하고 있다. 칼럼형 구조가 생소할 수 있는데 먼저 이것과 반대되는 개념인 로우형(Row-oriented) 데이터베이스에 대해서 먼저 알아보자 Row-oriented DBMS 같은 행에 있는 데이터 단위로 저장되는 형태다. MySQL 과 PostgreSQL 이 대표적인 Row 형 데이터베이스다 만약 (시간, 주소, 전화번호) 정보를 저장하는 데이터베이스라면 세가지 데이터를 같은..
-
VIP, HA개발/기술 2023. 11. 27. 22:16
VIP VIP 는 가상의 주소를 의미한다. 하나의 컴퓨터에 물리 ip 주소와는 별개로 새로운 가상 IP 주소를 설정할 수 있다. VIP 를 설정하면 같은 네트워크 내에서 설정한 vip 주소에 대한 요청을 받을 수 있게 된다. 하지만 아무 주소나 정할 수 있는건 아니고 몇가지 규칙이 있다. 네트워크 범위 네트워크의 서브넷 설정에 맞는 주소를 골라야한다. inet 192.168.1.4/24 로 설정된 경우 서브넷에 따라서 192.168.1.x 범위의 주소를 가상의 주소로 설정할 수 있다. 주소충돌방지 너무 당연하지만 기존에 있던 주소와 겹치면 안된다 HA(High Availability) VIP 는 고가용성 서비스를 구성할 때 주로 사용된다. 실제 사례를 알아보기 위해 먼저 데이터베이스의 프라이머리, 스탠드..