728x90
반응형

2023/11 10

연관관계 매핑(양방향)

✅ 양방향 매핑이란? 객체의 연관관계 중 하나인 양방향 매핑은, 사실상 단방향 매핑이 두번 이루어진 것이다. 즉, 개념적으로 두 개의 단방향 매핑을 추상적으로 양방향 매핑이라 칭하는 것이다. ✅ 양방향 연관관계 매핑의 필요성 테이블과 객체를 비교해보자. 테이블에서는 외래 키 하나로 두 테이블의 연관관계를 확인할 수 있다. 외래 키를 가지고 조인하면 두 테이블간 데이터의 결합과 접근성이 자유롭다. 즉, 외래 키 하나만으로 한 컬럼의 연관된 데이터를 획득할 수 있다. 하지만 객체에서는? 객체를 탐방하려면 참조가 쌍방으로 존재해야 한다. 참조가 양방향으로 존재해야 참조와 역참조가 가능한 구조라는 것이다. 이런 패러다임의 차이를 극복하기 위해 양방향 매핑을 한다. 하지만, 엔티티 연관관계를 설정할 때 우선 단방..

Dev/Spring 2023.11.21

연관관계 매핑(단방향)

✅ 연관관계 매핑의 필요성 모델링의 두 방식의 차이점을 비교하며 연관관계의 필요성을 알아보자. ✅ 테이블 중심 모델링 ![Untitled] 테이블 연관관계에 맞추어 객체를 모델링 해보자 🌱 엔티티 매핑 참조 대신에 외래키를 그대로 사용하여 다음과 같이 Member 와 Team 을 작성할 수 있다. @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private Long teamId; ... } @Entity public class Team { @Id @GeneratedValue private Long id; private String name; ... } 🌱 엔티티 다루기 위와 같이 작성..

Dev/Spring 2023.11.21

변경 감지(Dirty Checking)

✅ 영속성 컨텍스트란 ‘엔티티를 영구히 저장하는 환경’이라는 뜻 EntityManager.persist(entity); 하지만 이는 논리적인 개념이다. 엔티티 매니저를 통해서 영속성 컨텍스트에 접근할 수 있다. 아래의 예를 통해 영속성 컨텍스트 내에서 변경 감지(Dirty Checking)를 하는 법을 알아보자. ✅ 엔티티 수정 EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); // 단일 EntityManger를 생성한다. EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); // 트랜잭션 시작한다. (영속성 컨텍..

Dev/Spring 2023.11.20

JPA를 왜 쓸까?

✅ JPA? Java Persistence API 자바 진영의 ORM 기술의 표준 ORM이란?즉, 객체 관계 매핑이다.ORM이라는 프레임워크가 중간에서 매핑하는 것 대중적인 언어에서는 대부분 ORM기술이 존재하여, 데이터베이스와 어플리케이션 간의 인터페이스를 보장한다. (ex. python sqlalchemy) 객체는 객체대로 설계 / 관계형 데이터베이스는 관계형 데이터베이스대로 설계 Object-Relational Mapping ✅ JPA의 동작 어플리케이션과 JDBC 사이에서 동작한다. ✅ 표준 명세 JPA는 기본적으로 인터페이스의 모음이다. 이 JPA 표준 명세를 구현한 3가지 구현체가 존재한다. Hibernate EclipseLink DataNucleus ✅ JPA 사용 이유? SQL 중심적인 개..

Dev/Spring 2023.11.20

영속성 컨텍스트란

Overview JPA의 '영속성 컨텍스트'라는 논리적인 개념에 대해 다룬다. JPA의 2요소 JPA에서 가장 중요한 2가지라 하면, 객체와 RDBMS를 매핑하는 연관관계 영속성 컨텍스트 이 두가지가 있다. 웹 어플리케이션에서 사용자는 EntityManager를 할당받고, Database에 접근하기 위해 EntityManager로 엔티티를 영속성 컨텍스트에 집어 넣는다. 즉, 영속성 컨텍스트는 엔티티를 영구 저장하는 환경이라는 뜻이다. 일반적으로 EntityManager.persist(entity);구문을 통해 엔티티는 영속성 컨텍스트에 들어간다. 엔티티의 생명주기 비영속 영속성 컨텍스트와 연관이 없는 상태. 그저 생성만 된 객체를 의미한다. 영속 영속성 컨텍스트가 관리하는 객체 준영속 영..

Dev/Spring 2023.11.20

Ch06. API URL, Project Configuration

