Spring 컨텍스트 캐싱 오해, 소멸과 누적 동작 실험
·
📒 Java & Spring/Spring
들어가며festabook 프로젝트 테스트 코드 리팩토링을 진행하면서 @SpringBootTest 사용으로 인한 Spring 컨텍스트가 총 9번 로드되었다. 이는 컨텍스트가 새로 띄워지며 전체 실행 시간이 증가하는 원인 중 하나였다. 개선 방법은 어떤 이유로 로드되는지 구체적인 원인을 찾고 리팩토링하면 되지만, 막상 생각해 보니 실제로 동작하는 방식이나 어떤 식으로 캐시가 소멸하고 누적하는지 모르고 있었다. 이전까지의 가추한 테스트 환경 Spring 컨텍스트 동작 방식은 실행 초기에 Bean 설정이 동일한 그룹끼리 묶어,컨텍스트 생성테스트 실행소멸과정을 반복한다고 예상했다. 즉, 순차적으로 생성과 소멸하는 형태로 기대했다. 하지만 AI와 공식문서 자료를 흝어보니, Spring 컨텍스트는 테스트 종료 시점까..
실제 서비스 데이터를 활용한 JPA 쿼리 개선 (2)
·
📒 Java & Spring
이전 글에 이어서 세 번째 POST API 개선 내용을 정리했다. 실제 서비스 데이터를 활용한 JPA 쿼리 개선 (1)🤔 학습 계기프로젝트 초기 런칭의 바쁜 시기를 지나며 모니터링 결과, 평균 API 응답 속도에는 큰 문제가 없었다. 그러나 일부 API의 응답이 길어지거나 APM을 통해 불필요한 쿼리 실행가 점차 감taek-2.tistory.comPOST festivals/{festivalId}/notifications축제에 알림을 ON 기능세 번째로는 알림 등록 API를 테스트했다. 이 역시 앞선 실험들과 동일한 방식으로 진행했다.더보기Hibernate: select fn1_0.id from festival_notification fn1_0 left jo..
실제 서비스 데이터를 활용한 JPA 쿼리 개선 (1)
·
📒 Java & Spring/Spring
🤔 학습 계기프로젝트 초기 런칭의 바쁜 시기를 지나며 모니터링 결과, 평균 API 응답 속도에는 큰 문제가 없었다. 그러나 일부 API의 응답이 길어지거나 APM을 통해 불필요한 쿼리 실행가 점차 감지되었다. 그렇기에 프로젝트의 완성도를 높이고 개선 방향을 명확히 하기 위해 전체적인 성능 개선 작업을 진행하기로 했다. 진행 프로젝트는 개발자에 비해 추적할 테이블 개수가 많았고, 그중 FestivalNotificationService 부분을 맡아 개선해 보기로 했다. 이전 프로젝트에서도 쿼리 개선을 시도해 본 경험은 있었지만, 당시에는 다소 감에 의존하거나 과정에 대한 이해가 충분하지 않은 채 주먹구구로 진행했다. 이번 프로젝트는 실제 서비스 런칭으로 유의미한 데이터가 쌓인 시점이었기에, 이를 기반으로 ..
IoC Container와 Spring Bean 파악하기
·
📒 Java & Spring/Spring
🤔 학습 계기우테코 레벨 2 과정에서 IoC 컨테이너와 Spring Bean이 학습 주제로 선정되었다. 처음 이 키워드 접했을 때 개념을 대략적으로는 이해했지만, 구체적인 사용 목적과 지식이 모호해 개인 학습 주제로 선정하게 되었다.🛠️목표 정의🟡 Before (시작 전)IoC 컨테이너는 Bean들의 저장소 역할을 한다.@Component로 선언된 클래스는 자동으로 Bean으로 등록되어 관리된다.@Component가 생성될 때 필요한 의존성을 다른 Bean들에서 찾아 자동으로 주입한다.🟢 After (완료 후)IoC 컨테이너는 객체를 생성, 연결해 주는 역할이다.객체 간의 결합도를 낮추고, 테스트에 용이제어의 역전으로 개발자에게 편리한 환경 제공Spring Bean은 Spring이 직접 관리하는 ..
Spring MVC 요청 흐름, @Controller의 역할
·
📒 Java & Spring/Spring
🤔 학습 계기우테코 레벨 2 과정의 Spring Annotation MVC 복습 중, @Controller 어노테이션이 어떤 과정을 통해 HTTP 요청을 가로채고 응답을 반환하는지 궁금해졌다. 실무에서도 자주 사용하는 개념인 만큼, 이번 기회에 짚고 넘어가고자 학습 주제로 선정했다.🛠️목표 정의🟡 Before (시작 전)@Controller 어노테이션 선언 시, Spring은 웹 요청을 처리할 수 있는 정보를 바구니에 별도로 관리하나?@Contoller도 @Component를 통해 Bean 등록만 하는 것이 아니라, 요청 매핑 정보도 별로 저장하나?🟢 After (완료 후)@Controller은 단순히 Spring Bean 등록을 넘어 매핑 정보도 함께 HandlerMapping에 저장한다.모든 ..
[Inflearn] 스프링 DB 1편 - 데이터 접근 핵심 원리 (A)
·
✍️ 정리/Spring
📚 강의 출처 스프링 DB 1편 - 데이터 접근 핵심 원리 강의 | 김영한 - 인프런김영한 | 백엔드 개발에 필요한 DB 데이터 접근 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 DB 접근 기술의 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니www.inflearn.com강사님께 항상 감사합니다. 🧑🏻‍💻해당 글은 김영한님의 강의와 개인적 지식을 바탕으로 정리한 내용입니다.모든 자료의 출처는 김영한 강사님임을 미리 밝힙니다.섹션 1. JDBC 이해커넥션 연결 : TCP/IP를 사용해 커넥션 연결SQL 전달 : DB가 이해할 수 있는 SQL을 연결된 커넥션을 통해 DB에 전달결과 응답 : DB는 전달된 SQL을 수행하고 그 결과 반환 만약, DB 종류를 변경하면 애..
[Inflearn] 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 정리 (B)
·
✍️ 정리/Spring
📚 강의 출처 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 강의 | 김영한 - 인프런김영한 | 웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습www.inflearn.com강사님께 항상 감사합니다. 🧑🏻‍💻해당 글은 김영한님의 강의와 개인적 지식을 바탕으로 정리한 내용입니다.모든 자료의 출처는 김영한 강사님임을 미리 밝힙니다.섹션 6. 로그인 처리1 - 쿠키, 세션@NotEmpty필드 값이 Null 아니고, 비어있지 않은 문자열 글로벌 오류 지정if (loginMember == null) { bindingResult.reject("loginFail", ..
[Inflearn] 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 정리 (A)
·
✍️ 정리/Spring
📚 강의 출처 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 강의 | 김영한 - 인프런김영한 | 웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습www.inflearn.com강사님께 항상 감사합니다. 🧑🏻‍💻해당 글은 김영한님의 강의와 개인적 지식을 바탕으로 정리한 내용입니다.모든 자료의 출처는 김영한 강사님임을 미리 밝힙니다. 섹션 1. 타임리프 - 기본 기능타임리프 특징서버 사이드 HTML 렌더링(SSR)네츄럴 템플릿스프링 통합 지원. 타임리프 사용 선언 텍스트 - text, utext(Escape, [(...)])th:text = th:utext =..
[Inflearn] 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 정리 (B)
·
✍️ 정리/Spring
📚 강의 출처 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 강의 | 김영한 - 인프런김영한 | 웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습www.inflearn.com강사님께 항상 감사합니다. 🧑🏻‍💻해당 글은 김영한님의 강의와 개인적 지식을 바탕으로 정리한 내용입니다.모든 자료의 출처는 김영한 강사님임을 미리 밝힙니다.섹션 5. 스프링 MVC - 구조 이해동작 순서핸들러 조회 : 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러(컨트롤러) 조회어댑터 조회 : 핸들러를 실행할 수 있는 핸들러 어댑터 조회어댑터 실행 : 핸들러 어댑터를 실행핸들러 실행 : 실..
[Spring] Cannot resolve parameter names for constructor 오류 해결 (@ModelAttribute)
·
📒 Java & Spring/Spring
1. 오류 발생 - 뭐가 문제지..?인터넷 강의를 들으며, 실습 중에 다음과 같이 java.lang.IllegalStateException: Cannot resolve parameter names for constructor public hello.itemservice.domain.item.Item(java.lang.String,java.lang.Integer,java.lang.Integer)오류가 발생했습니다. ⚠️ parameter.. names.. constructor..? 파라미터.. 이름.. 생성자? 우선 구글 번역기를 돌려 메시지를 확인했습니다.이름을 확인할 수 없다? 바로 domain으로 정의한 Item 클래스를 내용을 확인했습니다.@Datapublic class Item { priva..