220719 레벨테스트 TIL 2

샨티(shanti)·2022년 7월 19일
0

TIL

목록 보기
45/145
post-thumbnail

하루를 마무리 하기 전, 오늘 있었던 일들을 잔잔히 되짚어봅니다.
성공과 실패의 모든 요소에서 '배울 점'을 찾아내어 기록하고,
더 성장하는 내일의 나를 위해 'action plan'을 세웁니다.

어제의 마무리 결과물과 오늘의 결과물을 비교하는 것으로 TIL을 시작한다.

어제


어제의 모습이다.
어제는 이런 것들이 가능했다.

  1. 상단의 '100글자 북 리뷰' 메뉴를 클릭하면 글 리스트를 화면처럼 볼 수 있다.
  2. 해당 리스트 중에서 bold 처리된 글 제목을 누르면 글 상세내용을 팝업창으로 불 수 있다.
  3. 상세내용 팝업 창에서 비밀번호를 입력하면 글을 수정하거나 삭제할 수 있다.
  4. 하단 우측의 '리뷰 쓰기' 버튼을 누르면 패널전환이 일어나면서 글을 쓸 수 있는 폼이 보인다.
  5. 글을 쓰고난 뒤 별도의 화면전환은 일어나지 않으며 상단의 버튼을 한번 더 눌러주면 내가 쓴 글이 갱신되어 보인다.
  6. 프로그램을 종료하는 순간 내가 새롭게 쓴 글, 수정한 내용, 삭제한 내용이 csv파일에 반영되어 저장된다.
  7. 다시 프로그램을 실행하면 종료 직전의 상태 그대로 재현된다.

오늘

  1. 프레임 크기 등의 레이아웃을 조금 수정했다.
  2. 배경 이미지를 적용하고 불필요한 패널 배경들을 모두 투명 처리하여 배경이 좀 더 드러나도록 만들었다.
  3. 프로그램을 실행할 때 모든 컴포넌트가 뜨지 않는 현상, 즉 프로그램을 듀얼모니터로 왔다갔다 해야만 컴포넌트가 모두 구현되는 기이한(?) 현상의 원인을 우연찮게 찾아내어 수정하고 적용시켰다.
  4. 어제는 프로그램을 실행하는 순간에 메인화면이 별도로 뜨지 않았고 북리뷰 버튼을 눌러야지 기존에 저장되어 있던 글 리스트가 떴는데, 오늘은 프로그램을 실행하자 마자 글 목록이 메인에 뜰 수 있도록 했다.
  5. 배경에 이미지를 넣은 것처럼 글 목록 옆에도 내가 임의로 집어넣은 '책 icon' 그림이 함께 뜨도록 했다.
  6. 조회수를 추가했다. 글을 클릭할 때마다 count를 하나씩 더해주는 방식으로 만들었는데, 글을 클릭하자 마자 반영이 되지는 않아서 100글자 북 리뷰 버튼을 재클릭해야 조회수가 늘어난 것이 반영된다.
  7. 리뷰 검색하기 기능을 추가했다. JComboBox를 이용해 작성자, 제목, 내용 총 3가지의 영역에서 검색이 가능하도록 설정했고, 텍스트필드에 키워드를 입력하지 않았을 경우 '검색어를 입력하세요' 라는 팝업이 뜨도록 했다. 만약 매칭되는 내용이 있다면 위 사진처럼 검색 결과가 뜨고 그렇지 않다면 별도의 결과는 뜨지 않는다.
  8. 어제는 리뷰를 작성하고 완료 버튼을 누르는 순간에 화면이 갱신되지는 않았는데, 오늘은 리뷰작성 후 완료 버튼을 누르면 바로 화면이 갱신되면서 새로운 글이 포함된 리뷰 리스트가 뜨도록 만들었다.

무엇을, 어떻게, 왜 바꾸었나?

1. 프레임 크기와 레이아웃

