spring 24

Hello JPA - 애플리케이션 개발

JPA 구동 방식 Persistence 클래스가 META-INF/persistence.xml 설정정보를 조회한다. 이를 사용해 EntityManagerFactory 클래스를 만든다. JPA 동작을 위한 EntityManager를 생성하여 실행한다. JPA 구현체에 따라 DB 커넥션 풀도 설정한다. 트랜잭션 추가 X //회원 등록 EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("hello"); EntityManager entityManager1 = entityManagerFactory.createEntityManager(); Member member1 = new Member(); member1.setId(..

Hello JPA - 프로젝트 생성

데이터베이스 방언 각각의 DB가 제공하는 SQL문법과 함수에는 차이가 존재한다. MySQL과 Oracle의 가변문자가 다르고, 문자열 자르는 함수 등이 그렇다. 이 때 SQL 표준을 지키지 않는 특정 DB만의 고유한 기능을 DB방언이라고 한다. JPA는 이런 특정 DB에 종속되지 않는다. 따라서 별도 Dialect 설정을 해주면 JPA가 DBMS에 맞는 쿼리를 직접 작성하고 실행해준다. https://www.inflearn.com/course/ORM-JPA-Basic/dashboard 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의 JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를..

JPA 소개

ORM( Object Relational Mapping )이란 객체 관계 매핑 객체 ↔ RDB 간 패러다임의 불일치를 해결할 수 있다. 객체는 객체대로, RDB는 RDB대로 설계 한다. 그 과정을 프레임워크가 중간에서 매핑한다. JPA는 자바 진영의 ORM 표준이다. 저장 프로세스 Entity 객체 저장을 요청한다. JPA가 Entity 에 대해서 분석하고 INSERT SQL문까지 생성해준다. JDBC API를 사용해 INSERT 쿼리를 날려 DB에 저장 패러다임 불일치 해결 조회 프로세스 id를 통해 Entity 객체를 찾아달라고 요청한다 JPA가 SELECT SQL문을 생성해준다. JDBC API를 사용한다. ResultSet을 매핑해준다. Entity 객체를 반환한다. 패러다임 불일치 해결 JPA ..

SQL 중심적인 개발의 문제점

객체를 RDB에 저장하고 관리하는 요즘 이를 보관하고 관리하기 위해서는 SQL을 알아야 한다. 무한반복, 지루한 코드.. 자바 객체를 SQL로 바꾸고 SQL을 자바 객체로 바꾸고를 무한 반복 새로운 필드를 추가하는 등 변경사항이 생기면 또 쿼리문을 다 고쳐야 함 즉, SQL에 의존하는 개발을 할 수 밖에 없게 된다. 패러다임의 불일치 객체와 RDB의 테이블이 완전히 일치하지 않는다. 객체를 RDB에 저장하려면 객체데이터를 SQL로 바꾼다 SQL로 RDB에 전달한다 이 과정을 개발자가 한다. (SQL mapper) 객체와 RDB의 차이 4가지 상속 연관관계 데이터 타입 데이터 식별방법 상속 Item 클래스를 상속받는 Album 클래스가 있다고 가정하자. 객체에는 상속관계가 있다. DB 테이블에는 상속이라는..

강좌 소개

JPA(Java Persistence API) 발전 순서 순서 JDBC jdbcTemplete, MyBatis JPA jdbcTemplete, MyBatis 까지는 개발자가 직접 SQL문을 작성해야 했지만 JPA로 인해 그 과정조차 한 줄로 생략 가능하게 된다. JPA가 실무에서 어려운 이유 SQL도 안 짜도 되어서 편해 보이지만, 실제 실무의 경우 수십 개 이상의 복잡한 객체와 테이블 복잡하게 얼혀서 사용되기 때문에 어렵다. 앞으로 강의를 통해 배울 내용 객체와 테이블 제대로 설계, 매핑하는 방법 기본 키와 외래 키 매핑 결국 어떠한 복잡한 시스템도 JPA로 설계 가능하도록 목표 - JPA 내부 동작방식 이해 JPA 내부 동작 방식을 이해하지 못하고 사용하면 디버깅 오래ㅐ 걸리고 장애상황 대처 불가능 ..

