Web

    [Java] 자바 데이터타입, 변수 그리고 배열

    목차 (클릭시 해당 목차로 이동) 백기선님 자바 스터디 2주차입니다. 쉬운 주제일 줄 알았으나, 깊게 들어가면 몰랐던 부분들이 계속 나왔습니다. 그래서 내가 잘 모르는 부분은 좀 더 깊게 들어가며 정리했습니다. 특히 static이나 리터럴, 정수와 실수간의 형변환등에 대한 부분은 시간을 정말 오래쓰며 정리했습니다. 자바를 사용하지만 개념이 애매했던 부분들과 원리를 몰랐던 부분들을 자세히 정리할 수 있어서 좋았습니다. 학습할 것 프리미티브 타입 종류와 값의 범위 그리고 기본 값 프리미티브 타입과 레퍼런스 타입 리터럴 변수 선언 및 초기화하는 방법 변수의 스코프와 라이프타임 타입 변환, 캐스팅 그리고 타입 프로모션 1차 및 2차 배열 선언하기 타입 추론, var 프리미티브 타입 종류와 값의 범위 그리고 기본..

    [QueryDSL] EP1. QueryDSL 설정

    QueryDSL 사용에 앞서 설정을 해주도록 하겠습니다. 기본적으로 QueryDSL은 start.io 에서 dependency를 제공하지 않기 때문에 사용하기 위해서는 직접 설정해주어야 합니다. build.gradle 설정 plugins //querydsl 추가 id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" dependency //querydsl 추가 implementation 'com.querydsl:querydsl-jpa' 설정코드 plugin과 같이 맞물려서 빌드될때 SourceSets querydslDir이 있으면 인텔리제이같은 IDE들이 자동으로 소스폴더에 import 해줍니다. configurations querydsl이 compileCla..

    [Java] JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가.

    목차 (클릭시 해당 목차로 이동) 백기선님 Java 스터디를 뒤늦게 시작합니다. https://github.com/whiteship/live-study/issues?q=is%3Aissue+is%3Aclosed whiteship/live-study 온라인 스터디. Contribute to whiteship/live-study development by creating an account on GitHub. github.com Java 운영체제에 독립적 Java가 나오기 전 기존의 언어는 다른 운영체제에 적용하려면 많은 노력이 필요했지만, Java는 운영체제에 독립적이기 때문에 운영체제가 바뀌어도 같은 코드 그대로 동작할 수 있습니다. Java는 다른언어와 무엇이 다르기 때문에 Java로 작성된 프로그램은 ..

    [Data JPA] EP 6. 나머지 기능들

    목차 (클릭시 해당 목차로 이동) Projections close projection : 가져오고 싶은 부분만 딱 맞춰서 쿼리날려서 가져오기 open projection : 일단 엔티티를 다 가져와서 애플리케이션에서 골라내기 인터페이스 기반의 close projection 만약 전체 엔티티가 아니라 회원 이름만 딱 조회하고 싶으면 보통 DTO를 사용합니다. projections는 엔티티 대신에 DTO를 조회할때 사용하는 기능입니다. 인터페이스만 정의하면 실제 구현체는 스프링 데이터 jpa가 프록시 기술을 이용해 만들어줍니다. package study.datajpa.repository; import org.springframework.beans.factory.annotation.Value; public i..

    [Data JPA] EP 5. 스프링 데이터 JPA 분석

    목차 (클릭시 해당 목차로 이동) 스프링 데이터 JPA 구현체 분석 스프링 데이터 JPA 구현체 찾기 JpaRepository의 구현클래스 중에서 SimpleJpaRepository가 스프링 데이터 JPA 구현체 입니다. SimpleJpaRepository를 들어가보면 @Repository, @Transactional(readOnly = true)가 걸려있습니다. 특징 1. jpa의 exception을 spring의 exception으로 매핑해 바꿔줍니다. (서비스계층으로 exception이 바껴서 올라감) 그래서 하부 구현기술(예를들어 jpa->jdbc)을 바꿔도 기존 비즈니스 로직에 영향을 주지 않습니다. 2. 구현체의 메소드에서 @Transaction이 걸려있기 때문에 스프링 데이터 JPA를 Tra..

    [Data JPA] EP 4. 확장 기능

    목차 (클릭시 해당 목차로 이동) 사용자 정의 리포지토리 구현 Data JPA를 사용하다보면 인터페이스의 메소드를 직접 구현해야할 때가 있습니다. JPA 직접 사용(EntityManager) JDBC Template 사용 MyBatis 사용 데이터베이스 커넥션 직접사용 QueryDSL 사용 이때 Data JPA의 인터페이스를 직접 구현하는 것은 너무 많기때문에 Data JPA에서 사용자 정의 리포지토리 구현 기능을 제공합니다. 사용자 정의 리포지토리 구현 기능 사용법 직접 구현할 메소드가 있는 인터페이스 (아무이름) (ex. MemberRepositoryCustom) 을 만듭니다. 구현클래스 MemberRepository...Impl 로 이름을 짓고 MemberRepositoryCustom를 상속받아 메..

    [Data JPA] EP 3. 쿼리 메소드 기능 -2

    벌크성 수정쿼리 벌크성 수정쿼리는 영속성 컨텍스트를 거치지 않고 바로 DB에 쿼리를 날려 update를 하는 쿼리입니다. 예를들어 "어떤 나이 이상인 사람들의 나이를 전부 1살 올려라" 라는 요구사항을 구현할때 굳이 애플리케이션 로직에서 수행하지 않고 DB에 직접 쿼리를 날리는 것이 효율적일 때가 있습니다. 그럴때 사용하는 것이 벌크성 수정쿼리입니다. @Query에다가 직접 update쿼리를 작성합니다. 보통 벌크성 수정쿼리는 반환값으로 resultList가 아닌 수정된 데이터의 개수를 받습니다. 그럴 때 메서드에@Modifying을 적어주면 getResultList()가 아닌 executeUpdate()를 호출해서 수정된 데이터의 개수를 받을 수 있습니다. @Modifying @Query("update..

    [Data JPA] EP 2. 쿼리 메소드 기능

    목차 (클릭시 해당 목차로 이동) 메소드 이름으로 쿼리 생성 Data JPA에서 공통적으로 제공하는 메소드 이외에도 필요한 메소드가 있을 수 있습니다. 예를들어 "어떤 이름을 가진 회원중 나이가 15 이상인 회원을 구해라" 같은 쿼리는 엔티티에 의존한 쿼리입니다. 이럴 때도 Data JPA를 이용할 수 있습니다. 메소드 이름으로 쿼리를 생성할 수 있습니다. 이렇게 MemberRepository 인터페이스에서 해당 쿼리 이름으로 메소드를 선언만 해도 동작합니다. 하지만 이 방법을 사용하려면 Data JPA에서 정하는 메소드 이름 프로퍼티를 정확하게 맞추어 사용해야합니다. Spring Data JPA에서 메소드 이름에 대한 규칙은 공식문서에서 확인이 가능합니다. https://docs.spring.io/sp..

    [Data JPA] EP 1. 공통 인터페이스 기능

    공통 인터페이스 설정 Data JPA를 사용하는 방법 Repository를 interface로 만듭니다. JpaRepository를 상속받는데 이때 을 넣어주시면 됩니다. package study.datajpa.repository; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.Rollback; import org.sprin..

    [Spring] [IntelliJ] 정적리소스 서버 재시작없이 바로 반영하기

    스프링으로 이미지 업로드와 출력 기능을 구현하면서 업로드 한 파일을 바로 출력할때 반영이 안되는 상황이 있었습니다. 이미지를 업로드하자마자 바로 반영은 안되지만 인텔리제이를 한번 눌러서 저절로 폴더를 새로고침하고 그 다음 브라우저를 새로고침하면 이미지가 반영되게 만들었습니다. 1. devtools dependency 추가 dependencies { ...생략... developmentOnly("org.springframework.boot:spring-boot-devtools") } 2. application.yml 추가 devtools에 livereload.enabled -> true restart.enabled -> true thymeleaf.cache -> false (저는 타임리프를 사용중이어서 그..