Overview EndPoint와 Request/Reply 데이터를 설계하자. 협업을 편리하게 진행하기 위한 API 명세서를 작성하자. API란 Appliation Programming Interface(API) 즉, Application을 Programming할 때 사용되는 Interface를 말한다. 소프트웨어 사이에 복잡한 것들을 감추고, 추상화를 통해 손 쉽게 마이그레이션 혹은 응용을 할 수 있게끔 하는 도구의 일종이다. REST API 웹 어플리케이션에서는, REST API를 자주 사용한다. REST API란 말 그대로 RESTful한 API를 일컫는다. REST Representational State Transfer 의 약자로, 자원을 이름으로 구별하여 자원의 상태(state)를 주고 받는 ..

Ch05. SQL

Overview 요구사항에 맞게 쿼리를 작성하는 방법에 대해 고민하고, 이를 통해 쿼리를 만들어보자. Entity-Relationship Diagram Requirements 진행 중/완료 미션을 모아서 보는 페이지 SELECT * FROM Mission WHERE mission_status = 'IN_PROGRESS' OR mission_status = 'COMPLETED';한 유저에게 할당된 미션에 대해, 진행 중 혹은 진행 완료된 미션을 모아서 볼 수 있는 쿼리 리뷰 작성하는 페이지 INSERT INTO Review (grade, title, content, reply, visitDate, store_id, user_id) VALUES (:grade, :title, :c..

[우아한 테크코스 6기 - 프리코스] 4주차 회고

Overview 우아한 테크코스 6기 프리코스 중 4주차 크리스마스 프로모션을 구현하고, 이에 대한 회고이다. Github UML 0. 들어가며 0.1 4주차의 의도? ‘클래스를 분리한다’ 가 객체지향의 특징 그 자체라고 생각한다. 이 목표를 지키려면 수많은 조건을 지켜야 하기 때문이다. 3주차에서 한 번 강조된 이 목표를, 4주차에서 한 번 더 강조하는 이유가 바로 이것 때문이라고 생각한다. 클래스가 정말 예쁘게 분리된 코드를 작성하기에 한 주만으로 당연히 부족했고, 여러 시행착오를 겪으며 4주차에 임하기를 바라는 것이 우테코의 의도였다면 다행히 조금은 이를 만족한 것 같다. 0.2 미션에 임하는 마음 물론 클래스를 분리한다는 것은 4주차에 와서도 어려운 일이었다. 클래스를 분리하고, 메서드를 최소단위..

[우아한 테크코스 6기 - 프리코스] 3주차 회고

Overview 우아한 테크코스 6기 프리코스 중 3주차 로또를 구현하고, 이에 대한 회고이다. Github Link 3주차를 시작하며 3주차 미션을 시작하며 리마인드한 점이 있었다. 코드를 작성할 때, 내 행동과 선택에 항상 이유가 있어야 한다는 것이다. 클래스를 분리하는 연습을 하기 전, 이번 과제에도 MVC 패턴을 적용하여 해결하려 했다. 많은 레퍼런스들이 MVC 패턴을 적용하여 프리코스의 과제를 해결했고, 나 또한 몇 차례 써보았기에 맹목적으로 사용했다. 하지만 정작 나는 MVC의 Model에 대한 정의도 제대로 못 내리는 상태였다. 코드리뷰를 하며 동료들의 코드를 보던 중, domain이라는 패키지 안에 다양한 비즈니스로직을 수행하는 클래스들을 볼 수 있었다. MVC의 Model은 찾을 수 없고..

[우아한 테크코스 6기 - 프리코스] 2주차 회고

Overview 우아한 테크코스 6기 프리코스 중 2주차 자동차 경주게임을 구현하고, 이에 대한 회고이다. Github Link 1. 설계와 개발패턴 정형화 2주차 미션에서는 1주차보다 설계에 많은 시간을 투자했다. 그렇게 리팩토링에 쏟은 시간이 상대적으로 적었고, 초반 설계에 대한 고민이 많아 처음 과제를 보고, 코드를 작성하기까지 2~3일은 걸렸다. 1주차에 비해 2주차에 추가된 조건에 가장 신경쓰이는 부분이 ‘기능단위 커밋’을 할 것이라는 조건이였다. 기능이라는 단어란 무엇일까? 영어로 function이고 이 말은 method를 지칭하는 function과도 문맥을 동일시한다. 그렇다면 커밋의 단위는 메서드의 구현인가? 그렇다면 기능 목록은 메서드 단위로 작성해야 하는가? 그것은 아니였다. 메서드 여..

728x90
반응형