[토비의 스프링] 0장
학습 목적 결론부터 이야기하자면, 효율적인 개발을 하고 싶었다. SSAFY 를 통해 급하게 머릿속에 집어 넣은 지식으로 프로젝트를 맡고, 운좋게도 취업까지 할 수 있었다. 하지만 업무를 하면서 점점 한계를 느끼게 되어 스스로 기반을 다지고자 학습하고자 한다. 뿐만 아니라 스프링이 지향하는 바에 따라 개발을 진행하며, 말만 객체지향 언어를 사용하는 게 아닌 객체 지향적인 코드를 짜서 이에 대한 장점을 최대한 활용하기 위함도 있다. 객체 지향 프로그램으로 쉬운 유지보수 쉬운 테스트 코드의 재사용 등을 활용하기 위함이다. 스프링을 사용하는 이유 백엔드 웹 개발에서 스프링은 가장 많이 쓰는 프레임 워크 중 하나이다. 우리나라에서는 대부분의 기업에서 스프링을 사용하고, 전자 정부 표준 프레임 워크이기도 하다. 스..
2024.03.05
no image
[Spring] JPA
요약 객체와 관계형 데이터베이스 매핑으로 객체와 테이블 매핑하여 패러다임의 불일치 문제를 해결할 수 있는 방안으로, 생산성, 유지보수, 패러다임 불일치 해결, 데이터 접근 추상화와 벤더 독립성등의 장점을 가지고 있는 프레임워크 JPA(Java Persistence API) 자바 애플리케이션과 JDBC 사이에서 동작하며, ORM 기술 표준으로 사용되는 인터페이스의 모음 즉, 실제적으로 구현된 것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크 JPA를 구현하는 대표적인 오픈소스로는 Hibernate가 있다 ORM(Object Relational Mapping) 객체와 관계형 데이터베이스의 데이터를 매핑하는 기술 ORM 프레임워크가 객체와 데이터베이스 중간에서 매핑 객체와 테이블을 매핑하여 ..
2023.06.28

[토비의 스프링] 0장

개발의 숩
|2024. 3. 5. 14:36

학습 목적 

결론부터 이야기하자면, 효율적인 개발을 하고 싶었다.

SSAFY 를 통해 급하게 머릿속에 집어 넣은 지식으로 프로젝트를 맡고, 운좋게도 취업까지 할 수 있었다.

하지만 업무를 하면서 점점 한계를 느끼게 되어 스스로 기반을 다지고자 학습하고자 한다.

뿐만 아니라 스프링이 지향하는 바에 따라 개발을 진행하며, 

말만 객체지향 언어를 사용하는 게 아닌 객체 지향적인 코드를 짜서 이에 대한 장점을 최대한 활용하기 위함도 있다. 

객체 지향 프로그램으로 

  1. 쉬운 유지보수
  2. 쉬운 테스트
  3. 코드의 재사용

등을 활용하기 위함이다. 

 

스프링을 사용하는 이유

백엔드 웹 개발에서 스프링은 가장 많이 쓰는 프레임 워크 중 하나이다. 

우리나라에서는 대부분의 기업에서 스프링을 사용하고, 전자 정부 표준 프레임 워크이기도 하다.

스프링을 공부하게 된 계기또한 그렇다.

 

이뿐만 아니라 토비의 스프링을 읽으며 이해한 바는 아래와 같다.

엔터프라이즈 시스템 개발은 비즈니스적으로나 기술적으로나 점점 복잡해져왔고, 지금도 복잡해지고 있다.

즉, 개발자가 고려해야할 사항이 많아지고 그만큼 개발을 하기가 어려워졌다.

하지만 이러한 복잡함은 제거할 수 없는 요소이다. 대신 그 복잡함을 효과적으로 상대할 수 있는 전략과 기법이 필요해졌고

일단 가장 큰 문제인 비즈니스 복잡함과 기술적인 복잡함을 분리해내는 것이다.

