728x90

Programming 281

2023.08.16.WED

- ajax $.ajax 함수는 jQuery에서 제공하는 AJAX 호출을 수행하기 위한 함수입니다. 이 함수에 전달되는 옵션들은 HTTP 요청의 구성 요소입니다. 여기서 url, type, contentType 등의 옵션은 HTTP 요청을 정의하고 구성하는데 사용됩니다. url: AJAX 요청을 보낼 서버의 URL을 지정합니다. type: HTTP 요청 방식 (메소드)를 지정합니다. (예: "GET", "POST", "PUT", "DELETE" 등) contentType: 요청 본문의 MIME 타입을 지정합니다. 예를 들어, "application/json"은 요청 본문에 JSON 형식의 데이터가 포함될 것임을 나타냅니다. data: 서버로 전송할 데이터를 지정합니다. 이 데이터는 type 옵션에 따라 ..

Programming/TMP 2023.08.16

2023.08.14.MON

- ResponseEntity - ResponseEntity는 HTTP 응답의 상태 코드, 헤더 및 본문 데이터를 함께 다루기 위해 사용되는 클래스이다. - @ResponseBody 어노테이션을 사용하면 메서드의 반환값이 자동으로 HTTP 응답의 본문으로 사용되므로, ResponseEntity를 사용하지 않아도 된다. ResponseEntity는 상태 코드나 헤더를 더 세밀하게 조작해야 할 때 사용하면 된다. - Principal - principal 객체는 Spring Security 프레임워크에서 현재 사용자의 정보를 나타내는 객체이다. Spring Security는 웹 애플리케이션의 보안을 관리하기 위한 프레임워크로, 사용자 인증(Authentication)과 권한 부여(Authorization)를..

Programming/TMP 2023.08.14

JPA - 기본 동작 방식, 아키텍처

- JPA 사용 시 장점 1. 특정 데이터베이스에 종속되지 않음 2. 객체지향적 프로그래밍 3. 생산성 향상 - JPA 사용 시 단점 1. 복잡한 쿼리 처리 2. 성능 저하 위험 3. 학습 시간 - ORM : Object Relational Mapping의 약자로 객체와 관계형 데이터베이스를 매핑해주는 것을 말한다. - 객체지향과 관계형 데이터베이스 간의 패러다임이 불일치하기 때문에 이를 해결하기 위해 나온 기술이 ORM이다. - 객체는 객체지향적으로, 데이터베이스는 데이터베이스 대로 설계를 한다. ORM은 중간에서 2개를 매핑하는 역할을 한다. - JPA 동작 방식 1. 엔티티 1.1. 데이터베이스의 테이블에 대응하는 클래스 1.2. @Entity가 붙은 클래스는 JPA에서 관리하며 엔티티라고 한다. ..

Programming/Spring 2023.08.01

Querydsl - 중급 문법 (3) 수정, 삭제 벌크 연산 / SQL function 호출

- 쿼리 한번으로 대량 데이터 수정 - 수정, 삭제의 벌크 연산의 경우 영속성 컨텍스트를 통하는 것이 아닌 DB에 직접 쿼리를 날리는 것이기 때문에, 영속성 컨텍스트의 데이터와 불일치하는 상황이 발생한다. - 영속성 컨텍스트와 DB의 데이터를 일치시켜주지 않을 경우 데이터 일치성에 있어서 큰 문제가 발생 할 수 있다. @Test public void bulkUpdate() { queryFactory .update(member) .set(member.username, "비회원") .where(member.age.lt(28)) .execute(); - 위와 같이 코드를 작성하여 실행하게 되면 where문의 조건에 맞게 DB의 데이터들은 변경되지만 영속성 컨텍스트의 값은 해당 조건과 무관하게 변경되지 않는다...

Querydsl - 중급 문법 (2) 동적 쿼리

- 동적 쿼리 1. BooleanBuilder 사용 2. where 다중 파라미터 사용 1. BooleanBuilder @Test public void dynamicQuery_BooleanBuilder() { String usernameParam = "member1"; // Integer ageParam = 10; Integer ageParam = null; List result = searchMember1(usernameParam, ageParam); assertThat(result.size()).isEqualTo(1); } private List searchMember1(String usernameParam, Integer ageParam) { BooleanBuilder builder = new Bo..

Querydsl - 중급 문법 (1) (프로젝션)

- 프로젝션과 결과 반환 - 기본 - 프로젝션 : select 대상 지정 - 프로젝션 대상이 하나 List result = queryFactory .select(member.username) .from(member) .fetch(); - 프로젝션 대상이 하나면 타입을 명확하게 지정할 수 있다. - 프로젝션 대상이 둘 이상이면 Tuple이나 DTO로 조회해야 한다. - 튜플 조회 - 프로젝션 대상이 둘 이상일 때 사용한다. @Test public void Tuple() { List result = queryFactory .select(member.username, member.age) .from(member) .fetch(); for (Tuple tuple : result) { String username..

Querydsl - 기본 문법 (3) (조인, 서브 쿼리, Case문, 상수, 문자 더하기)

- 조인 - 기본 조인 /* * 팀 A에 소속된 모든 회원 * */ @Test public void join() { List result = queryFactory .selectFrom(member) .join(member.team, team) .where(team.name.eq("teamA")) .fetch(); assertThat(result) .extracting("username") .containsExactly("member1", "member2"); } - join(member.team, team)을 통해 join을 할 수 있다. join만 작성하게 되면 inner join을 기본으로 한다. - 조인 - ON절 /* * 회원과 팀을 조인하면서, 팀 이름이 teamA인 팀만 조인, 회원은 모두 ..

Querydsl - 기본 문법 (2) (결과 조회, 정렬, 페이징, 집합)

- 결과 조회 1. fetch() : 리스트 조회, 데이터 없으면 빈 리스트 반환 2. fetchOne() : 단 건 조회 2.1. 결과가 없으면 : null 2.2. 결과가 둘 이상이면 : NonUniqueResultException 예외 발생 3. fetchFirst() : limit(1).fetchOne() 4. fetchResults() : 페이징 정보 포함, total count 쿼리 추가 실행 5. fetchCount() : count 쿼리로 변경해서 count 수 조회 @Test public void resultFetch() { // List fetch = queryFactory // .selectFrom(member) // .fetch(); // // Member fetchOne = que..

728x90