반응형

에디 135

@Autowired vs @Inject vs @Resource

가장 많이 사용하는 @Autowired는 뭘까? 그와 비슷한 @Inject, @Resource는 무엇일까? 오늘 재직중인 회사에서 재미있는 여러가지 키워드를 들었습니다. 궁금한 건 못참으니 학습하여 정리해보겠습니다. 먼저 위에 3가지의 공통점은 의존 관계를 맺어주는 것을 말합니다. 해당 애노테이션을 사용한 후 클래스를 선언하면 작성한 클래스와 작성된 클래스는 의존 관계가 맺어지게 됩니다. @Component public class Load { @Autowired private SuperCar superCar; // superCar class DI @Inject private GoodCar goodCar; // GoodCar class DI } 다음으로 3가지의 차이점으로 아래의 표를 참조해주세요. @Au..

Study/spring 2021.02.18

[백기선님의 자바 라이브 스터디] 6주차 - 상속

www.youtube.com/watch?v=HLnMuEZpDwU 목표 자바의 상속에 대해서 학습하세요. 학습할 것 (필수) 자바 상속의 특징 super 키워드 메소드 오버라이딩 다이나믹 메소드 디스패치 (Dynamic Method Dispatch) 추상 클래스 final 키워드 Object 클래스 자바 상속의 특징 상속이란? 상위 클래스에서 선언 된 변수나 메서드를 하위 클래스에서 동일하게 사용할 수 있다. 자바 상속은 extends 를 사용합니다. 모든 클래스는 Object 객체를 상속받고 있습니다. public class Study extends Basic { // 상속 } 사용하는 이유? 코드의 재사용성을 높여주고 클래스 간 계층구조를 분류하고 관리하기 편해진다. 상속에는 여러가지 종류가 있습니다...

Study/java 2021.02.17

[Querydsl] 성능개선 - 3편 ( group by, 커버링 인덱스, update )

이 글은 우아한 형제들 콘서트에서 이동욱님의 영상을 보고 정리를 위한 글입니다. 이 글에 작성된 예시는 모두 Github에 올려두었습니다. Group By 최적화 Mysql 사용 시 index가 걸려있지 않는 컬럼을 group by 할 경우 file sort가 발생합니다. Index가 걸려있지 않는 경우 select * from house group by name Index가 걸려있는 경우 select * from house group by id file sort가 발생하면 성능이 떨어질 수 밖에 없습니다. 이 경우 order by 절에 null을 넣으면 file sort가 발생하지 않습니다. select * from house group by name order by null 하지만 안타깝게도 Quer..

Develop/spring-data 2021.02.04

[Querydsl] 성능개선 - 2편 ( N + 1 )

이 글은 우아한 형제들 콘서트에서 이동욱님의 영상을 보고 정리를 위한 글입니다. 이 글에 작성된 예시는 모두 Github에 올려두었습니다. N + 1 Entity 기반인 Jpa, Querydsl 을 사용하다 보면 N + 1은 한번 씩 겪는 문제라고 생각합니다. N + 1이 무엇이고 왜 발생하는지 알아보겠습니다. 먼저 아래의 코드를 살펴보겠습니다. @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @DynamicUpdate @DynamicInsert public class House { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String n..

Develop/spring-data 2021.02.01

[Querydsl] 성능 개선 1편

이 글은 우아한 형제들 콘서트에서 이동욱님의 영상을 보고 정리를 위한 글입니다. 이 글에 작성된 예시는 모두 Github에 올려두었습니다. 1. 동적 쿼리 사용 시 BooleanExpression을 사용하자! Querydsl에서 동적쿼리 사용방법은 조건문에 null을 넣으면 조건문이 무시되는 방법을 사용하면 됩니다. public Staff dnamicQuery(String name) { return queryFactory .selectFrom(staff) .where(name == null ? null : name) .fetchOne(); } 위처럼 코드를 작성한다고 가정했을 때 동적 조건이 많아진다면 쿼리는 매우 복잡해질 것입니다. 그래서 BooleanExpression을 리턴하는 메소드를 생성하여 사..

Develop/spring-data 2021.01.29

[도서] Object - 객체 설계

Object 도서를 구입 후 정리 시작! Object 도서는 예제 소스와 함께 이론이 정리되있기 때문에 모든 예제 소스는 github에 있습니다. 이 블로그는 github에서 작성한 글을 정리하여 옮겨놓은 글입니다. 문제가 있는 코드 모든 소프트웨어 모듈에는 세 가지 목적이 있다. 실행 중에 제대로 동작하는것 변경을 위해 존재하는 것 코드를 읽는 사람과 의사소통하는 것 객체 사이의 의존성의 문제가 있다. 객체지향 설계는 서로 의존하면서 협력하는 객체들의 공동체를 구축하는 것 애플리케이션의 기능을 구현하는 데 필요한 최소한의 의존성만 유지하고 불필요한것 의존성을 제거하는 것 이 코드는 결합도가 높은 코드입니다. 좋은 설계는 결합도를 낮춰 변경이 용이한 설계를 만드는 것입니다. 설계 개선하기 개선방법 각 객..

Study/java 2021.01.05

[백기선님의 자바 라이브 스터디] 5주차 - 클래스

www.youtube.com/watch?v=HLnMuEZpDwU 목표 자바의 Class에 대해 학습하세요. 학습할 것 (필수) 클래스 정의하는 방법 객체 만드는 방법 (new 키워드 이해하기) 메소드 정의하는 방법 생성자 정의하는 방법 this 키워드 이해하기 클래스 클래스란 변수와 메서드 집합체이며, 객체를 정의하는 설계도입니다. 객체란? 자바는 객체지향 프로그램입니다. 객체지향 프로그램에서 모든 데이터를 객체로 취급합니다. 하나의 예로 스토어가 있고 스토어에서 일하는 직원들이 있다고 가정해보겠습니다. 아래의 코드를 참조해주세요. public class StoreClass { private String storeName; // 변수 private String address; // 변수 /** * 메서드..

Develop/java 2021.01.04

[백기선님의 자바 라이브 스터디] 4주차 - 선택문과 제어문

www.youtube.com/watch?v=HLnMuEZpDwU 목표 자바가 제공하는 다양한 연산자를 학습하세요. 학습할 것 선택문 제어문 정리하기에 앞서 모든 소스는 github에 있습니다. 선택문 자바에서 선택문은 크게 if문과 switch문 2가지가 있습니다. 먼저 if문에 대해서 알아보겠습니다. if문 if문은 크게 3가지 형태로 사용할 수 있습니다. if ( {조건문} ) { 로직 } if 문 내의 조건이 참일 경우 로직을 실행합니다. if ( {조건문} ) { 로직1 } else { 로직2 } if 문 내의 조건이 참일 경우 로직1을 실행합니다. if 문 내의 조건이 거짓일 경우 로직2를 실행합니다. If ( {조건문} ) { 로직1 } else if ( {조건문} ) { 로직2 } else ..

Study/java 2020.12.28

[백기선님의 자바 라이브 스터디] 3주차 - 연산자

www.youtube.com/watch?v=HLnMuEZpDwU 목표 자바가 제공하는 다양한 연산자를 학습하세요. 학습할 것 산술 연산자 비트 연산자 관계 연산자 논리 연산자 instanceof assignment(=) operator 화살표(->) 연산자 3항 연산자 연산자 우선 순위 (optional) Java 13. switch 연산자 간단한 용어 정리 정리하기에 앞서 관련용어를 정리해보겠습니다. 연산 ( operations ) 프로그램에서 데이터를 처리하여 결과를 얻어내는 것 연산자 ( operator ) 연산에 사용되는 부호, 기호 피연산자 ( operand ) 연산에 대상이되는 데이터 연산식 ( expressions ) 피연산자와 연산자로 연산을 하는 과정 public void expressi..

Study/java 2020.12.27

[백기선님의 자바 라이브 스터디] 2주차 - 자바 데이터 타입, 변수 그리고 배열

www.youtube.com/watch?v=HLnMuEZpDwU 목표 자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다. 학습할 것 프리미티브 타입 종류와 값의 범위 그리고 기본 값 프리미티브 타입과 레퍼런스 타입 리터럴 변수 선언 및 초기화하는 방법 변수의 스코프와 라이프타임 타입 변환, 캐스팅 그리고 타입 프로모션 1차 및 2차 배열 선언하기 타입 추론, var 프리미티브 타입이란? primitive type 프리미티브란 원시적인 이라는 뜻입니다. 그럼 원시적인 타입이라는 뜻이 되겠네요. Java에서는 메모리에 직접 값을 할당하는 변수를 프리미티브 타입이라고 합니다. 프리미티브 타입의 변수를 할당하면 JVM의 메모리 즉, Runtime Data Areas의 stack 영역에 저장됩..

Study/java 2020.12.23

[백기선님의 자바 라이브 스터디] 1주차 - JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가.

www.youtube.com/watch?v=HLnMuEZpDwU 목표 자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기. 학습할 것 JVM이란 무엇인가 컴파일 하는 방법 실행하는 방법 바이트코드란 무엇인가 JIT 컴파일러란 무엇이며 어떻게 동작하는지 JVM 구성 요소 JDK와 JRE의 차이 JVM이란 무엇인가? Java Virtual Machine 영어를 그대로 해석하면 자바 가상머신입니다. 가상머신의 장점은 새로운 가상 환경을 띄워동작할 수 있기 때문에 OS에 상관없이 동작시킬 수 있습니다. 그러한 가상 환경을 이용하여 자바 바이트코드를 실행시킬 수 있는 환경을 제공해줍니다. JVM이 없다면? 내가 생성한 파일을 컴파일하고 나온 바이트코드들이 OS마다 다릅니다. 이 말은 즉 Window에..

Study/java 2020.12.21

[Querydsl-JPA] Querydsl JPA를 사용하며.. "*" 아스타리스크 사용방법

개발할 때 테이블의 모든 컬럼을 조회할 경우가 있습니다. 그때 Querydsl-JPA를 사용할 때 어떻게 사용할 수 있는지 작성해보겠습니다. 모든 소스는 github에 올려두었습니다. 먼저 하고 싶은 쿼리가 어떤 것인지 작성해보겠습니다. select s.* , etc_option from staff s join store st on s.store_id = st.id where s.name = 'staffV' limit 1 이것과 동일한 Querydsl을 작성해보겠습니다. 먼저 Vo를 생성합니다. @Getter @Setter @ToString public class StaffEtcVo { private Staff staff; private String address; } 필드에 Staff Entity를 선..

Develop/spring-data 2020.12.20

nested exception is java.lang.IllegalArgumentException: No sources given

오늘도 어김없이 발생하는 Exception!! 증상 Querydsl-JPA를 사용중 에러가 발생했습니다. 에러를 보면 IllegalArgumentException 입니다. 쿼리를 생성할 때 잘못하면 보통 이 에러가 발생합니다. 그리고 No Sources Given.. 번역기를 돌려면 출저가 없다는 에러?? nested exception is java.lang.IllegalArgumentException: No sources given public StaffVo search(Long id) { return jpaQueryFactory .select(Projections.fields(StaffVo.class, staff.id, staff.name )) .where(staff.id.eq(id)) .fetchO..

TroubleShooting 2020.12.19

[Querydsl] Querydsl을 적용하며.. class 파일명 주의

querydsl을 적용한 프로젝트를 진행하면서 나온 이슈를 정리해보겠습니다. JPARepository에서 Querydsl을 사용할 수 있게 Custom(interface), impl 로 세팅이 되어있었습니다. 세팅방법은 여기를 참조해주세요. 데일리 미팅 도중 Custom Interface의 naming을 변경이 확정되었습니다. AS-IS : CustomizedDomainRepository TO-BE : DomainQueryRepository Customized란 단어는 너무 포괄적이어서 변경하기로 결정! 증상 Class명을 변경하고 Application을 실행하자 에러가 발생하였습니다. No property search found for type Staff! Staff는 Entity 객체입니다. 구현 된..

Develop/spring-data 2020.12.18
728x90
반응형