본문 바로가기

프로그래밍

(17)
MSA 테스트 자동화 테스트란? - 소프트웨어의 결함이 있는 부분을 찾아내는 과정 - 테스트에서 밝혀내야하는 결함이란 오류뿐 아니라 설계와 다르게 동작하는 것, 의도되지 않은대로 동작하는 것을 포함 테스트 종류 - 유닛 테스트 : 단위 기능 테스트 - 서비스 테스트 : 각 모듈(MSA로 분리된 각 Service)의 외부로 공개한 API를 대상으로 한 테스트 - 통합 테스트 : MSA로 분리된 전체 모듈을 연동하여 테스트 - 시스템 테스트 : 실 서비스에 준하는 상황으로 테스트 테스트 자동화를 해야 하는 이유 - 운영중인 서비스에 추가, 변경 사항이 생길 경우 사이드 이펙트를 모두 파악하기 어려움 - 코드 리팩토링, 라이브러리 업그레이드 등을 진행한 뒤에도 기존 기능에 영향이 없는지 확인이 필요함 - 코드 변경이 생기는 경우에..
OWASP Top 10 2020 OWASP(The Open Web Application Security Project) - 오픈 소스 웹 애플리케이션 보안 프로젝트 - 웹 애플리케이션 취약점 중에서 빈도가 높고 보안상 영향을 크게 줄 수 있는 것들 10가지를 선정하여 3년 주기로 발표 A1. Injection (인젝션) - SQL, OS, XXE(Xml eXternal Entity), LDAP 인젝션 취약점은 신뢰할 수 없는 데이터가 명령어나 쿼리문의 일부분으로써, 인터프리터로 보내질 때 발생 - 공격자의 악의적인 데이터는 예상하지 못하는 명령을 실행하거나 적절한 권한 없이 데이터에 접근하도록 인터프리터를 속일 수 있음대응방안 - 서버 측 입력 검증, 특수 문자 필터링 및 유효성 검사 - 화이트 리스트 조합 사용 A2. Broken A..
FQDN - Fully Qualified Domain Name 절대 도메인 네임, 전체 도메인 네임 정도로 할 수 있지만, IT 업계에서는 FQDN이라는 약자 하나로 통용된다. www.tistory.com을 예로 들어보면 www 가 호스트이고, tistory.com이 도메인FQDN - 호스트와 도메인을 함께 명시하여 전체 경로를 표기하는 것 - FQDN은 모호하지 않고, 유일해야 함PQDN(Partially Qualified Domain Name) - FQDN과 달리 전체 경로명이 아닌 하위 일부 경로를 모두 표기하는 것 쿠버네티스의 경우 다른 Pod를 찾을 시 - 동일 네임스페이스 안에서 찾을 때에는 PQDN을 사용할 수 있음 - 네임스페이스 외부에서 찾을 때에는 FQDN을 사용해야 함 [참조]https://onlywis.tistory.com/14https://w..
디미터 법칙 소프트웨어 개발 가이드라인 중 하나 최소 지식 원칙 - 한 모듈이 구현을 알아야하는 다른 모듈들을 적게 유지하자 - 결합도가 높으면 모듈을 재사용하기 힘들다 모듈들 사이의 결합도를 줄여 코드 품질을 높이는 것 규칙화 - 어떤 오브젝트(O)의 메서드(m)는 다음과 같은 오브젝트의 메서드만 호출해야 한다- O 자신의 메서드- m의 매개변수로 들어온 객체의 메서드- m 안에서 생성 된 객체- O의 컴포넌트 (A의 인스턴트 변수)- 전역 객체 예제class A { private B b; public setA(B b) { b = b; } public myMethod(OtherObject other) { // ... } /* 디미터의 법칙을 잘 따른 예 */ public okLawOfDemeter(Paramemte..
GRASP 패턴 객체지향 디자인 패턴 - General Responsibility Assignment Software Patterns기본 5가지 패턴들Creator - 객체의 생성은 생성되는 객체의 컨텍스트를 알고 있는 다른 객체가 있다면, 컨텍스트를 알고 있는 객체에 부여하자 - A 객체와 B 객체의 관계가 다음 중 하나라면 A의 생성을 B의 역할로 부여하자- B 객체가 A 객체를 포함하고 있다.- B 객체가 A 객체의 정보를 기록하고 있다.- A 객체가 B 객체의 일부이다.- B 객체가 A 객체를 긴밀하게 사용하고 있다.- B 객체가 A 객체의 생성에 필요한 정보를 가지고 있다. Information Expert - 역할을 수행할 수 있는 정보를 가지고 있는 객체에 역할을 부여하자 - 객체는 데이터와 처리로직이 함께..
TDD, BDD, DDD, RDD TDD (Test) - 테스트를 먼저 작성하고 해당 테스트 케이스를 통과하는 코드를 작성 - 그 후 상황에 맞게 리팩토링 과정을 거침 - 코드 생산성에 문제가 있고, 러닝커브가 크다. BDD (Behavior) - TDD에서 한발 더 나아가 테스트 케이스 자체가 요구사항이 되는 개발 방식 - TDD에서는 유닛 테스트로 작성 된 테스트 케이스에 대한 문서를 작성했지만, BDD는 이것을 결합 테스트와 시나리오 테스트까지 확장하여 각각에 해당하는 문서를 대체했다. DDD (Domain) - 도메인 그 자체와 도메인 로직에 초점을 맞춘다. - 일반적으로 사용하는 데이터 중심의 접근법을 탈피하여 순수한 도메인의 모델과 로직에 집중한다. RDD (Responsibility) - 책임을 찾고 책임을 수행한 적절한 객..
GraphQL REST vs GraphQLREST1. 하나의 resource당 하나의 endpoint를 가짐2. GET, POST, PUT, DELETE 사용3. 응답의 형태가 정해져 있어서 필요한 정보만 요청하기 힘듦 GraphQL1. 단일 endpoint를 권장 (요청 query문에 따라 응답이 바뀜)2. GET -> Query, POST, PUT, DELETE -> Mutation 사용3. 클라이언트에서 필요한 정보만 선택하여 요청 GraphQL의 장점1. REST API는 각 resource 종류별로 요청을 해야하므로 요청 횟수가 필요한 resource에 비례하지만 GraphQL은 원하는 정보를 한번의 Query에서 요청할 수 있음2. 필요한 정보만 선택하여 요청할 수 있어서 HTTP 응답의 사이즈를 줄일 수 ..
함수객체와 모나드 컨텍스트(컨테이너) - 컨텐츠를 담고 있는 무언가 함수 객체 - 고차함수인 map을 적용할 수 있는 컨텍스트 타입 모나드 - 값이 있을 수도 있고, 없을 수도 있는 함수 객체 - flatMap을 적용할 수 있음 [참조]https://oaksong.github.io/2018/01/22/monad/https://zeddios.tistory.com/449