오늘 톰캣의 컨트리뷰터가 되었다...!! (2건이나!)
정말 별거 아닌 작은 기여지만 뿌듯하다 🥹
Refactor 'getSession' Method in 'Request' Class to Eliminate Code Redundancy by xxeol2 · Pull Request #648 · apache/tomcat
This Pull Request aims to reduce code duplication in the getSession method of the Request class. The refactoring closely follows the structure and principles used in the reset method of java.org.ap...
github.com
Eliminating duplicate execution of checkFacade logic by xxeol2 · Pull Request #649 · apache/tomcat
In the current implementation of the getSession method in the RequestFacade class, the checkFacade logic was redundantly executed twice. I improved this by eliminating the redundancy.
github.com
Eliminating duplicate execution of checkFacade logic in ResponseFacade by xxeol2 · Pull Request #654 · apache/tomcat
This PR is closely related to #649. Prevent double execution of the checkFacade() logic when invoking the isCommitted(), isFinished() method. It already invokes checkFacade() internally ! @Override...
github.com
Request - getSession()
HTTP 서버(a.k.a 톰캣 서버) 직접 구축해보기 미션을 진행하면서, 서블릿과 서블릿 컨테이너에 대한 학습을 진행했다.
로그인한 유저에 대해 세션을 유지하는 기능을 구현하던 중, 실제 서블릿에서의 HttpSession 관련 동작 과정이 궁금해졌다.
최근 흥미롭게 읽고 있던 책 내용을 통해, 단지 request.getSession() 메서드만 호출하면 서블릿 컨테이너(즉 톰캣)이 세션을 찾아 가져와준다는 사실을 알게되었다. (톰캣은 신통방통하다 정말)
내부 구현이 궁금해져, HttpServletRequest의 구현체인 Request 클래스의 getSession() 메서드를 찾아봤다.
내부적으로 코드 중복이 발생했음을 확인할 수 있었다!
참고로, 톰캣의 다른 클래스 ApplicationHttpRequest에서는 아래과 같이 getSession() 메서드가 getSession(true)를 호출하여 코드 중복이 없다.
그래서 Request도 ApplicationHttpRequest와 같이 getSession() 메서드가 getSession(true)를 호출하는 방식으로 수정하여 PR을 보냈다.
결과는 머지 ! :) ❤️
RequestFacade/ResponseFacade - checkFacade()의 중복
뿌듯해하던중, HttpServletRequest의 또다른 구현체인 RequestFacade에서도 비효율적 코드가 존재함을 확인했다!
getSession 메서드에서 checkFacade()를 2번 호출한다.
운이 좋은걸까.. 보는 곳 마다 코드 개선사항이 있었다.
바로 또다시 PR을 제출했고, doesn't make any sense 하다며 한 번 닫혔지만..
Thomas가 checkFacade() 메서드의 중복 호출을 줄여주는 의미있는 작업이라며 reopen해 merge 해주셨다 ! 🤩
추가적으로 ResponseFacade 클래스에서의 checkFacade() 메서드의 중복 호출도 발견했다.
위의 PR과 하나로 묶이면 좋았겠지만 이미 머지된 상태여서 추가 PR을 보냈고 이 PR도 머지되었다 .. :)
정말 우연한 기회로 tomcat의 컨트리뷰터가 되었는데, 뿌듯함이 큰 하루이다 😁 (미션을 열심히 하다보니 자다가도 떡이 떨어진다)
앞으로 돌아갈 수많은 스프링 프로젝트에 내 코드 한 줄이 포함되다니 ....!!!!!!!!!
앞으로도 계속 코드를 까보는 습관을 가지고, 특이점을 발견하면 PR을 제출해봐야겠다!
+) 아래는 7개월 전 내가 쓴 글이다. 그리고 오늘 간지나는 개발자가 됐다. 🕶
'프로그래밍' 카테고리의 다른 글
[Java] Thread란? (0) | 2023.09.13 |
---|---|
Facade 객체를 활용해 트랜잭션에서 외부 API 통신 분리하기 (4) | 2023.09.11 |
[Java] I/O Stream (3) | 2023.09.02 |
[Spring] @Async와 스레드풀 (4) | 2023.08.25 |
[Spring] Oauth2 소셜 로그인 확장에 유리하게 개선하기 (Kakao, Google, Naver) (1) | 2023.08.23 |