{"id":22254477,"url":"https://github.com/changuii/spring-data-jpa","last_synced_at":"2026-03-12T00:05:24.601Z","repository":{"id":224056380,"uuid":"762208559","full_name":"changuii/Spring-Data-JPA","owner":"changuii","description":"스프링 JPA 스터디 (20240301 ~ 20240531)","archived":false,"fork":false,"pushed_at":"2024-05-26T04:57:54.000Z","size":13376,"stargazers_count":0,"open_issues_count":1,"forks_count":4,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-28T06:51:38.934Z","etag":null,"topics":["jpa","jpa-hibernate","spring"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/changuii.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2024-02-23T09:55:35.000Z","updated_at":"2024-05-17T10:31:20.000Z","dependencies_parsed_at":"2024-04-15T13:27:05.305Z","dependency_job_id":"d7977ec2-eaa2-49ea-8327-b2d1d03aa62b","html_url":"https://github.com/changuii/Spring-Data-JPA","commit_stats":null,"previous_names":["changuii/spring-data-jpa"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/changuii/Spring-Data-JPA","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/changuii%2FSpring-Data-JPA","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/changuii%2FSpring-Data-JPA/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/changuii%2FSpring-Data-JPA/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/changuii%2FSpring-Data-JPA/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/changuii","download_url":"https://codeload.github.com/changuii/Spring-Data-JPA/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/changuii%2FSpring-Data-JPA/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30407837,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-11T22:36:59.286Z","status":"ssl_error","status_checked_at":"2026-03-11T22:36:57.544Z","response_time":84,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["jpa","jpa-hibernate","spring"],"created_at":"2024-12-03T07:27:32.839Z","updated_at":"2026-03-12T00:05:24.586Z","avatar_url":"https://github.com/changuii.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# 스프링 JPA 스터디 (20240301 ~ 20240531)\n\n\n## 참여 인원\n| [이창의](https://github.com/changuii) | [이종현](https://github.com/2-jjong) | [김지후](https://github.com/jihukimme) | [오민규](https://github.com/kormk) | [한동근](https://github.com/l0o0lv) |\n| --- | --- | --- | --- | --- |\n|  \u003cimg src=\"https://avatars.githubusercontent.com/u/122252160?v=4\" alt=\"spring\" width=\"100\" height=\"100\"/\u003e   |  \u003cimg src=\"https://avatars.githubusercontent.com/u/127838675?v=4\" alt=\"spring\" width=\"100\" height=\"100\"/\u003e   |  \u003cimg src=\"https://avatars.githubusercontent.com/u/127816292?v=4\" alt=\"spring\" width=\"100\" height=\"100\"/\u003e    | \u003cimg src=\"https://avatars.githubusercontent.com/u/63334787?v=4\" alt=\"spring\" width=\"100\" height=\"100\"/\u003e   |  \u003cimg src=\"https://avatars.githubusercontent.com/u/128709695?v=4\" alt=\"spring\" width=\"100\" height=\"100\"/\u003e  |\n\n## 규칙\n- 매주 두 챕터씩 공부합니다.\n- 매주 공부한 내용에 대해 발표를 준비하고 발표자를 당일 선정하여 발표를 진행합니다.\n- 학습한 챕터는 MarkDown 으로 정리해서 깃허브 각자의 branch 에 파일을 올립니다.\n- 토론 후 정리한 MD 파일의 PR을 생성한후 Main에 병합합니다.\n- 매주 금요일 20시~22시\n\n## 파일명\n마크다운 파일은 [O주차-0장]OOO.md (OOO은 이름)\n\n## 불참\n- 벌금 만원 (추후 배분), 릴스 촬영\n  \n\n## 일정\n\n발표자 : ✅  \n불참 : 😵  \n\n| 주차             | 이창의 | 이종현 | 김지후 | 오민규 | 한동근 |\n| :----------------: | :------: | :------: | :------: | :------: | :------: |\n| 예시 |   ✅     |   ✅     |     ✅   |   ✅     |   ✅     |\n| 1주차 (3월 2일)  |      |      |    |  ✅    |      |\n| 2주차 (3월 8일)  |        |    ✅    |        |        |        |\n| 3주차 (3월 15일)  |   ✅  5장   |        |   ✅ 4장   |        |        |\n| 4주차 (3월 22일)  |    ✅  7장    |        |        |        |   ✅  6장     |\n| 5주차 (3월 30일)  |  ✅  9장      |        |        |   ✅  8장     |        |\n| 6주차 (4월 7일)  |        |   ✅ 10장 페치조인 전     |        |        | ✅  10장 페치조인 후       |\n| 7주차 (4월 12일)  |        |        |        |  ✅ 10장 Criteria, QueryDSL    |      ✅ 10장 네이티브SQL, 객체지향 쿼리 고급  |\n| 8주차 (4월 19일)  |        |        |   ✅     |        |        |\n| 9주차 (5월 4일)  |   ✅     |        |        |        |        |\n| 10주차 (5월 10일) |        |        |   ✅     |        |        |\n| 11주차 (5월 17일) |    ✅    |        |        |        |        |\n| 12주차 (5월 24일) |        |        |        |    ✅    |        |\n\n## 주차별 정리\n\n### [1주차 - JPA 소개와 시작](https://github.com/changuii/Spring-Data-JPA/tree/main/%ED%95%99%EC%8A%B5%EC%9E%90%EB%A3%8C/1%EC%A3%BC%EC%B0%A8)\n\n\u003e JPA 소개와 시작\n- JPA가 왜 탄생했고 JPA를 사용하기 전에는 어떤 문제점이 있었는지 알아본다.\n- JPA로 바뀌면서 어떤 부분이 추상화되고 어떤 부분이 개발자가 편리하게 개발할 수 있는지 알아본다.\n  \n### [2주차 - JPA 영속성 관리](https://github.com/changuii/Spring-Data-JPA/tree/main/%ED%95%99%EC%8A%B5%EC%9E%90%EB%A3%8C/2%EC%A3%BC%EC%B0%A8)\n\n\u003e JPA 영속성 관리\n- JPA의 영속성 관리를 알아본다.\n- JPA에서 어떻게 저장, 조회, 수정, 삭제가 이루어지는지 알아본다.\n- 1차 캐시, 동일성 보장, 쓰기 지연, 변경 감지 등의 기능들이 어떻게 제공되는지 알아본다.\n\n### [3주차 - 엔티티 매핑, 연관관계 매핑](https://github.com/changuii/Spring-Data-JPA/tree/main/%ED%95%99%EC%8A%B5%EC%9E%90%EB%A3%8C/3%EC%A3%BC%EC%B0%A8)\n\n\u003e `엔티티 매핑`\n- JPA의 다양한 매핑 어노테이션들을 알아본다.\n- 객체와 테이블 매핑, 기본 키 매핑, 필드와 컬럼 매핑을 알아본다.\n- 기본 키 생성 전략, DDL 자동 생성, 이름 매핑 전략에 대하여 알아본다.\n\u003e `연관관계 매핑`\n- JPA의 연관관계 매핑 어노테이션들을 알아본다.\n- 객체의 연관관계와 데이터베이스의 연관관계의 차이점과 매핑을 알아본다.\n- 양방향, 단방향 연관관계, mappedBy 연관관계 주인에 대해서 알아본다.\n\n### [4주차 - 다양한 연관관계 매핑과 고급 매핑](https://github.com/changuii/Spring-Data-JPA/tree/main/%ED%95%99%EC%8A%B5%EC%9E%90%EB%A3%8C/4%EC%A3%BC%EC%B0%A8)\n\n\u003e `다양한 연관관계 매핑` \n- 다대다, 다대일, 일대다, 일대일 등 다양한 연관관계 매핑에 대해서 알아본다.\n- 연관관계를 매핑할 때 고려해야할 3가지에 대해서 알아본다. \n\n\u003e `고급 매핑`\n- 데이터베이스의 슈퍼 클래스, 서브 클래스에 객체의 상속 개념을 통해 매핑하는 것을 알아본다.\n- 매핑 정보만 상속하는 @MappedSuperclass에 대해 알아본다.\n- 데이터베이스 설계의 식별관계와 비식별관계 그리고 복합 키 매핑에 대해서 알아본다.\n- 데이터베이스의 연관관계를 외래 키뿐만 아니라 연결 테이블을 사용한 방법에 대해 알아본다.\n- 엔티티 하나에 여러 테이블을 매핑하는 방법에 대해서 알아본다.\n\n### [5주차 - 프록시와 연관관계 관리, 값 타입](https://github.com/changuii/Spring-Data-JPA/tree/main/%ED%95%99%EC%8A%B5%EC%9E%90%EB%A3%8C/5%EC%A3%BC%EC%B0%A8)\n\n\u003e `프록시와 연관관계 관리`\n- JPA에서 제공하는 프록시에 대해 알아본다.\n- 데이터베이스에서 필요할 때 조회하는 지연로딩과 즉시 조회하는 즉시로딩에 대해 알아본다.\n- 영속성 전이들에 대해 알아본다.\n- 고아 객체 제거 기능에 대해 알아본다.\n\n\u003e `값 타입`\n- ORM에서 분류하는 값 타입이 무엇인지 알아본다.\n- 여러 기본 값을 묶어서 객체지향적으로 정의할 수 있는 임베디드 타입에 대해 알아본다.\n- 컬렉션 값 타입에 대해 알아본다.\n- 불변 객체란 무엇인지 알아본다.\n\n### [6주차 - 객체지향 쿼리 언어 (JPQL)](https://github.com/changuii/Spring-Data-JPA/tree/main/%ED%95%99%EC%8A%B5%EC%9E%90%EB%A3%8C/6%EC%A3%BC%EC%B0%A8)\n- Criteria, QueryDSL, JPQL에 대해 알아본다.\n- 페이징, 페치 조인, 파리미터 바인딩, 집합과 정렬, 서브쿼리, 다형성 조인, NamedQuery에 대해 알아본다.\n\n### [7주차 - 객체지향 쿼리 언어 (Criteria, QueryDSL, 고급 객체지향 쿼리)](https://github.com/changuii/Spring-Data-JPA/tree/main/%ED%95%99%EC%8A%B5%EC%9E%90%EB%A3%8C/7%EC%A3%BC%EC%B0%A8)\n- Criteria, QueryDSL, 네이티브 SQL에 대해서 자세히 알아본다.\n- 플러시 모드를 통한 최적화와 JPQL의 동작을 알아본다.\n- 벌크 연산에 대해서 알아본다.\n\n### [8주차 - Spring Data JPA](https://github.com/changuii/Spring-Data-JPA/tree/main/%ED%95%99%EC%8A%B5%EC%9E%90%EB%A3%8C/8%EC%A3%BC%EC%B0%A8)\n- 스프링 데이터 프로젝트에서 제공하는 기능인 공통 인터페이스, 네임드 메서드 기능을 알아본다.\n- 이전에 배웠던 네이티브 SQL, JPQL, QueryDSL을 스프링 프레임워크에서 사용하는 방법을 알아본다.\n- 스프링 프레임워크에서 벌크 연산, 페이징, 정렬, 힌트, Lock, 사용자 정의 repository 기능을 사용하는 방법을 알아본다.\n  \n### [9주차 - 웹 애플리케이션의 영속성 관리](https://github.com/changuii/Spring-Data-JPA/tree/main/%ED%95%99%EC%8A%B5%EC%9E%90%EB%A3%8C/9%EC%A3%BC%EC%B0%A8)\n- 스프링에서 채택하고 있는 영속성 컨텍스트 관리에 대해서 알아본다.\n- 스프링에서 사용하는 트랜잭션 범위에 대해서 알아본다.\n\n### [10주차 - 컬렉션과 부가기능](https://github.com/changuii/Spring-Data-JPA/tree/main/%ED%95%99%EC%8A%B5%EC%9E%90%EB%A3%8C/10%EC%A3%BC%EC%B0%A8)\n- 자바의 컬렉션과 JPA의 특징에 대해 알아본다.\n- 엔티티를 저장하거나 데이터베이스에서 가져올 때 값을 처리하는 로직을 추가할 수 있는 컨버터에 대해서 알아본다.\n- 엔티티에 이벤트가 발생했을 때 (저장, 조회 등..) 로직을 추가할 수 있는 기능인 리스너에 대해서 알아본다.\n- 연관된 엔티티를 조회하는 지연 로딩, JPQL의 페치 조인같은 기능을 하는 엔티티 그래프에 대해서 알아본다.\n\n### [11주차 - 고급 주제와 성능 최적화]()\n- JPA의 예외들과 스프링이 추상화한 예외 그리고 주의점에 대해 알아본다.\n- 엔티티를 비교할 때 발생할 수 있는 상황들과 그에따른 해결 방법들에 대해서 알아본다.\n- 프록시로 인한 문제점들과 해결방안에 대해서 알아본다.\n- N+1 문제를 해결하는 방법, 읽기 전용인 엔티티를 조회하는 방법들에 대해서 알아본다.\n- 배치 처리와 SQL 힌트에 대해서 알아본다.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchanguii%2Fspring-data-jpa","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchanguii%2Fspring-data-jpa","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchanguii%2Fspring-data-jpa/lists"}