Skip to content

4조 코드 리뷰

김현욱 edited this page Jul 31, 2024 · 8 revisions

이호석

배운내용

  • DB 설정을 분리하기 bin/setenv.sh에 설정 해보기
  • 로그인 했을때 SessionId 바꿔주면 혹여나 SessionId가 탈취 당했을때를 대비할 수 있다고 합니다.
  • 좀 더 꼼꼼한 예외 처리가 필요할 것 같습니다!
  • 로그인 사용자, 비로그인 사용자 접근 허가에 대한 처리를 공통으로 처리할 수 있습니다 (Filter, etc..)
  • Ajax도 한번만 쓰고 말 것 아니니 분리해서 재사용할 수 있게 만들 수 있음!

고동훤

배운내용

  • Exception 처리를 AbstractHttpServlet에서 처리하는 방안
  • api 호출하는 js function을 template 형태로 관리
  • web.xml에서 error-page 설정
<error-page>
    <exception-type>java.lang.Exception</exception-type>
    <location>/error.jsp</location>
</error-page>

박민지

[구현 내용]

  • 7단계 ajax를 이용한 댓글 작성까지 구현함
  • ajax 사용하여 요청 보내는 기능은 template화하여 코드 중복 제거
  • BaseServlet 기반 일괄 예외 처리 구현

[배운 점]

  • 사용자 경험을 위해 로그인하지 않았을 때 url을 세션에 저장하고, 로그인하면 해당 url로 리다이렉트하는 방식
  • tomcat 설정을 변경해서 Tomcat manager, host manager 설정하여 런타임 war 배포, 메트릭 확인 등이 가능
  • @Authorized 어노테이션 기반으로 메서드별 인증 여부 체크 기능
    • 이 경우 /users/*/users/*/register-form이 막히는 문제가 있어 whitelist가 우선순위 가지도록 구현
  • 세션 고정 공격 방지를 위해 로그인한 경우, 세션 id를 변경하는 것이 좋음
  • 안정적인 자원 해제를 위해 datasource close를 명시적으로 하는 것이 좋음
    • 톰캣을 중지해도 datasource가 죽지 않아 too many connection 문제가 발생할 수 있음
  • XSS 방지를 위해 xssFilter 구현
    • script 실행 가능하도록 도와주는 글자를 escape한 글자로 변경한 뒤 새로운 RequestWrapper를 만들어 다음 필터로 넘겨줌

[느낀 점]

  • 보안에 신경 쓰신 분들 덕에 많이 배웠습니다!
  • 자원 해제 까먹고 있었는데, 명시적으로 해줘야 한다는 점 리마인드했습니다!
  • 세션에 로그인 직전 url을 저장하고, 로그인 후 리다이렉트 해주는 방식 spring security 같아서 재밌었습니다!

김현욱

[구현 내용]

  • 요구사항에 정말 딱 맞춘 6-1을 완성했습니다.

  • 기본적으로 인증이 필요한 요청의 url이 같은 base를 가지고 있어서 path를 분기처리 하지 않아도 된것이 편했던것 같습니다.

[배운 내용]

  • request.changeSessionId() 로 세션 아이디를 바꿀 수 있다는것을 배움
  • baseServlet을 이용해 ajax요청과 일반 요청에 대한 exception 처리를 공통적으로 처리한것이 인상적임
  • js 에서 api 요청에 대한 로직을 따로 묶어서 재사용한거 깔끔해서 탐납니다.
  • 인증에 대한 filter url mapping이 인상깊었습니다.
  • E2E 테스트가 굳이 필요한가 싶었는데, 해야겠습니다.

김수현

  • 처리하지 못할 예외는 unchecked exception으로 바꿔서 던지는 것이 좋다. SqlException을 Runtime을 상속받은 예외로 바꾸어서 던지는 것이 좋다.
  • 로그인 했을때 sessionId 바꾸어주는 것은 국룰 request.changeSessionId() . 세션 공격을 막아야 함.
  • redeploy시에 매번 경고 로그가 떴는데 무시했는데 해결하는 방법이 있었다. ServletContextListener에서 destroy()시에 커넥션 풀 종료 해주는게 좋다.
  • ServletContextListener에서 초기화 중 예외가 발생하면 시작되지 않도록
    • ServletContextListener에서 System.exit()를 호출하면, JVM이 종료되므로 Tomcat 서버도 종료됩니다. System.exit() 메소드는 JVM을 종료시키며, 이로 인해 Tomcat과 같은 애플리케이션 서버도 종료됩니다.
    • db health check도 하고나서 아니면 서블릿 삭제되도록 하기
  • 폼 제출시에 post, get밖에 안되어서 서블릿 doPut(), doDelete() 잘 활용하지 못함.
    • fetch()로 해주니 리다이렉트가 어려움. 서블릿 매핑 바꾸어야함.
    • 폼에서 히든 필드로 _method 파라미터 넘기고, 필터에서 요청 파라미터 체크해서 메서드 바꿔줄 수도 있음.
  • null check
    • String null check 후 equals() 비교해야하는데 “”.equals()로 앞에 비교할 스트링을 앞에 두면 null check할 필요 없음
    • == null은 전통적이고 간단한 null 확인 방법입니다. 익숙하고 간단하지만, Objects.isNull()에 비해 덜 직관적일 수 있습니다.
  • 사용자 중복 username 검증
    • username에 unique index 걸어두고 데이터 insert시에 에러 터지면 그때 처리 → exception이 여러경우에 터지기 때문에 username 중복으로 예외가 터졌는지는 알 수 없음
    • insert전에 username이 존재하는지 확인한다. select로 조회한 후에 중복 nickname insert되었을때 막을 수는 없음.
    • 둘 다에서 처리하는게 좋다.
  • 예외처리를 하는 방법
    • 필터로 한다 → 서블릿 코드는 고치지 않아도 된다. 하지만 jsp 렌더링 후이
    • 공통 부모 서블릿을 둔다. → 서블릿마다 extends를 신경써줘야함.
  • APITemplate.js 로 템플릿 작성해두면 프론트 코드를 정돈할 수 있음
  • 홈 서블릿은 “/”가 아닌 “”로 매핑해두면 매핑되지 않은 url은 404 에러를 보냄
    • "/"로 서블릿을 매핑하면, 해당 서블릿은 특정 서블릿이나 JSP로 매핑되지 않은 모든 요청을 처리하도록 Tomcat이 알고 있습니다.

👼 개인 활동을 기록합시다.

개인 활동 페이지

🧑‍🧑‍🧒‍🧒 그룹 활동을 기록합시다.

그룹 활동 페이지

🎤 미니 세미나

미니 세미나

🤔 기술 블로그 활동

기술 블로그 활동

📚 도서를 추천해주세요

추천 도서 목록

🎸 기타

기타 유용한 학습 링크

Clone this wiki locally