RESTful Web Service 개발 - User Service API 구현_1
·
공부/Spring
Spring Boot를 이용한 RESTful Web Services 개발 User Service API 구현 User 도메인 클래스 생성 User.java 생성 (com.example.restfulwebservice) @Data @AllArgsConstructor public class User { private Integer id; private String name; //private Date joinDate; Date 클래스 미사용 private LocalDateTime joinDate; } 강의에선 joinDate의 타입을 Date로 지정하였지만 나는 LocalDateTime으로 지정했다. UserDaoService.java 생성 Dao는 DB와 관련된 코드, Service는 비즈니스 로직을 작성..
RESTful Web Service 개발 - Spring Boot로 개발하는 RESTful Service
·
공부/Spring
Spring Boot로 개발하는 RESTful Service Spring Boot 개요 Spring Boot 스프링 기반의 단독 실행 가능한 어플리케이션을 개발하기 위한 플랫폼 상용화 가능한 수준의 어플리케이션을 만들 수 있음 spring 보다 spring boot를 사용하면 최소한의 설정만으로 플랫폼과 서드 파티 라이브러리 등을 사용할 수 있음 spring boot에 Tomcat, Jett나 Undertow 웹 어플리케이션 서버가 내장되어 있어 별도로 설치하지 않아도 된다. 실행에 필요한 많은 API들이 spring boot에 'starter'라는 컴포넌트를 통해 쉽게 사용할 수 있음. 실행에 필요한 다양한 설정을 auto configuration으로 자동으로 설정할 수 있다. 상용화와 관련된 통계, ..
RESTful Web Service 개발 - WEB Service 개발 방법 SOAP과 REST의 이해
·
공부/Spring
Spring Boot를 이용한 RESTful Web Services 개발 WEB Service 개발 방법 SOAP과 REST의 이해 Web Service & Web Application Web Service World Weid Web(WWW)를 통해 이기종 간의 통신 서비스를 제공한다. 네트워크를 통해 특정한 서버의 포트를 열어 놓고, 클라이언트의 요청을 받은 HTML, JSON, XML, images 등과 같은 웹 문서를 제공한다. 웹 서비스는 WWW, Internet, HTTP의 기술을 사용하는 웹을 통해 특정한 도메인의 문제를 해결하기 위한 Web Application을 뜻하기도 한다. 즉, 네트워크 상에서 서로 다른 종류의 컴퓨터들 간에 상호작용하기 위한 소프트웨어 시스템이다. Web Servic..
Query DSL - 정렬, 페이징, 집합
·
공부/JPA
Query DSL게시글은 대부분 인프런의 김영한님의 강의인 '실전! Query DSL' 기반으로 내용을 정리했습니다. 정렬 정렬 기준은 다음과 같다. 회원 나이 내림차순(desc) 회원 이름 오름차순(asc) 단, 회원 이름이 없으면 마지막에 출력한다. @Test public void sort() { em.persist(new Member(null, 100)); em.persist(new Member("member5", 100)); em.persist(new Member("member6", 100)); List result = queryFactory .selectFrom(member) .where(member.age.eq(100)) .orderBy(member.age.desc(), member.usern..
Query DSL - 결과 조회
·
공부/JPA
Query DSL게시글은 대부분 인프런의 김영한님의 강의인 '실전! Query DSL' 기반으로 내용을 정리했습니다. 결과 조회 fetch() : List 조회, 데이터가 없으면 빈 List 반환 fetchOne() : 단 건 조회 결과가 없으면 : null 결과가 둘 이상이면 : NonUniqueResultException 발생 fetchFirst() : limit(1).fetchOne() fetchResults() : 페이징 정보 포함, total count 쿼리 추가 실행 fetchCount() : count 쿼리로 쿼리 변경해서 count 수 조회 fetchResults fetch, fetchOne, fetchFirst의 경우는 굳이 실행 안해봐도 어떻게 나오는지 알테니 fetchResults부터..
Query DSL - 검색 조건 쿼리
·
공부/JPA
Query DSL게시글은 대부분 인프런의 김영한님의 강의인 '실전! Query DSL' 기반으로 내용을 정리했습니다. 검색 조건 쿼리 코드로 먼저 확인해보자. @Test public void search() { Member findMember = queryFactory .selectFrom(member) .where(member.username.eq("member1") .and(member.age.eq(10))) // .where(member.username.eq("member1"), member.age.eq(10)) 와 동일 .fetchOne(); assertThat(findMember.getUsername()).isEqualTo("member1"); } .select와 .from의 경우는 .selec..
QueryDSL - 기본 Q-Type 활용
·
공부/JPA
Query DSL게시글은 대부분 인프런의 김영한님의 강의인 '실전! Query DSL' 기반으로 내용을 정리했습니다. 기본 Q-Type 활용 Q 클래스 인스턴스를 사용하는 방법 별칭 직접 지정 QMember qMember = new QMember("m"); 기본 인스턴스 사용 QMember qMember = QMember.member; 기본 인스턴스는 QMember 클래스 파일에 가보면 아래 코드로 만들어져 있는 걸 확인할 수 있다. public static final QMember member = new QMember("member1"); 저번에 작성한 테스트 코드에 적용해보자. //QMember m = new QMember("m"); // 별칭 주는 방법 QMember m = QMember.membe..
Query DSL - JPQL vs QueryDSL
·
공부/JPA
Query DSL게시글은 대부분 인프런의 김영한님의 강의인 '실전! Query DSL' 기반으로 내용을 정리했습니다. JPQL vs QueryDSL 엔티티 찾기 JPQL로 엔티티 하나를 찾아오려면 아래와 같이 작성하면 된다. @Test public void startJPQL() { // member1 찾기 String qlString = "select m from Member m where m.username=:username"; Member findMember = em.createQuery(qlString, Member.class) .setParameter("username", "member1") .getSingleResult(); assertThat(findMember.getUsername()).is..
Query DSL - 예제 도메인 모델
·
공부/JPA
Query DSL게시글은 대부분 인프런의 김영한님의 강의인 '실전! Query DSL' 기반으로 내용을 정리했습니다. 예제 도메인 모델 예제는 익숙하고도 간단한 Member와 Team이다. Member의 컬럼은 id, username, age, team이 있고 Team의 컬럼은 id, name, members가 있다. 둘의 연관 관계는 Member의 입장에서 보면 Member와 Team은 다대일이고, Team의 입장에서 보면 Team과 Member는 일대다이다. Member 클래스 어노테이션 @Entity @Getter @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) @ToString(of={"id", "username", "age"}) publi..
Query DSL - 스프링 부트 설정
·
공부/JPA
Query DSL게시글은 대부분 인프런의 김영한님의 강의인 '실전! Query DSL' 기반으로 내용을 정리했습니다. 스프링 부트 설정 application.yml 생성 및 설정 src/resources에 있던 application.properties 파일을 지우고 application.yml 파일을 생성 후 아래 코드를 작성한다. spring: datasource: url: jdbc:h2:tcp://localhost/~/querydsl username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: # show_sql: true format_sql: true loggi..
Query DSL - Query DSL 설정과 검증
·
공부/JPA
Query DSL게시글은 대부분 인프런의 김영한님의 강의인 '실전! Query DSL' 기반으로 내용을 정리했습니다. Query DSL 설정과 검증 build.gradle 설정 build.grable에 Query DSL 라이브러리 및 설정 추가 buildscript { ext { queryDslVersion = "5.0.0" } } plugins { id 'org.springframework.boot' version '2.7.2' id 'io.spring.dependency-management' version '1.0.12.RELEASE' // querydsl 추가 id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" id 'java' } group = 's..
Query DSL - 프로젝트 환경설정
·
공부/JPA
Query DSL게시글은 대부분 인프런의 김영한님의 강의인 '실전! Query DSL' 기반으로 내용을 정리했습니다. 프로젝트 환경 설정(springboot 2.7.2 기준) https://start.spring.io/ Build and run 설정 - IntelliJ IDEA로 변경 HelloController.class 생성 @RestController public class HelloController { @GetMapping("/hello") public String hello() { return "hello!"; } } 확인 lombok 설정 - install lombok 설정 - Enable annotation processing
Spring Data JPA - 네이티브 쿼리
·
공부/JPA
Spring Data JPA 게시글은 대부분 인프런의 김영한님의 강의인 '실전! 스프링 데이터 JPA' 기반으로 내용을 정리했습니다. 네이티브 쿼리 네이티브 쿼리는 JPA에서 제공하는 기능이며 일반적으로 우리가 사용하는 SQL을 사용할 수 있도록 해주는 기능이다. 가급적 네이티브 쿼리는 사용하지 않는 것이 좋다. 정말 최후의 수단으로.. 어쩔 수 없는 상황에만 사용하는 걸 권장한다. 스프링 데이터 JPA 기반 네이티브 쿼리 MemberRepository.interface @Query(value = "select * from member where username = ?", nativeQuery = true) Member findByNativeQuery(String username); MemberRepos..
Spring Data JPA - Projections
·
공부/JPA
Spring Data JPA 게시글은 대부분 인프런의 김영한님의 강의인 '실전! 스프링 데이터 JPA' 기반으로 내용을 정리했습니다. Projections 이 기능은 약간의 도움이 될 때가 있어 앞 부분보다는 잘 듣는 게 좋다. 엔티티 대신에 DTO를 편리하게 조회할 때 사용한다. 예를 들면 Member 엔티티가 아니라 Member의 이름만 조회하고 싶을 때 유용하다. 인터페이스 기반의 Closed Projections UsernameOnly.interface public interface UsernameOnly { String getUsername(); } MemberRespository.interface List findProjectionsByUsername(@Param("username") Stri..
Spring Data JPA - Query By Example
·
공부/JPA
Spring Data JPA 게시글은 대부분 인프런의 김영한님의 강의인 '실전! 스프링 데이터 JPA' 기반으로 내용을 정리했습니다. Query By Example Query By Example은 쿼리를 Example에 의해서 하겠다는 기능이다. 코드로 살펴보자. @Test public void queryByExample() { Team teamA = new Team("teamA"); em.persist(teamA); Member m1 = new Member("m1", 0, teamA); Member m2 = new Member("m2", 0, teamA); em.persist(m1); em.persist(m2); em.flush(); em.clear(); //Probe Member member = ne..