Code Review - Saladlab Onboarding #2 - feedback & Refactoring

심준보·2023년 10월 27일
0
post-thumbnail

휘황찬란했던 나의 온보딩 발표가 마무리 되었다.

바로 본론으로 들어가보자면

느낀점,

  1. 내가 확실히 안다면 , 발표를 하는데 있어 자연스레 자신감이 붙을 것이다.
    즉, 내가 말하는 부분에 있어 공부를 많이 하고 발표를 할 것.

  2. 선배님들이 말씀해주시는 피드백의 시간은 정말 값졌다!
    • 개발자로써 , 갖춰야될 부분 부터 코드적으로 피드백,,!정말 달콤했고 소중한 시간이었다.
  • 결론은 , 처음으로 코드리뷰 시간을 가져보면서
    왜 "코드리뷰" 가 중요하고 !
    왜 구글은 "코드리뷰" 문화를 중요시하는지!
    에 대한 답을 얻을 수 있었다.

피드백 ,

  1. modify 처리할때 , null값으로 확인하는 것은 불필요한 일일 수 있다.

  2. popup component가 같은 폼으로 두가지의 역할을 하는데 이것도 더 간단하게 할 수 있을거 같다.

  3. reload()방식은 필요없는 것도 불러와지기 때문에 , 쓰지말고 필요한 함수만 불러오는 것이 좋을 것이다.

  4. 어떠한 것을 명시할떄 0,1,2와 같은 것이 아닌 , 다른 사람이 한눈에 인식할 수 있게 짓자.

  5. REST , URL 개념이해하기 ,

  6. .exist() , .first() 사용해서 db접근하면 더 효율적일 것이다.

  7. orm에서 index사용은 안좋다

  8. python , typescript 변수명 작성법 신경쓰기

  9. set,get이라고 sessionservice구성할때 제공해주는 것이 있다.

  10. cors와 csrf

  11. localstorage 대신에 sessionstorage나 cookie사용 - ssh인증

  12. api 규칙 따라서 짜야하는데 , 너무 자유롭게 했다는점

  13. drf 적용

  14. 경고창 띄우는 구문을 백에서 받아오기

  15. http , https 차이

리팩토링,

  • 피드백을 반영하여 리팩토링 해보는 과정 또한 매우 중요하기에,
    앞으로의 테스크는 위 피드백을 반영하는 것으로 해보려 한다!

아래 포스트를 읽어보시면 위 글의 이해에 도움이 될 것입니다.
자세한 코드 설명 - Saladlab Onboarding #1

  • refactoring #1.

    login API

    • ORM - exists() 를 사용하여 수정

#1. 기존

#<!----------------기존 username 확인 코드-------------------> 

#1.DB username 확인 

UsernameSet = UserSignup.objects.all().values_list("user_name" , flat = True)
print(UsernameSet)

# 1단계, username 일치하는지 확인

x =0 
for i in UsernameSet:
  if i == LoginUsername:
    x += 1
    print("x", x)
  else:
    print("bad")
      
if x ==0:
  print("username fail _ firstfail")
  return JsonResponse(loginusernamefail)
    
    #<!----------------/기존 username 확인 코드-------------------> 
  • UsernameSet 에 db에 있는 username전부를 가져와 저장을 시켜놓는다
  • UsernameSet에 들어있는 username과 사용자가 입력한 username을 하나하나 비교하여 일치하는 것이 있는지 확인한다.

BAD : USER가 많아질 경우 위 방법은 정말 비효율적이다.

그래서,

#2. 변경


#<!----------------변경된 username 확인 코드 -------------------> 
    
#1.DB  username 확인 코드 리팩토링 -> exists()사용

Usernametrue = UserSignup.objects.filter(user_name =LoginUsername).exists()

print("username이 유효한지", Usernametrue)

if Usernametrue == False:
    return JsonResponse(loginusernamefail)

#<!----------------/변경된 username 확인 코드 -------------------> 
  • DB에 접근할때부터 filter()와 exist()로 인해 filter()로 걸어준 조건에 부합하는 것이 db에 존재하는지 바로 알수 있게된다.

  • 후 exist()로 인해 값이 true 또는 false이기에 , 이에 맞춰 조건문을 걸어준다면 더 효율적인 로그인 api가 완성된다.

  • refactoring #2.

    Modify API

    • 기존 코드 중 복잡한 코드 간략화 작업

    #1.

        # <----------------------기존 modify main 코드 -------------------->
 
        # # 2-2 -> title 비교      -> 수정  ok
        if modifyPayload['tdmdtitle'] == '':
            newtitle = currentToDo[0]['title']
            print("title is same")
          
        else : 
            print( "title is modify")


        # 2-3 -> content 비교   -> 수정 ok
        if modifyPayload['tdmdcontent'] :
            newcontent = modifyPayload['tdmdcontent']
            print('컨텐트 ',modifyPayload['tdmdcontent'] )
           
        else :
            newcontent = currentToDo[0]['content']
            print("content is same")
         
        # 2-4 -> due date 비교   -> 수정 ok
        if modifyPayload['tdmdduedate'] == '':
            newduedate = currentToDo[0]['due_date']
            print("duedate is same")
        else :

            newduedate = modifyPayload['tdmdduedate']

        # <----------------------/기존 modify main 코드 --------------------->
  • 기존 코드는 , 프론트에서 던져진 값이 null값인지 아닌지에 따라 처리해주는 조건문 방식을 사용
  • 위 방법보다 더 쉽게 간략화 시킬 수 있는 코드로 수정
  • 백에서 처리하는 것이 아닌, 프론트에서 던져주는 값을 그대로 수정하는 update() 사용으로 변경

#2. 변경 - backend

newstatus = modifyPayload['tdmdstatus']
newtitle = modifyPayload['tdmdtitle']
newcontent = modifyPayload['tdmdcontent']
newduedate = modifyPayload['tdmdduedate']

modify_todo= TodoModel.objects.filter(id = modifyPayload['tdmdid']).update(status =newstatus  , title =newtitle , content =newcontent , due_date=newduedate , updated_at = newupdate)

#2. 변경 - front

<div class="realpopups2">
      <div class="infoboxs2">


        <div class="titlebox2">
          <input class="Titletext2" [(ngModel)]="todocurrenttitle" type="text" placeholder={{todocurrenttitle}} />
        </div>

        <div class="duedatebox2">
          <div>
            <p style="margin:20px; font-size: 20px;">Due Date : </p>
          </div>
          <div class="duedateinputbox2">
            <input class="DueDatetext2" [(ngModel)]="todocurrentduedate" type="text"
              placeholder={{todocurrentduedate}} />
          </div>
</div>
  • 프론트에서 , ngmodel 에 기입되는 변수를 기존의 tdmd_ 단위에서 tdcurrent로 변경

  • @input 데코레이터로 현재의 값을 받아와서 저장된 변수가 있기때문에 새로운 변수를 생성할 필요가 없었다.

  • ngmodel로 인해 기존의 값이 존재하더라고 사용자가 수정상태에서 새로운 값을 입력한다면, 그 값으로 변경이 되기떄문

profile
밑거름이라고생각합니다

0개의 댓글