일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- design-pattern
- 파이썬
- Collections
- tcp
- DesignPattern
- Network
- JDBC
- 큐
- Python
- Java
- 백준
- exception
- Eclipse
- javscript
- 디자인패턴
- Pattern
- Rails
- 로버트마틴
- JavaScript
- 자바
- 스택
- solid
- 겨울카카오인턴
- Spring
- 프로그래머스
- Collection
- lambda calculus
- 함수형 프로그래밍
- functional programming
- 람다 칼큘러스
Archives
- Today
- Total
개발자 노트
프로젝트를 진행하며 알게 된 것들. 본문
FtpSyn하며 알게된 것들
1.폴더삭제는 recursive삭제해야 함.
- 디렉토리는 파일을 담는 그릇 정도. 파일시스템.!
- 디렉토리 삭제는 -> 디렉토리 내 파일들을 삭제한다는 것. 그 파일 내에는 또 디렉토리가 있으므로 디렉토리 탐색하며 삭제.
- 말이 안되지만 디렉토리만 삭제 한다면?
- 파일에 접근할 수 없다.
- 파일이 삭제 된다해도 파일 시스템상 삭제된 파일이 기록됨.
- 이건 운영체제상 삭제관리가 아닌 것.
2.interface 사용 이유 -> 다형성으로 의존성 약화
- 파일 내용의 수정여부를 판단하기 위해 sha-1을 이용했다.
- 그런데 나중에 다른 해쉬함수를 이용할 수도 있다. sha-1이 아주 적은 확률로 충돌할수있다나...
- 그래서 sha-256으로 할 수 있는거 아니야?
- ->그럼 hashFunction이라는 interface를 생성해서 그 기능을 sha-1,sha-256이 구현하도록 해. 그리고 그것을 이용하는 클래스는 hashFunction Type으로 sha-1이나 sha-256의 객체를 받는다. 이러면 확장성 해결!
3.Spring에서 DTO를 이용하는 이유
- ftp syn에서 path, fileName, hash값을 주고 받아야 함.
- 클래스의 편의에 맞게 어디선 path fileName hash를 각각 보내주고, 어떤 곳에선 json으로 주고 받기로 했다.
- 어떤 클래스가 어떤 자료형을 받는지, 출력하는지 매번 확인해야 함. -> 복잡해진다.
- 따라서 JSON으로 통일하기로 했다.
- DTO도 이런 면과 통하는 것 같다. rest-api에서 보통 사용하는 JSON으로 안하는 이유는 아마 의존성 문제일 것 같다. 자바의 기본 기능으로도 해결할 수 있는데 굳이 내부적으로 JSON을 이용할 필요는 없는 것 같다.
4.File 객체를 파일명만 입력하여 생성하면 workspace내 파일명이 등록된다.
- 현재 작업 디렉토리를 변경하더라도 File을 이름으로만 읽을 땐 프로젝트의 기본 workspace가 기준이 된다.
5.FtpClient changeDirectory
- 자바에서는 역슬래쉬(\)2개로 디렉토리 경로 설정 가능하나, FtpClient는 안된다. 그런데 컴파일에러, 런타임에러는 발생하지 않아서 뭐가 틀렸는지 확인하기 어렵게 한다. ㅜ
- ftpClient는 슬래쉬(/)만 지원해준다.
6.초기 데이터 입력 필요성(디렉토리 설정)
- 동기화할 directory, server, port번호 등은 바뀌므로 properties에 저장해두었다.
- 그런데 다른 사람도 이용할 것을 생각하면 접근하여 수정하도록 해줘야 한다.
- 따라서 처음 실행했을 때 입력을 하도록 또는 옵션을 주어 입력할 수 있도록 한다.
- 이래서 UI따로 두어서설정해야 하나보다.
7.Test 방법에 대한 공부 필요성
-
edwith에서 풀스택 부스트코스를 듣는데 프론트,백엔드 가르치시는 강사분들이 모두 중간중간 Test해주는 습관을 가지고 계셨다.
-
메인 클래스를 선언하여 테스트해보는식으로 했는데... 다음과 같은 문제가 있었다.
-
패키지 내에 메인클래스를 선언하다보니 jar파일을 만들 때 이것들이 포함된다.
-
클래스 또는 메소드 단위가 아닌, 메소드 내에서 에러가 발생하는지 확인할 땐 실행 중 사이에 테스트 내용을 작성해야 하므로 테스트 확인한 후에 지워주고, 나중에 코드를 수정후 테스트할 때 다시 작성해주고.... 번거로웠다.
-
8.컨테이너 사용하는 이유
- Spring으로 배울 땐 그럴 수 있지 정도였는데 해보니 체감된다.
- 예를 들어 File을 읽어오는 클래스가 FileReadManager라하자.
생성한 객체를 A란 객체에서 쓰일 수 있고 B란 객체에서도 쓰일 수 있다.
그런데 싱글 쓰레드로 돌리거나 멀티 쓰레드로 돌린다하더라도 그 이상의 객체는 조작할 수 없다.
다르게 말하자면 A에서 fileReadManager를 사용다하고 나면 B에 이를 전달해주면 된다.
굳이 B에서 사용하겠다고 fileReadManager 객체를 생성할 필요가 없다. - 그런데 누가? B객체에게 전달해줄것인가? 제 3자가 해줘야만 한다. (A가 다 사용하면 전달하는 방식으로 코드 구성하기엔 복잡성이 증가할 것이다.)
- 그것이 바로 컨테이너! 객체를 관리해주는 클래스다.(객체를 담아두고 있다는 의미에서 container인것같다.)
- 이걸로 얼마나 편할지 실감되지 않나.. 단순히 parameter로 전달받음으로써 클래스 이름에 얽매이지 않는다.(객체 생성시 new 클래스이름 객체이름) 메모리관리도 용이하다.
반응형
'토이프로젝트 > 클라이언트-서버 폴더 동기화' 카테고리의 다른 글
배포시 문제 (0) | 2020.04.30 |
---|---|
ver 1.0문제 (0) | 2020.04.29 |
mavenProjectBuild문제 (0) | 2020.04.29 |
UML (0) | 2020.04.29 |
프로젝트 개요 (0) | 2020.04.29 |
Comments