이 문제를 깔끔하게 해결하는 것이 스프링이다.

 

 


 

스프링이란 무엇인가

  • 자바 기반의 다양한 애플리케이션을 만드는 것을 도와준다
    • 웹 뿐만 아니라 배치 등 다양한 영역을 포괄한다
  • 애플리케이션 코드에 언제나 존재하는 공통 영역에 대한 작성을 쉽고 깔끔하게 만들어준다
    • 공통 프로그래밍 모델이라는 것을 지원한다
    • 트랜잭션 처리, 다국어 처리, AOP 처리 등 애플리케이션에는 언제나 공통 영역이 존재한다
  • 애플리케이션에 자주 사용되는 다양한 기술 API도 제공한다
    • CGIB , Jackson(Object Mapper) 등

 

 

 

 

스프링 컨테이너

  • 스프링 설정 정보 (@Configuration) 로 생성된 객체들을 일반적으로 싱글톤으로 관리한다.
    • 물론 빈 스코프 설정에 따라 항상 싱글톤은 아닐 수 있다

객체지향 원칙을 지키기 어려운 싱글톤의 단점을 해소해준다

 

 

공통 프로그래밍 모델

IoC/DI

  • 제어의 역전과 의존성 주입
  • 싱글톤 패턴을 이용하면서도 객체지향의 다양한 이점을 활용할 수 있게 해준다
    • 변화에 유연한 설계를 돕는다

서비스 추상화

  • 비슷한 역할을 하는 다른 기술들을 묶어줌
  • ex) ProxyFactory는 JDK 동적 프록시, CGLB등 프록시 기술 선택의 기로에서 해방 시켜준다
  • es) DB 벤더에 영향을 받지 않는 트랜잭션 처리 기술

AOP

  • 애플리케이션에서 많은 메서드, 클래스 등에 공통 부가기능을 넣고 싶을 때 중복된 코드 없이 이를 실현할 수 있게 해준다
  • 로깅, 소요시간 측정 등에 사용될 수 있다

[Spring] JPA

개발의 숩
|2023. 6. 28. 22:29

요약

객체와 관계형 데이터베이스 매핑으로 객체와 테이블 매핑하여 패러다임의 불일치 문제를 해결할 수 있는 방안으로, 생산성, 유지보수, 패러다임 불일치 해결, 데이터 접근 추상화와 벤더 독립성등의 장점을 가지고 있는 프레임워크

 

 

JPA(Java Persistence API)

자바 애플리케이션과 JDBC 사이에서 동작하며, ORM 기술 표준으로 사용되는 인터페이스의 모음

즉, 실제적으로 구현된 것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크

JPA를 구현하는 대표적인 오픈소스로는 Hibernate가 있다

 

 

ORM(Object Relational Mapping)

객체와 관계형 데이터베이스의 데이터를 매핑하는 기술

  • ORM 프레임워크가 객체와 데이터베이스 중간에서 매핑
  • 객체와 테이블을 매핑하여 패러다임 불일치 문제 해결

 

JPA의 동작

JPA는 애플리케이션과 JDBC 사이에서 동작한다.

JPA는 JDBC API를 사용하여 데이터베이스와 데이터를 주고 받게 된다.

 

저장

  1. MemberDAO 클래스를 통해 persist()를 실행하면, JPA가 Entity 객체를 분석하여 SQL문을 생성한다
  2. JDBC API를 사용하여 DB에 생성된 INSERT SQL을 보내게 된다
  3. 이 과정에서 JPA는 객체와 데이터베이스 테이블의 패러다임 불일치를 해결한다

 

조회

  1. MemberDAO 클래스를 통해 find(id)를 실행하면, JPA는 SELECT SQL을 생성한다
  2. JDBC API를 사용하여 생성된 SELECT SQLD을 보낸다
  3. DB에서 반한된 정보를 ResultSet 매핑을 통해 객체로 변환해준다
  4. 이 과정에서도 패러다임 불일치 문제를 해결해준다

 

