Dev 84

[TDD] Python Testing Framework 1 - Pytest, unittest

1.Installation and Getting Started (unittest / pytest) 1) Unittest unittest는 python에 내장되어있어 따로 설치하지 않아도 되는 표준 라이브러리 입니다. 그래서 바로 import해서 사용할 수 있습니다. import unittest 2) Pytest pytest는 설치를 하고, import하여 사용합니다. $ pip install pytest import pytest 2. Naming Conventions (unittest / pytest) 1) Unittest 파일명: test로 시작 Unittest에서는 지정된 파일은 반드시 모듈로 import 가능해야 합니다. 메소드명: test로 시작 단위 테스트의 기본 구성 블록인 TestCase를 ..

Dev/SW Engineering 2021.05.21

[DevOps] CI/CD 파이프라인 구축하기

1. CICD 파이프라인을 어떻게 구축하고 있을까? 몇 기업들의 빌드/배포 자동화 파이프라인 구축에 대해서 알아보았고, 그 중 가장 자세하고, 도움이 되었던 글은 하루에 1000번 배포하는 조직 되기 | 뱅크샐러드 이다. 파이프라인 재구축 전 상황과 pain point, 그래서 어떻게 변경했는지, 현재 어떤 식으로 운영되고 있는지가 자세히 설명되어져 있었기 때문이다. 예전에는 아래와 같은 AWS의 서비스를 사용하여 CodeBuild: 소스 코드를 컴파일하는 단계에서부터 테스트 후 배포까지의 단계를 지원하는 CI 서비스. Github과의 연결을 통해 빌드를 시작할 수 있으며 Codepipeline과 연결하여 커밋이 발생할 때마다 자동으로 빌드를 수행할 수 있음. 코드에 대한 빌드와 테스트 또한 사전 구성된..

Dev/DevOps, Infra 2021.05.16

[(IaC)Terraform] Terraform Variables 활용하기

