일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Kafka
- 자바공부
- Flutter
- 프로그래머스
- 알고리즘공부
- 플러터 개발
- JPA예제
- 스프링부트공부
- querydsl
- K8S
- DDD
- 스프링
- JPA공부
- 플러터 공부
- 카프카
- 자료구조공부
- nestjs
- JPA스터디
- 코테공부
- 스프링부트
- 기술면접공부
- 코테준비
- 기술공부
- nestjs스터디
- nestjs공부
- Axon framework
- Today
- Total
목록Develop/[Spring] (96)
DevBoi
컴포넌트 스캔 : 빈으로 등록될 준비가 된 클래스들을 스캔하여, 빈으로 등록해주는 과정이다. (@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..
Spring boot 기초 개념을 익혀보자 스프링 부트는 우선 뭐가 장점일까? 1. 프로젝트 생성 우선 spring.io에서 해당 스프링 프로젝트를 편하게 시작할 수 있다. 필요한 라이브러리를 편하게 선택해서 바로 시작할수 있다. 또한, devtool에 대한 편하게 선택하여, 프로젝트를 생성할 수 있다는 것이 장점이다. 버전에서는 snapshot은 개발중인 버전, m2 마일스 스톤으로 배포를 한 버전이지만 바뀔수 있다. 2. 의존성 관리 pom.xml에서 spring-boot-starter, spring-boot-dependencis가 있고, dependancy manager를 통해 의존성에 대한 버전관리를 자동으로 해준다. 물론 해당 xml에서 버전을 명시해서, 고정으로 사용할수도 있지만 스프링 부트에..
의존성 주입에 대해서는 3가지 방법이 존재한다. 1. 필드 주입 변수 선언부에 @Autowired를 붙인다. 예) 필드, 즉 변수 선언부에 @Autowired를 붙이면 된다. 2. 생성자 주입 사실상 저렇게 생성자에 주입을 받아도 되지만, final 과 RequiredArg 어노테이션을 사용해서 주입을 받아도된다 즉 lombok으로 의존관계를 설정하는 방법이다. 오류는 다른 이유에서 나는 거니까 무시하고, 해당 내용만 참고하도록 하자 3. 메소드 주입 setter 메소드를 사용해서 해당 의존성을 주입 받을 수도 있다. 필드고, 생성자고, 메소드고 를 떠나서 다 똑같이 @Autowired를 쓰고 있다는 것을 알수 있다. 이게 어떤식으로 동작을 하는걸까? 우선 @AutoWired는 의존관계를 주입할때 사용하..
git://github.com/SpringSource/spring-framework.git 해당 git url에서 최신 라이브러리를 클론해보자, 그리고 어떤 기능들이 추가가 되었는지 확인 및 공부 해보자 클론을 완료하면, 소스트리에서는 히스토리를 볼수있다. 내가 내려받은 경로를 sts에서 열어주고, 안에 라이브러리 구성을 보자 aspectJ - 스프링 aop로 구현이 불가한 고급 aop관련 기능을 제공해주는 라이브러리다. 트랜잭션 관련 aop를 활용하여 처리하기 위해서는 꼭 필요하다. jakarta - 자카르타는 아파치 기반 오픈소스 솔루션을 배포하고 유지하는 솔루션이다. jackson - json관련 오브젝트 데이터 처리를 해주는 라이브러리다. netty-bom - 비동기 이벤트 기반 오픈소스 프레임워..
스프링의 AOP 접근 방식은 타깃 객체에 대한 동적 프록시를 생성하고 설정된 어드바이스를 사용해 객체를 위빙 함으로써 공통 로직을 수행하는 것이다. 어드바이스 : before advice, round advice처럼 특정 공통기능의 수행시점을 설정해놓은 것이다. (자세한 내용은 aop관련 공부 포스팅 참고) 위빙 : 어드바이스를 핵심 로직에 적용하는 것을 의미한다. (엮기 라는 순수 표현) 스프링의 aop와 aspectJ의 aop라이브러리가 존재한다. 스프링 2.0부터 스프링이 aspectJ와 더욱 강력한 연동기능을 제공한다. - aspectJ방식의 포인트컷 표현식 지원 -스프링 aop를 위빙에 사용하면서 동시에 @aspectJ에노테이션 스타일을 지원 -aspectJ에 구현된 에스펙트를 통한 DI지원 -..
스프링의 코어는 제어 역전의 원칙을 기반으로한다. Ioc : 컴포넌트의 의존성의 생성 및 관리를 외부화 하는 기법이다. Ioc란, 예를 들어 특정 A라는 클래스에서, B라는 클래스의 인스턴스를 사용하는 경우, 가져오는 경우이다. 전통적인 방법으로는 Foo가 new 연산자를 사용해 인스턴스를 생성하거나, 팩토리를 이용해 인스턴스를 가져온다. 하지만 Ioc 접근 방식을 통하면, 런타임 시점에 Foo에게 제공된다. 이런 런타임 시점에 의존 관계에 대해서 주입을 하는건 DI라는 이름으로 바뀐다. DI : 자바빈과 인터페이스를 근간으로 한다. 스프링 DI 제공자로 사용하면 애플리케이션 내에서 여러가지 방식으로 의존성 설정을 유연하게 설정할수 있다. (외부 xml 파일, 스프링 사바 설정 파일, 어노테이션 등등) ..
저번에 eh-cache관련되서, self invocation의 문제에 대해서 잠깐 언급했다. 위와 같이, cacheable로 메소드를 감싸면, 해당 메소드에서 생성한 Post객체는 주소가 달라지지않고, 캐싱하게된다. 해당 eh캐시는, 자바 기반이고 스프링프레임워크와 생명주기를 함께한다. 하여 이런식으로 같은 주소를 가지게 된다. 그런데 여기서 문제가 있다. self invocation을 강제로 발생시켜서 확인해보자. 기존의 cacheTest의 메소드를, 호출하는 것이 아니라, 컨트롤러에서 해당 foo()를 호출하고, foo에서 cacheTest를 호출하게 한다. 이렇게 되는 경우에는,당연히 cacheTest를 호출하는거고, 캐시를 타는거니까 캐싱이 타게될 것같지만 다른 주소를 호출하게 된다. 즉 캐싱이 ..
개념만 둥둥 떠있고, 정확하게 공부를 하지 않은, 어노테이션들에 대해서 공부를 하려고한다. 프로젝트를 진행하면서, 잠깐 쓰고 또 까먹고하는걸 확실히 익혀보자 @RequestMapping이나, @PostMapping같은거 말고, 잘 안쓰는것들에 대해서 한번 공부를 해보자 1. @RequestBody jsp나, view단에서, ajax로 통신한다고 가정해보자 객체 통신이라 무조건, Post방식을 사용해야한다. (Get으로도 할수있지만, 일일히 하나씩 set하는 개발자는 없을것이다.) Json.stringify는, json형태의 변수를 string 형으로 변환 시켜주는것이다. Json데이터를 string으로 Controller에다가 보내게되면, Controller에서는 이 String이 Json형식이라는 것을..
스프링부트에서는 기존에 사용하던 뷰 템플릿인 jsp가 아닌, mustache 사용을 권하고있다. 관련되서, 이것저것 설정하는 것과, controller에서 주입 받은 모델을 사용하는 방법등을 포스팅한다. 우선 제공하는 템플릿이기 때문에,scr/resource/templates 하위에 둔다. 기본적으로 프로젝트 생성하면 생기는 경로이구, 해당 경로를 사용한다. 우선 머스테치와 유사하게 타임리프나 프리마커 등 템플릿들이 있는데, 머스테치의 장점은 아래와 같다. - 문법이 다른 템플릿보다 심플하다. - 로직 구현이 불가하여, view만의 역할을 보장합니다. - 인텔리제이 무료버전에서도 플러그인을 지원한다고하는데, 저는 프로젝트를 여러개 띄워놓고 개발하는게 편해서, 이클립스를 사용합니다. 컨트롤러에서 view로..