개발자

서버의 예외처리는 어디까지 하는게 맞을까요?

2023년 07월 03일조회 1,825

최근 서버 개발을 하다가 한 가지 의문점이 들어서 질문을 올립니다. 현업에 계시거나 사이드프로젝트를 하실 때 다른 서버 개발자분들은 어떤식으로 처리하는지 궁금증이 생겼습니다. 저는 클라이언트 측에서 검증된 데이터가 넘어와도 서버에서 "안전성"이라는 목적으로 한 번 더 검사하는 식으로 로직을 보통 작성합니다. 예시를 게시글 삭제로 들겠습니다. 애초에 뷰에서 해당 글에 권한이 있는 유저에게만 삭제 버튼이 활성화됩니다. 게시글 삭제 로직 1. 클라이언트로부터 삭제할 게시글의 id값과 유저의 id를 받아옵니다. 2. 데이터베이스에서 해당 게시글이 존재하는지, 유저가 존재하는지 확인합니다. 3. 해당 게시글의 주인의 id 값과 넘겨받은 유저의 id값이 일치하는지 확인합니다. 4. 게시글을 삭제합니다. 이러한 로직을 구현한 후 클라에서 이미 해당 유저의 게시물이라는 판정을 받은 데이터가 넘어오는데 서버에서 이런식으로 "이중으로 검사를 하는게 과연 효율적인가"라는 생각이 들어서 질문을 올리게 됐습니다. 감사합니다

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 7

인기 답변

손정현님의 프로필 사진

안녕하세요! 좋은 고민인것 같습니다 ㅎㅎ 요구사항마다 다르겠지만 현업에서는 보통 클라이언트와 무관하게 서버에서 검증 로직을 돌리는 편인 것 같아요. 여러가지 이유가 있겠지만 간단히 생각해보면 서버 입장에서는 요청을 한 주체에서 값들이 검증되었는지 안되었는지 알수 없습니다. 극단적으로는 악의적인 의도로 요청이 네트워크를 타고 이동하는 도중에 가로채져서 요청에 들어있는 값들이 변형 되었을수도 있구요. 그래서 클라이언트 쪽에 검증 로직이 있다고해도 보통 해당 값을 처리해야하는 서버에도 검증 로직이 있는 편입니다. 참고해보세요 :) - https://jojoldu.tistory.com/157 - https://hhhhicode.tistory.com/2

삭제된 사용자님의 프로필 사진

삭제된 사용자

2023년 07월 03일

클라이언트에서 넘어오는 데이터는 충분히 조작될 수 있기에 서버단에서 한번 더 검증하는게 맞다고 생각합니다.

암소메애님의 프로필 사진

서버측에서는 클라이언트가 어떠한 나쁜짓을 하더라도 서버가 멈추면 안돼! 라고 선제를 두시면 작업하시면서 자연스럽게 validation 체크 로직을 만들고 있는 나 자신을 봅니다. 그러다보면 Xss 필터를 접하기 시작하면서 SQL 인젝션, 파일변형 등등 security를 만지게 되죠. 그렇게 서버쪽 지식이 늘어나면서 감금이 됩니다... 주륵

Crayon님의 프로필 사진

Crayon

작성자

컴퓨터공학과2023년 07월 04일

좋은 키워드를 함께 알려주셔서 감사합니다 :)

성일짱님의 프로필 사진

사용자에게 이 FE에서 배포한 app으로 쓰세요, 권장해요. 이래도 말 안듣는 사용자가 꼭 있죠! 간편하다고 따로 뭘 만들어서 쓰는 이런 사람들이 있어서 오늘도 모두가 고생합니다.

김태경님의 프로필 사진

클라이언트의 값 검증이 서버의 관심사인가? 라는 의문을 가져봅시다. 자연스럽게 서버도 요청 값 검증을 해야한다는 결론이 도출됩니다.

Jay님의 프로필 사진

클라이언트에서 넘어오는 값은 100% 신뢰 할 수 없기에 이중으로 체크합니다:) 더 나아가 유효성 검증 + 요청 전문 암복호화 작업까지 추천드립니다

곽예은님의 프로필 사진

저는 처음에 혼자 개발공부하고 혼자 프로젝트 진행했을때에는 예시로 드신것처럼 게시글을 삭제하는 버튼은 작성자에게만 노출되므로 이 게시글이 정말 이 유저의 게시글이 맞는가, 를 체크안하고 api들을 만들었습니다 프론트에서 넘어오는 값들을 의심하지 않았죠 지금은 취업하고 새로운 팀에서 많이 배우면서 요즘 제일 고민하는 부분입니다 저도 백엔드 api는 방어코드로 작성하는게 좋다고 생각합니다 예로 드신 게시글을 삭제하는 로직을 저도 요청한 유저가 존재하는가, 해당 게시들이 존재하는가(이미 삭제되었는가), 삭제 후 삭제결과가 성공적이었는가 등을 체크합니다 다른분들이 말씀하시는거 처럼 프론트에서 넘어오는 값은 여러 이유로 신뢰할수 없다고 생각하고 있습니다 ㅎ api 작성후 postman으로 다양한 상황으로 쏘아보면서 테스트하는것이 좋다고 배웠는데 사실 그러면 개발 시간이 넘 오래 걸리니 최대한 머리에서 시뮬레이션 하고 넘어가네요 ㅎㅎ

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!