블로그
전체 22024. 10. 13.
0
[인프런 워밍업 클럽 스터디 2기]: JPA가 그래서 뭔데;;
인프런 스터디 2주차 발자국입니다.이번 주는 강의를 들으면서 진도를 수행하던 중에 PROJECT_SKILL 테이블이 h2 DB에서 조회되지않는 문제를 발견하고 왜 안되는지 찾아보았고 그과정에서 JPA: 영속성 콘텍스트 라는 녀석 때문에 테이블이 생성되지않았다는 점을 배웠습니다.그래서 이번주는 JPA와 영속성 콘텍스트에 대해서 혼자 자습을 조금 해보았는데,,,너무 혼자 시간을 허비한거 같습니다궁금한 내용들이 꼬리를 물고 계속 생겨서 🫤 차라리 쉽게 설명해주는 강의를 찾아서 배웠으면금방 지나갈 거 같은 개념에 시간을 많이 쓴거 같아 아쉬웠습니다.아무튼 아래는 이번주에 혼자 자습하면서 배워본 내용들을 정리한 것입니다.전부 다 외운건 아니고 어느정도? 얕게는 이해를 마쳤다고 생각합니다.혹시나 틀린 내용이 있다면 지적 부탁드립니다. 감사합니다.0. ORM이란 무엇인가ORM(Object-Relational Mapping)은 객체 지향 프로그래밍에서 데이터베이스와 상호작용하기 위한 기술로, 객체와 관계형 데이터베이스 간의 데이터를 매핑하여 변환하는 역할을 합니다. ORM은 데이터베이스의 테이블과 객체 지향 언어의 클래스를 연결해주어, 개발자가 SQL 쿼리 없이도 객체를 사용하여 데이터베이스 작업을 수행할 수 있게 합니다.ORM의 주요 개념객체 지향적인 접근: ORM을 사용하면 데이터베이스의 테이블을 객체로 다룰 수 있다.이는 데이터베이스의 행(row)을 객체의 인스턴스로 변환하고, 컬럼을 객체의 속성으로 변환하는 것을 의미한다.자동화된 매핑: ORM은 SQL 쿼리 생성과 데이터베이스와의 상호작용을 자동으로 처리하므로, 개발자가 비즈니스 로직에 집중할 수 있게 도와준다.대표적인 ORM 도구: Hibernate, JPA(Java Persistence API), MyBatis 등이 있다. 1. JPA란 무엇인가JPA(Java Persistence API)는 ORM 기술의 표준 인터페이스로, 자바 애플리케이션에서 데이터베이스와 상호작용하기 위한 명세를 제공한다. JPA는 직접적으로 ORM 기능을 제공하는 것이 아니라, ORM 기술을 위한 규칙과 표준을 정의하여, 다양한 구현체(Hibernate, EclipseLink 등)가 기능을 수행함.JPA의 정의 및 역할ORM 표준 인터페이스: JPA는 ORM 기술의 표준을 정의하여, 개발자가 특정 구현체에 의존하지 않고 일관된 방식으로 데이터를 처리할 수 있게 한다.구현체의 예시: JPA의 구현체로는 Hibernate, EclipseLink, OpenJPA 등이 있으며, 이들 구현체는 JPA의 인터페이스를 구현하여 실제 데이터베이스 작업을 수행한다.개발자들이 JPA를 사용하는 이유생산성 향상: JPA는 데이터베이스 작업을 객체 지향적으로 처리할 수 있게 함으로써, SQL 쿼리 작성의 부담을 줄이고 코드의 가독성을 높인다.유지보수 용이성: 엔티티 매핑을 통해 데이터베이스의 구조 변경에 따른 코드 변경을 최소화할 수 있다.데이터베이스 독립성: 특정 데이터베이스에 종속되지 않으며, 다양한 데이터베이스로 쉽게 이식할 수 있는 애플리케이션을 구축할 수 있다. JPA를 사용할 때 주의해야 할 사항성능 문제: 잘못된 엔티티 설계나 관계 매핑으로 인해 성능 문제가 발생할 수 있으므로, 캐시와 페치 전략을 적절히 사용해야 합니다.복잡한 설정: 영속성 컨텍스트, 트랜잭션 관리, Fetch 전략 등 복잡한 설정과 개념을 이해하지 않으면 예상치 못한 동작이 발생할 수 있습니다.자동 쿼리 생성 기능의 오해: Spring Data JPA에서 제공하는 기능과 JPA 자체의 기능을 혼동하지 않도록 주의해야 합니다. 2. JPA의 특징객체 지향적인 데이터베이스 접근: JPA는 데이터를 객체로 매핑하여 직접 조작할 수 있게 합니다. 이를 통해 SQL의 복잡한 문법 없이도 데이터를 처리할 수 있습니다.자동화된 데이터베이스 스키마 관리: JPA의 스키마 설정 옵션(create, update, validate 등)을 통해 데이터베이스 스키마를 자동으로 생성하거나 검증할 수 있습니다.1차 캐시: JPA 표준에서 지원하는 기능으로, 영속성 컨텍스트 내에서 관리되며 트랜잭션 범위 내에서 데이터를 캐시한다. 동일한 트랜잭션 내에서는 데이터베이스에 재접근하지 않고 메모리에 저장된 엔티티를 사용한다.2차 캐시: JPA 표준에는 포함되지 않고, JPA의 구현체(예: Hibernate)에서 지원하는 기능이다. 2차 캐시는 애플리케이션 범위에서 동작하며, 여러 영속성 컨텍스트 간에 데이터를 공유하여 성능을 최적화한다. 이를 사용하려면 Ehcache, Hazelcast, Infinispan 등과 같은 캐시 프로바이더를 통합해야 한다고 하는데 아직 무슨 말인지 잘 모르겠다...영속성 컨텍스트: 엔티티 매니저가 관리하는 영속성 컨텍스트는 엔티티의 상태를 추적하고, 동일한 트랜잭션 내에서 동일한 데이터를 캐싱하여 성능을 향상시킬 수 있다.Fetch 전략: 데이터 로딩 방식으로 즉시 로딩(EAGER)과 지연 로딩(LAZY)이 있으며, 성능과 자원 사용을 최적화할 수 있다.Cascading(영속성 전이): 부모 엔티티의 상태 변경이 자식 엔티티에도 자동으로 전이되도록 설정할 수 있다.영속성 콘텍스트에 대해서도 자습했는데 아직 내용이 정리되지않아서 다음번 블로그 글에서 작성해보도록 하겠습니다.
스프링
・
자바
・
JPA
2024. 10. 06.
0
[인프런 워밍업 클럽 스터디 2기] : 웹 개발의 첫 발자국
안녕하세요!제 첫 블로그에서는 자바 스프링(Spring Framework)을 처음 배우면서 느꼈던 점과1주차에 배운 주요 개념들을 간단하게 정리해보려고 합니다.새로운 것을 배운다는 생각에 약간 신나기도 합니다 ㅎ이번 스프링 스터디를 통해 스프링을 배우며 얻은 지식을 꾸준히 정리해 블로그에 올리는 습관을 만들어보겠습니다. 간단한 웹 이론웹 서비스는 크게 세 가지 요소로 구성됩니다: 클라이언트, 서버, 데이터베이스.- 클라이언트: 요청을 보내는 주체로, 컴퓨터나 스마트폰의 브라우저 등 사용자가 접근하는 환경입니다.- 서버: 클라이언트의 요청을 받아 작업을 수행하는 주체입니다.- 데이터베이스(DB): 데이터의 집합으로, DBMS를 통해 데이터를 관리합니다. 웹 프레임워크와 라이브러리의 차이웹 프레임워크: 웹 개발을 편리하게 도와주는 도구로, 이미 정해진 틀이 있습니다.예를 들어 이케아의 가구처럼 정해진 틀과 구성이 있다고 생각할 수 있습니다.라이브러리: 정해진 틀이 없는 도구로, 필요에 따라 사용할 수 있는 철물점의 도구와 비슷합니다. 스프링 프레임워크스프링은 자바로 만들어진 웹 프레임워크로, 다양한 주요 개념이 있습니다.MVC 패턴MVC 패턴은 모델(Model), 뷰(View), 컨트롤러(Controller)로 이루어진 소프트웨어 아키텍처 디자인 패턴입니다.- 모델: 데이터를 담는 역할을 합니다.- 컨트롤러: 클라이언트의 요청을 받아 작업을 수행하고, 결과 데이터를 모델에 담습니다.- 뷰: 사용자에게 보여지는 화면으로, 모델에서 데이터를 가져와 표시합니다. 레이어드 아키텍처- 컨트롤러: 클라이언트의 요청을 받는 인터페이스로, 데이터를 검증하고 서비스의 메소드를 호출합니다.- 서비스: 데이터 처리 로직을 수행하고, 저장소(DB)에 대한 작업을 요청합니다.- 저장소: DB에 접근하여 데이터를 처리하며, 여러 서비스에서 공통적으로 사용할 수 있는 처리 방법을 제공합니다. 스프링 빈(Spring Bean)스프링에서 관리하는 자바 객체를 빈(Bean)이라고 합니다. 스프링 빈은 스프링 컨테이너에서 생성되고 관리되며, 다음과 같은 특징이 있습니다.- 관리되는 객체: 스프링 컨테이너에서 생성되고 관리됩니다.- 재사용 가능: 애플리케이션 전체에서 재사용이 가능합니다.- 의존성 주입: 스프링이 빈들 간의 관계를 자동으로 설정해줍니다. 스프링 부트에서의 의존성 주입- 생성자 주입: 클래스 생성자를 사용하는 방식으로 가장 안전합니다.- 수정자 주입: @Autowired 같은 어노테이션을 사용하여 필드를 주입하는 방식입니다.- 필드 주입: 수정자 주입과 비슷하게 동작하지만, 의존성을 바꿀 때 문제가 생길 수 있어 신중히 사용해야 합니다. HTTP와 REST APIHTTP 메소드- GET: 리소스를 가져오는 요청- POST: 리소스를 생성하는 요청- PUT/PATCH: 리소스를 업데이트하는 요청- DELETE: 리소스를 삭제하는 요청- 오류 코드: 400번대는 클라이언트의 문제, 500번대는 서버의 문제를 나타냅니다.REST API: HTTP 통신을 통해 애플리케이션 기능을 정의하는 규칙입니다.URL을 자원으로 활용하고, HTTP 메소드를 이용해 행위를 표현합니다. JPA (Java Persistence API)JPA는 자바 객체를 DB의 테이블로 매핑해주는 기술입니다. 이를 통해 개발자는 직접 쿼리를 작성하지 않고도 객체지향적인 접근이 가능합니다.- 장점: 생산성 증가, 객체지향적 접근, DBMS 의존성 감소- 단점: 충분한 학습이 필요하고, 복잡한 쿼리를 처리하는 데 한계가 있을 수 있습니다. 느낀 점과 회고스프링을 처음 배우며 새로운 개념들을 많이 접했습니다.특히 빈과 의존성 주입 개념이 이해되면서도 어려우면서도 아리까리?합니다.직접 프로젝트에 적용해보면서 개념을 익히는 것이 가장 좋겠다고 생각했습니다.기본적인 웹 이론에 대해 잘 모르고 있던 부분이 많아 부끄럽기도 했지만, 이번 기회를 통해 기초부터 다시 다질 수 있어서 좋았습니다.앞으로도 더 많은 기능을 학습하고 블로그에 정리하며 성장해 나가고자 합니다.오늘 남은 시간을 활용해서 섹션 3의 진도를 나가고 최종장에는 개인프로젝트를 실제로 동작하게끔 만들고 싶습니다!!
백엔드
・
java
・
spring
・
스터디
・
미션
・
발자국
・
백엔드
・
웹