저번 글을 통해 톰캣의 전체적인 구조와 주요 컴포넌트들에 대해 파악할 수 있었다.이번 글에는 톰캣의 Coyote, Catalina에 대해 알아보려고 한다. Catalina란Catalina는 Tomcat의 핵심 구성 요소로 Java 서블릿 스펙을 구현하는 서블릿 컨테이너 구현체이다. Tomcat이 웹 서버 기능과 서블릿/JSP 컨테이너를 모두 포함하는 전체 패키지라면, Catalina는 Tomcat 내에서 서블릿 컨테이너 전체를 관리하고 구현하는 시스템이라고 생각하면 된다.따라서 Catalina는 서블릿의 초기화, 실행, 소멸 등 전체 생명주기 등 컨테이너 내의 모든 서블릿의 라이프사이클을 관리한다. 이때 Catalina는 Engine 자체를 나타내는 것이 아니고 주요 5개 컴포넌트(Server, Ser..
레벨 4의 첫 미션은 "Tomcat 구현하기" 였다. 그동안 내가 알고 있던 Tomcat은 Web Application Server 중 하나로, 스프링 부트가 톰캣을 내장하고 있다는 정도였다.이번 미션을 통해 Tomcat의 구성 요소와 역할 등등에 대해 더 자세하게 공부하고자 글을 작성하게 되었다. 이번 글에서는 톰캣의 역할과 전체적인 구조에 대해 다루고자 하니 참고바란다.톰캣톰캣이란먼저 톰캣이란 무엇일까? Tomcat은 Apache 재단에서 릴리즈한 Web Application Server이다.이때 Apache는 같은 재단에서 릴리즈한 Web Server인데, 때문에 나는 톰캣이 웹 서버의 역할을 전혀 하지 않는 줄 알고 있었다.(정확히 말하자면 명확히 구분되어 사용하는 줄 알았다) Tomcat의 주요..
톰캣 구현하기 미션 중 특정 API 요청을 처리하고 리다이렉션을 해야하는 요구사항이 있었다.MDN 문서를 통해 학습을 하면서 응답에 302 Found를 반환할 경우 자동으로 리다이렉션 처리가 되는 것을 알았다. 300대의 다른 응답도 모두 리다이렉션이 가능한지 찾아보면서 300 Multiple Choices와 수동 리다이렉션에 대해 알게 되었다.Multiple Choices 이라는 의미가 궁금하기도 하고 수동 리다이렉션에 대해 학습해보고자 작성한다 리다이렉션 종류라다리렉션의 종류는 총 3가지로 나뉜다.영구 리다이렉션일시 리다이렉션특수 리다이렉션영구 리다이렉션영구 리다이렉션은 기존 URL이 사용되지 않아야 할 때 사용된다.즉, API 자체가 제거(또는 다른 API로 컨텐츠가 이동)되거나 도메인이 제거되는 ..
CORS 알았다고 생각하면 끝인 줄 알았지? 진짜 정확하게 알았어? 는 제 얘기입니다. 제가 기존까지 알고 있던 CORS는 대강 이정도였습니다.기존에 CORS에 대한 내 지식CORS 등장 배경기존에 브라우저에서는 SOP라는 단일 오리진 정책이 있었다. 이는 동일한 오리진인 경우에만 요청을 주고 받을 수 있게 하는 정책이다.하지만 웹이 발전함에 따라 다른 오리진 간에도 요청을 주고 받는 일이 필요해졌고 이때 등장한 것이 CORS이다.CORS란크로스 오리진 어쩌고 정책으로 두 서버가 오리진이 달라도 요청을 주고 받을 수 있게 하는 허용하는 정책이다.브라우저는 CORS를 위반했는지를 여러가지 방법으로 검사한다.그중에 하나가 preflight 요청인데 미리 본요청을 보내기 전에 OPTION이라는 Http Me..
서론LMS 3차 요구사항으로 모니터링 대시보드 구성이 주어졌다.우리는 CloudWatch를 통해 EC2 인스턴스에 대해 모니터링 대시보드를 구성했었는데, 처음에는 이것만으로도 충분하다고 생각했었기 때문이다. 그런데 개발 서버에서 500 에러가 계속해서 발생하고 프론트엔드 팀원에게 문의를 받아야 대응할 수 있는 상황이 빈번하게 발생했다.따라서 로그 모니터링에 대한 필요성을 느끼고 이를 구축하기로 결정했다. 🤔 로그 모니터링 필요 이유 1. 직접 EC2 서버에 접속하지 않고도 로그를 확인할 수 있다.왜 필요해?일단 모니터링을 구축하기 전, 로그 프레임워크을 적용하면서 스프링 서버의 로그를 파일로 저장하고 있었다.해당 로그 파일은 EC2 인스턴스 내의 파일 시스템에 저장이 되는데, 이를 확인하기 위해서는 E..
애플리케이션 개발을 하다보면 데이터베이스 스키마 변경은 매우 빈번하게 일어납니다.새로운 기능 추가, 성능 최적화, 또는 데이터 모델 개선 등 다양한 이유로 데이터베이스 구조를 수정해야 하는 상황이 발생합니다. 마이그레이션 도구를 사용하지 않았을 경우우리는 개발, 운영 환경에서 ddl-auto: none 또는 validate 로 옵션을 지정하곤 하는데요.이는 애플리케이션 실행 시 Hibernate가 자동으로 데이터베이스 스키마를 변경하지 않도록 하기 위함입니다. 이러한 접근 방식은 데이터의 안정성을 보장하지만, 동시에 몇 가지 불편한 점이 있습니다. 수동 DDL 실행: 테이블 추가, 컬럼 변경 등이 필요할 때마다 개발자가 직접 해당 환경의 데이터베이스에 접속하여 DDL 문을 실행해야 합니다.버전 관리의 ..
SLF4J(Simple Logging Facade for Java)는 자바 애플리케이션을 위한 로깅 프레임워크입니다.여러 로깅 프레임워크에 대한 추상화 계층을 제공하여, 개발자가 특정 로깅 구현체에 종속되지 않고 유연하게 로깅 기능을 사용할 수 있게 해줍니다. 그중에서도 Logback에서 제공하는 MDC에 대해 자세히 알아보겠습니다. 우리는 로그를 통해 사용자의 요청을 추적하고 디버깅합니다.만약, 수많은 동시 요청이 발생하는 환경에서는 각 요청에 대한 로그를 추적하고 구분하는 것이 어려울 수 있습니다. 때문에 이러한 문제를 해결하기 위해 Logback의 MDC를 활용할 수 있습니다. MDC란?SLF4J에서 제공하는 기능으로, 스레드별로 고유한 컨텍스트 정보를 저장하고 관리할 수 있게 해줍니다.이를 통해 ..
발단현재 저희 프로젝트 코드잽에서는 500대 에러가 5분 동안 10번 이상 발생할 경우 그라파나의 알림 기능을 통해 다음과 같이 문제 노티를 받습니다. 로그 모니터링을 구축하면서 생각보다 500대 에러가 자주 발생되는 것을 파악할 수 있었습니다. 500대 에러가 자주 클라이언트 또는 사용자에게 노출될 경우, 서버에 대한 신뢰가 떨어질 수 있다고 생각되기 때문에 빠른 처리가 필요하다고 생각합니다. 따라서 지속적으로 발생하는 에러의 원인이 무엇인지 확인했는데요. 그렇게 확인한 모든 에러가 NoResourceFoundException였습니다. 사실 처리한 줄 알았던 NoResourceFoundException사실 모니터링을 구축하기 전부터, NoResourceFoundException 가 자주 발생된다는 사..
코드잽에서 3차 스프린트 요구사항에 맞게 로그 프레임워크를 사용하기로 했다.또한 로깅 전략에 대해 고민하였는데, 그 과정에 대해 기록하고자 한다.백엔드 로깅 전략로깅 고려한 사항먼저 로깅에 대해 고려한 사항은 아래와 같다.로깅 프레임워크 중 어떤 것을 사용할 것인가어떤 로그를 남길 것인가환경별 로깅 레벨 정하기어떻게 로그를 관리할 것인가1. 로깅 프레임워크 중 어떤 것을 사용할 것인가로깅 프레임워크에는 주로 사용되는 Log4j, Logback, log4j2 이 3가지에 대해 조사하였고, 결과적으로는 로그백을 채택하기로 하였다.Log4j고려하지 않음지원 중단보안 취약점에 대해 이슈가 있었음성능적으로도 가장 좋지 않음Logbackspring에서 디폴트 로깅 시스템인 로깅 프레임워크별도의 추가 의존성 없이도 ..
이 글을 통해 기본적인 인텔리제이의 디버깅 기능들을 알아볼 수 있었습니다. 이제까지의 내용으로 아마 어느정도는 자주 보았던 또는 예상했던 기능들을 사용하는 데에는 무리가 없습니다.하지만 흥미로운 기능들이 있어, 소개하고자 글을 작성하게 되었습니다. (맛있는 거 많다 ~) 이 글은 인텔리제이 기본 디버깅 기능들을 알고 계시다면 이전 편을 보지 않았어도 이해하기 충분하지만, 이전 편을 보았다고 가정하고 글을 작성하겠습니다. 프로그램에 끼어들어버리기다음 기능들은 말 그대로 실행 중인 프로그램에 흐름에 내가 끼어들어 영향을 주는 것들인데요.코드 상의 변경을 하지 않고도 메서드 실행 결과 등등을 변경해버리는 기능입니다.다시 Reset Frame사실 이전 글의 Reset Frame 부분을 보면서 궁금하셨을 지점이..