전체 글 235

7장 고급 매핑

👣 개요 해당 게시물은 OOP와 SQL에서의 간극을 메꾸는 여러 기술을 나열하는 방식으로 서술된다. 아직 OOP와 SQL 사이에 간극이 존재하는데 내용은 다음과 같다. 1. OOP의 상속관계 2. SQL에서의 복합 키 및 식별 관계 👣 상속 관계 매핑 SQL에는 상속 개념이 존재하지 않는다. 대신 슈퍼타입 서브타입 관계라는 개념이 존재한다. 따라서 OOP의 상속은 SQL에서의 슈퍼타입 서브타입 관계로 매핑한다. 위 방법은 3가지의 전략으로 적용할 수 있다. 1. Joined Strategy 2. Single-Table Strategy 3. Table-per-Concrete-Class Strategy Joined Strategy는 부모 테이블[이하 P]을 만들고 해당 테이블에 DTYPE과 같은 자식 테이블..

JPA 2023.08.31

6장 다양한 연관관계 매핑

👣 개요 해당 게시물에서는 '다대일', '일대다', '일대일', '다대다' 의 연관관계를 다룰 예정이었다. 하지만 앞선 5장과 다소 중복이 많기 때문에 '다대다' 관계에 대해서만 다루고 넘어갈 것이다. 👣 다대다 연관관계 마치 쇼핑몰 웹사이트에서의 '회원'과 '상품'의 관계와 같다. 이하, '회원'을 A로 '상품'을 B로 표기한다. A는 여러 개의 B를 소유할 수 있다. 마찬가지로 B는 여러 명의 A에 의해서 주문되어 진다. 안타깝게도 SQL에서는 정규화가 진행된 테이블 2개만으로 이 관계를 정의할 수 없다. 때문에 A와 B 사이에 '주문 테이블'[이하 C]가 추가적으로 필요하다. 이를 통해 A-C 혹은 B-C의 관계를 다시 '다대일'관계로 만들어서 사용할 수 있다. create table MEMBER ..

JPA 2023.08.31

8/30

👣 개요 오늘은 Lv 2 과제를 수행하기 위해 팀원과 회의를 진행했다. 해당 회의로 API를 결정하고 같이 작업할 git repo를 정했다. 그리고 각자의 Branch를 정해서 코드 충돌이 알어나지 않게 전략을 짰다. 다만 구체적인 구현에 대해서 결정하지는 못했다. 아직 강의에서 제안된 기술들에 대해 능숙하지 못했기에 추가적인 공부를 진행한 후에 코드를 작성하기로 했다. 때문에 다음 강의를 들어볼까 생각도 했지만 그렇게 되면 실제로 적용하게 될 과제에 혼동을 줄 수도 있어서 이미 공부하던 '자바 ORM 표준 JPA 프로그래밍' 책을 마저 공부하기로 했다. 오늘 공부한 내용은 '엔티티 매핑법'과 '연관관계 매핑'에 대해 배웠다. 아래 게시물이 오늘 작성했던 게시물이다. 4장 엔티티 매핑 👣 개요 해당 게시..

TIL 2023.08.30

5장 연관관계 매핑 기초

👣 개요 OOP와 SQL 사이의 가장 큰 간극은 '객체의 참조'와 'table 사이의 관계'일 것이다. OOP의 경우, 어떤 한 객체 A가 다른 객체 B를 필드로서 참조하고 있다고 해도 객체 B가 객체 A를 필드로 가지는 것은 아니다. 하지만 SQL의 경우, 어떤 한 테이블 C가 다른 테이블 D를 참조하고 있다면 테이블 D는 테이블 C를 Join 연산으로 참조할 수 있다. 만약 위 상황을 해결하기 위해 객체 A와 객체 B가 서로를 필드로 참조한다 하더라도 또다른 고려사항이 생긴다. OOP의 경우, A와 B가 참조하면 둘 사이는 완전 대칭을 이룬다. 하지만 SQL의 경우, C 혹은 D 둘 중 하나는 FK[외래 키]를 가지고 있어서 완전한 대칭을 이루지는 못한다. 이렇게 OOP와 SQL 사이에는 '참조 방향..

JPA 2023.08.30

4장 엔티티 매핑

👣 개요 해당 게시물은 객체를 엔티티로 선언하기 위해 매핑하는 방법에 대한 내용을 담고 있다. 👣 @Entity JPA가 엔티티로서 사용할 클래스에 추가하는 어노테이션. 해당 클래스는 다음과 같은 조건을 가져야 한다. public or protected의 기본 생성자 final 클래스, Enum, Interface, Inner 클래스가 아닌 클래스 final 필드가 아닌 필드를 가진 클래스 그리고 해당 어노테이션은 다음과 같은 속성을 가진다. name 엔티티 이름을 지정. 기본값은 클래스명이다. 엔티티 이름은 다른 엔티티와 중복되면 안된다. 👣 @Table 엔티티와 매핑할 테이블을 지정한다. 해당 어노테이션은 다음과 같은 속성을 가진다. name 매핑할 테이블 이름. 기본값은 @Entity에서 매핑한 엔..

