본문 바로가기

연재작/WEB - BE

(7)
Spring과 Spring Boot 1. Tomcat과 Spring Container의 주 요소 Spring에 대해서 처음 배울 때 가장 이해하기 어려웠던 부분이자 지금도 약간 헷갈리는 부분의 도식이다. DispatcherServlet, DelegatingFilterProxy 둘 다 각각 Servlet, Filter 의 구현체이다.관리 자체는 Servlet Container 관할이기에 왼쪽에 있지만, 구현체는 Spring Bean 이라는 것을 알아두어야 한다. 만약 순수하게 Spring만을 사용한다면, Spring Container에서 제공되는 WebApplicationContext,즉 Bean의 생성과 주입까지는 우리가 Spring Boot환경에서 사용해왔던 것 처럼 사용이 가능하다. 그런데 이를 통해서 우리가 만들 수 있는 것은 서버 ..
Spring Bean Deep Dive Spring Bean과 관련해서 알게된 몇 가지 사실을 적어보고자 한다. 1. 생성자 주입을 권장하는 이유 MVC 패턴에 맞게, 그리고 3-layered-Architecture 패턴에 맞게 만들어오던 그동안은 순환 참조 자체가 발생할 일이 없었다.계층이 다른게 패키지 단위로부터 구분이 됐기 때문이다. 문제가 되는 시점은 @Configuration을 통해서 @Bean을 정의하고,해당하는 @Bean을 다른 @Configuration 혹은 @Component에 정의할 때 만들어졌다. 최근에 Spring Security를 배우다 생긴 상황이다. CustomAuthenticationProvider는 CustomUserDetails와 passwordEncoder에 의존@Component@RequiredArgsCon..
디렉토리 구조와 Facade 패턴 1. 디렉토리 구조 Spring을 통한 Backend의 프로젝트나 Frontend의 React를 사용한 프로젝트를 만들거나어떤 프로젝트를 만들 때도 개발자는 항상 디렉토리 구조를 잘 생각하고 설정해야 한다.프론트엔드 입장에서 디렉토리 구조를 짤 때 깊은 생각을 해보지는 않았지만,React를 사용해서 한번이라도 SPA를 만들어 본 입장에서 이 블로그의 내용이 참 좋아보였다.https://velog.io/@teo/separation-of-concerns-of-frontend 프론트엔드 개발자 관점으로 바라보는 관심사의 분리와 좋은 폴더 구조 (feat. FSD)최근 프론트엔드 개발에서 주목받는 FSD 아키텍쳐 폴더 구조를 주제로 소프트웨어 공학 관점에서의 관심사의 분리라는 원칙을 통해 설명하고자 했습니다. ..
JVM Runtime Data Area, Singleton과 Race Condition 1. Runtime Data AreaJVM은 크게 Class Loader, Runtime Data Area, JVM Engine으로 구성되어 있고그 중 Runtime Data Area는 JVM의 메모리 영역으로,우리가 흔히 알고 있는 Thread, Heap, Static영역(혹은 method, class영역)으로 구분되어 있다.Thread 영역은 지역 변수, 파라미터, 리턴 값을 담당, 메서드 호출 시 사용하는 영역이다.Heap 영역은 객체의 저장을 담당한다.java는 class 기반의 객체 지향 프로그래밍 언어이기에, 많은 객체가 생성되고 소멸된다.객체의 소멸, 데이터 이관을 관리하기 위해서 Garbage Collection을 시행하는데, Heap영역이 그 대상이다.Static 영역은 전역변수, Sta..
Spring bean (3) - 의존성 주입, Spring Framework의 의존성 관리 소프트웨어 개발을 하다보면 의존성이란 단어가 참 많이 나오는데, 객체 지향을 위한 SOLID 원칙 중 5번째인 D(Dependency Inversion Princilple)에서도 의존성이 나온다. 먼저 의존 역전 원칙을 어떻게 소개하는지 살펴보자. 1. 의존 역전 원칙(Dependency Inversion Principle) 먼저, 의존성이 무엇인지 파악해보자." the conventional dependency relationships established from high-level, policy-setting modules to low-level, dependency modules are reversed, thus rendering high-level modules independent of the..
Spring bean (2) - Singleton, Bean 1. 싱글턴 패턴. 싱글턴 패턴이란? 하나의 클래스에 대해 오직 하나의 인스턴스만 생성되도록 보장하는 디자인 패턴이다.그리고 이를 이용해서 전역적인 관리를 하기 위해 사용한다. 주요 특징 : 하나의 인스턴스: 클래스에 대해 단 하나의 인스턴스만 존재, 필요시 인스턴스를 생성하거나 기존 인스턴스를 반환글로벌 접근: 싱글톤 객체는 어디서든 접근 가능메모리 효율성: 불필요한 객체 생성을 막아 메모리와 자원을 절약 가령 MVC 패턴을 사용한다고 할 때, Controller에서 사용되는 View와 같은 인스턴스는재생성 될 필요가 없고, 이를 어플리케이션이 끝날 때 까지 사용해야 한다.이럴 경우 View를 싱글턴을 사용해서 관리 할 수 있다. 인스턴스가 단 한 개만 존재하기 위해서 클래스를 작성할 때 아래와 같은 ..
Spring bean (1) - Dispatcher Servlet (Front Controller Pattern) 1. tomcat에서 dispatcher servlet은 왜 하나인가?공부를 하다보니 왜 하나인가? 라는 질문은 적절하지 않다고 생각되었다.이것을 완벽하게 설명하기 위해서 dispatcher servlet이 둘 이상일 때 효율성에 관련된 내용을 찾아보아야했지만열심히 논문과 같은 부분을 뒤져본 결과 dispatcher servlet, 더 나아가서 Front Controller pattern이 효율적으로 더 낫다는 내용의 정량적 비교에 대한 논문을 찾지 못했기 때문이다.그렇지만 공부를 하면서 Front Controller의 장점에 대한 내용은 많이 볼 수 있었기에 이에 대해 정리해보려 한다. Front Controller Pattern이는 웹 어플리케이션에서 구현되는 디자인 패턴 중 하나로,웹 사이트에서 발..