사용자의 요청이 발생하면 서블릿에 도달하여 적절한 형태로 처리됩니다. 하지만 여러 서블릿에서 공통적으로 처리하고 싶은 작업이 있을 수 있습니다. 그렇다면 매번 중복 로직을 각각의 서블릿에 작성해주어야 할까요? 이를 해결하기 위해 서블릿 API 2.3부터는 필터(Filter)라는 기능을 지원합니다. 필터는 HTTP 요청 및 응답에 대해 쉽게 전/후 처리를 할 수 있는 기술입니다. 예를 들어 HTTP 요청 및 응답에 공통적으로 어떤 헤더를 삽입하고 싶다면 필터를 사용할 수 있습니다. 필터 사용 예시 필터는 다음과 같은 기능들을 구현하는데 주로 사용되곤 합니다. 인증 필터 로깅 및 감시(Auditing) 필터 이미지 변환 필터 데이터 압축 필터 암호화 필터 필터 인터페이스 필터를 사용하고자 한다면 javax...
리플렉션이란 구체적인 클래스 타입을 알지 못하더라도 해당 클래스의 메소드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API를 의미합니다. 리플렉션은 '반사'라는 의미를 가지는데, 클래스 정보를 마치 거울에 반사된 것처럼 확인할 수 있다는 점에서 리플렉션이라는 이름을 가지게 되었다고 합니다. 자바 코드는 컴파일되면 바이트코드로 변환됩니다. 그리고 이런 바이트코드들은 클래스로더를 통해 JVM 내 메모리 영역에 저장되게 됩니다. 리플렉션은 이런 JVM 메모리 영역으로부터 클래스 정보를 읽어 다양한 작업을 가능하게 해 줍니다. Spring을 사용하면 흔히 접하는 @RequestMapping, DI(Dependency Injection) 컨테이너, JPA의 @Entity까지 모두 리플렉션을 통해 만들어진 기..
조금은 늦게 작성하게 된 레벨 3 회고입니다.. 🥲 레벨 4에 들어서면서 이것저것 학습하게 되니 회고를 자꾸만 미루게 되는 것 같습니다. 아무튼 레벨 3에서는 무엇을 느꼈고, 무엇을 경험했는지 작성해보고자 합니다! 협업 프로젝트 시작 레벨 3에 들어서면서 협업 프로젝트를 시작하게 되었습니다. 저번 회고에서도 언급하긴 했지만 어쩌다 보니 제가 낸 기획이 뽑히게 되어서 '짧은 주제의 스터디를 쉽고 빠르게'라는 주제로 협업을 진행하게 되었습니다. 사실 협업 경험이 없는 건 아니지만 모두 학교 수업 시간에 진행되었던 협업이고 학점을 위한 팀플이었기 때문에 제대로 된 협업은 아니었던 것 같습니다. 그래서인지 우테코에서 진행하는 협업이 처음에는 굉장히 낯설게 느껴졌었습니다. 기획 단계에서부터 모르는 키워드가 쏟아져..
우아한테크코스 레벨 4 미션을 진행하면서 Tomcat에 대한 학습을 진행하고 있습니다. 이 과정에서 accept count, max connection, max threads라는 키워드에 대해 알게 되었는데, 이번 아티클에서 개념과 사용법을 정리하고자 합니다. 들어가면서 max threads, accept count, max connection은 모두 HTTP 관련 Tomcat 속성입니다. 조금 더 디테일하게는 Tomcat의 여러 구성요소 중 HTTP Connector에 대한 속성입니다. 따라서 이런 속성 값들을 바꾸는 것은 HTTP Connector를 튜닝하는 것과 동일하다고 할 수 있겠습니다. HTTP Connector는 특정 포트에서 HTTP 1.1 연결을 수신하는 역할을 합니다. maxThread..
이번 아티클에서는 HTTP 요청과 응답이 어떤 구조를 가지는지 알아보도록 하겠습니다. HTTP 메세지 구조 HTTP 요청(Http Request), HTTP 응답(Http Response) 모두 HTTP 메세지입니다. 표준에서 정의하는 HTTP 메세지의 구조는 다음과 같습니다. 보시다시피 HTTP 메세지는 크게 네 가지 부분으로 구성됩니다. start line, message headers, CRLF, message body입니다. start line start line의 경우 HTTP 메세지에서 가장 처음에 위치하는 부분입니다. 그리고 start line은 HTTP 요청이냐, 응답이냐에 따라 두 가지 종류로 나뉘게 됩니다. HTTP 요청인 경우에는 request line이라는 이름으로 불리며, HTTP..
Tomcat 구현 미션을 진행하면서 IO Stream이라는 개념을 다루게 되었습니다. 이번 아티클에서는 Stream이란 무엇인지, 그리고 IO Stream은 무엇이며 어떻게 사용될 수 있는지까지 알아보겠습니다. Stream이란? 우선 Stream이란 무엇인지부터 알아보겠습니다. Stream이란, '흐르는 시냇물' 이라는 사전적 의미를 가집니다. 그리고 이는 컴퓨터 공학 분야에서 자주 사용되는데, 주로 데이터, 패킷, 비트 등의 일련의 연속성을 갖는 흐름을 의미한다고 합니다. 보다 쉽게 이해하기 위해 실생활의 예시를 한번 들어보겠습니다. Streaming(스트리밍)이라는 키워드는 많이 들어보셨을 것 같습니다. 우리가 영상을 보거나 음악을 들을 때 자주 접하던 개념입니다. 영상을 보거나 음악을 들을 때 데이..
들어가면서 웹 어플리케이션을 개발하다 보면 수많은 예외 상황에 마주하게 됩니다. 그리고 좋은 어플리케이션을 구축하기 위해서는 이런 예외 상황들에 대해 적절한 응답을 내려주어야만 합니다. 일반적으로 예외 핸들링을 위해 관리해야 하는 정보는 다음과 같습니다: 상태코드 에러코드 예외 메세지 에러 코드의 경우에는 서비스마다 관리 여부가 다를 수 있겠으나, 제가 현재 개발하고 있는 '하루스터디' 서비스에서는 위 세 가지 요소를 전부 다 관리하고 있습니다. 그렇다면 위 요소들은 어떻게 관리가 되어야 할까요? 가장 먼저 떠올릴 수 있는 방안은 '예외 객체 자체에서 관리하는 것' 입니다. public class StudyNotFoundException extends RuntimeException { private st..
매번 협업 프로젝트를 진행할 때마다 마주치는 빈번한 문제 중 하나는 CORS입니다. 이번 협업 프로젝트를 진행하면서도 CORS 문제를 다룰 일이 생겼고, 한 번은 제대로 짚고 넘어가면 좋을 것 같아 이번 아티클을 통해 정리해 보도록 하겠습니다. OriginSOP(Same Origin Policy)와 CORS(Cross Origin Resource Sharing)에 대해 알아보기에 앞서, 두 개념에서 공통적으로 사용되는 개념인 Origin에 대해 알아보도록 하겠습니다. Web content's origin is defined by the scheme (protocol), hostname (domain), and port of the URL used to access it. Two objects have t..
이번 아티클에서는 Oauth의 개념을 알아보고 어떻게 인증 플로우를 구성할 수 있는지 알아보겠습니다. Oauth의 등장 배경 Oauth에 대해 알아보기에 앞서, 왜 등장했는지부터 이해해봅시다. Oauth가 등장하기 이전에는 인증방식에 대한 표준이 존재하지 않았습니다. 따라서 각 서비스마다 자체적으로 아이디 비밀번호를 관리하는 형태였습니다. 이런 상황에서 서비스 간에 정보를 공유해야 하는 상황이 생겼다고 가정해봅시다. 예를 들어 사용자의 일정 관리를 도와주는 A라는 서비스가 있는데, A 서비스에서는 보다 수월한 일정 관리를 위해서 사용자의 '구글 캘린더' 정보를 필요로 합니다. 이 때, 어떻게 사용자의 구글 캘린더 정보를 받아올 수 있을까요? A라는 서비스에서는 해당 유저에 대한 구글 계정 정보를 모르는데..
버그 리포팅 🐞 월요일은 버그 리포팅을 진행했습니다. 다른 팀들의 서비스를 사용해보고 어떤 버그가 있는지를 확인하는 방식이었습니다. 저희 팀도 다른 팀들로부터 버그 리포팅을 받았는데, 생각보다 버그가 많아서 놀랐습니다...ㅋㅋ 버그 리포팅이 1시간정도 진행되었던 걸로 기억하는데, 짧은 기간에 짧은 인원이 진행했음에도 불구하고 버그 관련 이슈가 10개 정도 생겼던 것 같습니다. 실제 사용자가 사용하면 더욱 버그가 많을텐데, 테스트 서버 및 QA의 중요성을 느끼는 계기가 되었습니다. 인증 플로우 구현(feat. Oauth2, JWT) 이번주는 기능 개발에만 집중했었습니다. 원래 하루스터디 백엔드 팀원들은 몹 프로그래밍을 자주 했었는데, 이번에는 시간이 부족할 것 같아서 페어 프로그래밍을 진행하게 되었습니다...