이 글은 유튜브 개발자 유미 영상을 바탕으로 개인적인 정리를 위해 작성한 글입니다.https://www.youtube.com/watch?v=SUwmtUjTArw&list=PLJkjrxxiBSFCgcsP_pzuntmqC3AlTMWFx&index=8 지난번에 등록한 OpenAI Chat 모델을 호출하는 메소드를 활용해 챗봇을 만들어보자 따라서 Chat 호출 메소드를 활용할 Controller 엔드포인트, View 페이지를 생성하기Controller- api > ChatController@Controllerpublic class ChatController { private final OpenAIService openAIService; public ChatController(OpenAIService ..
이 글은 인프런 딩코딩코의 백엔드 이력서 차별화 전략 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다.언제 캐시를 만료시켜야할까? - 캐시 만료 정책앞서 어떤 데이터를 캐싱하면 좋을지 알아봤다.🤔 그렇다면 이렇게 캐싱된 데이터는 언제까지 캐시에 남아 있어야 할까? 한 번 저장된 캐싱 데이터는 계속해서 유효할 수 있을까? 현실의 백엔드 서버에서는 다양한 요청을 처리하는 과정에서 데이터가 지속적으로 생성, 수정, 삭제되며 원본 DB의 내용도 계속해서 변하게 된다.즉, 원본 데이터가 지속적으로 변경되는 상황에서 처음에 캐싱된 데이터가 계속해서 유효하다고 볼 수는 없다. 만약 캐시를 적절히 만료시키지 않거나, 원본 데이터의 변경 사항을 캐시에 반영하지 못한다면캐시 데이터와 원본 DB 간에 불일치가..
JWT 토큰 기반 인증인데 왜 세션 쿠키가 날아가는 걸까? Spring Security의 SecurityContext 저장 메커니즘을 파헤쳐보자.1. 문제 발견프론트엔드 개발자로부터 이런 피드백을 받았다. "배포 환경에서 보니까 쿠키를 통해 세션 ID, 그리고 리퀘스트 헤더에 액세스 토큰을 같이 보내네요. 토큰 + 세션 기반이 중복으로 처리되고 있는 것 같습니다. 저희는 토큰 기반이기 때문에 세션은 필요 없지 않을까 싶습니다." 우리 프로젝트는 Spring Boot + JWT 토큰 기반 인증 구조다. SessionCreationPolicy.STATELESS로 세션을 사용하지 않도록 설정했고, OAuth2 인가 요청도 세션 대신 쿠키에 저장하는 HttpCookieOAuth2AuthorizationReque..
10장. 모르면 답답해지는 네트워크 기초네트워크 기초를 모르면서버 장애의 원인이 애플리케이션 코드가 아니라 네트워크 설정에 있을 수 있다.내부 통신에 사용하는 IP와 외부에서 접근할 때 사용하는 IP를 혼동하면 접속 허용 대상을 잘못 지정할 수 있다.서버 개발자가 네트워크를 깊게 알 필요는 없지만, 장애 원인을 찾고 설정 문제를 해결하려면 기본 개념은 알아야 한다.노드, 네트워크, 라우터데이터를 송수신하는 모든 장치를 노드(Node)라고 한다.휴대폰, 노트북, 서버, 네트워크 장비 등이 해당한다.노드가 서로 데이터를 주고받기 위해 연결된 시스템을 네트워크(Network)라고 한다.노드가 네트워크를 통해 전송하는 데이터의 단위를 패킷(Packet)이라고 한다.헤더에는 송수신 정보, 페이로드에는 실제 데이터..
Spring Boot Logback 설정과 로그 레벨 가이드1. Logback을 별도 설정하는 이유Spring Boot는 기본적으로 Logback이 내장되어 있어 별도 의존성 추가 없이 바로 콘솔 출력이 가능합니다. 그러나 기본 설정만으로는 운영 환경에서 필요한 요구사항을 충족하기 어렵습니다. 파일로 저장되지 않고, 환경별 로그 레벨 분리가 안 되며, 포맷도 단순하기 때문입니다.별도 설정이 필요한 핵심 이유는 다음과 같습니다.환경별 로그 레벨 분리. 개발 시에는 상세한 로그가, 운영 시에는 중요한 로그만 출력되도록 구분해야 합니다.파일 로그 저장 및 롤링 정책. 운영 서버에서는 콘솔 로그를 직접 확인하기 어렵기 때문에 파일로 저장해야 합니다. 또한 로그가 무한정 쌓이면 디스크가 꽉 찰 수 있으므로 날짜별..