JPA 2023.08.30

컴포지트 패턴 적용 - SecurityFilterChain 적용

👣 개요 컴포지트 패턴이란? Composite Pattern - 구조 👣 문제 상황 코드 가독성과 유지보수성을 높이기 위해 개별 객체와 집합 객체를 동일하게 다루고 싶은 경우가 존재한다. 예를 들어, 포토샵과 같은 프로그램을 설계한다고 가정해본다. 개별 ikadnorth.tistory.com 해당 패턴을 이용해서 SecurityFilterChain 설정을 OCP, SRP 원칙을 지킬 수 있도록 코드를 작성함. 👣 문제점 기존의 SecurityFilterChain 설정 방법 · iksadNorth/composite-pattern-case-securityfilterchain@6335f7f iksadNorth committed Aug 30, 2023 github.com 그저 모든 SecurityFilterCh..

디자인 패턴 2023.08.30

8/29

👣 개요 오늘은 Spring 숙련주차 2주차를 모두 들었다. 정확히는 'My Select Shop' 설계 강의 이후로 듣기 시작해서 끝까지의 강의를 들었다. 해당 강의들은 앞서 배웠던 JPA 연관 관계, RestTemplate을 이용해서 네이버 상품 검색 API를 이용해 상품을 불러오고 해당 상품들의 찜하기 버튼을 만들어 찜한 목록을 따로 불러오는 기능을 구현했다. 이 중 새롭게 배울 수 있던 기술은 Scheduler 기능이었다. 해당 기능은 변동되는 상품들의 가격을 최신화하기 위해 매일 새벽 1시마다 일괄 검색 후 가격 갱신을 하면서 사용한 기술이었다. 여태까지 Spring Batch만이 정기적인 업무를 수행할 것이라 생각했는데 그저 @Scheduled 어노테이션을 이용해서 구현할 수 있음을 깨달았다...

TIL 2023.08.29

8/28

👣 개요 3주차 강의 중 숙련 part의 강의는 굉장히 영양가 있는 강의들로 가득찼다. 해당 강의는 보안을 위한 Spring Security 강의와, Validation, RestTemplate, JPA 연관관계에 대한 내용으로 이뤄져 있고 모두 내가 주먹구구식으로만 배워왔던 지식들이었다. 이러한 강의를 체계적으로 배울 수 있어서 새롭게 알게 된 내용과 그동안 알지 못해 불편했던 것들을 많이 알 수 있었다. 👣 JWT를 위한 UsernamePasswordAuthenticationFilter 확장 그 동안 JWT를 구현하기 위해 OncePerRequestFilter를 확장해서 사용하기만 했다. 그러다 보니 로그인 기능 구현 시, 직접 Authentication 객체를 인증 처리하고 SecurityConte..

TIL 2023.08.28

3장 영속성 관리

👣 개요 엔티티 매니저가 엔티티를 어찌 관리하는지에 대한 게시물이다. 👣 Entity Manager Factory & Entity Manager Entity Manager Factory 생성 비용이 아주 크며, 동시성에 강하기 때문에 App 전체에서 보통 1개만 사용한다. META-INF/persistence.xml 내용을 기준으로 생성되며, 필요에 따라 Entity Manager를 만들어 낸다. Entity Manager 비교적 생성 비용이 적다. 다만 동시성 문제에 취약하므로 스레드 사이에 공유는 절대 금물이다. 엔티티 매니저를 취득했다고 해서 DB와의 연결을 수행한 것은 아니다. 예를 들어 트랜잭션을 시작할 때만 DB와 연결을 수행한다고 보면 된다. 👣 영속성 컨텍스트 영속성 컨텍스트는 엔티티 매니..

JPA 2023.08.27

WIL - 8/21 ~ 8/27

👣 개요 이번주는 본격적으로 Spring에 대한 공부가 시작되는 주였다. 이건 강의를 들어보면서 느낀 점은 생각보다 JPA에 대한 기초가 부실했다는 것이다. Spring Data JPA는 알고 있어도 JPA 문법 및 기초 지식에 균열이 있음을 확인하고 추가적인 공부를 진행하고자 했다. '자바 ORM 표준 JPA 프로그래밍'라는 책을 사서 부족한 부분을 채워나가고자 했다. 하지만 항해 99에서 제시한 강의와 과제가 비교적 많은 시간을 요구했기에 빠르게 나의 공부를 진행하지 못했다. 비록 적은 시간을 투자할 수 밖에 없는 환경이라지만 이번 책은 꼭 코드로 구현해나가며 공부하고자 한다. JPA의 경우, 특히나 자주 사용하게 될 기술이며 'Effective Java'와 달리 구체적인 상황에 자주 제시되므로 코드..

TIL 2023.08.27