지극히 개인적이고도 개인적인 이유인데. 사진에서도 볼 수 있지만 프레임 사이즈를 처음엔 300, 600 정도로 잡았었다. 가로는 짧게, 새로는 상대적으로 길게, 그리고 사이즈는 조막만하게.
근데 어제 밤에 문득 든 생각이... 이 작디 작은 프로젝트가 마치 나의 자신감이고 내 마음처럼 느껴져서 속상했다.

난 아-무것도 구현할 수 없다는 자신감 없음과, 마치 과제를 제대로 수행해내지 못할거란 표현인 것 마냥;;
작은 프레임 하나 만들어놓고 씨름하자니 갑자기 부아가 확 치밀어 오르는 것이었다.

그래서 밑도 끝도 없이 사이즈부터 늘렸다.
좀 더 크게, 뭐 그렇다고 드라마틱하게 커진 것도 아니고 그나마 쓸만한 배경화면 하나 밑에 깔아둘 것 찾고 그 사이즈에 맞춘 것이긴 하지만.
꾸역 꾸역 사이즈를 늘려놓으니 약간 양가감정이 밀려왔다.

'아씨... 괜한 짓 하는거 아닌가. 어차피 지금도 폭망인데 이렇게 늘려놓으면 더 티나잖아... ㅡㅡ'
'아니 그래도 뭘 좀 쓸만하게 늘려놔야 하는거 아니겠어? 니가 지금 계산기 하나 만들자고 프로젝트 하는건 아니잖아...'

그렇게 밤 늦도록 혼자만의 마음속 전쟁을 시작했고 결국 사이즈를 늘리는 것으로 합의를 본 결과가 저것이다.
뭐랄까... 가슴이 뻥- 뚫리는 시원함은 없지만 그래도 나은 선택이었다고 생각한다.

엊그제 TIL에도 작성했던 부분인데, 언젠가는 내가 숨어있던 박스 안에서 나의 힘으로, 스스로 걸어나와야만 한다.
그 박스를 벗어나지 않으면 영영 둥지 안에서 살기로 작정하는 병아리와 다를 바 없을 것이다.

프레임 크기.
별것도 아닌 것이지만 사실 나에게는 더 이상 이 자신감 없는 모습에 안주하지 않으리라는 용기의 발걸음이기도 했다.


2. 정-말 우연찮게 발견한 solution

때는 바야흐로 이월 전..(ㅋㅋㅋㅋ)
당시 레벨테스트를 할 때 아주 기이한 현상을 겪었고 실제로 어제 새벽까지만 해도 이 문제를 해결할 수 없었다. 아니 해결할 수 있는 방법이 있는 것 조차 몰랐다.

다른 사람은 안그러던데... 유독 나는 프로그램만 실행했다 하면 모든 컴포넌트가 뜨지 않고 빈 프레임만 덩~그러니 떠있는 것이다.
그리고 그 프레임을 내가 사용하는 다른 듀얼모니터로 딱!! 옮기는 순간 귀신같이 컴포넌트들이 모두 떠 있다.

않이... 너 정말 나한태 외그레?

후... 로지 트레이너님도 당황하시면서... 이런 경우는 .... 본 적이..ㅎㅎㅎ
구글링으로 비슷한 사례들을 좀 검색해보라고 하셨지만 사실 검색해도 뚜렷한 솔루션을 찾을 수 없었다.

그래서 오늘 새벽까지만 해도 이 말도 안되는 일을 너무나도 당연하게 받아들이며 평소와 같이 프레임을 듀얼모니터 사이로 왔다갔다 움직이고 있었는데.

프레임 배경에 이미지를 깔아보겠다고 인터넷 블로그를 뒤지며 코드를 찾던 중에 정말 갑.자.기.
불현듯 떠오르는.... 한 줄의 코드...

frame.setVisible(true);

엥? 이건 너무 당연한 거 아닌가?
맞다 당연하다. 나도 현재 스윙 관련 과제를 하고 있기 때문에 너무나도 당연하게 이 코드를 알고있고, 사용하고 있었다.