Terraform은 HCL 문법을 가진 언어로, 변수를 정의하고 주입해서 사용할 수 있다. 지원하는 type들은 www.terraform.io/docs/language/values/variables.html에서 확인 할 수 있다. 1. Variables를 사용하는 이유 일반적으로 코드작업을 할 때 변수를 사용하는 것처럼 매번 변수 대신 해당하는 값을 직접 적어주면 너무 불편하다. 게다가 여러 서비스가 연결되어 작동하는 인프라인 경우 변수가 매우 편리하다. 2. 변수 정의하기 해당 인프라 코드, 즉 .tf 파일 어디서나 변수를 정의할 수는 있지만 보통 variables.tf 파일을 따로 만들어 그 파일에 정의하는게 편하다. variable ["변수명"] { type = [타입] default = [defa..

Dev/DevOps, Infra 2021.05.10

[(IaC)Terraform] Terraform Backend 활용하기

[AWS][Network][(IaC)Terraform] AWS Network의 구성 요소와 생성처럼 terraform apply를 하는 경우, 리소스가 생성된 후 terraform.tfstate 파일이 생성된다. 이 파일의 내용(terraform metadata; terraform knows what infrastructure it controls)이 terraform state이다. 즉, 내가 실행한 apply의 결과를 저장해놓은 상태이다. (여기서 상태란 terraform apply를 했을 시점의 상태이지, 현재 인프라의 상태를 반영해주는 것은 아니다. ) 이 state는 backend에도 저장 될 수 있다. backend가 뭐지?? 그리고 이는 어떻게 활용되고 왜 사용될까? 어떻게 쓰는걸까? 1. ..

Dev/DevOps, Infra 2021.05.09

[AWS][Network][(IaC)Terraform] AWS Network의 구성 요소와 생성

0. Infrastructure as Code 코드로써의 인프라란 인프라를 이루는 서버, 미들웨어 그리고 서비스 등의 인프라 구성요소들을 코드를 통해 구축하는 것이다. 이렇게 코드로 구축하게되면 재사용성, 유지보수 등의 장점을 가진다. 1. AWS VPC AWS VPC(Amazon Virtual Private Cloud)를 사용하면 AWS Cloud에서 논리적으로 격리된 공간을 프로비저닝하여 고객이 정의하는 가상 네트워크에서 AWS 리소스를 시작할 수 있다. 클라우드 위에서 생성한 리소스(EC2, RDS....등)들은 네트워크를 통해 접근하는데, 클라우드 서비스인 AWS는 다양한 고객들이 사용하는 공용공간이다. 즉, 너무 많은 리소스들이 있다. 그리고 이 리소스들에도 하나의 계정에서 생성하는 리소스들만의..

Dev/DevOps, Infra 2021.05.02

[TDD] 통합 테스트(Integration Test)

이전에 [TDD] TDD 시작하기 (Unit Test, Jest)에서 Unit Test에 대해서 알아보고 작성해보았다. 이제 Integration Test에 대해 알아보고자 한다. Integration Test 통합 테스트란 모듈을 통합하는 단계에서 수행하는 테스트로, Unit Test를 통해 각 모듈들이 잘 작동되는 것을 확인했다면 이제 이 각 모듈들을 연동해서 테스트를 수행해야하는데, 이를 통합 테스트라고 한다. 통합 테스트를 하는 이유 모듈들의 상호 작용이 잘 이루어지는지 검증하기 위해 통합하는 과정에서 발생할 수 있는 오류를 찾기 위해 Supertest 단위 테스트시에는 Jest를 사용하였는데, 통합 테스트에는 Supertest 모듈을 사용해서 진행할 수 있다. Supertest는 ExpressJ..

Dev/SW Engineering 2021.02.26

[TDD] node-mocks-http 모듈, Jest의 beforeEach 사용

[TDD] TDD 시작하기 (Unit Test, Jest)의 와 에서 몽구스 모델을 이용한 Products 데이터베이스 테이블에 product 데이터를 저장(create)할 때 단계적으로 유닛테스트를 진행하면서 구현해보았다. 그래서, 구현하고자 했던 것은 product 데이터 생성을 위한 함수 작성 createProduct 함수를 호출할 때 Product Model의 Create 메소드가 호출 이었고, 이에 대한 유닛 테스트 코드는 // test/unit/product.test.js const productController = require('../../controller/products'); const productModel = require('../../models/Product'); //Mock함..

Dev/SW Engineering 2021.02.24

[TDD] TDD 시작하기 (Unit Test, Jest)

Unit Test 유닛 테스트란 프로그래밍 후 소스 코드의 프로그램의 기본 단위인 모듈이 의도대로 정확히 작동하는지 검증하는 절차이다. 즉, 소스 코드의 개별 단위를 테스트하여 사용할 준비가 되었는지 확인하는 테스트 방법이다. 1) 유닛 테스트를 하는 이유 프로그램이 커서 메모리가 많이 들고 다른 리소스(데이터베이스 등)이 막 필요한 경우 로컬 환경에서 코드를 실행시켜보기도 어렵고, 그걸 매번 수동으로 QA해보기도 어렵다. 그래서 유닛 테스트를 만들어서 빠르게 자신의 코드가 정상적으로 작동 하는지 확인 하는 것이 좋다. 종속성이 있는 다른 클래스들에서 버그가 나는 것을 방지하기 위해서이다. 예를 들어, A Class에서 버그가 나는데, 그것이 A class 내의 Common class 에서 발생하는 에러..

Dev/SW Engineering 2021.02.22

[Docker] Docker Compose

Docker Compose란 다중 컨테이너 도커 애플리케이션을 정의하고 실행하기 위한 도구 Docker Compose를 사용해서 이러한 구조의 애플리케이션을 정의하고 실행해보고자 한다. 1. Redis 1) Redis(REmote Dictionary Server)는 메모리 기반의 키-값 구조 데이터 관리 시스템이며, 모든 데이터를 메모리에 저장하고 빠르게 조회할 수 있는 비관계형 데이터베이스(NoSql)이다. 2) Redis를 쓰는 이유는 - 데이터를 메모리에 저장해주는 특성상 Mysql과 같은 데이터베이스에 저장하는 것 보다 데이터를 불러 올 때 훨씬 빠르게 처리 할 수가 있다. - 메모리에 저장하지만 영속적으로 보관이 가능하며 서버를 재부팅해도 데이터를 유지 할 수 있다는 장점이 있다. 2. Node..

Dev/DevOps, Infra 2021.01.28