본문 바로가기

Develop

(317)
[Spring] IOC 란? 스프링에서는 여러가지 부품들에 대한 명세를 개발자가 하고 이를 구현하고 제어를 하는 IOC 컨테이너가 있다. IOC에서는 부품들끼리(class)의 DI 작업을 진행해주고 각 class에 대한 생성 과 삭제 등을 제어한다.(생명주기 관리) IOC는 제어의 역전 즉 이 컨테이너가 각 객체에 대한 생명주기 관리 및 결합을 진행해주기 때문에, 개발자 입장에서는 굉장히 편리하게 개발을 도와주는 프레임 워크라고 느낄수 있는 강력한 요소 중에 하나이다. 결국 이 IOC 컨테이너에서 Spring DI 작업도 진행을 하게 된다. 간단히 개념만 하는 포스팅이라 ㅋ.
[Spring] DI란? DI : 의존성 주입, 종속성 주입 해당 케이스에서는 B는 A의 부품이라고 얘기를 한다.(B는 A에 종속된다.) 해당 DI작업은 부품을 injection하는 작업이 번거롭다는 단점이 있다.(하지만 이 Injection 작업은 스프링이 해준다. 별도 간단하게 명시만 하면 스프링이 알아서 결과물을 알려준다.) DI를 하는이유) Store에서 pencil을 정의 하여, 사용한다. 만약에 Store에서 pencil이 아니라 지우개나 다른 상품을 사고싶다고 하면? 그렇게 되는 경우, pencil을 바꿔야한다. Store의 변경은, 해당 판매 상품을 바꾸고자 할때마다 발생하게 된다. 이러한 경우를 유연성이 떨어지고, 결합도가 높은 관계를 가진다고 이해하면된다. 이러한 문제를 해결하기 위해서는 다형성이라는 개념으로 ..
[Spring] 인터페이스와 느슨한 결합력 특정 서비스에 대한 수정이 발생한다고 생각해보자 소스코드에서 가장 큰 고려사항은, 결합력에 관련된 내용인데, 결합력이 어떤 것이냐.... 결합도가 높은 소스코드의 경우 A.class, B.class라고 예를 들어보겠다. A.class가 변경이 발생되면, B.class도 무조건 수정이 되어야 한다. 하지만 결합도가 낮은경우, A.class가 변경이 발생했다고 한들, B.class에 영향도 없고 변경도 필요없다. 이러한 개념에서 나온것이 인터페이스라는 것이다. 결합도가 높은 시스템 A a = new A(); a.setX(); 결합도가 낮은 시스템 X x = 외부파일.class x.setX(); X는 특정 공통 소스들을 구현하기 위한 인터페이스이고, A는 그냥 객체라고 생각하면 된다. 결합도가 높을 경우, A..
[Spring_Security] 스프링 시큐리티의 이해 스프링 시큐리티는 각각의 역할에 맞는 작업을 처리하는 여러개의 필터들이 체인형태로 구성되어, 순서에 따라 순차적으로 수행된다. 스프링 시큐리티의 특징 및 장점 -보안과 관련하여 체계 적으로 많은 옵션을 제공하여 편리하게 사용할 수 있다. -Filter 기반으로 동작하여, MVC와 분리하여 동작이 가능하다. -어노테이션을 통한 간단한 설정이 가능하다. -스프링 시큐리티는 기본적으로 쿠키 + 세션으로 동작한다. 스프링 시큐리티의 기본 필터 종류이다. -SecurityContextPersistenceFilter : SecurityContextRepository에서, 해당 SecurityContext를 저장하고 로드하는 역할을 한다. -LogoutFilter : Logout 으로 지정된 가상의 url 이 있어,..
[스프링] 컴포넌트 스캔 동작과정 컴포넌트 스캔 : 빈으로 등록될 준비가 된 클래스들을 스캔하여, 빈으로 등록해주는 과정이다. (@Controller, @Service, @Component, @Repository 등을 빈으로 등록해주는 것이다.) 우선 ComponentScan이 어디에 사용되고있는지를 보자 우선 기본 SpringbootApplication 어노테이션을 보면, ComponentScan을 사용해서 해당 컴포넌트들을 스캔한다. 이때, 특정 경로를 제외할수도있고 필터에 포함할수도있다. 해당 기본으로 basePackages 하위 패키지의 것들은 다 스캔한다. 하지만 별도로 경로 패턴을 지정하여, 스캔할수도있다. 컨트롤러는 Component를 선언한 별도의 스테레오타입의 어노테이션이다. 해당 컴포넌트 스캔의 경로는 자바파일로도, x..
[스프링] 스프링의 동작과정 스프링의 동작과정을 살펴보자 1. WAS가 구동되면 web.xml을 로딩한다. 2. 로딩된 web.xml에서 ContextLoaderListener 클래스를 생성한다. 3. 생성된 ContextLoaderListener는 root-context.xml을 로딩한다. 이때 root-context는 Context-param으로 선언 되었기 때문에 WebApp 전역적으로 사용한다 4. 로딩된 root-context에 선언되어있는 service,dao등의 객체가 생성이 된다. DispathcherServlet이 구동된다. 이때 Servlet으로 구동되었기 때문에 해당 부분에서만 사용가능한 Context가 된다. 해당 DispathcherServlet이 구동되면서 servlet context를 불러온다. 등록된 s..
[JPA] 프록시객체에 대한 이해 Member와 Member 하위의 Team이라는 객체가 있다고 가정해보자 그리고, Member와 Team 을 둘다 받는 메소드가 있고, Team은 필요없이 Member만 필요한 경우를 생각해보자 실제로, 저장하고 find할때, Insert, select 가 된다. 만약에 이렇게 , find가아니라, getReference로 불러올때는 사용하지않으면, select 쿼리, 즉 db에서 조회하지 않는다. 어떻게 가능할까? 우선 getReference로 하면, 하이버네이트에서 내부에서 가짜 엔티티(프록시) 가 만들어진다. 이 가짜 엔티티는 실제 클래스를 상속 받아 겉모양은 같지만, 내부의 값들이 텅텅 비었다. 쉽게 말하면, 키를 가지고 디비를 조회할수 있게끔 아이디값만 가지고 있는 가짜 텅빈 엔티티라고 생각하면..
[Spring WebFlux] 프로젝트 시작 및 리액티브 프로그래밍 기초 컴포넌트 탐색, 스프링 애플리케이션이 실행되면, 모든 빈은 애플리케이션 컨텍스트에 등록이 된다. 실제로 이제 코딩을 시작해보자 1.ServerController 해당 컨트롤러에서는 서비스에 대한 주입과, 다량의 특정 객체를 반환하는 메서드, 그리고 그 메서드는 서비스의 getDish를 통해서 반환한다. 그리고 produces에서 텍스트 이벤트 스르팀 벨류라는 미디어 타입이있는데, 해당 은 서버에서 주는 스트림을 쉽게 소비한다. 미디어 타입에 대한건 다른 포스팅에서 다뤄보자 2. kitchenService @Service는 해당 서비스를 스프링 빈에등록하기 위함이다. 아까 컨트롤러에서 사용한 getDishes() 메소드는, randomDish를 통해 랜덤으로 호출된 것을 return 한다. generate..