23-06-12 TIL

more·2023년 6월 12일
0

문제

  • Mysql 설치 도중 initializing database에서 오류 발생

  • Spring 입문 강의 도중 메모장을 만드는 실습을 해보고 있었는데 Memo라는 Class를 만들었음에도 불구하고 MemoResponseDto와 MemoRequestDto라는 Class를 만들어 사용하는 것에 대한 의문이 들었다.

시도

  • 설치 프로그램에서 오류 log를 볼 수 있게 해두어서 보니 '뷁샋밎'과 같은 디코딩이 잘 못 된 거 같은 오류를 확인
    -> 경로 설정 과정에서 한글이 포함되어 있어서 그런 것으로 추정
    -> 살펴보니 내 데스크탑의 이름이 영어가 아니라 한글로 '내데스크탑'으로 되어 있었다.

  • 왜 굳이 객체를 바로 사용하지 않고 DTO라는 것을 따로 만들어서 사용하는지 의문이 들어서 혹시 그냥 사용하면 무슨 문제가 있나 싶어 사용해보았으나, 현재 실습에서 그로 인해 파생되는 문제는 발견되지 않았다.
    -> 뭔가 다른 의도가 있을 것으로 생각됨

해결

  • 데스크탑의 이름을 한글에서 myDesktop으로 수정
    -> 해결했으나 다른 오류 발생
    -> 이번에는 경로와 관련된 오류가 아닌 거 같음
    -> 로그를 확인해보니 Program Data라는 곳에 이미 해당 프로그램이 있다고 적혀있음
    -> 숨겨진 폴더 보기 설정으로 해서 Program Data에 들어가 Mysql 폴더 전체를 지워주고 다시 설치
    -> 해결

  • 계속 고민을 해봤는데 결과상으로는 이상이 없었으므로 기능상의 차이점은 혼자 알 수가 없었고, 추측하건데 아마 구현하는 부분 (보여주는 부분 & 기능 부분)과 데이터 부분을 철저하게 나눠주기 위해서 그런 거 같다.
    -> 확실하지 않으므로 구글링을 해보았다. 어느정도 고민한 부분들이 이유에 포함돼 있긴 했다.
    1. 캡슐화
      • 객체를 그대로 사용하게 되면 개발자의 의도와 다르게 변경될 수 있다. 데이터 변질이 일어나게 되면 보안상 심각한 문제를 일으킬 수 있다.
      • 클라이언트와 통신하는 도중에 요구사항에 따라 특정 값이 추가, 삭제, 혹은 변경 될 수 있는데 이를 위해서 객체 클래스와 분리하여 사용, 관리해야한다.
    2. 모델링을 지키기 위해서
      • Entity 클래스에 필드 혹은 메서드 등이 계속 추가 된다면 설계한 것을 망가뜨릴 수 있다.
      • DTO를 사용하여 모델링한 부분을 지키고, view와 db를 분리하여 표현해야한다.

알게 된 점

  • 여러 프로그램 중에서 한글로 경로가 되어있으면 되지 않는 것들이 아직 많이 존재하는 것으로 보임
    -> 프로젝트를 할 때에도 한글로 되어있으면 제대로 출력되지 않는 경우가 있어서 난감했었는데 프로그램 설치와 경로 설정에서도 오류가 날 줄은 몰랐다.
    -> 앞으로는 그냥 경로 상의 모든 디렉토리나 파일들 이름을 영어로 해두어야 겠다.

  • DTO를 사용할 경우에 Request와 Response를 두개나 만들어서 사용해야한다는 점
    -> 아예 확실하게 하기 위해서 요청 받는 클래스와 요청하는 클래스를 나누어서 만드는 것으로 보인다.

  • DTO (Data Transfer Object)

    • 계층 간 데이터 전송을 위해 도메인 모델 대신 사용되는 객체

0개의 댓글