☘️Spring

· ☘️Spring
이전 글까지는 SpringBoot 가 부팅될 때 일어나는 톰캣 설정과 초기화를 알아보았습니다. 해당 글에서는 톰캣이 논블락킹으로 요청을 받아내고 처리하는 과정과 함께, 왜 톰캣이 NIO 여도 Spring MVC 는 블락킹 서버인지 알아보도록 하겠습니다.Tomcat의 논블로킹(NIO) 소켓 처리Tomcat은 Java NIO(Non-blocking I/O)를 사용하여 소켓을 처리함으로써 높은 성능과 효율적인 자원 관리를 실현합니다. 이번 글에서는 Tomcat이 어떻게 논블로킹 방식으로 요청을 처리하는지에 대해 코드 레벨에서 자세히 알아보겠습니다.Tomcat 의 전체적인 구조를 한번 보도록 하겠습니다. 먼저, Coyote Connector 는 요청을 받아 프로토콜 스펙 (EndPoint) 에 맞게 프로세싱 해..
· ☘️Spring
프로젝트 코드 리뷰 시간에, 한 캠퍼 분께서 Tomcat의 내부 구조를 설명해 주셨습니다. 특히, Acceptor Thread가 모든 요청을 받아 Worker Thread에 전달하고, Worker Thread에서 실제로 요청을 처리한다고 말씀하셨습니다. 당시에는 잘 몰랐지만 주말 동안 공부해보니 이는 바로 `Tomcat NIO Connector`에 대한 이야기였습니다. 이 이야기를 듣자마자 Tomcat 서버와 Spring WebFlux가 비슷하다는 느낌이 들었습니다. 그렇다면 Tomcat을 이용한 Spring Web MVC도 논블로킹이어야 할 것 같은데, 왜 우리는 여전히 one thread per request 동기 블로킹 서버로 알고 있을까요?  먼저 Tomcat 자체를 공부해보며 Servlet과 어..
· ☘️Spring
스프링 시큐리티를 사용하며 의도하지 않은 403 에러가 떴을 때가 제일 스트레스였던 몇 주가 흘렀습니다. 그 동안 공부했던 내용을 한번 정리해보면 다음엔 고생을 덜 하지않을까 싶기도 하고 그 동안 인증에 대해 놓쳤던 개념(특히 익명유저)에 대해 정리해보고자 합니다.스프링 시큐리티 필터 순서FilterChainProxy 가 사실상 스프링 시큐리티 필터 동작의 시작점이기 때문에 디버깅하기에 적당한 곳입니다. 여기서 확인해보니 12개의 필터가 기본적으로 등록되어 있습니다. 모든 것을 알기 어렵지만 제일 중요한 사실은 인증 (Authentication) 후 인가 (Authorization) 필터가 동작한다는 사실입니다.그 외에도 여러가지 필터는 표에서 살펴보면 됩니다.FilterAdded byCsrfFilter..
· ☘️Spring
이번 주는 스프링 시큐리티 적용을 하면서 수많은 삽질을 겪게 되었습니다. 트러블슈팅 경험을 정리하기 전에 먼저 스프링 시큐리티의 기초를 먼저 정리해봅시다! Servlet 이란? Servlet 클래스 관계도 Servlet은 인터페이스이며, 이를 상속받은 것이 GenericServlet (추상클래스)입니다. GenericServlet은 다시 상속받은 것이 HttpServlet (추상클래스)입니다. HttpServlet의 service 메소드는 HttpServletRequest를 인자로 받습니다. 이 때의 HttpServletRequest는 ServletRequest 인터페이스의 구현체입니다. HttpServletRequest 의 역할은 결국엔 서블릿 컨테이너에서 HttpServlet의 service(Http..
· ☘️Spring
JPA N+1 이 무엇인지 그리고 어떻게 최적화하는지 알아보도록 하자! ✔️ JPA N+1 문제란? 다대일 관계 Member와 Team를 정의해봅시다. @Entity @NoArgsConstructor @AllArgsConstructor @Builder @Getter @Setter public class Member { @Id private Long memberId; private String memberName; @ManyToOne private Team team; } @Entity @NoArgsConstructor @AllArgsConstructor @Builder @Getter @Setter public class Team { @Id private Long teamId; private String t..
· ☘️Spring
참고 https://docs.spring.io/spring-framework/reference/testing/spring-mvc-test-framework/vs-end-to-end-integration-tests.htmlMockMvc vs End-to-End Tests :: Spring FrameworkMockMVc is built on Servlet API mock implementations from the spring-test module and does not rely on a running container. Therefore, there are some differences when compared to full end-to-end integration tests with an actual c..
· ☘️Spring
DispatcherServlet 가 모든 역할을 담당해주는 것을 볼 수 있다. 코드를 자세히 살펴보도록 하자! DispatcherServlet.class - doDispatch 메소드 Overview protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception { HttpServletRequest processedRequest = request; HandlerExecutionChain mappedHandler = null; boolean multipartRequestParsed = false; WebAsyncManager asyncManager = WebAsyncUtils.getAsyn..
· ☘️Spring
의존관계 주입은 크게 자동과 수동으로 나뉩니다. 수동 주입의 경우 @Configuration-@Bean를 사용하고 자동 주입은 @Component-@Autowired 를 사용합니다. 각각에 대해 살펴보도록 하겠습니다. @Configuration-@Bean 의존관계 수동 주입 @Configuration public class AppConfig { @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService() { return new OrderServiceImpl(memberRepository(), discountPolicy()..
· ☘️Spring
김영한 강사님의 스프링 기본편 강의와 따로 찾아본 내용을 정리한 글입니다. 스프링 컨테이너는 싱글톤 컨테이너라고도 부릅니다. 여기서 말하는 싱글톤이란 컨테이너 내의 Bean을 모두 싱글톤, 즉 하나의 객체로 관리함을 의미합니다. 이번 시간에는 왜 싱글톤으로 관리되어야 하는지와 그 구현 방법에 대해 알아보도록 하겠습니다. 왜 싱글톤으로 관리되어야할까? 싱글톤이 아닌 상황을 가정해보겠습니다. 하나의 서버에 같은 서비스를 100명의 고객이 동시에 호출한다면 서비스(여기에서는 Bean)도 100개가 생성되어야 합니다. 이러한 상황은 각 유저마다 서비스 객체가 생성되어 메모리 사용에 비효율적이므로 권장되지 않습니다. 따라서 대부분의 서비스는 싱글톤 컨테이너로 관리합니다. 스프링이 적용되지 않은 서비스를 테스트 코..
· ☘️Spring
김영한 이사 스프링 핵심 원리 - 기본편 강의와 따로 찾아본 내용을 정리한 글 입니다. 스프링 컨테이너 public class AppConfig { public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } public OrderService orderService() { return new OrderServiceImpl( memberRepository(), discountPolicy()); } public MemberRepository memberRepository() { return new MemoryMemberRepository(); } public DiscountPolicy discountPol..
kkyu0718
'☘️Spring' 카테고리의 글 목록