Spring 19

객체 지향 쿼리 언어(2)

QueryDSL쿼리를 문자가 아닌 코드로 작성해도, 쉽고 간결하며 그 모양도 쿼리와 비슷하게 개발할 수 있는 프로젝트Criteria처럼 JPQL 빌더 역할을 함이름 그대로 쿼리 즉 데이터를 조회하는 데 기능 특화됨querydsl-jpa: QueryDSL JPA 라이브러리querydsl-apt: 쿼리 타입(Q)을 생성할 때 필요한 라이브러리QueryDSL을 사용하려면 Criteria의 메타 모델처럼 엔티티를 기반으로 쿼리 타입이라는 쿼리용 클래스 생성 필요또한, com.mysema.query.jpa.impl.JPAQuery 객체 생성 필요 (→이때 엔티티 매니저를 생성자에 넘겨줌) 기본 Q 생성쿼리 타입(Q)은 사용하기 편리하도록 기본 인스턴스를 보관하고 있음별칭을 직접 지정해서 사용 필요 검색 조건 쿼..

Spring 2025.06.01

객체 지향 쿼리 언어(1)

JPQL == 객체 지향 SQLjava persistence query language● 테이블이 아닌 객체를 대상으로 검색하는 객체지향 쿼리● SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않음 JPQL은 결국 SQL로 변환된다 → SQL과 비슷하게 SELECT, UPDATE, DELETE 문 사용 가능( EntityManager.persist()를 이용해 엔티티를 저장하므로 INSERT문은 따로 없다 )//SELECT 문SELECT m FROM Member AS m where m.username = 'Hello'** JPQL은 별칭 필수 작성한 JPQL을 실행하려면 쿼리 객체를 만들어야함반환할 타입을 명확하게 지정 가능 = TypeQuery 객체 / 명확하게 지정 불가..

Spring 2025.05.25

길벗 코딩 자율 학습단 6주차

