전체 글562 [Clean Architecture 정리] 4장. 구조적 프로그래밍 구조적 프로그래밍 증명 다이크스트라는 수학적 원리의 증명을 프로그래밍에 적용했다. 프로그래머는 입증된 구조를 이용하고 이를 코드와 결합해 코드가 올바르다는 사실을 스스로 증명하는 방식으로 동작할 수 있다고 믿었다. 그는 단순한 알고리즘에 대한 증명을 작성할 수 있는 기법을 연구하면서, goto 문장 대신 분기(if/then/else)와 반복(do/while)의 단순한 제어구조만을 사용함으로써 재귀적으로 증명가능한 모듈로 세분화할 수 있다는 사실을 발견했다. 이러한 발견은 구조적 프로그래밍의 기반이 되었고, 구조적 프로그래밍으로 인해 거대한 문제 기술서도 고수준의 기능으로, 다시 저수준의 함수들도 분해가 가능해졌다. 따라서 프로그래머는 구조적 프로그래밍을 통해 대규모 시스템을 모듈과 컴포넌트로, 더 나아가.. 2022. 7. 16. [Clean Architecture 정리] 3장. 패러다임 개요 구조적 프로그래밍(Structured Programming) - 제어흐름의 직접적인 전환에 대해 규칙을 부과 객체 지향 프로그래밍(Object Oriented Programming) - 제어흐름의 간접적인 전환에 대해 규칙 부과 함수형 프로그래밍(Functional Programming) - 할당문에 대해 규칙을 부과 패러다임과 아키텍처 - 패러다임은 권한을 부여하는 것이 아닌 권한을 박탈하는 것 - 아키텍처 경계를 넘나들기 위해 다형성(Object Oriented Programming)을 이용하고 데이터의 위치와 접근 방법에 대한 규칙(Functional Programming)을 부과하고 모듈의 기반 알고리즘(Structured Programming)으로 사용한다. 서적 : http://www.yes2.. 2022. 7. 10. [Clean Architecture 정리] 2장. 두 가지 가치에 대한 이야기 행위와 구조 - 모든 소프트웨어 시스템은 '행위(Behavior)'와 '구조(Structure)' 두 가지 가치를 제공한다. - 개발자는 반드시 두 가지 가치를 모두 높게 유지해야하는 책임을 가진다. 행위 (Behavior) - 개발자는 기능 명세서나 요구사항 문서를 구체화할 수 있도록 돕고, 요구사항을 충족시키기 위해 코드를 작성한다. - 단순히 요구사항을 구현하고 버그를 수정하는 것만이 개발자의 책임이 아니다. 아키텍처(Architecture) - 소프트웨어를 만든 이유는 기능을 쉽게 변경할 수 있도록하기 위함이다. - 변경사항을 적용하는 데 드는 비용은 변경되는 범위(Scope)에 비례해야하며, 변경사항의 형태(Shape)와는 관련이 없어야 한다. - 아키텍처가 특정 형태를 선호할수록 변경은 어려워.. 2022. 7. 10. [Clean Architecture 정리] 1장. 설계와 아키텍처란? 설계와 아키텍처 - 설계는 저수준의 구조 또는 결정사항을 아키텍처는 저수준의 세부사항과는 분리된 고수준의 무언가를 가리킬 때 흔히 사용된다. - 저수준의 세부사항과 고수준의 구조는 모두 소프트웨어 전체 설계의 구성요소이기 때문에 설계와 아키텍처는 개별로 존재할 수 없고, 경계는 뚜렷하지 않다. - 고수준에서 저수준으로의 의사결정의 연속성만이 존재한다. 설계의 목표 - 소프트웨어 아키텍처의 목표는 필요한 시스템 개발과 유지보수의 비용을 최소화하는 것이다. 시간의 흐름에 따라 비용은 높아지고 생산성은 낮아지는 소프트웨어 무엇인 잘못되었는가? 1) 개발자 스스로에 대한 과신 - "코드는 나중에 정리하면 돼. 당장은 시장에 출시하는 게 먼저야!" - 개발자는 생산성을 유지할 수 있다고 자신의 능력을 과신하고, .. 2022. 7. 9. WSGI, WAS, CGI 보호되어 있는 글 입니다. 2022. 7. 5. Gunicorn Gunicorn - gunicorn은 WSGI기술의 일종 WSGI(Web Server Gateway Interface) - 파이썬 어플리케이션과 웹 서버와 통신하기 위한 규약 또는 인터페이스 - WSGI 서버와 파이썬 어플리케이션이 WSGI의 규칙에 따라 작성되면, 어플리케이션은 내부 구현에 상관없이 WSGI 서버를 선택 가능 - 파이썬에서 대표적으로 사용되는 WSGI로는 uWSGI, gunicorn이 있으며, gunicorn의 퍼포먼스가 비교적 가볍다고 함. Gunicorn을 사용하는 이유 - Gunicorn은 Python WSGI로 웹 서버(Nginx)로부터 서버사이드 요청을 받으면 WSGI를 통해 서버 어플리케이션으로 전달해주는 역할 - Django의 "runserver" 또한 같은 역할을 수행하지.. 2022. 7. 5. Github Action 1. Github Action - Github에서 공식적으로 제공하는 CI/CD tool로써 소프트웨어 workflow를 자동화할 수 있도록 도와주는 도구 - workflow의 예로는 Test, Deploy, 자동화 스크립트 등 2. Github Action Core Concept 1) Workflow - 여러 Job으로 구성, Event로 트리거될 수 있는 자동화 전체 프로세스를 의미 - 최상위 개념 - yaml 파일로 작성되며, Github Repository의 .github/workflows 디렉토리 아래에 저장 2) Event - Workflow를 트리거하는 특정 규칙을 의미 - Push, Pull, Cron, Webhook 등 3) Job - 여러 Step으로 구성, 가상 환경의 인스턴스에서 실.. 2022. 7. 3. [AWS EC2] Docker 설치 1. EC2에 Docker 설치하기 ssh [EC2 서비스명] - EC2 서비스 접속 sudo yum update -y - yum 업데이트 sudo yum install docker -y - docker 설치 docker -v - docker 버전 확인 sudo service docker start - docker 실행 2. Docker 이미지 생성 pip3 --list=format=freeze > requirements.txt - requirements.txt 생성 FROM python:3 ENV PYTHONUNBUFFERED 1 WORKDIR /web COPY . . RUN pip install --upgrate pip RUN pip install -r requirements.txt EXPOSE 8.. 2022. 7. 3. AWS 서버 배포 - (2) Django 프로젝트 배포 1. 가상환경 패키지 저장 1) 가상환경 실행 source [Virtual Environment]/bin/activate 2) requierments.txt 파일 생성 pip3 freeze >> requirements.txt 2. EC2 인스턴스에 git 설치 sudo yum install git 3. git clone mkdir ~/[디렉터리 명] - 프로젝트를 clone할 디렉터리 생성 cd ~/[디렉터리 주소] && git clone [레파지토리 명] 4. 가상환경 내 패키지 설치 source [가상환경 명]/bin/activate - 가상환경 활성 pip3.8 install -r requirements.txt - 패키지 리스트를 통해 패키지 설치 5-1. 패키지 관련 버전 이슈 해결 - djang.. 2022. 6. 14. AWS 서버 배포 - (1) EC2 인스턴스 생성 AWS EC2 인스턴스 생성 1) region 설정 2) 인스턴스 생성 ec2 -> 인스턴스 시작 (1) AMI(Amazon Machine Image) 선택 - AMI란 EC2 인스턴스를 시작하는 데 필요한 정보를 이미지로 만들어 둔 것 - 프리 티어 사용 가능한 Amazon Linux 2 AMI (HVM) - Kernel 5.10, SSD Volume Type 선택 (2) 인스턴스 유형 선택 - t2는 요금 타입, micro는 사양을 의미 - T 시리즈(t2, t3 등)는 범용 시리즈라고 불리기도 하며, 다양한 사양을 사용할 수 있음 - T 시리즈는 크레딧이란 일종의 CPU를 사용할 수 있는 포인트 개념이 있음 - 인스턴스 크기에 따라 정해진 비율로 CPU 크레딧을 계속 받게 되며, 사용하지 않을 때는.. 2022. 6. 9. [Clean Code 정리] 시스템 Clean Code - 시스템 1. 시스템 제작과 시스템 사용을 분리하라 - 소프트웨어 시스템은 애플리케이션 객체를 제작하고 의존성을 서로 연결하는 준비 과정과 준비 과정 이후에 이어지는 런타임 로직으로 분리해야 한다. - 관심사 분리가 필요하다. 1) 객체 생성과 비즈니스 로직인 혼합된 경우 : 초기화 지연 또는 계산 지연 def get_equipment_connector(self): if (self.__equipment_connector == None): self.__equipemnt_connector = EUVEquipmentConnector() return self.__equipment_connector (1) 장점 - 필요할 때까지 객체를 생성하지 않으므로 불필요한 부하가 걸리 않고 어떤 경우에.. 2022. 5. 30. [Clean Code 정리] 클래스 Clean Code - 클래스 1. 클래스 체계 1) 캡슐화 - 변수와 유틸리티 함수는 가능한 공개하지 않는 편이 낫지만 반드시 숨겨야하는 것은 아니다. - 테스트를 위해 protected로 선언해 접근을 허용하기도 한다. - 가능하면 private을 유지할 수 있는 방법을 강구하자. - 캡슐화를 풀어주는 결정은 언제나 최후의 수단이다. 2. 클래스는 작아야 한다. - 클래스는 작아야 한다. - 함수가 물리적인 행 수로 크기를 측정했다면 클래스는 클래스가 맡은 책임을 센다. - 클래스 이름은 해당 클래스 책임을 기술해야 한다. - 클래스 이름을 "Processor", "Manager", "Super" 등과 같이 모호한 단어가 있다면 클래스가 여러 책임을 가지고 있다는 의미이다. - 클래스 명은 "if",.. 2022. 5. 30. 이전 1 2 3 4 5 6 7 8 ··· 47 다음