일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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스터디
- Flutter
- K8S
- JPA
- Kafka
- 알고리즘공부
- 스프링 공부
- querydsl
- JPA공부
- 프로그래머스
- Axon framework
- 플러터 개발
- nestjs
- JPA예제
- 자바공부
- 기술면접공부
- 스프링
- 자료구조공부
- 코테준비
- 코테공부
- 스프링부트
- JPA 공부
- nestjs공부
- nestjs스터디
- 기술공부
- 플러터 공부
- 스프링공부
- DDD
- 카프카
- Today
- Total
목록Develop (320)
DevBoi
RDB에서는 테이블 별로, 외래키를 매핑하며, 일대 다 혹은 다대다 의 형태를 가진다. 객체의 참조와, 외래키 매핑 관련되서 공부를 해보자 우선 간단한 예로, 팀과, 멤버에 대한 예제를 공부해보자 여러 사람이 한팀에 소속될 수 있다는 1:n관계라고 생각을 해보자 Member 에서는 Team에대한 관계와 조인 컬럼을 설정해준다. Team은 사실 별건없다. Lombok 을 사용해서 Getter,Setter도 직접 달아주었는데, 이건, 너무 불편해서 그냥 쓰기로했다 ㅋㅋ (매번 메소드 귀찮다) 이렇게 만 하면, 자동으로 PK,FK를 매핑해주는 테이블을 생성해준다. 예제 코드를 이렇게 작성해서 한번 테스트 해보자 뭐 잘들어간다. 추가로 위의소스에서 약간 수정한 내용은 PK가 id 자동생성 값일때는 String ..
1. 객체, 테이블 매핑 @Entity @Entity,가 붙으면, JPA에서 관리를 하는 클래스, 객체가 된다. 대부분 디폴트로, 객체이름과 테이블이름은 동일하게 따라가지만, 이런식으로 Table name을 붙이면, 해당 테이블이름으로 생성 및 관리가 된다. 밑에는 재부팅 후에, 확인된 내용이다. 현재는 테이블이 없어서, 한번 create ddl이 나갔고, 그 이후에는 재 기동 에도 create ddl이 나가지 않는다. 이렇게, 되는이유는 바로 이렇게 설정을 했기 떄문이다. update, create 등등이 있는데, create 는 재기동 될때마다, 새롭게 생성된다. 기존에 테이블이 있으면 drop , create를 하고 update로 설정하게 되면 없는 대상들만, 혹은 신규 컬럼만 새롭게 update한..
JPA는 느끼다싶이 객체를 넘겨서 대부분의 데이터작업을 진행한다. 그런데, 쿼리가 복잡하거나, 통계성쿼리가 필요하다면? 이건 객체로 푸는 것보다 쿼리로 푸는것이 맞다. 이때 JPA에서는 JPQL이라는 녀석으로 극복할수있게해준다. 근데, JPQL은 조금 다르다. 예를들어, MEMBER 테이블에서, 해당 대상을 전부 가져오는 걸 생각해보자 테이블 대상이라면, select * from member 뭐 이런식으로나, select id from member 이런식으로, 짠다. jpql도 역시 객체 지향쿼리여도 sql짜듯이 짜면된다. 강점은 언뜻 보기에 두가지 정도가있다. 1. 쿼리를 객체에 맞춰서 짜고, 방언에 따라, mysql,oracle등으로 자동 변환. 2. 페이징 관련 속성 set식으로, 자동 생성 쉽게 ..
Spring boot start app에서, JPA관련 CRUD 조회,생성 저장을 해보자 우선 테이블은 Entity를 사용하고, Pk는 컬럼 별로, Id를 달고, 테이블명이나 컬럼명은 다를 경우, 별도 어노테이션을 통해서 매핑 해주면된다. Member와 user에 대한 테이블 생성이 완료되었을 경우 CRUDrepository 라는 별도로 제공해주는 것을 상속받은 customRepo를 만들고, findAll(조회) save를 통해서,저장을 해본다. app이 실행할때, 해당 메소드가 돌기떄문에, 성공적으로 쿼리가 도는 것을 확인할수있다. 근데 여기서 문제, 데이터 베이스에서 find한 값을가져와서, 속성만 set을 해주면 자동 수정 저장이 될까? 이걸 한번 테스트 해보고싶었다. 특정 조건에 맞는 객체를 가져..
JPA 는 개발자가 SQL을 쓰지 않고, 개발을 할수 있게 해준다. 즉, 객체에 SET,GET을 하는 것으로 SELECT, INSERT 작업을 할수 있게해준다. JPA는, Learning curve가 심해서, 자세히 모르고, 실무에 도입하게 되면 망한당 우선 SQL중심적인 개발이, 현재 중요한 키워드이다. CRUD를 짜고, SQL을 짜고.... 애플리케이션 개발이... 객체 지향인데 SQL에 목을 메게된다. SQL 개발의 문제는..? 1. 필드추가할때 한개의 필드가 추가되면, 전체 SQL이 도는 곳에 전체 필드를 추가해줘야한다. 즉 SQL 의존적 개발을 하게된다. 2. 패러다임의 불일치 객체 지향 프로그래밍은 추상화, 캡슐화, 정보은닉, 상속, 다형성등 많은 걸 지원해준다. 객체와 관계형 데이터 베이스의..
JPA를 개발하면서, N+1문제에 대한 얘기가 많이나온다. N+1이란 어떤걸까? 어떻게 해결해야할까? 우선 N+1 이란, 어떤 게시물의 테이블을 POST라고 두고, Post에 달린 댓글을 Comment라고 두자 한게시물에는 여러개의 댓글이 달릴것이고, 우리는 이것을 @OnetoMany로 둔다. 자 그러면, 페이징을 뿌릴때나, 특정조건에 Post테이블을 findAll해본다고하자 우선, 그전에 JPA에서는 각각의 fetch방법이 존재한다. fetch란 뭘까? fetch란 특정 한개의 Entity 즉 테이블을 조회할때, 연관관계에 있는 객체들을 어떻게 가져올까? 라는 전략이다. 해당 전략은 크게 Eager, Lazy가 있다. Eager은 연관관계에 있는 Entity를 모두 가져오고 Lazy는 getter로 접..
간단하게, 전체적인 구조를 잡기 위해 회원가입에 대한 로직흐름을 구현하였다. 우선 회원 가입 창이다, jsp 쪽 꾸미는 소스는 귀찮아서, 그냥 bootstrap 아무거나 복붙했다 ㅋ; input name에 대한값을 Entity와 맞춰주었고, url에 회원가입 url을 넣었다. 해당 Entity이다, 간단하게 몇가지 정보만 받을수 있게끔 구현하였다. 컨트롤러로 매핑하였고, service를 호출하여, 객체를 넘긴다. 패키징은 간단하게 이렇게 구성하였다. 기존 mybatis를 사용할때는, controller - service(iml) - dao(mapper)였는데 JPA에 맞게, Controller - service - Repository로 설정을 하였다. Repository에선, 이렇게 간단하게 findby..
최근에 많이 나온 지식중에 하나인 , webflux가 있다. 이게 뭘까...? 언뜻보기에는 프론트엔드 사용기술같기도하다... 스프링의 주요기능, IOC : 제어의 역전, 개발자가 프로그램 코드를 제어하고, 객체 생성 부터 생명주기를 관리했다면, 스필은 컨테이너가 이걸 제어한다. DI : 객체 내부가 아닌, 외부에서 값을 set해서 세팅해주는 것이다. 그러면 webflux 는? 이건 스프링 5에서 쓰는 것이다. Spring framework 5에서는 다음과 같은 특징들을 가진다. -JDK 8부터 지원 -Kotlin 지원 -호환 라이브러리 변경, -Reactive Progamming Reactive Programming??이건 뭥미? 프론트 리액트랑관련이 있는건가?? => 응 전혀 아니얌 1. Webflux..
JPA 설정이 기초적인 부분이 완료되었다. 이제 Entity를 생성하고, 재 부팅 해보자. JPA는 객체 지향적 ORM 방식으로 개발할수있도록 도와주는 api중하나이다. 개발자가 쿼리보다는 객체에 신경을 쓸수있도록 도와주고, 충분한 학습이 뒷받침 되면, 아주 좋은 성능을 낸다고한다. 이런식으로 id를 pk로 주고, 재부팅한다, 이렇게 자동적으로 sql에서 생성을 하게된다. ddl-auto 가 update이기때문에, 해당 컬럼을 추가하게 되면 이렇게 반영이된다. @Table , Entity 가 기본적으로 이름이 동일한 테이블을 생성 및 찾지만, 특정 테이블 이름과 매핑할수도있다. @Column(name ="???") 동일한 이름이 아닌, 특정 컬럼이름으로 할수있다. 예) 아 우선 그전에, 자동 재기동을 a..
h2로, 간략하게테스트 할수도있지만 h2는 단순 테스트 용이니니까 실제 db를 사용해서 테스트를 해보자 우선 저번에 db 연결 및 , 스키마 생성(db1까지 완료했다.) 이제 스프링 쪽 설정 파일을 변경해주어야 한다. 우선 이런식으로 yaml파일을 수정해준다. 1. database-platform : mysql 이나 마리아 오로라 등등을 선택해준다. 그리고 dialect에 대한 설정이 있는데, 이건 방언이라고 하는데, db와 쿼리가 각자 달라서, 다른 경우에도 ORM이 되도록 설정해주는 것이다. 2. show-sql : sql 로깅, debug처럼 출력이된다. 3.open-in-view : 영속성 관계를 보장해준다. service ~ repo 까지의 관계에서 해당 트랜잭션을 보장해준다. 쉽게 말해서, 트..