이뮤터블 인프라스트럭쳐

12년간 기업시스템을 직접 구축하여 이용한다고 생각했을때 12년동안 일어날 수 있는 일들 새로운 고효율 하드웨어의 등장 OS의 메이저 업그레이드 3~5회 DB나 앱서버도 메이저 업그레이드 발생 가능 보안 패치도 필요 개발방법론 및 패러다임의 변화가 있을 수 있음 이렇듯 비지니스의 생명주기에 의해 좌우된다기 보다는 SW/HW에 의해 좌우됨 이뮤터블인프라스트럭쳐란? 구축된 시스템에 변화가 필요하다면 폐기하고 다시 구축하라 '변경' 필요시에 일부를 변경하기 보다 전체를 교체하여 사용하자는 개념 변경 발생시 서버를 완전히 새로 구성하여 배포하고 기존 서버는 폐기함 반면 기존(뮤터블)에는 이미 있던 특정서버에서 설정, 소스코드 따위를 변경을 가하는 방식이었음 장점: 관리·확장·테스트 편의성, 이식성 장점: IT 복잡도 감소, 보안 향상, 쉬운 문제해결! Immutable infrastructure benefits include lower IT complexity and failures, improved security and easier troubleshooting than on mutable infrastructure.  어플리케이션layer 이뮤터블로 구현하여 다운타임을 최소화 하기 위해서는 세션고 같은 state정보는 서버에 두어야 한다 (Dynamo DB) 서버 layer 이뮤터블이 될려면 Shared Nothing 상태가 되어야함. 하지만 DB복사에는 오랜시간이 걸리고 패치빈도도 낮을것이다. 그래서 데이터계층은 이뮤터블이 적절하지 않음

Jenkins vs TravisCI

https://stackoverflow.com/questions/32422264/jenkins-vs-travis-ci-which-one-would-you-use-for-a-open-source-project Jenkins: 완전 무료, 호스팅 필요 Travis CI: 공개저장소는 무료, 비공개저장소는 유료, 아래와 같은  .travis.yml 파일만 작성하면 된다. script: - sudo ant clean https://docs.travis-ci.com/user/reference/precise/

Gradle

