19 Jul 2017
|
클린코드
TDD
클린코드 9장 단위 테스트
TDD 법칙
- 실패하는 단위 테스트를 작성할 때까지는 실제 코드를 작성하지 않는다.
- 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다.
- 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다.
깨끗한 테스트 코드를 유지해야 한다. 테스트 코드도 지속적으로 관리되어야 하기 때문이다.
코드에 유연성, 유지보수성, 재사용성을 제공하는 버팀목이 단위 테스트이다.
개념당 assert문 수를 최소로 줄여라 .
테스트 함수 하나는 개념 하나만 테스트한다.
FIRST
- 빠르게(Fast) : 테스트는 빨라야 한다. 테스트가 느리다면 자주 테스트를 할수 없게 되고 조기에 문제점을 찾아내 고치지 못하게 된다.
- 독립적(Independent) : 각 테스트는 서로 의존하면 안된다.
- 반복가능하게(Repeatable): 테스트는 어떤 환경에서도 반복가능해야 한다.( mock 이나 stub 사용)
- 자가검증(Self-validating) : 테스트는 부울(bool) 결과를 내 야 한다.
- 적시성(Timely): 단위 테스트는 테스트하려는 실행코드를 구현하기 직전에 구현한다.
26 Apr 2017
|
Design pattern
Dependency + Injection + Framework
1. Dependency ( Dependency relationship)
의존 관계의 발생
- supplier가 client의 필드
- supplier가 client의 method의 파라미터
- supplier가 client의 local 변수
- supplier로 메시지를 보냄
의존관계가 생기면 supplier에 변경이 발생하였을 때 client에 영향 받게 되므로 client의 재사용이 어려워 진다.
재사용 가능한(reusable) 객체지향 설계/개발
- client는 재사용이 어렵다.
- client는 component/서비스가 될수 없다
- component란 이를 만든 개발자의 영향이 미치지 않는 곳에서도 아무 변경없이 필요에 따라 확장해서 사용될 수 있는 소프트웨어 덩이다.
재사용
- 재사용이 가능하게 되면 생산성이 향상된다.
- 재사용 가능한 객체 지향 소프트웨어를 위한 구성이 디자인 패턴이다
Design patten
“ Elements of Reusable Object - Oriented software -Gof- ”
- Object pattern 은 런타임 시 바뀔 수 있는 (상속이나, 관계보다) 더 동적인 오브젝트 (의존) 관계를 다룬다.
- Design pattern의 분류 방법 중 class pattern과 object pattern으로 구분 할 수 있다.
- Design pattern에서의 dependency : 컴파일 타임이 아니라 런타임 시 결정/구성되는 오브젝트 의존관계를 말한다.
- 이를 위해서
- 구현 대신 인터페이스 사용
- 오브젝트 합성(composition) 사용
13 Mar 2017
|
도커
docker
맥
Docker
docker machine 생성(터미널 접속)
- docker-machine
- docker-machine create —driver virtualbox 머신이름 : docker머신 생성
- docker-machine start 머신이름 : docker데몬이 연결이 안될 때 머신 이름으로 시작한다
- docker-machine ls : 현재 생성된 docker 머신 목록
- docker-machine ip : docker 머신의 ip정보
- docker-machine env docker이름 : docker 머신의 환경 정보
- docker images : 현재 로컬에 생성된 이미지 목록(docker 데몬이 연결이 되어 있지 않으면 에러가 발생한다)
- docker-machine env docker이름 실행했을 때의 마지막 줄 실행
eval $(docker-machine env docker이름)
docker 명령어
- docker search 이미지 검색
- docker images : 현재 로컬에 있는 이미지 목록
- docker rm run된이름 : run되고 있는 컨테이너 삭제
- docker run -dit -name 컨테이너이름 이미지이름
- docker start 컨테이너 이름 : 컨테이너 시작
- docker stop 컨테이너 이름 : 컨테이너 중지
- docker restart 컨테이너 이름 : 컨테이너 재시작
- docker attach 컨테이너 이름 : 시작된 컨테이너에 접속
- 컨테이너 접속 시 bash 상태에서 exit나 ctrl+D를 하게되면 컨테이너 정지
- ctrl+P, ctrl+Q를 차례대로 누르면 컨테이너가 정지되지 않고 빠져나옴
- docker ps -a : 컨테이너 목록 확인
- docker stop 컨테이너이름 : 컨테이너 정지
- docker exec -it 컨테이너이름 /bin/bash : 외부에서 컨테이너 안으로 명령어 실행하기
- docker inspect 컨테이너이름 : 컨테이너 상세정보
docker에 ubuntu 설치
- docker pull ubuntu : ubuntu 이미지 다운 받기
- docker run -name 이름 ubuntu : 이미지로 컨테이너 생성하기
docker에 한글팩 ubuntu 설치
- docker 이미지 생성 Dockerfile 파일내용
FROM ubuntu:latest
RUN apt-get update
RUN apt-get install -y language-pack-ko
RUN locale-gen ko_KR.UTF-8
ENV LANG ko_KR.UTF-8
ENV LANGUAGE ko_KR.UTF-8
ENV LC_ALL ko_KR.UTF-8
CMD /bin/bash
-> kor_ubuntu 이미지로 docker ko_ubuntu 이름으로 docker 실행하고 bash쉘로 로그인 한다
- docker exec -it docker실행이름
Docker 이미지 만들기
- docker hub(web) 나 docker search 명령어를 통해 image를 검색
- Dockerfile을 통해 이미지를 만들수 있다
- 아래 예제 같이 설치해야 하는 작업들을 작성한다
FROM podbox/java8
RUN apt-get update
RUN apt-get install -y language-pack-ko
# set locale ko_KR
RUN locale-gen ko_KR.UTF-8
ENV LANG ko_KR.UTF-8
ENV LANGUAGE ko_KR.UTF-8
ENV LC_ALL ko_KR.UTF-8
RUN apt-get install -y \
vim \
git
CMD /bin/bash
- docker ps -a : 현재 떠있는 컨테이너 목록
- docker stop $(docker ps -a -q) : 실행 중인 모든 컨테이너 중지
- locale
- docker start 이미지 이름
- docker build -t ko_java8 .
docker에 서비스 배포하기
공통
git
- git 과 java 가 설치된 컨테이너를 실행한다
- git clone url : 최초 git에서 다운 받을 때
- git pull url : 변경된 사항 받을 때
- 클론한 directory로 이동
- git branch -a 실행
- git에서 배포하고자 하는 branch로 변경
git checkout -b 로컬branch이름 origin/원격branch이름
git branch -a
git branch -vv
빌드
- maven 일 때 : mvnw clean package
- gradle 일 때 : gradlew build
A. 실행 jar 배포
- 해당 빌드한 jar파일 실행 : java -jar 실행jar파일
B. war로 배포