끝을 보는 용기

Spring 본캠프 Day 071 - 2단계 및 3단계 일정 관리 앱 Develop 완료, 4단계 진행 중

writingforever162 2024. 12. 16. 23:11

🥇 @transactional 어노테이션(annotation) 복습하기 ▶ 내용 교차 검증 완료, 트러블슈팅(troubleshooting)에 기록 예정 
🥈 '일정 목록이나 단건을 조회할 때 사용자의 Id도 같이 보여주면 어떨까?' 고민 해결하기 ▶ 사용자의 Id뿐만 아니라 비밀번호를 제외한 정보까지 응답으로 전달할 수 있도록 코드 수정 완료 
🥉 "Query did not return a unique result" 오류 제대로 해결했는지 튜터님께 검사받기 ▶ 사용자의 이름 대신 Id로 정보를 조회하여 동명이인 문제 해결 완료 

4️⃣ ERD(Entity Relationship Diagram) 작성 시 참조하는 객체는 어떻게 명시해야 하는지 알아 오기 ▶ 외래 키(Foreign Key)를 ERD 안에 적었으므로 별도로 명시할 필요 없다는 점 확인 완료 
5️⃣ 필수 과제 3단계 완료 후 깃허브(GitHub)에 브랜치(branch) 생성하는 법 익히기 ▶ 인텔리제이(IntelliJ)의 터미널(terminal)에서 브랜치 생성 완료

이상하게 어제 잠을 설쳤다. 나름 일찍 누웠는데 잠이 안 와서 한참을 뒤척였다. 주말 내내 과제를 하면서 질문이 많이 생긴 탓일까. 오늘은 아침 8시에 일어나서 하기 싫은 마음을 꾹 누르고 거북목 스트레칭과 허리 근력 강화 운동을 했다. 점심과 저녁 먹기 전에도 각각 10분씩 운동했다. 아침에는 TIL에 정리해 둔 질문을 들고 튜터님들께 찾아간 다음, 2단계 과제부터 끝냈다. 원래는 4단계까지인 필수 과제를 모두 해내려고 했으나, 4단계 과제 요구 사항을 이해하지 못한지라 내일 오전쯤 마무리해야겠다 싶었다.

 

이해하지 못한 부분은 어디였냐면, 그러니까 지식끼리 이어지지 않은 구간이 어디였냐면 'Servlet Filter, 그리고 이메일과 비밀번호를 활용하여 로그인 기능 구현하기 사이의 연관 관계'였다. 다시 말해 강의를 다시 들으면서 필터(filter)를 만들고 Configuration 어노테이션(annotation)을 써서 등록은 했는데, 그다음에 어디서 뭘 해야 할지 전혀 감을 잡지 못했다. 튜터님의 말씀을 빌리자면, 동작이 어떻게 이루어지는지는 아는데, 목적을 완전히 잃은 상태라고 해야 하나?

 

'로그인(login)을 왜 할까요?'

 

질문에 대답을 못 했을 때, 진짜 온갖 생각이 다 들었다. 솔직히 찰나이긴 했으나 울컥했다. 지금 다시 그 순간을 곰곰이 떠올려보면, 과제를 해내면서도 떨쳐낼 수 없는 불안감, '이 상태로 취업할 수 있을까?'라는 불안감이 명치를 훅 때렸다. '걱정할 시간에 코드 한 줄 더 쓰자'라는 마음가짐으로 조바심을 나름대로 무의식 영역에 밀어 넣은 줄 알았는데 착각이었다. 진짜 몇 초 사이에 '강의 제대로 안 들었지?'부터 '집중 안 했니?', '이래서 어떻게 개발자가 되려고 하니?' 등등 하마터면 끝 모를 자괴감의 늪 밑바닥을 찍고 못 돌아올 뻔했다. 

 

Q. 로그인을 왜 할까?

A. 자원에 접근할 수 있는 권한을 가진 사람만 그 자원에 접근할 수 있도록 하려고. '일정 관리 앱 Develop' 프로젝트에서 자원은 일정에 해당한다. 

 

Q. 인증과 인가는 어떻게 구별할 수 있는가? 

A. '가입을 했는가, 즉 서비스를 이용할 수 있는가, 없는가?'라면 인증, '인증은 했는데 자원에 접근할 수 있는가, 즉 자원 접근 권한이 어떻게 되는가?'라면 인가에 해당한다. 

 

Q. 현재 과제에서 구현해야 하는 기능은 인증인가, 인가인가?

A. 가입한 사람만이 일정을 생성하고 수정하고 삭제할 수 있으므로 인증에 해당한다. 

 

"왜 이 코드를 치고 있는지, 항상 물음표를 달면 그 이유를 찾으려고 하게 돼요. 목적과 핵심을 고민하면 됩니다."

 

'왜 이런 지식의 공백이 생겼을까?' 곰곰이 되짚어보니, 로그인 기능 구현은 강의에서 눈으로만 보고 넘어갔고, 필터(filter)는 직접 코드를 써서 만들었기 때문에 둘을 연결하지 못하지 않았나 싶었다. 앞으로 개인이든 팀이든 프로젝트를 하면서 '왜 이걸 여기서 쓸까?'라는 질문을 바쁘다는 핑계로 못할까 봐, 다시 마음에 새겨야겠단 생각으로 적었다. 쉽지 않은 월요일이었다. 

 

요즘은 이모티콘을 많이 쓰는 만큼, 튜터님의 조언대로 Postman을 실행하여 이모티콘도 문제없이 데이터베이스(database)에 저장되는지 확인했다. 처음에 이 부분을 설정하지 않았다가 자칫 데이터베이스를 아예 새로 만들어야 할 수 있다는 말에 정신이 번쩍 들었다. 하루 야근으로 문제가 해결되면 그나마 다행이라고. 문제가 없는지 확인하면서 챗GPT에 괜찮은 이모티콘을 추천받아 시험해 보았다. 이모티콘만 썼을 뿐인데, 딱딱하게만 느껴진 코드가 좀 귀여워 보였다. 아니다. 오류가 나지 않아서 귀여워 보였을지도 모르겠다. 

내일은 필수 과제를 모두 마치고, 새로운 브랜치(branch)를 생성해서 도전 과제도 5단계 이상 끝내면 좋겠다. 리드미(README)를 1단계와 2단계 과제에 각각 작성해 두어 마음이 한결 편하다. 어느덧 훈련일 90일 중에 30일이 흘렀다. 전체 훈련일의 1/3이 쏜살같이 지나갔다. 내일은 오늘보다 더 힘내보자.