swsnu / swppfall2018

22 stars 21 forks source link

[HW2] Sign In에서 swpp@snu.ac.kr 말고는 테스트하지 않는다고 하셨는데 #104

Open tldn0718 opened 5 years ago

tldn0718 commented 5 years ago

아티클 수정/삭제, 댓글 수정/삭제의 권한은 현재 로그인된 계정에 따라 달라집니다. 이 기능을 구현할 때도 sign in때처럼 하드코딩해도 되는건가요? 즉, 코드를 짤 때부터 작성자가 swpp@snu.ac.kr인 아티클과 댓글에서만 수정 및 삭제 버튼이 나타나도록 코딩해도 되는건가요?

그 이전에 sign in에서는 하드코딩을 해도 되는건 맞나요?!

sanha commented 5 years ago

해당 유저만 로그인할 수 있으면 된다고 spec에 명시하였기 때문에 채점 과정에서 모든 분들의 하드코딩 여부를 직접 확인할 수는 없으나, 숙제 제출 의도는 하드코딩 하지 않고 작성하시는 것입니다. sign in 역시 autentication만을 하드코딩으로 수행해도 된다는 의미이며, 그 외의 memory db와 interact하는 부분은 robust하게 작성하시는 것을 권장합니다.

leesoojeong commented 5 years ago

여기서 추가 질문이 있는데,테스트과정에서 이메일이 swpp@snu.ac.kr인 user의 id 값(1)은 변하지 않는 것인가요? current user의 id가 항상 1이라는 가정하에 delete button, edit button 등의 authentication을 부여하고 있기 때문에 질문 드립니다.

tldn0718 commented 5 years ago

저도 궁금하네요. id가 항상 1이어야 getUser(id)를 통해서 쉽게 user 정보를 불러올 수 있을거같은데요.

sanha commented 5 years ago

우선, id를 변경하지는 않겠습니다. 다만, Spec상으로 허용하는 "하드코딩" 은 authentication만 해당하며, 하드코딩에 따라 "spec과 다르게" 구현된 경우 감점이 있을 수 있습니다.

leesoojeong commented 5 years ago

말씀하시는 authentication은 signin 뿐만 아니라 delete button, edit button 등의 authentication에도 해당이 될까요?

sanha commented 5 years ago

아니요, sign in 시 id와 pw를 확인하는 부분만 해당됩니다.

jiwonkim-park commented 5 years ago

혹시 각 컴포넌트에서 id가 1인 user의 정보를 받아와서 signed_in이 1인지 확인하는 것도 하드코딩의 범주에 해당되나요??

sanha commented 5 years ago

네, 하드코딩의 범주에 해당하며, 이 부분에 대해서 어떻게 채점할 지에 대해서는 확정되지 않았으나 심각한 하드코딩으로 간주할 수 있는 부분이 발견되는 경우 감점이 있을 수 있습니다. 자세한 채점 방식에 대해 설명드리기 어려운 점 양해 부탁드립니다.

sanha commented 5 years ago

또한, 특정 채점 방식을 가정하고 코딩하는 것이 바람직하지 않다고 판단되기 때문에, 앞으로 채점 방식에 대한 질문은 specification이 미비한 경우가 아니면 답변하지 않겠습니다.

leesoojeong commented 5 years ago

정말 죄송하지만 하나 짚이는 것이 있어서 마지막으로 여쭤보겠습니다. https://github.com/swsnu/swppfall2018/issues/36#issuecomment-423366988 에서 조교님께서

"네, article_author를 id로 갖는 HTML Tag에 대해 말씀하신 것이라면 맞습니다. DB에는 article마다 author의 이름이 아닌 id가 저장되어있기 때문에, 이 author id를 가지고 다시 GET하여 user name을 받아와야 합니다. API의 user/1을 user/:id로 변경하겠습니다. 감사합니다."

라고 하셨었고, 그 전까지의 README에서 api 스펙에서 get 'api/user/1'이라고 되어있었고 그때부터 과제를 시작한 저는 current user의 id가 1이라고 가정하고 코딩을 해도 되는구나라고 생각하고 그렇게 짰었습니다.

하지만 만약 이것도 하드코딩에 포함이 된다면, "해당 user의 signin 여부를 확인하기 위한" get api/user/:id는 사실상 필요가 없다고 생각합니다!

이에 대해서 답변해주실 수 있을까요?

jiwonkim-park commented 5 years ago

저도 이 부분이 궁금합니다 부탁드립니다!

sanha commented 5 years ago

저 comment는 특정 사용자의 sign in 여부 확인을 위해 get api를 뚫는 것이 아니라, 특정 id를 갖는 사용자의 user name을 가지고올 수 있도록 하기 위해 get api를 뚫는다는 내용입니다. 왜 저 comment에서 그런 결론을 도출하셨는지 잘 이해가 되지 않습니다.

skystar-p commented 5 years ago

@leesoojeong user id를 특정 값으로 가정하지 않으시는게 맞습니다. 특정 값이라고 가정하시면 이후 Homework 3에서 굉장히 곤란해지실 수 있으니 절대로 고정된 값이라고 생각하지 마시고 robust하게 코딩해주시길 바랍니다.

sanha commented 5 years ago

db와 interact하는 service를 작성하면서 특정 id를 가정하는 디자인은 좋은 디자인이 될 수 없습니다. ID와 pw에 대한 authentication은 보통 다른 컴포넌트의 도움을 받아 수행하는 부분이고, hw 3에서 추가되는 부분이기 때문에 허용한 것입니다. 이 부분이 해결되면 임의의 사람들이 사용할 수 있는 frontend service가 되도록 코딩하는 것이 수강생분들의 공부에 훨씬 도움이 되는 방향일 것입니다.

leesoojeong commented 5 years ago

답변해주셔서 감사합니다.

다만, 저 comment를 조교님께서 달아주시기 전까지 제 기억이 맞다면 README의 api 스펙에서는 "Get user information containing whether or not the user is signed_in" 부분에 get api/user/1로 되어있었습니다. 그 부분에서 말씀드리는 것입니다.

https://github.com/swsnu/swppfall2018/commit/e9c4637693b52cd67717ad92c17db76be7178aed

라고 되어있었습니다. 그래서 혼선이 있었습니다. 감사합니다.

그리고 위에서 말씀드렸듯이, 조교님들께서 말씀하시는 것처럼 특정 id를 가정하지 않고 하려면 "해당 user의 signin 여부를 확인하기 위한" get api/user/:id는 사실상 필요가 없다고 생각합니다.

leesoojeong commented 5 years ago

위의 질문에 답변해주시면 정말 감사하겠습니다. get api/user/:id를 쓰지 않아도 괜찮은지에 대해서 여쭤보고 싶습니다.

sanha commented 5 years ago

질문의 의도를 모르겠네요. GET api/user/:id는 필요가 없다면 물론 사용하지 않으셔도 됩니다. 단지 memory DB를 통해 정보를 얻어올 수 있는 API를 안내해 드리는 spec입니다. 코드에서 어떤 API를 사용하는지 사용하지 않는지를 기준으로 채점하지는 않습니다. 다만 service에서 특정 id를 가정하지 않도록 코딩해주세요.