그런데... 그게 중요한게 아니었다. 배경화면과 컴포넌트를 실험하면서 각 메소드가 끝나기 직전마다 저 한 줄을 작성하고 있었는데
갑자기 멀~쩡하게 잘 돌아가고 있는 프로그램이 눈에 확 들어오는게 아닌가.

엥? 설마...? 이거...? 이게 해결책인가...?

가차없이 테스트하고 있던 new project를 최소화 시켜놓고 내 원래 프로젝트로 돌아와서
설마 설마 하며 모든 메소드가 끝나기 전에 위 코드를 복사하여 붙여넣기 시작했다.

아닐거야... 설마... 이거때문이라고...?

그리곤..... 근 2개월 가까이 해결되지 않았던 문제는 한순간에 종결되었다. ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
참나.... 휴....

아니, 아니!!!! 너무 당황스러웠다. 문제가 해결돼서 기쁘기도 했는데 당황스러웠다.
분명 적절한 위치에서 셋비저블을 해주고 있었고 다른 사람들의 코드를 둘러봐도 내가 프레임을 띄우는 시점이 문제가 되는 수준은 아니었는데..
뭐 어쨌든. 문제는 해결되었다. 갑자기 밀려든 생각을 무시하지 않고 한 번 테스트 하고 가서 얻어낸 소중한(;;) 경험이자 결과이다.


3. 귀차니즘이 만들어 낸 긍정적 결과(?)

어쨌든 프레임 사이즈를 키워놓는 대형 사고(;;)를 쳐 놨으니.. 한 가지의 추가 기능이라도 더 넣어보자는 생각에 고민하다가
리뷰를 수정할 때 잘못된 비밀번호를 입력하면 '비밀번호를 확인하세요!' 라는 문구를 JFrame으로 띄워보자는 생각에 다다랐다.
그리고 수정할 때 뿐만 아니라 삭제 시에도 마찬가지로 띄우고, 또 글을 쓸 때에도 항목 중에 빠진 것이 있다면 '모든 항목을 기재해주세요!' 라는 프레임을 새로 띄워보자고 생각했다.

결론적으론 약간 상이한 메시지를 띄우지만 거의 같은 코드를 총 3~4회 정도 사용해야 하는 상황이 발생한 것이다.

처음엔 당연~히 각각의 버튼을 눌렀을 때 해당 프레임을 띄울 수 있도록 버튼의 액션리스너 안에 코드를 복사, 붙여넣기하여 줄줄이 쳤다.
스윙 과제를 해본 사람은 알겠지만, 작은 프레임 하나 띄우는 데에 사실 코드가 생각보다 길게 들어간다.
프레임 띄워야하지, 사이즈 잡아줘야지, 셋비저블 잡아야하지, 그 안에 라벨 넣지, 버튼 넣지, 액션리스너 추가하지...

근데 뭐 어쨌든 꾸역 꾸역 버튼마다 코드를 다 집어넣었다.

사실 집어넣고 나서는 별 생각이 없었는데, 다른 레이아웃을 건드리다가 정말 문...득....

'아니, 근데 어차피 메시지만 좀 달라질 버튼인데... 이 똑같은 코드를 매번 쳐야한단 말이야?'
라는 생각이 들었다.

그것도 그럴 것이, 커밋 하기 전에 혹시나 오류가 있을까봐 프로그램을 실행하고 테스트를 하는데
수정하기와 삭제하기 버튼에 들어가야 할 메시지의 내용이 서로 반대로 들어가서 출력되는 것이 아니겠는다.

테스트를 했으니 망정이지 그렇지 않았다면 관성적으로 커밋하고 말았을 일을...

아니 그러면... 이걸 그냥 한 곳에서 좀 관리해주거나, 적어도 짧게 줄여서 사용할 수 있는 방법은 없나? 고민하다가
또다시 불현듯....

'어...? JFrame은 별도 클래스로 분리시켜버려서 필요할 때만 데려다 쓰면 안되나...?' 라는 생각에 도달했다.

그리고는 바로 실행에 옮겨보았다.

