분류 전체보기

    결합과 추상화 - 1

    요즘 보는 파이썬으로 살펴보는 아키텍처 패턴이 재밌어서 포스팅을 이어나가겠다. B컴포넌트가 깨지는 게 두려워서 A 컴포넌트를 변경할 수 없는 경우를 이 두 컴포넌트가 서로 결합되어 있다고 한다. 지역적인 결합은 좋은 것이다. 결합은 코드가 서로 함께 작동하고, 한 컴포넌트가 다른 컴포넌트를 지원하며 시계 나사처럼 각 컴포넌트들이 서로 맞물려 돌아간다는 사실이 드러나는 신호다. 결합된 요소들 사이에 응집이 있다는 용어로 이런 바람직한 경우를 표현한다. 전역적인 결합은 성가신 존재다. 전역적인 결합은 코드를 변경하는 데 드는 비용을 증가시키며 결합이 커지다 보면 코드를 변경할 수 없는 지경에 이른다. 추상화를 통해 시스템 내 결합 정도를 줄일 수 있다. 추상적인 상태는 테스트를 더 쉽게 해 준다. 두 파일 ..

    저장소 패턴 - 2

    2023.02.08 - [디자인패턴] - 저장소 패턴을 알아보자 - 1에 이어 두 번째 기능을 구현할 때 항상 테스트부터 작성하자. 이 테스트는 코드(저장소)가 데이터베이스와 제대로 연동하는지 검사하기 때문에 아마 통합 테스트로 분류할 수 있다. #객체를 저장하는 저장소 테스트(test_repository.py) def test_repository_can_save_a_batch(session): batch = model.Batch('batch1', 'RUSTY-SOAPDISH', 100, eta=None) repo = repository.SqlAlchemyRepostiory(session) repo.add(batch) # 여기서 테스트하는 메서드는 repo.add() 이다. session.commit()..

    저장소 패턴을 알아보자 - 1

    『파이썬으로 살펴보는 아키텍처 패턴』을 보고 본 포스팅을 작성했다. 1. 저장소 패턴 소개 저장소 패턴은 모든 데이터가 메모상에 존재하는 것처럼 가정해 데이터 접근과 관련된 지루한 세부 사항을 감춘다. import all_my_data # 모든 데이터를 가져온다 def create_a_batch(): batch = Batch(...) all_my_data.batches.add(batch def modify_a_batch(batch_id, new_quantity): batch = all_my_data.batches.get(batch_id) batch.change_initial_quantity(new_quantity) 모든 객체가 메모리에 있더라도 이 객체들을 나중에 다시 찾을 수 있도록 어딘가에 보관해야 ..

    MariaDB 그룹 권한 부여하기

    2023.02.05 - [Database] - MariaDB 계정 생성 및 권한 설정(그룹 생성) 이어서 권한을 그룹으로 관리해 보자. 우선 그룹을 만들자. CREATE ROLE admin; # admin 권한 그룹을 생성한다. 이때 pubic, None은 예약어로써 사용할 수 없다. 권한 그룹을 생성했다면, 그룹의 권한을 설정해 보자. GRANT ALL ON {database}.* TO {role name}; GRANT GRANT OPTION ON {database}.* TO {role name}; # 모든 권한을 가지는 admin role을 설정 위와 같이 그룹 권한을 설정한 다음 user를 그룹에 속하게 하자. GRANT {role name} TO {user}; SET DEFAULT ROLE {ro..

    MariaDB 계정 생성 및 권한 설정(그룹 생성)

    MariaDB에서 계정을 생성하고 권한을 주는 것까지 설정해보려고 한다. 0. 실습환경 Docker에서 mariadb 10.4를 설치하였다. 여기서 실습을 해보자. docker run -d -p {호스트포트}:{컨테이너 포트} \ -e {set environment varables:여기서는 루트 계정 password 설정} \ -v {host volumn 경로}:{컨테이너에 mount할 경로} \ -name {container name 설정} {mariadb image name} MariaDB 유저 생성 이제 실습 환경에서 유저를 생성해 보자 1 접속 docker exec -it {mariaDB name} bash # 컨테이너 접속 mysql -u root -p # mariaDB 접속 이제 데이터베이스(..

    NCP 서버 접속용 IP를 주는 이유

    NCP(Naver Cloud Platform)에서는 SSH 접속을 위해 서버접속용 IP를 쥐어준다. 왜 쥐어줄까? 사실 오늘 PM님이 SSH 접속용 공인 IP랑 공인 IP가 왜 나눠져 있냐고 하나로 합치면 안되냐길래 나도 이게 왜 나눠져 있나 생각을 하게 됐다. 모르면? 찾아야지 사실 공식문서를 찾는 게 제일 빠른데 link가 망가졌는지 404가 떴다. 어쩔 수 있나 발품 팔아야지. FAQ에는 다음과 같이 써있었다. 네이버 클라우드 플랫폼 Classic 환경 Server 에서 제공하는 포트포워딩용 공인 IP는 무료로 제공되는 서비스이며, 서버에 직접 접속하기 위한 용도로만 사용 가능합니다. 보안 강화를 위해, 보유하신 서버를 네이버 클라우드 플랫폼 외부에 노출하지 않은 상태에서 안전하게 서버에 접속하시도..

    SSH 터널링(포트 포워딩)

    1. 포트 포워딩이란 1.1 Port란? 위키 백과에서 포트는 인터넷 프로토콜 스위트에서 운영 체제 통신의 종단점이라고 한다. 네트워크 서비스나 특정 프로세스를 식별하는 논리 단리라고 한다. 여기서 식별이라 함은 port를 통해 서비스를 찾아갈 수 있다. 예를 들어보자 Django로 로컬에 웹 서버를 띄울 떄 console에는 다음과 같은 창이 뜬다. Starting development server at http://127.0.0.1:8000/ IP:Port 번호인데 8000번이 아닌 8001을 입력하면 해당 서버에 접속할 수 없다. 이렇듯 Port를 통해 식별을 할 수 있다. 1.2 포트포워딩? 포트 포워딩은 특정 포트로 들어오는 것을 다른 포트로 바꿔서 다시 전송하는 것이다. 만약 외부에서 210...

    Pytest - 3. Monkeypatching functions

    1. Monkeypatching 이란? 공식 문서에는 다음과 같이 Monkeypatching을 설명한다. 항상 특정 값을 반환하도록 만들 때 monkeypatch를 사용하라고. 아래의 예에서 monkeypatch.setattr은 Path.home을 패치하는 데 사용되므로 테스트가 실행될 때 ('/abc')가 항상 사용된다. 이것은 테스트 목적으로 실행 중인 사용자에 대한 의존성을 제거한다.(사용자의 환경에 따라 테스트 결과가 달라질 수 있는데 이를 삭제하기 위한 방법) monkeypatch.setattr은 패치된 함수를 사용할 함수를 호출하기 전에 호출해야 한다. 테스트 기능이 완료되면 Path.home 수정이 실행 취소된다. # contents of test_module.py with source co..

    Pytest - 2. Fixture 알아보기

    어제에 간단하게 예제를 살펴보았다. 이번에는 Fixture의 들어가는 인수 등을 살펴보자. 1. Autouse autouse를 True로 설정하면, 별도 요청 없이 모든 테스트 함수에서 해당 fixture를 사용할 수 있다. Sometimes you may want to have a fixture (or even several) that you know all your tests will depend on. “Autouse” fixtures are a convenient way to make all tests automatically request them. This can cut out a lot of redundant requests, and can even provide more advanced f..

    Pytest 사용하기 - 1. 간단한 예제

    pytest를 활용하여 테스트 코드를 짜보자 설치 우선 가상환경에 진입해서 pytest를 install 하자 pip install pytest 테스트 파일 작성하기 1. 함수형 타입 그런 다음 test_ 로 시작하는 테스트 코드를 실행한 파이썬 실행 파일을 만들자. # test_demo.py def test_success_sum(): x = 4 y = 3 assert x + y == 7 def test_fail_sum(): x = 4 y = 3 assert x + y != 6 각각 더하기를 실행했을 때 성공 케이스(test_success_sum())와 합산이 잘못된 케이스(test_fail_sum())를 작성하였다. 이렇게 작성해도 테스트는 잘 동작하지만, x와 y는 두 함수에서 공통적으로 사용하고 있다..