분류 전체보기

    가상파일시스템 pyfakefs 를 통해 테스트 코드 작성하기

    해당 디렉토리의 파일을 모아주는 util 함수를 생성하고 테스트 하고 싶었다. 하지만 실제로 폴더를 만들고 파일을 만드는 건 이치에 맞지 않다고 판단해서 이를 해주는 라이브러리가 없을까 찾아보다가 pyfakefs 를 찾았다. 공식문서는 요기 pyfakefs pyfakefs implements a fake file system that mocks the Python file system modules. pypi.org 사용 방법은 간단했다. 해당 라이브러리를 다운받고, pytest 의 fixture를 다루듯이 테스트 함수에서 매개변수로 다루면 되었다. 아래는 pyfakefs 를 활용해 테스트 코드를 짜본 것이다. def test_collect_file_path(fs) -> None: """ 해당 디렉토리의..

    IAM 정책을 잘 알아야 AWS 보안도 쉬워진다. 이것은 꼭 알고 가자! - 신은수 솔루션즈 아키텍트(AWS) - 3. 허용 권한 획득 조건, IAM 사용 TIP

    허용 권한 획득 조건 Or 조건 Permission Policy에 ec2에 대한 모든 조건을 주고, Resource Policy에는 s3에 대한 모든 조건을 준다면 최종 획득 권한은 s3와 ec2에 대한 모든 조건을 가질 수 있다. And 조건 Permission Boundary에는 s3 GetObject 권한을 주고 Permission Policy에는 s3의 모든 조건을 준다면, 최종 획득 권한은 s3 GetObject 권한만을 획득한다. IAM Role의 활용 특징 보안성: 임시 보안 자격 증명의 사용 편리성: 다수의 사용자나 어플리케이션이 사용할 수 있으므로 권한 관리가 편리 무료: 별도의 과금 없음 IAM 사용자 권한 최소화 IAM 사용자에게 ec2 인스턴스에 접근을 시키려면 어떻게 해야 할까? ..

    Docker Multi-Stage

    Dockerfile로 이미지를 빌드할 때 꽤나 큰 용량이 소모된다 이때 Multi-stage 를 통해 이미지를 경량화 시킬 수 있다. 일반적으로, Dockerfile을 작성할 때, 한 단계(build stage)에서 애플리케이션을 빌드하고, 또 다른 단계에서 빌드된 애플 리케이션을 실행하는 이미지를 생성하는 방법을 사용한다. 그러나, 이러한 방식은 중간 빌드 결과물과 불필요한 라이 브러리, 의존성 파일 등이 포함된 큰 이미지를 생성할 수 있다. Dockerfile multi-stage를 사용하면, 여러개의 build stage를 이용하여 각각 다른 의존성을 가진 이미지를 생성할 수 있다. 빌드 단계에서 필요한 파일과 라이브러리만 포함하여 최종 이미지를 만들기 때문에 이미지 크기를 최소화 할 수 있다. 그..

    DNS 에 대한 이해

    오늘 회사에서 다급하게 전화가 와서 "웹 서버 접속을 막아주세요."라고 했다. 난 당연하게 그냥 개발용 웹서버를 막아달라는 줄 알고 8080 포트를 닫아버렸다. 그런데 도메인과 연결된 IP를 타고 tomcat 설정을 통해 접속이 가능했다. 난 뭘 한 거지? 사실 완전히 틀린 말은 아니었을 거다. 어쨌든 "개발용" 웹 서버 접속은 막았으니까. 다만 문제는 그 이후다. DNS에 대한 얘기를 하고 있는데 난 완전히 엉뚱하게 Tomcat 설정을 만지작 거리고 있었다. 도메인과 IP 연결을 끊어야 하는데 계속 애꿎은 웹서버만 만지작 거린 거다... 나중에 해결되고 나서 혼자 헛소리를 하는 날 보면서 다른 분들은 얼마나 답답했을까... (웹 서버 접속을 막아달란 요청은 당연하게도 모든 IP, Port를 통한 접속을..

    웹 서버와 Serverless

    웹 서버 웹 서버는 인터넷 상에서 사용자가 요청한 정보를 제공하는 소프트웨어이다. 일반적으로 웹 서버는 클라이언트의 요청에 대한 응답으로 HTML, CSS, JavaScript와 같은 웹 페이지를 전송한다. 웹 서버는 다양한 기능을 제공하며, 그 중 가장 기본적인 기능은 HTTP 프로토콜을 이용하여 클라이언트의 요청을 받고, 해당 요청에 대한 적절한 응답을 전송하는 것이다. 이러한 기본적인 기능 외에도, 웹 서버는 보안, 로깅, 인증, 데이터베이스 연동 등 다양한 기능을 제공한다. 웹 서버는 Apache, Nginx, IIS 등의 서버 소프트웨어로 구현된다. 이 중에서도 Apache는 가장 오랫동안 사용되어 온 웹 서버 소프트웨어 중 하나이며, Nginx는 최근 인기가 높아지고 있는 웹 서버 소프트웨어이..

    DRF - Null인 경우 마지막에 배치하도록 하기

    drf에서 제공하는 Ordering Filter 기능을 커스텀했다. 공식 문서는 요기 문제 상황 ordering 을 하는 과정에서 null 값이 존재하는 경우 정렬 순서를 맨 끝으로 보내야 했다. 따라서 OrderingFilter 의 filter_queryset을 override 하기로 했다. param은 "-" 의 경우 내림 차순이므로 맨 앞글자를 검사해서 "-" 있을 경우 내림 차순 표현식으로 만들고 아닌 경우 오름차순으로 만들었다. 밑에는 해당 코드이다. class FooOrdering(OrderingFilter): @staticmethod def nullish_ordering(field: str) -> F: """ ordering 에서 오름차순 혹은 내림차순으로 변경하고 이때 null이 맨 마지막..

    IAM 정책을 잘 알아야 AWS 보안도 쉬워진다. 이것은 꼭 알고 가자! - 신은수 솔루션즈 아키텍트(AWS) - 2.권한 할당 원칙

    2023.04.15 - [Aws] - AWS - IAM 정책을 잘 알아야 AWS 보안도 쉬워진다. 이것은 꼭 알고 가자! - 신은수 솔루션즈 아키텍트(AWS) - 1 에 이어 이번엔 권한 할당 원칙을 알아보자. 권한 할당 원칙 - 명시적 Deny, 묵시적 Deny 명시적 Deny Effect가 Deny 로 설정되면 명시적 Deny이라고 부른다. 기본적으로 IAM은 look up을 할 때 API에 할당된 모든 policy를 검사한다. 첫 번째로 명시적 Deny를 검사한다. 묵시적 Deny 방화벽에서 Default Deny의 개념과 비슷하다. 허용하지 않은 패킷들은 차단된다. IAM에서 명시되진 않지만 시적으로 허용되지 않는 건 차단된다. 권한 할당 원칙 - 명시적 허용 명시적 허용에는 Permission ..

    AWS - IAM 정책을 잘 알아야 AWS 보안도 쉬워진다. 이것은 꼭 알고 가자! - 신은수 솔루션즈 아키텍트(AWS) - 1

    https://www.youtube.com/watch?v=iPKaylieTV8 를 보고 정리한 내용이다. IAM Policy 의 구조 Effect - 명시된 정책에 대한 허용 혹은 차단 Principal - 접근을 허용 혹은 차단하고자 하는 대상 "Principal": "AWS":"arm:aws:iam::1234..:user/username" Action - 허용 혹은 차단하고자하는 접근 타입 "Action": "s3:GetObject" Resource - 요청의 목적지가 되는 서비스 "Resource": "arn:aws:sqs:us-west-2:1234...:queue1" Condition - 명시된 조건이 유효하다고 판단될 수 있는 조건 "StringEqualsIfExists": {"aws:Reque..

    django-import-export 비동기 활용하기

    django-import-export 를 활용해서 data 를 적재하고자 했다. 여기서 문제가 발생했는데 import 데이터가 5,000개를 넘어가니 꽤 오랜시간이 걸렸다. 약 8분 정도였다. 따라서 이 작업을 줄이고자 노력했다. use_bulk 나 batch_size, chunk_size 등 다양한 옵션을 활용했지만 도무지 시간이 줄어들지 않았다. 따라서 어떤 부분이 시간이 오래걸리나 살펴보다가 import_data 메소드에서 비동기를 활용해 데이터를 처리하면 어떨까? 라는 생각이 들어서 적용했다. 어느정도 성과가 있어서 비동기를 적용한 후에 3분 안팎으로 걸리게 수정했다. 사용한 비동기 함수는 2 가지다. aync iterator와 import_data 를 async 하게 바꿨다. 0. django-..

    비동기란?

    Django 비동기 orm 을 실습하다가 비동기에 대한 이해가 모자란 거 같아서 공부차원에서 글을 써본다. 정의 비동기란 작업의 완료 여부와 상관없이 다음 작업을 수행할 수 있는 방식을 의미한다. 즉 한 작업이 완료되지 않아도 다음 작업을 실행할 수 있는 비선점 방식이다. 하나의작업이 끝나기 전에 다른 작업으로 전환이 일어나면 사용자 인터페이스가 응답하지 않을 수 있기 때문에 비선점 방식을 사용한다. 비선점 방식이란? 비선점 방식은 비동기 프로그래밍에서 사용되는 작업 스케줄링 방식 중 하나이다. 프로세스가 자원을 할당 받았을 경우 자원을 스스로 반납할 때까지 계속 그 자원을 사용하도록 허용한다. 따라서 비선점 방식은 작업이 시작되면 다른 작업이 완료될 때까지 실행되며, 현재 실행 중인 작업이 종료되지 않..