우선 깃이랑 싸우면서 시간 허비할 수 없으니 먼저 작업해놓은 건 다 커밋해두고 ;;;
망하더라도 다시 되돌아 갈 길을 만들어 둔 다음에 조심스럽게 패키지를 만든 다음에 WarningMessageFrame이라는 새로운 클래스를 생성했다.

이게 뭐라고 떨리는지...? ㅋㅋㅋㅋㅋ
강의 코드를 따라서 치는거야 얼마든지 수십번, 수백번이고 하겠는데
뭔가 방향키를 내가 잡고 운전해야 하는게 얼마나 두려운지; 클래스 하나 만드는 것도 이렇게 소심해졌다.. 언제 이렇게 쭈구리가 된거니 ㅠㅠㅋ

어쨌든, 이 클래스는 팝업처럼 사용할 것이기 때문에 JFrame을 상속받도록 하고
팝업을 만들 때 사용하던 코드를 모두 긁어다가 여기에 넣어주었다.

다만 사용하는 상황에 따라 출력되어야 하는 메시지는 다르므로 생성자에 인자를 별도로 주고 이를 JLabel에서 출력해주는 방식으로 코드를 짜 보았다.

열댓줄의 코드가 한 클래스에 모이게 되었다.
모아두지 않았으면 한 클래스에서 2번만 사용해도 근 스무 줄이 넘는 코드가 자리를 차지하지만,
이렇게 모아두니 다른 곳에서 여러번 사용해도 부담이 살짝 줄어든다.

근데 모아둔 건 둘째치고. 되어야 할텐데....
걱정 반 기대 반으로, 사용되었어야 할 자리에서 인스턴스를 생성하고 실행해보니!!!! 다행히 된다.

지금 고민포인트인 컨텐트 패널도 메인 어플리케이션에 넣어둘 게 아니라 이렇게 빼 보는 건 어떨까.. 싶은데.
지금까지 시도해 본 바로는 잘 안된다.
그래도 의미있는 건, 내가 어떤 실험을 하다가 나의 생각과 의지로 작은 규모이지만 코드를 별도로 분리해서 클래스화 시켜본 것이었다.
이런 경험들이 자꾸 누적되고 반복되었으면 좋겠다.


무엇을, 어떻게, 왜 못바꾸었나?

1. 역시나 갱신의 문제

사실 갱신 자체가 오류가 나는 건 아니다. 그냥 버튼 하나 더 눌러주면 될 일인데, 자동 갱신을 시키고 싶어서 그렇지...
앞에서 JFrame에 힌트를 얻은 바와 같이 content Panel을 별도의 클래스로 빼 주어 init을 시키고 add를 시키는 방향을 구현해볼까 하여 몇시간 씨름했는데 잘 되지 않았다.

그렇다고 상세보기 팝업을 띄운 것을 다시 하나의 패널로 합쳐서 하자니 레이아웃이 속을 썩인다.
프레임에다가 panel을 추가할 때, 그 패널을 setLayout(null) 하는건 문제가 되지 않는데,
패널에다가 패널을 추가할 때 추가하는 패널에 setLayout(null)을 주면 그 패널 자체가 아예 보이지 않고 구현이 안된다.

그러다보니 팝업창을 띄워서 setLayout(null)을 주고 각 컴포넌트를 내가 배치시킨 상세보기 팝업은 구현이 되는데,
이걸 패널로 다시 합치는건 좀 고민스러운... 일이다.

그래서 결국 또다시 자동 갱신을 구현하지 못했다.

갱신....ㅎ.ㅎ... 아 모르겠다. 길을 잃은 느낌인데, 어쨌든. 조금 더 비벼보고 안된다면 그냥 과감히 포기해야겠다.

사실 레이아웃과 싸우는 일이라면 더욱 과감히 포기하겠는데, 내 마음속에는 얘가 여전히 객체의 협력과 같은 문제로 느껴져서...
과감히 포기할 수도 없는 현실.

더 나은 코드를 향해, 또 되는 방향을 향해 가는 길은 여전히 험난하다.


어쩌지 못하고 남아있는 . . . . 애처로운 주석들 ㅋㅋㅋㅋ


