일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- DDD
- 스프링
- nestjs스터디
- K8S
- 자료구조공부
- 스프링부트공부
- Flutter
- 스프링부트
- 알고리즘공부
- 기술면접공부
- Axon framework
- 코테공부
- querydsl
- JPA공부
- 기술공부
- nestjs공부
- 코테준비
- 프로그래머스
- 카프카
- 자바공부
- 스프링 공부
- 스프링공부
- JPA예제
- JPA
- nestjs
- 플러터 개발
- JPA 공부
- JPA스터디
- Kafka
- 플러터 공부
- Today
- Total
목록Develop (320)
DevBoi
만약에 공통된 컬럼을 공통된 테이블에 다 쓴다? 예를 들어 수정,생성 시간에 대한 모든 값을 테이블 마다 필요하다라는 조건이 생겼다고 가정하자 요런 BaseEntity를 공통으로 가진다고 한다면, 요로케 category나, 슈퍼클래스에 대한 상속을 받으면 된다. 그렇게 되면 category에 대한 테이블은 아래와 같이 설계가 된다. 이렇게 슈퍼클래스에 대한 값도 테이블에 가지고 있게 된다. 참고로 Entity 클래스는 같은 Entity 나, mappedbySuperClass에 대한 것만 상속이 가능하니 참고해야한다.
자바나 객체는 상속관계가 존재하지만, 관계형 디비에는 해당 상속관계가 존재하지 않는다. 쉽게 말하면 상속관계 매핑은, 객체의 상속관계를 디비의 슈퍼타입 서브타입으로 매핑하는 것을 의미한다. 참고로 슈퍼타입 서브타입에 대해서는 별도 포스팅으로 진행하겠다. 무튼 이렇게 상속 관계 에 있을때 jpa 엔티티 설게를 다음 과 같이 했다고 가정한다. 뭐 굳이 코멘트가 필요 없을 정도이지만, 무튼 Movie라는 엔티티가 있고 뮤직과 북이 이 무비를 상속 받아서, 엔티티를 한다고 가정하자, 이대로 구동하면 디비 테이블 설계 쿼리는 아래와 같이 나간다. Hibernate: create table movie (dtype varchar(31) not null, id bigint not null, name varchar(25..
의존성 주입에 대해서는 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를 호출하는거고, 캐시를 타는거니까 캐싱이 타게될 것같지만 다른 주소를 호출하게 된다. 즉 캐싱이 ..
Spring invoaction이란 뭘까? 우선 invocation은 메소드 호출과 같은 의미이다. 메소드를 호출 이라는 의미이다. 1) 간단한 리플렉션 및 invoke 예제 우선 리플렉션으로, 클래스를 받아서, 다른 곳의 클래스의 메소드를 호출해보자 1) TestReflection으로, 리플렉션이 될만한 클래스, 그리고 하위에 메소드를 선언해준다. 2) 해당 다른 클래스에서 해당 클래스 파일을 리플렉션, 해당 메소드를 가져와서, 호출해보자 실제로, callbyName이라는 메소드를 invoke하고, 해당 값으로 콘솔에 gd가 출력이 되었다 이렇게 리플렉션으로 해당 클래스파일을 가져와서 호출할수 있다. 우선 리플렉션은, 그 클래스파일의 타입을 알지 못해도, 해당 클래스의 메소드를 사용할수있다. 해당 리플..
1. AOP 에 대한 개념 AOP란 aspect Oriented Programming의 약자로, 관점 지향 프로그래밍이다. 쉽게 말하면 어떤 로직을 핵심적인 관점으로 나눠서 모듈화를 한다는 것이다. 관점은 대부분 이렇다 = 비즈니스 로직, DB연결, 로깅, 파일 입출력 등등 다른 부분에서 공통적으로 쓰는 로직들을 묶어서 모듈화하고, 이를 관점화 하는 것을 AOP라고 한다. 2. 주요 핵심 개념 1. aspect : 위에서 설명한 흩어진 관심사를 모듈화 하는작업 2. target : aspect를 적용하는 곳 (class 단위 or 메소드 단위 등등 패턴으로도 적용가능) 3. advice : 실질적으로 어떤일을 해야할지에 대한 것, 실질적인 부가기능을 담은 구현체이다. 4.jointPoint :advice..
POJO란 Plain Old Java Object, 즉 단순한 자바 오브젝트를 의미한다. POJO란 객체 지향적인 원리에 충실하면서, 환경과 기술에종속 되지않고 필요에 따라 재활용 될수 있는 방식으로 설계된 오브젝트이다. 1. 특정 규약에 종속 x 이게 무슨 말이냐면, 자바 언어와 꼭 필요한 api외에는 종속을 하면 안된다. 다른 규약과 종속성이 생기는 순간 POJO는 더이상 신뢰할수있는 특정 클래스가 아니게 되고 해당 클래스에 객체 지향적인 설계 기법을 적용하기가 어렵다. 2. 특정 환경에 종속되지 않는다. 특정 기업의 프레임워크나 서버에서만 동작이 가능하면 POJO가 아니다. 자바언어와 범용성있게 어디서나 사용가능한 것들만 종속되어야 한다 (자바는 플랫폼에 독립적으로 실행가능하다.) 3. 객체 지향적..