JPA를 사용하는 이유

생산성

  • JPA는 쿼리문을 별도로 작성할 필요가 없다
  • 데이터베이스 설계 중심의 패러다임을 객체 설계 중심으로 애플리케이션 개발이 가능하다

유지보수

  • JPA에서는 쿼리를 직접 작성하지 않기 때문에 필드가 변경되더라도 매핑 정보만 잘 연결하면 SQL문은 자동으로 작성된다
  • 개발자가 작성해야 할 SQL과 JDBC API 코드를 JPA가 대신 처리해줌으로 유지보수해야 하는 코드 수가 줄어든다

패러다임 불일치 문제 해결

상속, 연관관계, 객체, 그래프 탐색, 비교등을 설계 차이로 인해 발생하는 패러다임 불일치 문제를 해결한다

  • 객체는 상속 구조를 만들 수 있으며, 다형성 구현이 가능하지만, 관계형 데이터베이스의 테이블은 상속이라는 개념이 존재하지 않는다
  • 객체는 참조를 통해 관계를 표현하며 방향을 가지고 있으나, 관계형 데이터베이스는 외래 키를 통해 관계를 표현하며, 방향이 존재하지 않는다. 또한 다대다 관계 문제를 해결하기 위해 조인을 사용한다
  • 이외에도 다양한 패러다임 불일치 문제가 존재한다

데이터 접근 추상화와 벤더 독립성

  • 데이터베이스 기술에 종속되지 않도록 한다
  • 데이터베이스를 변경하면 JPA에게 다른 데이터베이스를 사용한다고 알려주기만 된다

 

 

JPA의 단점

복잡한 쿼리 처리

  • 복잡한 쿼리를 사용할 경우는 SQL문을 사용하는게 나을 수도 있다. JPA에서는 Native SQL을 통해 기존의 SQL문을 사용할 수 있지만 그러면 특정 데이터베이스에 종속된다는 단점이 생긴다. 이를 보완하기 위해서는 SQL과 유사한 기술인 JPQL을 지원한다

성능 저하 위험

  • 객체 간의 매핑 설계를 잘못했을 때 성능 저하가 발생할 수 있으며, 자동으로 생성되는 쿼리가 많기때문에 개발자가 의도하지 않는 쿼리로 인해 성능이 저하되기도 한다

학습

  • JPA를 사용하기 위해선 학습해야 할 것들이 많다
  • JPA를 사용해도 SQL을 알아야 Hibernate가 수행한 쿼리 확인 및 성능 모니터링이 가능하다

 

 

 

 

JDBC API

자바 프로그래밍 언어와 다양한 데이터베이스 SQL 또는 테이블 형태의 데이터 사이에 독립적인 연결을 지원하는 표준

즉, 다양한 형태의 관계형 데이터베이스에 접속하여 자바 프로그래밍 언어와 데이터베이스 사이에 데이터를 주고 받을 수 있도록 지원하는 표준 자바 응용 프로그래밍 인터페이스이다.

 

JDBC API 역할

JDBC API는 표준 응용 프로그래밍의 인터페이스만을 제공해주는 것이고,

실질적인 인터페이스의 메소드 기능들에 대한 실제 구현은 DBMS 제조사들이 자신들의 데이터베이스에 맞게 구현하여 제공하며, 이를 JDBC 드라이버라고 한다

 

JDBC 드라이버

DBMS 회사들이 자신들의 데이터베이스 시스템에 접근할 수 있도록 표준 JDBC 인터페이스에 명시된 메소드들을 구현한 것

따라서 JDBC API를 사용할 경우, 하나의 자바 응용 프로그램만으로 JDBC 드라이버를 제공하는 어떤 종류의 관계형 DBMS에도 접근이 가능할 것이며, 사용자들은 특정 회사의 데이터베이스의 정확한 사용 방법을 몰라도 JDBC API만 배우면 데이터베이스 응용 프로그램을 구현할 수 있는 것이다.