화려하게까진 못하더라도 간단하게 입력란이라도 몇개넣은 화면을 만들어서 테스트를 진행하면 좋겠다고 생각했다.

시간 쏟지 말고 호다닥 만드는 것을 계획했지만 그것조차조 쉽지 않았다. html문법을 거의 몰라서 그런가 컴포넌트들을 정렬하는 것 조차 내맘대로 되지 않았다.
위치도 내맘대로 가지 않았다. 오른쪽으로 가라고 했지만 꿈쩍도 하지 않는다.😡

빨리 끝내려고 했는데 벌써 시간는 저녘을 향해가고 있었다.
배우는 과정이니만큼 이 방법만큼은 안쓰려했지만 더이상 지체할 수 없었다.

3초만에 뚝딱 화면이 완성되었다. 몇개 빠진것들이있지만 대강 옆에 붙여주고 로그인 후에 메인 화면을 제작했다.
[예시]

만들고 보니 밑에 일정 검색 부분은 어차피 겹치니까 로그인 부분을 로그인 하기 전에는 입력창을 후에는 유저 정보를 띄우도록 윗부분만 삭 교체하고 싶었다. 찾아보니 <iframe>태그를 사용하면 된다고 한다. 붙여봤다.

되긴하는데 요상한 테두리와 스크롤바가 생겼다. 테두리는 어찌어찌 없앴으나 크기가 조절되지 않는다.
<script>
const iframe = document.getElementById('myIframe');
// iframe이 로드된 후 실행
iframe.onload = function() {
// iframe 내부 문서의 body 높이 가져오기
const iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
const iframeBody = iframeDocument.body;
const iframeHeight = iframeBody.scrollHeight;
// iframe 높이 설정
iframe.style.height = iframeHeight + 'px';
};
</script>
gpt한테 물어보자 다음과 같은 코드를 추천해줬다. 붙여봤지만 작동하지 않는다. 그외 폭풍 구글링으로 가로길이는 늘렸으나 세로길이가 움직이질 않는다.
Thymeleaf 적용 예시 링크
iframe라는 애는 빡쳐서 못쓰겠고 다른걸 찾아보니 Spring에서 제공하는 Thymeleaf View를 사용하면 손쉽게 교체가 가능하다고 한다. iframe보다 좋아보였으나 이미 퇴실 시간이 가까워졌고 새로운걸 익히는게 굉장히 느린 편이라 공부하고 적용하기엔 시간이 부족하다고 생각했다.

그리고 이번 과제에서는 화면보다 Controller, Service, Repository를 사용하면서 각각의 역할과 MVC패턴을 이해하는 것과 JDBC를 활용한 CRUD구현이 더 중요하다고 생각했다.
그래서 일단 미루고 백엔드쪽을 먼저 개발한 뒤 시간이 남으면 다시 화면을 붙여보기로 하고 과제를 진행했다. 그러나 처음해보는 Controller, Service, Repository흐름이 익숙치 않아 시간은 남지 않았다.😢
DTO에 대하여과제란에 DTO와 ENTITY를 구분짓는게 다음과 같은 이유로 좋다고 한다.
DTO를 사용함으로써Client로부터Entity의 정보를 숨길 수 있으며 내부DB 구조를 변경하는 경우 코드를 유지하고 관리(유지보수)하는데 유리합니다.DTO와Entity클래스의 책임을 확실하게 분리할 수 있습니다.
DTO와Entity클래스는 서로 다른 책임을 가지고 있습니다.
Entity클래스는DB의Entity를 나타내며 일반적으로ORM목적으로 사용됩니다.- 사용자의 정보를 반환하는
API가 있다고 가정했을 때 사용자의 주민번호와 같은 민감한 정보는 마스킹 하거나 제외하고 반환해야한다면?
- 이때,
Member Entity클래스를 그대로Controller에서 반환하게 된다면 해당 반환조건들을 충족하지 못하게됩니다.Entity To DTO, 즉Entity의 정보를API반환 조건에 맞는DTO객체에 담아 반환한다면 이를 해결할 수 있습니다.

그리하여 수정하기로 했다. 기존 Spring강의를 들으면서 짰던 구조는 위처럼 Repository에서 객체간 변환을 수행했는데

Controller에서 변환해서 Respository는 Entity만 가지고 작업을 수행하도록 변경하였다.
Entity는 테이블 컬럼과 매핑되도록 하고 부가적인 정보는 RequestDto와 ResponseDto에 담도록 컨셉을 잡았다. 사실 이 구조가 맞는지는 잘 모르겠지만..
순조롭게 진행하다가 검색조건을 넣는 부분에서 막혔다. 날짜 검색과 페이징 처리때문이었다.
검색 조건을 Entity에 담아 가서 Repository에서 Where절을 만들도록 했는데 날짜는 범위검색을 사용하고 페이징 관련해서도 페이지와 사이즈를 담을 필드가 더 필요했다.
3가지 방법 정도가 떠올랐다.
Entity에 검색 조건과 관련된 필드를 더 추가한다.RequestDto를search함수에만Repository까지 끌고간다.Entity에 없는 것들은 매개변수로 넘긴다.
1번은 Entity가 더이상 테이블 컬럼과 정확하게 매핑되지 않고
2번은 Search함수에만 넘기면 일관성이 깨지고
3번은 매개변수를 많이 넘기는걸 선호하지 않아서 우선순위를 낮게 두었다..
고민하다가 그래도 update나 delete에서도 날짜 조건같은건 쓰이지 않을까..?? 싶어서 1번을 택했다. 더 나은 방법이 있을 것 같은데 떠오르는게 없다.
이번엔 왠지 트러블 슈팅인데 트러블만 남은채 끝난 것 같다(?)..💦
Thymeleaf는 주말에라도 시간이 남으면 공부 해봐야겠다..