본문 바로가기

분류 전체보기560

[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.
[Clean Code 정리] TDD TDD(Test Driven Development) 1. TDD 법칙 세 가지 1) TDD 법칙 세 가지 - 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. - 컴파일은 실패하지 않으면서 실행이 샐패하는 정도로만 단위 테스트를 작성한다. - 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. 2) 효과 - 테스트 코드와 실제 코드가 함께 나올 뿐더러 테스트 코드가 실제 코드보다 불과 몇 초 전에 나온다. - 실제 코드를 사실상 전부 테스트하는 테스트 케이스가 나온다. - 하지만 실제 코드와 맞먹을 정도로 방대한 테스트 코드는 심각한 관리 문제를 유발하기도 한다. 2. 깨끗한 테스트 코드 1) 깨끗한 테스트 코드 유지하기 - 테스트의 유연성, 유지보수성, 재사용성을 제공하는 .. 2022. 5. 30.
[Clean Code 정리] 경계 Clean Code - 경계 1. 개요 - 우리는 가끔 서드 파티 패키지나 오픈 소스를 사용해야될 상황 또는 회사 내부 팀이 만든 컴포넌트를 사용해야할 상황에 마주한다. - 우리는 이러한 코드를 우리가 개발하고 있는 내부 코드와 안전하게 통합시켜야 한다. - 소프트웨어 경계를 깔끔하게 처리하는 기법과 기교가 중요하다. 2. 외부 코드 사용하기 - 인터페이스를 제공하는 입장과 사용하는 입장 사이에는 필연적인 긴장감이 존재한다. - 제공하는 입장에서는 좀 더 다양한 환경에서 좀 더 많은 사용자가 사용할 수 있도록 다양한 사용성을 지향한다. - 사용하는 입장에서는 그들의 사용성에 맞는 Specific한 인터페이스를 원한다. - 이것을 '경계에서의 긴장'이라고 부른다. 1) Bad Case class EUVEq.. 2022. 5. 29.