주요글: 도커 시작하기
반응형

지난 이야기:

svn 프로그램을 이용해서 SvnClient를 구현하기로 결정했다. 그리고, 이런 저런 코드를 구현하고 있었다. 그러던 중 SvnKit이라는 자바 모듈을 찾게 되었고, 이 모듈을 이용해서 SvnKit을 실험해 보기로 했다. 실험 결과 SvnKit을 사용하면 로컬에 파일을 따로 보관할 필요 없이 곧 바로 원격 리포지토리에 변경 내역을 커밋할 수 있음을 알게 되었다.

  • 어린개발자1: 팀장님, SvnKit을 실험해 봤는데요, 원격 리포지토리에 바로 추가/수정/커밋이 되는데요.
  • 나: 그래? 아, 그럼 LocalCodeUpdater는 필요 없군!
SvnKit 사용에 따른 설계 변경 (LocalCodeUpdater의 제거)

LocalCodeUpdater가 필요 없어졌다. 그래서 기존의 테스트 코드를 아래와 같이 변경했다.


public class BackupToolTest {

    private BackupTool tool;

    private DbCodeFinder mockDbCodeFinder;

    private LocalCodeUpdater mockLocalCodeUpdater;

    private SvnClient mockSvnClient;

    private List<DbCode> dbCodeList;


    @Before

    public void setUp() {

        tool = new BackupTool();

        mockDbCodeFinder = mock(DbCodeFinder.class);

        mockLocalCodeUpdater = mock(LocalCodeUpdater.class);

        mockSvnClient = mock(MockSvnClient.class);


        dbCodeList = createDbCodeList();

        when(dbCodeFinder.findUpdatedDbCodeAfter(any(Date.class)).thenReturn(dbCodeList);


        tool.setDbCodeFinder(mockDbCodeFinder);
        tool.setLocalCodeUpdater(mockLocalCodeUpdater);
        tool.setSvnClient(mockSvnClient);

    }


    @Test

    public void runBackup() {

        tool.backup();


        verify(mockDbCodeFinder).findUpdatedDbCodeAfter(any(Date.class));

        verify(mockLocalCodeUpdater).update(dbCodeList);

        verify(mockSvnClient).commit(dbCodeList);

    }


LocalCodeUpdater가 필요 없어지면서, SvnClient의 commit() 메서드에 바로 DbCode 목록을 전달하도록 테스트 코드를 수정했다. 컴파일 에러를 잡아주기 위해 아래와 같이 SvnClient를 수정해주고,


public interface SvnClient {

    public void commit(List<DbCode> dbCodeList);

}


이 후, 테스트를 통과시키면서 BackupTool에서 LocalCodeUpdater가 사용되는 부분을 제거하였다.


public class BackupTool {

    private DbCodeFinder dbCodeFiner;

    private LocalCodeUpdater localCodeUpdater;

    private SvnClient svnClient;


    public void backup() {

        List<DbCode> dbCodeList = 

                dbCodeFinder.findUpdatedDbCodeAfter(getPreviousUpdatedTime());

        localCodeUpdater.update(dbCodeList);

        svnClient.commit(dbCodeList);

    }


    private Date getPreviousUpdatedTime() {

        // 어제 날짜 6시 값 리턴

        return ...;

    }


    public void setDbCodeFinder(DbCodeFinder dbCodeFinder) {

        this.dbCodeFinder = dbCodeFinder;

    }

    public void setLocalCodeUpdater(LocalCodeUpdater localCodeUpdater) {

        this.localCodeUpdater = localCodeUpdater;

    }

    public void setSvnClient(SvnClient svnClient) {

        this.svnClient = svnClient;

    }

}


이후, LocalCodeUpdater 인터페이스를 제거하였다.


이후 작업은 SvnKit을 이용한 SvnClient의 구현을 진행했다.

  • 나: 이제 SvnKit을 이용해서 SvnClient 구현 클래스를 만들도록,
  • 어린개발자1: 네!
[다음회에 계속.....]


+ Recent posts