Groovy언어 사용 looks like natural language  java와 통합 가능 Closure: 코드블록 혹은 메서드 포인터처럼 사용 delegate = invoker this = this class owner = outer area DSL? Domain Specific Language 도메인이란 안드로이드나 자바 등 그래들 래퍼 gradlew 는 맥이나 리눅스용 gradlew.bat는 윈도우용 래퍼를 사용하는 이유? 모든사람이 같은 버전의 그래들을 사용하는것을 보장 그래들 명령어 모음 gradle dependencies 디펜던시로 추가된 라이브러리를 보여줌 gradle --daemon 해당 프로젝트(폴더)의 그래들대몬을 미리 실행시켜서 빌드속도를 높임 gradle --stop 데몬 끔 gradle -q taskName 해당 Task를 실행시킴 gradle tasks 실행가능한 gradle 목록을 보여줌 Gradle -빌드툴 -라이브러리 쉽게 추가(dependency 추가) -컴파일 -패키징 다른 빌드툴 종류 -APACHE ANT -IVY -Maven 빌드속도비교 그래들이 훨씬 빠름 리포지토리도 다음과같이 선택할 수 있음 repositories { mavenCentral() } repositories { maven ("https://repository-achartengine.forge.cloudbees.com/snapshot/") jcenter { url "http://jcenter.bintray.com/" } } 시스템 프로퍼티 불러오는방법 def homePath = System.properties['user.home'] dependsOn 거는 방법(cleanO...

싱글톤

요즘 많이 쓰는 싱글톤 for Java 더블락체크(보통), 빌퍼지(good, mostly used), enum(better for java) 더블락체크 lazy initialization을 하는데 함수에 synchronized를 쓰는게아니라 함수 안에서 null체크를 한번 하고나서 null인 경우에만 synchronized를 쓰게함 null이 아닐때눈 synchronized를 호출하지 않아 성능 향상 빌퍼지(Bill puge) A.K.A. Initialization-on-demand holder Class안에 LazyHolder static class를 선언하고 static final 인스턴스를 생성 getInstance시에 위의 static class안에 있는 인스턴스를 리턴 장점 Class안에 static 변수가 없기때문에 lazy initialization이 구현됨 쓰레드세이프한 이유:  And since the initialization phase writes the static variable  INSTANCE  in a serial operation, all subsequent concurrent invocations of the  getInstance  will return the same correctly initialized  INSTANCE  without incurring any additional synchronization overhead. final이기 때문에! public class BillPughSingleton { private BillPughSingleton (){} private static class SingletonHelper { private static final BillPughSingleton INSTANCE = new BillPughSingl...

Appium python 테크닉 모음

명시적 wait 과 암묵적 wait http://selenium-python.readthedocs.io/waits.html?highlight=webdriverwait from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver . Firefox () driver . get ( "http://somedomain/url_that_delays_loading" ) try : element = WebDriverWait ( driver , 10 ) . until ( EC . presence_of_element_located (( By . ID , "myDynamicElement" )) ) finally : driver . quit () from selenium.webdriver.support import expected_conditions as EC wait = WebDriverWait ( driver , 10 ) element = wait . until ( EC . element_to_be_clickable (( By . ID , 'someid' ))) from selenium import webdriver driver = webdriver . Firefox () driver . implicitly_wait ( 10 ) # seconds driver . get ( "http://somedomain/url_that_...

XPath와 Appium과 Python

이미지
XPath란? XML파일에서 elements와 attributes를 찾기위한 path XML표현은 익숙한 아래 그림으로 대변된다 XPath언어는 다음 언어에사 사용되어지고 있다. JavaScript, Java, XML Schema, PHP, Python, C and C++, and lots of other languages XPath3.0이 2014년도부터 W3C추천사항으로 선정됨 XPath에서 Node란? element, attribute, text, namespace, processing-instruction, comment and document nodes XML문서는 node들의 tree형태 최상위 element는 root element라고 한다 연습문제: 다음 코드에서 element와 attribute를 찾으시오 < ?xml  version ="1.0"  encoding ="UTF-8" ? > < bookstore >    < book >      < title  lang ="en" > Harry Potter < /title >      < author > J K. Rowling < /author >      < year > 2005 < /year >      < price > 29.99 < /price >    < /book > < /bookstore > 정답:  element: bookstore (root), book 등등 attribute: lang="en" Atomic value란? J K. Rowling이나 ...

SW 테스트 자동화 설비하기 A to Z

 SW 테스트 자동화 가능한 항목들 반복적인 것 지루하거나 수동테스트가 힘든 것 시간이 많이 걸리는 것 자동화 하면 안되는 항목들 요구사항이 자주 바뀌는 것 새롭게 디자인된 기능이라서 한번도 테스트 안된 것 자동화 셋업& 프로세스 툴 선정 Appium(블랙박스) Selenium(블랙박스) Espresso(안드로이드-화이트박스) 기타 등등 많음.. Scope 선정 어떤 부분을 테스트할것인가에 대한 정의를 내려야함 프로젝트 시작단계에서 반드시 수행해야함 계획, 디자인, 개발 테스트에 대한 내용을 문서화 하고 테스트코드 작성 시작! 스크립트 언어도 Naming Convention, 코딩가이드 등의 규칙을 정해야함 베이스라인으로 관리해야할 항목들 요구사항 테스트 케이스 자동화 코드 코드 테스트결과 테스트 실행 유지보수 테스트 케이스 & 자동화 코드를 업데이트! 평가 수동테스트와 비교하는게 아님 아래항목들을 포함하는 Measure metrics 작성해야함  percent of defects found 생산성 향상 수치(productivity improvement) 자동화 프레임워크? 자동화 가이드라인을 모아 놓은 것 테스트를 일관되게 해줌 코드 재사용비용을 줄여줌 예를들어 http://safsdev.sourceforge.net/FRAMESDataDrivenTestAutomationFrameworks.htm TODO DDAF 데이터 기반 KDAF 키워드 기반 MAF 모듈러 HAF 하이브리드