본문 바로가기

Develop

(319)
[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..
[Spring boot WebFlux] 프로젝트 시작하기 1. Start.spring.io 접속, 몇몇 필요한 의존성들을 추가해주고, 해당 추가 사항을 바탕으로 프로젝트를 생성, 이클립스에서 해당 프로젝트를 오픈해준다. parent에서는 그룹아이디나 버전에 대한 정보가 들어가있다. 그리고 해당하위에는 java 버전, 또한 프로젝트 속성값들에 대한 내용들이 있다.
[리액티브 프로그래밍] 리액티브 프로그래밍이란? 리액티브 프로그래밍을 써야할 정도의 대규모 서비스가 많지 않았다. 작은 서비스의 서버에서, 대규모에 대한 걸 처리하려면 단순히 서버를 더 투입하면 되지 라는 생각이지만 사실 요새는 그렇지 않다. 작은 스타트업도 대규모의 데이터를 처리해야한다. "기존 자원을 더 효율적이고 일관성 있게 사용하는 방법?" -> 리액티브 스트림이다.(수요 조절에 기반한다.) 논블로킹, 비동기 프로그래밍 모델 함수형 프로그래밍 스타일 스레드를 신경 쓸 필요 없는 동시성 또한 메소드 처리 이후에, doOnNext,doOnError,DoOnComplete 등을 사용해서, 해당 이벤트 이후를 핸들링 할수 있다. 리액티브 프로그래밍에서 가장 중요한 두개의 개념을 알아야한다. publisher - 서비스를 발급해주는 사람 subscrib..
1. Spring boot 기초 개념 익히기 Spring boot 기초 개념을 익혀보자 스프링 부트는 우선 뭐가 장점일까? 1. 프로젝트 생성 우선 spring.io에서 해당 스프링 프로젝트를 편하게 시작할 수 있다. 필요한 라이브러리를 편하게 선택해서 바로 시작할수 있다. 또한, devtool에 대한 편하게 선택하여, 프로젝트를 생성할 수 있다는 것이 장점이다. 버전에서는 snapshot은 개발중인 버전, m2 마일스 스톤으로 배포를 한 버전이지만 바뀔수 있다. 2. 의존성 관리 pom.xml에서 spring-boot-starter, spring-boot-dependencis가 있고, dependancy manager를 통해 의존성에 대한 버전관리를 자동으로 해준다. 물론 해당 xml에서 버전을 명시해서, 고정으로 사용할수도 있지만 스프링 부트에..
[JPA] 매핑 정보 상속 관련 공부 만약에 공통된 컬럼을 공통된 테이블에 다 쓴다? 예를 들어 수정,생성 시간에 대한 모든 값을 테이블 마다 필요하다라는 조건이 생겼다고 가정하자 요런 BaseEntity를 공통으로 가진다고 한다면, 요로케 category나, 슈퍼클래스에 대한 상속을 받으면 된다. 그렇게 되면 category에 대한 테이블은 아래와 같이 설계가 된다. 이렇게 슈퍼클래스에 대한 값도 테이블에 가지고 있게 된다. 참고로 Entity 클래스는 같은 Entity 나, mappedbySuperClass에 대한 것만 상속이 가능하니 참고해야한다.
[고급 매핑] 상속관계 매핑 자바나 객체는 상속관계가 존재하지만, 관계형 디비에는 해당 상속관계가 존재하지 않는다. 쉽게 말하면 상속관계 매핑은, 객체의 상속관계를 디비의 슈퍼타입 서브타입으로 매핑하는 것을 의미한다. 참고로 슈퍼타입 서브타입에 대해서는 별도 포스팅으로 진행하겠다. 무튼 이렇게 상속 관계 에 있을때 jpa 엔티티 설게를 다음 과 같이 했다고 가정한다. 뭐 굳이 코멘트가 필요 없을 정도이지만, 무튼 Movie라는 엔티티가 있고 뮤직과 북이 이 무비를 상속 받아서, 엔티티를 한다고 가정하자, 이대로 구동하면 디비 테이블 설계 쿼리는 아래와 같이 나간다. Hibernate: create table movie (dtype varchar(31) not null, id bigint not null, name varchar(25..
[Spring] 의존성 주입에 대한 방법 정리 의존성 주입에 대해서는 3가지 방법이 존재한다. 1. 필드 주입 변수 선언부에 @Autowired를 붙인다. 예) 필드, 즉 변수 선언부에 @Autowired를 붙이면 된다. 2. 생성자 주입 사실상 저렇게 생성자에 주입을 받아도 되지만, final 과 RequiredArg 어노테이션을 사용해서 주입을 받아도된다 즉 lombok으로 의존관계를 설정하는 방법이다. 오류는 다른 이유에서 나는 거니까 무시하고, 해당 내용만 참고하도록 하자 3. 메소드 주입 setter 메소드를 사용해서 해당 의존성을 주입 받을 수도 있다. 필드고, 생성자고, 메소드고 를 떠나서 다 똑같이 @Autowired를 쓰고 있다는 것을 알수 있다. 이게 어떤식으로 동작을 하는걸까? 우선 @AutoWired는 의존관계를 주입할때 사용하..