Spring Framework 39

Chapter 04. 실무 활용 - 순수 JPA와 Querydsl

순수 JPA repository와 Querydsl Ex) 순수 JPA repository (Spring Data JPA가 아닌 쌩 JPA) @Repository public class MemberJpaRepository { private final EntityManager em; private final JPAQueryFactory queryFactory; public MemberJpaRepository(EntityManager em) { this.em = em; this.queryFactory = new JPAQueryFactory(em); } public void save(Member member) { em.persist(member); } public Optional findById(Long id)..

Chapter 03. 중급 문법

프로젝션과 결과 반환 - 기본 프로젝션: SELECT 대상을 지정한다. 프로젝션 대상이 하나인 경우, 타입을 명확하게 지정 가능하다. 둘 이상인 경우는 튜플이나 DTO로 조회한다. Ex) 프로젝션 결과 반환 - 기본 List result = queryFactory.select(member.username). .... 위와 같이 result의 타입을 username 형태인 String으로 정해줄 수 있다. Ex) 프로젝션 결과 반환 - 튜플 조회 List result = queryFactory.select(member.username, member.age). .... 프로젝션과 결과 반환 - DTO Ex) 순수 JPA에서 DTO 조회 List result = em.createQuery( "SELECT ne..

Chapter 02. 기본 문법

QueryDSL vs JPQL Ex) member1 찾기 JPQL: Stiring 형태로 쿼리를 직접 작성하고 파라미터를 세팅한다. (setParameter()) QueryDSL: QMember라는 클래스가 있는데 이는 Member를 엔티티로 등록했기 때문에 자동으로 생성된 Q 클래스이다. QueryFactory 구문에서 FROM 절에서 테이블처럼 QMember 인스턴스를 쓸 수 있다. 파라미터를 바인딩 처리한다. @Test public void startJPQL() { String qlString = "SELECT m FROM Member m " + "WHERE m.username = :username"; Member findMember = em.createQuery(qlString, Member.cl..

Chapter 01. QueryDsl 프로젝트 생성 및 환경 설정

프로젝트 설정 dependency: Lombok, JPA, H2, starter 프로젝트 설정: 빌드 실행 배포 => 빌드 도구 => Gradle => 둘다 IntelliJ로 설정한다. 이렇게 해야 자바로 바로 실행할 수 있어서 속도가 빠르다. builde.gradle QueryDSL 사용하기 위해 다음과 같이 추가한다. gradle => clean gradle => compileQuerydsl 위 내용은 터미널로 다음과 같이 입력하는 것과 같다. ./gradlew clean compileQuerydsl 메이븐의 경우는 다음과 같이 clean 한 다음(target 폴더를 삭제), compile를 실행한다. 실행하고 나면 target 폴더가 생성되면서 Q클래스가 새롭게 생성된다. plugins { id '..

Chapter 01. Object와 의존 관계

1.1 DAO DAO(Data Access Object): DB를 사용해서 데이터를 조회하거나 조작하는 기능만 하도록 만드는 오브젝트을 말한다. 1.1.1 User public class User { String id; String name; String password; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setP..

머릿말

Spring이란 무엇인가? Java Enterprise application 개발에 사용되는 프레임워크를 말한다. 애플리케이션의 바탕이 되는 틀과 공통 프로그래밍 모델, API를 제공한다. 애플리케이션의 바탕이 되는 틀(Spring Container): 스프링 컨테이너 또는 ApplicationContext 라고 불리는 스프링 런타임 엔진을 제공한다. 독립적 동작할 수도 있고 보통 웹 모듈에서 동작하는 서비스나 서블릿으로 등록해서 사용한다. 공통 프로그래밍 모델: IoC/DI, 서비스 추상화, AOP 1) 스프링은 유연하고 확장성있는 코드를 만들 수 있도록 도와주는 객체지향 설계 원칙, 디자인 패턴의 핵심원리를 담고 있는 IoC, DI를 근간으로 한다. IoC, DI 방식을 따라 작성해서 스프링이 제공하..

Chapter 03. 스프링 시큐리티 웹 보안 이해

JWT(Json Web Token) JWT는 당사자 간에 정보를 JSON 객체로 안전하게 전송하기 위한 컴팩트하고 독립적인 방식을 정의하는 개방형 표준이다. 디지털 서명이 되어 있어서 확인하고 신뢰 가능하다. cf) 세션 클러스터링(session clustering) 두 개 이상의 WAS(Web Application Server)를 사용하는 경우, 로드밸런싱(대용량 트래픽 분산) 또는 Failover(장애 발생 시 예비 시스템으로 전환, 서버 이중화), Auto Scaling(AWS에서 EC2 인스턴스를 자동 생성, 삭제 서비스) 등의 대체된 WAS에개도 동일한 세션을 공유하는 기술 참고) https://somida.tistory.com/191 3.1 세션(Session)이란? 메모리 공유 서버 데이터베..

Chapter 02. 스프링 시큐리티 OAuth 2.0

2.1 구글 로그인 준비 구글 api 콘솔 새프로젝트 만들기 프로젝트를 만들면 프로젝트를 통해 구글 로그인이 가능하다. 동의 화면: 외부 체크 사용자 인증 정보 oauth 클라이언트 승인된 리다이렉션 URI: http://localhost:8080/login/oauth2/code/google (코드를 받을 수 있는 주소) oauth2 까지는 고정이다. 구글 로그인이 완료 되고 나면 구글 서버에서 나한테 인증 완료됐다는 코드(?)를 돌려준다. 우리는 이 코드를 통해 엑세스 토큰을 요청한다. 엑세스 토큰을 통해 구글 서버에 사용자의 개인 정보를 요청할 수 있다. 라이브러리 설치 yml 파일에 다음과 같이 추가한다. spring: security: oauth2: client: registration: goog..

Chapter 01. 스프링 시큐리티(Spring Security) 기본

1.1 환경 설정 디펜던시에 시큐리티를 추가하면 자동으로 localhost:8080/login, logout 페이지가 자동으로 생성된다. https://github.com/codingspecialist/Sringboot-Security-Basic-V1 쿼리를 복사 sql 적용 dependency mustache: jsp 대신에 머스태치를 이용 가능하다. yml 파일 mvc: view: ... 부분은 삭제한다. 디펜던시에 mustache를 등록하면 디폴트로 mvc에 경로가 잡힌다. 따라서 삭제 가능 server: port: 8080 servlet: context-path: / encoding: charset: UTF-8 enabled: true force: true spring: datasource: dr..

Chapter 11. 객체지향 쿼리 언어2 - 중급 문법

11.1 경로 표현식 경로 표현식 select m.username -> 상태 필드 from Member m join m.team t -> 단일 값 연관 필드 join m.orders o -> 컬렉션 값 연관 필드 where t.name = '팀A' 점을 찍어서 객체 그래프를 탐색할 수 있는 식을 경로 표현식이라고 한다. 상태 필드(state field): 단순히 값을 저장하기 위한 필드, 경로 탐색의 끝이며 더이상 탐색 X (불가) 연관 필드(association field): 연관 관계를 위한 필드 단일 값 연관 경로 대상이 엔티티인 경우를 말한다. ex) @ManyToOne, @OneToOne 묵시적 내부 조인 발생(join키워드 직접 사용), 탐색 O 컬렉션 값 연관 경로 대상이 컬렉션인 경우, e..