User 삭제 시 FriendList에서 사라지지 않는 이슈

다음과 같이 두 User 가 있다고 할 때 User “페이버222”를 User “페이버111”의 Friend로 추가 (UserFriend) 하지만 User “페이버222”를 삭제해도 User “페이버111”의 friendList에서 사라지지 않는 이슈가 있었다. 다른 매핑된 도메인 사이에서는 Cascade가 잘 일어났지만 User와 Friend 도메인 사이에서는 그렇지 않았다. 이는 어플의 기획에 의한 Friend의 특수함 때문이다. Friend는 boolean 필드 isUser 에 의해서 사용자가 다른 사용자를 친구로 추가한 FriendUser인지 직접 생성한 friend인지 구분된다. User A가 User B를 친구로 추가해 자신의 friendList에 추가해도 User B의 DB에는 아무 변화가 ..

Spring 과 Spring Boot 의 차이

Python을 이용한 Django, Ruby를 이용한 Ruby on Rails, Javascript를 이용한 Node.js가 있듯이 Spring은 Java를 기반으로 하는 웹 어플리케이션 제작이 가능한 프레임워크이다. IoC(제어의 역전)와 DI(의존성 주입), AOP(관점지향 프로그래밍) 등의 장점을 갖고 있다. 그럼 Spring Boot는 뭘까? Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run". "스프링부트로 [단순 실행]만 하면 되는 스프링 기반의 어플리케이션을 쉽게 만들 수 있다." 이와 관련해 다음의 이미지들이 정말 잘 와닿았다. 즉 Sp..

API - 3 (PUT, DELETE)

PUT 수정을 요청하는 PUT API 를 만들어 보자. CarController.java 에 다음 코드를 추가하면 된다. @PutMapping("/api/cars/{id}") //변경할 데이터 ID 까지 public void updateCar(@PathVariable Long id, @RequestBody CarRequestDto carRequestDto){ carService.update(id, carRequestDto); } 이전의 @GetMapping, @PostMapping 과 URL 이 조금 다르다는 것을 알 수 있는데, 해당하는 ID 값을 가진 데이터를 찾아서 수정해야 하기 때문에 {id} 를 추가해줬다는 차이가 있다. 이는 PUT 방식으로 위 주소로 이동했을 때 작동하는 updateCar 메..

API - 2 (GET, POST)

참조 - API란 무엇인가요? AWS : https://aws.amazon.com/ko/what-is/api/ API란 무엇인가요? - API 초보자를 위한 가이드 - AWS aws.amazon.com API 는 간단하게 클라이언트와 서버간의 약속이라고 설명할 수 있다. 클라이언트가 서버에게 요청을 보내면, 서버가 요구사항을 처리한 후 응답하는 것이다. REST(Representational State Transfer) 는 클라이언트가 서버 데이터에 액세스 할 때 사용 가능한 GET, POST, PUT, DELETE 등의 함수 집합을 정의한다. 간단히 정리하자면 REST 란 주소에 명사를, 요청 방식에 동사를 사용해 의도를 명확히 드러내는 것을 의미한다. 동사는 JPA 에서 배웠던 CRUD 를 생각하면 ..

DTO

DTO에 대해 설명하기 전에 MVC패턴을 이해할 필요가 있다. MVC 패턴은 애플리케이션을 Model, Controller, View 세 가지로 구분하는 디자인 패턴이다. Model : DB와 관련된 일을 한다. View : 데이터를 받아서 표현하거나 사용자 요청을 받는다. Contoller : Model에서 데이터를 받아 View로 전달해주거나 View에서 들어온 요청을 해석해 Model을 변경한다. 비즈니스 처리로직(Model)과 UI(View)의 중간에서 Controller가 이들을 연결해주는 역할을 한다. 서로 분리함으로써 각자 역할에만 집중하게 하는 것이다. 이런 경우 유지보수, 확장, 유연성, 중복해결 등 다양한 측면에서 유리해진다. DTO(Data Transfer Object) 란 이러한 계..