일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 코테공부
- 플러터 공부
- JPA공부
- 기술공부
- 스프링부트공부
- JPA예제
- JPA스터디
- 스프링
- 알고리즘공부
- K8S
- DDD
- 플러터 개발
- 자바공부
- Axon framework
- 스프링 공부
- Flutter
- 카프카
- JPA 공부
- 프로그래머스
- Kafka
- 스프링부트
- 코테준비
- 자료구조공부
- 스프링공부
- nestjs공부
- nestjs
- querydsl
- 기술면접공부
- JPA
- nestjs스터디
- Today
- Total
목록Develop (320)
DevBoi
DI : 의존성 주입, 종속성 주입 해당 케이스에서는 B는 A의 부품이라고 얘기를 한다.(B는 A에 종속된다.) 해당 DI작업은 부품을 injection하는 작업이 번거롭다는 단점이 있다.(하지만 이 Injection 작업은 스프링이 해준다. 별도 간단하게 명시만 하면 스프링이 알아서 결과물을 알려준다.) DI를 하는이유) Store에서 pencil을 정의 하여, 사용한다. 만약에 Store에서 pencil이 아니라 지우개나 다른 상품을 사고싶다고 하면? 그렇게 되는 경우, pencil을 바꿔야한다. Store의 변경은, 해당 판매 상품을 바꾸고자 할때마다 발생하게 된다. 이러한 경우를 유연성이 떨어지고, 결합도가 높은 관계를 가진다고 이해하면된다. 이러한 문제를 해결하기 위해서는 다형성이라는 개념으로 ..
특정 서비스에 대한 수정이 발생한다고 생각해보자 소스코드에서 가장 큰 고려사항은, 결합력에 관련된 내용인데, 결합력이 어떤 것이냐.... 결합도가 높은 소스코드의 경우 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..
스프링 시큐리티는 각각의 역할에 맞는 작업을 처리하는 여러개의 필터들이 체인형태로 구성되어, 순서에 따라 순차적으로 수행된다. 스프링 시큐리티의 특징 및 장점 -보안과 관련하여 체계 적으로 많은 옵션을 제공하여 편리하게 사용할 수 있다. -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..
Member와 Member 하위의 Team이라는 객체가 있다고 가정해보자 그리고, Member와 Team 을 둘다 받는 메소드가 있고, Team은 필요없이 Member만 필요한 경우를 생각해보자 실제로, 저장하고 find할때, Insert, select 가 된다. 만약에 이렇게 , find가아니라, getReference로 불러올때는 사용하지않으면, select 쿼리, 즉 db에서 조회하지 않는다. 어떻게 가능할까? 우선 getReference로 하면, 하이버네이트에서 내부에서 가짜 엔티티(프록시) 가 만들어진다. 이 가짜 엔티티는 실제 클래스를 상속 받아 겉모양은 같지만, 내부의 값들이 텅텅 비었다. 쉽게 말하면, 키를 가지고 디비를 조회할수 있게끔 아이디값만 가지고 있는 가짜 텅빈 엔티티라고 생각하면..
컴포넌트 탐색, 스프링 애플리케이션이 실행되면, 모든 빈은 애플리케이션 컨텍스트에 등록이 된다. 실제로 이제 코딩을 시작해보자 1.ServerController 해당 컨트롤러에서는 서비스에 대한 주입과, 다량의 특정 객체를 반환하는 메서드, 그리고 그 메서드는 서비스의 getDish를 통해서 반환한다. 그리고 produces에서 텍스트 이벤트 스르팀 벨류라는 미디어 타입이있는데, 해당 은 서버에서 주는 스트림을 쉽게 소비한다. 미디어 타입에 대한건 다른 포스팅에서 다뤄보자 2. kitchenService @Service는 해당 서비스를 스프링 빈에등록하기 위함이다. 아까 컨트롤러에서 사용한 getDishes() 메소드는, randomDish를 통해 랜덤으로 호출된 것을 return 한다. generate..
1. Start.spring.io 접속, 몇몇 필요한 의존성들을 추가해주고, 해당 추가 사항을 바탕으로 프로젝트를 생성, 이클립스에서 해당 프로젝트를 오픈해준다. parent에서는 그룹아이디나 버전에 대한 정보가 들어가있다. 그리고 해당하위에는 java 버전, 또한 프로젝트 속성값들에 대한 내용들이 있다.
리액티브 프로그래밍을 써야할 정도의 대규모 서비스가 많지 않았다. 작은 서비스의 서버에서, 대규모에 대한 걸 처리하려면 단순히 서버를 더 투입하면 되지 라는 생각이지만 사실 요새는 그렇지 않다. 작은 스타트업도 대규모의 데이터를 처리해야한다. "기존 자원을 더 효율적이고 일관성 있게 사용하는 방법?" -> 리액티브 스트림이다.(수요 조절에 기반한다.) 논블로킹, 비동기 프로그래밍 모델 함수형 프로그래밍 스타일 스레드를 신경 쓸 필요 없는 동시성 또한 메소드 처리 이후에, doOnNext,doOnError,DoOnComplete 등을 사용해서, 해당 이벤트 이후를 핸들링 할수 있다. 리액티브 프로그래밍에서 가장 중요한 두개의 개념을 알아야한다. publisher - 서비스를 발급해주는 사람 subscrib..
Spring boot 기초 개념을 익혀보자 스프링 부트는 우선 뭐가 장점일까? 1. 프로젝트 생성 우선 spring.io에서 해당 스프링 프로젝트를 편하게 시작할 수 있다. 필요한 라이브러리를 편하게 선택해서 바로 시작할수 있다. 또한, devtool에 대한 편하게 선택하여, 프로젝트를 생성할 수 있다는 것이 장점이다. 버전에서는 snapshot은 개발중인 버전, m2 마일스 스톤으로 배포를 한 버전이지만 바뀔수 있다. 2. 의존성 관리 pom.xml에서 spring-boot-starter, spring-boot-dependencis가 있고, dependancy manager를 통해 의존성에 대한 버전관리를 자동으로 해준다. 물론 해당 xml에서 버전을 명시해서, 고정으로 사용할수도 있지만 스프링 부트에..