$ sudo service docker start
Redirecting to /bin/systemctl start docker.service
Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.
String 상수로 정의한 경우 정해진 값 외에 값이 들어와도 정적 체크가 안된다. enum을 활용하면 정적 체크가 가능하다.
에러 로그엔 컨텍스트가 담겨야한다.
에러가 어떤 인풋에서 기타 다른 조건은 어떠했는지등을 남겨야 한다. 띡하고 에러만 남기면 어디서 부터 디버깅을 시작해야 할지 알 수 없다.
INFO 레벨 로그 또한 컨텍스트가 담겨야 한다.
컨텍스트 없는 로그는 반쪽자리다.
로그는 시간이 지나고 봐도 의미를 알 수 있어야 한다.
개발 할때 대충 간략하게 로그 메시지를 작성하게 되면 시간이 지나거나 다른 사람이 보면 이해할 수 없게 된다. 누가봐도 이 로그가 어떤걸 의미하고, 그래서 어떤 영향이 있는지 등을 알 수 있게 작성하자.
catch를 아무데서나 하지 말자
그 에러에 대한 처리 방향을 결정할 수 있는 위치에서 catch 해줘야 한다. 어떤 인터페이스가 throw 한다고 해서 무조건 그 자리에서 catch 해버리는 것은 의미 없다. 또한 에러를 먹어버리거나 임의값을 리턴한다든지 하는 경우 2차 사고를 낳고 디버깅을 어렵게 한다.
One package per module/feature, possibly with sub-packages. Put closely related things together in the same package. Avoid circular dependencies between packages.
피쳐/모듈 별로 패키지를 나눈다.
각 피쳐/모듈 패키지는 서브 패키지를 가질 수 있다.
각 패키지별 순환 참조가 생기지 않도록 한다.
이렇게 관리하면 연관된 클래스가 가까이 있어 유지보수가 쉬워지지 않을까 생각한다.
레이어별, 피쳐별 각각 장단점이 있겠지만, 프로젝트 구조가 커지면 피쳐별로 관리하고, 그 안에서 레이어를 나누는게 낮지 않을까하는 생각