얘도 사실은 중복.
searchReviewsWith blabla~ 코드를 들여다보면 사실 6~7글자만 빼고 다 같은 코드 덩어리들인데,
어떻게 하나로 묶어내야 할 지 몰라 우선은 저렇게 놔 두었다.
첫 번째가 되게 하는 것, 그리고 나서 리팩터링.

하지만 리팩터링도 보통 만만한 일이 아니지라... ㅎ.ㅎ


2. 레이아웃 문제

레이아웃 문제는 이제 과감히 포기하기로 마음먹었다.
여기서 새로운 기능을 추가하려면 레이아웃은 그냥 버리고 가야한다.
실무에서 스윙을 쓸 일이 전무하다 시피 하므로, 이제까지 내가 알아낸 레이아웃의 기능 정도면 충분하리라 생각한다.

패널이 좀 구리거나, 그리드 레이아웃을 주는 바람에 늘어나는 문제 등은 더이상 신경쓰지 않으련다.
오늘 회고 시간에도 썼지만 제한된 시간이라면 본질에 더 집중하고 싶다.

내가 이월 4주차동안 배운 것들을 종합해본다면 더 좋은 코드를 만들기 위해 노력해야 할지, 레이아웃 하나 더 예쁘게 만들어보겠다고 아등바등 해야할지.
답은 나온 것 같다.


무엇을, 어떻게, 왜 할 것인가?

자. 그럼 무엇을 어떻게 더 할 수 있을까?
사실 '검색' 기능이 생각보다 빨리 구현되었다.
엄청 어려울 줄 알았는데 아주 불가능 한 일도 아니어서 생각보다는(사실 구현 못할줄 알았음 ㅠㅠㅋ) 빠르게 진행됐다.
오늘 밤, 그리고 내일은 뭘 추가할 수 있을까?

피드백을 살펴보니 눈에 보이는 부분들이 좀 있다.

  • 메인 화면을 따로 주면 좋을 것 같음
  • 글쓰기나 수정 등 모든 내용을 팝업으로 설정하지 말고 한 패널에서 진행하는 건 어떨까
  • 북리뷰를 클릭하면 책 제목, 요약, 사람들의 독후감과 댓글을 볼 수 있도록
  • 구매창으로 링크가 되는 팝업이 생기면 좋을 것 같음
  • 북 리뷰를 기반으로 어떤 책을 자주 읽는지 파악해서 추천해주는 서비스 -> 책 추천 서비스

와우......ㅋㅋㅋㅋ 어마어마한 피드백들.

아니 근데 여기서 내가 할 수 있는게... 과연 있을까? ㅎㅎㅎㅎㅎ
메인 화면을 따로 주는 건.. 우선 원하는 바 대로 '리스트'를 뿌려주는게 메인으로 들어간 터라 추가로 넣을 수 있을까? 좀 의문이긴 한데,
좀 더 구글링 해보고 내가 추가할 수 있는 것이라면 해봐야겠다.

지금 상황에서 좀 도전적인 피드백은 구매창으로 링크가 연결되는 팝업이나 책 추천 서비스인데...
금욜까지....하려면.... 그것도 바닥을 기고 있는 나의 실력으로...ㅋㅋㅋㅋ
뭘 더 해야 할지 모르겠다.

우선은 구매 링크 -> 책 추천 서비스 -> 댓글 순서로 한번 생각해보련다.


아.... 레벨테스트 주간을 지나면서 느끼는 점은 코딩도 코딩인데, 기획과 매일 매일 '완료' 상태를 만들어내는 것이 쉽지 않다는 것을 또 한번 느낀다.
'완료'.... 완료.....

완벽주의자가 아니라 완료주의자가 되자는 글을 최근에 본 적이 있는데. 완료지상주의!!!! ㅎㅎㅎ
어떻게든 완료하는 하루를 보내보도록 하겠다.

또 한번 나의 쑥쓰럽고 부끄러운 어플리케이션을 업그레이드 시키러...
가보자 샨티..

profile
가벼운 사진, 그렇지 못한 글

0개의 댓글