웹에서 요청 보내는 javascript 문법● document.querySelector() : 웹 페이지에서 특정 요소(버튼)을 찾아 반환자료형 변수명 = document.querySelector("#id_값");● addEventListener() : 특정 요소에 이벤트가 발생(버튼 클릭)했을 때 특정 동작(댓글 객체 전달)을 수행요소명.addEventListener("이벤트_타입", 이벤트_처리_함수)● fetch() : 웹 페이지에서 REST API 요청을 보냄 : HTTP 통신을 하는데 사용fetch('API_주소', { method: 'POST', //요청 메서드(POST, GET, PATCH, DELETE) headers: { //헤더 경로 "Content-Type":..

Spring 2025.05.25

값 타입

JPA의 데이터 타입● 엔티티 타입 : @Entity로 정의하는 객체 / 식별자를 통해서 추적가능● 값 타입 : int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 ○ 기본값 타입 - 자바 기본 타입, 래퍼 클래스 ○ 임베디드 타입 : 새로운 값 타입을 직접 정의해서 사용 기본 생성자 필수@Embeddable //값 타입 정의하는 곳에 표시@Embedded //값 타입 사용하는 곳에 표시 @AttributeOverride : 임베디드 타입에 정의한 매핑정보를 재정의 (엔티티에 설정해야함) 임베디드 타입이 null이면 매핑한 컬럼 값은 모두 null이 된다. 직접 정의한 타입은 객체타입 값 타입 복사..

Spring 2025.05.18

길벗 코딩 자율 학습단 5주차

테스트| 프로그림의 품질을 검증하는 것; 의도대로 프로그램이 잘 동작하는지 확인하는 과정 테스트 코드1. 예상 데이터 작성2. 실제 데이터 획득3. 예상 데이터와 실제 데이터 비교해 검증 테스트 주도 개발 (TDD, Test Driven Development)| 일단 테스트 코드를 만든 후 이를 통과하는 최소한의 코드부터 시작해 점진적으로 코드를 개선 및 확장해 나가는 개발 방식 1. 실패하는 테스트 코드 추가2. 테스트 성공을 위한 최소한의 코드 작성3. 테스트 통과를 유지하며 코드 개선 @SpringBootTest해당 클래스를 스프링 부트와 연동해 통합 테스트 수행하겠다고 선언 → 테스트 코드에서 스프링 부트가 관리하는 다양한 객체 주입받을 수 있음@Test 해당 메서드가 테스트를 위한 코드라고 선언..

Spring 2025.05.14

프록시와 연관 관계 관리

프록시를 사용하는 이유 | 연관된 객체를 처음부터 데이터베이스에서 조회하는 것이 아니라, 실제 사용하는 시점에 데이터베이스에서 조회할 수 있음 연관된 엔티티가 있을 경우, 처음부터 데이터베이스에서 연관된 엔티티까지 조회하는 것은 비효율적임. 따라서 JPA에서 이를 해결하는 방법→ 엔티티가 실제 사용될 때까지 데이터베이스 조회를 지연하는 방법 : 지연로딩 → 이렇게 하면 값이 실제 사용되는 시점에 필요한 데이터 조회 가능사용방법 : @ManyToOne(fetch = FetchType.LAZY) 지연 로딩 기능 사용하려면,프록시 객체 필요= 실제 엔티티 객체 대신에 데이터베이스 조회를 지연할 수 있는 가짜 객체 EntityManager.getReference()//사용 예Member member = em...

Spring 2025.05.11

고급 매핑

ORM에서의 상속관계 매핑 == 객체의 상속 구조와 데이터베이스의 슈퍼타입 서브타입 관계 매핑 구현방법● 각각의 테이블로 변환 (= JPA 조인 전략) ○ @PrimaryKeyJoinColumn, @DiscriminatorColumn, @DiscriminatorValue● 통합 테이블로 변환 (= JPA 단일 테이블 전략) ○ 자식 엔티티가 매핑한 컬럼은 모두 null을 허용해야함 ○ DiscriminatorColumn 필수● 서브타입 테이블로 변환 (= JPA 구현 클래스마다 테이블 전략) 상속 매핑은 부모 클래스에 @Inheritance.매핑전략 사용@MappedSupperclass : 실제 테이블과 매핑하지 않고 단순히 매핑 정보를 상속할 목적으로 사용→ 부모 클래스는 테이블..

Spring 2025.05.05

길벗 코딩 자율 학습단 4주차

REST API : REST 기반으로 API를 구축한 것● REST : HTTP URL로 서버의 자원을 명시하고, HTTP 메서드(POST, GET, PATCH/PUT, DELETE)로 해당 자원에 대해 CRUD하는 것● API : 클라이언트가 서버의 자원을 요청할 수 있도록 서버에서 제공하는 인터페이스 장점● 클라이언트가 기기에 구애받지 않고 서버의 자원을 이용할 수 있음● 서버가 클라이언트의 요청에 체계적으로 대응할 수 있어서 REST API 구현 시, @Controller(일반 컨트롤러) 대신 @RestController(Rest 컨트롤러) 사용● Rest Controller : JSON이나 텍스트 같은 데이터를 반환● 일반 Controller : 뷰 페이지를 반환 ResponseE..

Spring 2025.05.04

길벗 코딩 자율 학습단 3주차

프로토콜 : 컴퓨터 간에 원활하게 통신하기 위해 사용하는 전 세계 표준그중, HTTP : 웹 서비스에 사용하는 프로토콜 ! → 클라이언트의 다양한 요청을, 메서드를 통해 서버로 보내는 역할 ** 태그는 GET과 POST 메소드만 지원 **○ action "폼 데이터를 어디로 보낼지 URL 지정" ○ method "어떻게 보낼지 방식 지정" 데이터를 수정할 때 기존 데이터를 조회 후 저장하는 이유✅ 기존 데이터 보호 : form에 빠진 필드가 null이라도, 기존 데이터를 유지 가능✅ JPA의 영속성 사용 가능 : 기존 엔티티는 영속 상태이므로, Dirty Checking으로 간편하게 수정 가능 Dirty CheckingJPA가 영속 상태의 객체를 트랜잭션 안에..

Spring 2025.04.23

길벗 코딩 자율 학습단 2주차

롬북(Lombok) : 코드를 간소화해 주는 라이브러리로깅(logging) : 프로그램의 수행 과정을 기록으로 남기는 것리팩터링(refactoring) : 코드의 기능에는 변함이 없이 코드의 구조 또는 성능을 개선하는 작업 @AllArgsConstructor : 클래스 안쪽의 모든 필드를 매개변수로 하는 생성자 자동 생성@NoArgsConstructor : 기본 생성자를 추가해주는 어노테이션@ToString : toString()메서드 자동 생성@Slf4j (Simple Logging Facade for Java) : 로깅기능 - println() 문으로 데이터 검증 시 서버의 성능 악영향 && 나중에 확인 불가 - log.info() 문으로 로깅을 찍을 수 있음@PathVariable : U..

Spring 2025.04.16