-
Notifications
You must be signed in to change notification settings - Fork 0
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이 알고 있습니다.
-