전체 글 39

[Design Pattern] Command Pattern

이번에는 커맨드 패턴입니다. Command Pattern 커맨드 패턴을 이용하면 요구 사항을 객체로 캡슐화 할 수 있으며, 매개변수를 써서 여러가지 다른 요구 사항을 집어넣을 수도 있다. 또한 요청 내역을 큐에 저장하거나 로그로 기록할 수도 있으며, 작업 취소 기능도 지원 가능하다. 먼저 다이어그램을 보면서 어떤 모양일지 얘기해보겠습니다. 이제 디자인 패턴을 1/3 정도 보다보니, 인터페이스를 잘 활용하는 것이 중요하다고 생각이 듭니다. 캡슐화하거나 추상화하거나 감싸거나 하는 것들에 인터페이스가 들어가거나 혹은 구성을 이용한다거나 하는 것 같습니다. 앞으로는 바로 다이어그램을 보면서 어떤 모양일지 추리해보는 것도 좋은 공부방법이 아닐까 하는 생각이 드네요 🤔 다이어그램을 보겠습니다. Client 는 Co..

[Design Pattern] Singleton Pattern

이번에는 굉장히 많이 듣게 되는 패턴인, 싱글턴 패턴입니다. 너무 많이 들었던 패턴이고, Spring 을 공부하다 보면 자연스레 듣게 되는 패턴입니다. Singleton Pattern 싱글턴 패턴은 해당 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴 싱글턴 패턴 자체의 정의는 어렵지 않습니다. 다만 구현방법과 왜 필요한지에 대해서 고민을 해봐야 한다고 생각합니다. Spring 을 공부할때도 빈의 기본 스코프가 싱글턴이라는 것은 배우지만 정작 싱글턴이 무엇인지는 관심을 가지고 찾아보지 않으면 그냥 인스턴스가 하나만 만들어지는 구나 하고 넘어갈 수 있습니다. 먼저, 인스턴스를 하나만 만든다는 정의를 기준으로 고전적인 구현법을 보겠습니다. public cla..

[Design Pattern] Abstract Factory Pattern

이전 글에 이어서 팩토리 패턴 중 추상 팩토리 패턴에 대해서 학습하겠습니다. Abstract Factory Pattern 추상 팩토리 패턴에서는 인터페이스를 이용하여 서로 연관된, 또는 의존하는 객체를 구상 클래스를 지정하지 않고도 생성한다. 팩토리 메소드 패턴을 공부하면서 피자가게 예를 들었었는데요, 추상 팩토리 패턴을 이해하기 위해서 같은 예시로 이어가보겠습니다. 이제는 원재료의 품질을 관리하고 싶다는 요구사항이 들어왔습니다. 근데 뉴욕 스타일과 시카고 스타일의 재료는 또 다르겠죠. 이런 것들을 어떻게 해결 할 수 있을지 보겠습니다. 좀 복잡한 모양이 되었습니다. 이 다이어그램에 대해서 설명을 해보면 PizzaIngredientFactory 는 서로 관련된 제품군을 만드는 방법을 정의하기 위한 인터페..

[Design Pattern] Factory Method Pattern

이번에는 팩토리 메소드 패턴에 대해서 학습하겠습니다. Factory Method Pattern 팩토리 메소드 패턴에서는 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정하게 만든다. 우리는 객체를 만들때 new 를 사용해왔습니다. 그런데 new 를 사용해서 인스턴스를 생성하면 결국은 특정 구현을 이용한다는 뜻이기도 합니다. new 에 문제가 있는 것은 아니지만 특정 객체를 만드는 형태여서 수정이 일어난다면 고쳐야 하는 코드가 계속해서 생기게 될 것이고, OCP 원칙을 위배할 가능성이 높아집니다. 책에 있는 피자 가게 예시로 어떤 패턴인지 알아보겠습니다. 위의 다이어그램만 보아도 구조가 다 보여서 굳이 코드를 작성하진 않겠습니다. Pizza 인터페이스를 구..

[JPA] 양방향 연관관계 & 연관관계의 주인 (1)

이번에는 양방향 연관관계와 연관관계의 주인에 대해서 작성해보겠습니다. 기본(3) 으로 넣을까하다가 그렇기에는 중요한 개념인 것 같아서 따로 뺐습니다. 앞에 작성했던 글에서는 모두 단방향 연관관계만 다루었습니다. 양방향 연관관계부터 시작해보겠습니다. 양방향 연관관계 DB의 테이블에서는 단방향이라는게 없었습니다. 외래 키를 통해서 항상 양쪽 모두에게서 접근이 가능했죠. 하지만 객체간의 관계에서는 어떻게 해야할까요? 위의 예시에서 먼저 생각할 점은 다대일 관계라는 것 입니다. 다시 코드를 통해서 보겠습니다. 먼저 Member 의 경우에는 이전의 예시와 다를게 없어보입니다. @Entity public class Member { @Id @Column(name="MEMBER_ID") private String id..

BackEnd/JPA 2022.05.09

[JPA] 연관관계 매핑 : 기본 (2)

지난 글에 이어서 연관관계 매핑 기본이라고 생각되는 부분을 이어서 작성하겠습니다. 이번에는 연관관계를 매핑한 엔티티를 어떻게 저장,수정하는지 알아보려고 합니다. public void save() { Team team1 = new Team("team1", "팀 1"); em.persist(team1); Member member1 = new Member("member1", "회원 1"); member1.setTeam(team1); em.persist(member1); Member member2 = new Member("member2", "회원 2"); member2.setTeam(team1); em.persist(member2); } 위의 코드를 보겠습니다. 코드를 보면 두개의 Member 엔티티에 Team..

BackEnd/JPA 2022.05.08

[JPA] 연관관계 매핑 : 기본 (1)

JPA 에서 첫번째로 넘어야 할 산이라고 생각되는 연관관계 매핑입니다. 연관관계 매핑은 단순히 방향을 정하는 것과 다중성을 생각하는 것이 아니라 어플리케이션의 설계와 관련이 있어서 더 어렵기도 하고 중요하다고 생각이 드는 지점입니다. 그 전에 패러다임의 불일치라는 말을 많이 사용했는데, 그 전까지 이해가 잘 안되었다면 연관관계 매핑을 공부하면서 왜 패러다임의 불일치라는 말이 사용되는지 이해하게 될거라 생각합니다. 먼저, RDB 의 경우, 테이블끼리의 외래키로 매핑을 하는 형태입니다. JPA는 이걸 객체의 참조로 해결해야 하기 때문에 패러다임의 불일치가 생기죠. 이 그림을 보면 알 수 있듯이, RDB의 테이블은 외래키를 중심으로 양방향으로 참조가 가능합니다. 하지만 객체의 경우는 다릅니다. 참조하고자 하는..

BackEnd/JPA 2022.05.08

[JPA] 영속성 컨텍스트의 특징

저번 게시물에서 영속성 관리에 대해 이야기 하면서 마지막에 특징이자, 장점을 간단히 보고 넘어갔습니다. 이번에는 각각을 좀 더 자세히 알아보겠습니다. * 1차 캐시 영속성 컨텍스트는 내부에 캐시를 가지고 있는데, 이것을 1차 캐시라고 합니다. 영속 상태의 엔티티는 @Id 로 매핑한 식별자를 키 값으로 모두 이곳에 저장이 됩니다. Member member = new Memner(); member.setId("member1"); member.setUsername("name1"); em.persist(member); 위의 코드를 실행하면 아래의 그림처럼 1차 캐시에 Member 엔티티를 저장합니다. 앞에서 이야기가 나왔던 flush 가 일어나지 않았으므로 실제 데이터베이스에는 저장되지 않은 상태입니다. 1차 ..

BackEnd/JPA 2022.05.04

[JPA] 영속성 관리

이번에는 영속성 관리에 대한 이야기를 해보겠습니다. 영속성이라는 것은 영어로 표현했을 시, Persistence 입니다. JPA 가 Java Persistence API 인 것을 보면 이 개념이 중요하다는 것을 알 수 있습니다. 영속성 컨텍스트 엔티티를 영구 저장하는 환경. 엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관, 관리한다. 영속성 컨텍스트를 개발을 하면서 직접 볼 일은 없다고 생각됩니다. 엔티티 매니저를 통해서 접근하고 관리할 수 있지만, Spring Data JPA 를 사용한다면 이것마저도 개발자가 크게 신경쓸 일이 없습니다. 하지만 엔티티의 생명주기와 1차 캐시, 변경 감지, 지연 로딩 등 여기서 부터 출발하는 개념이 상당하고, JPA 를 이해하..

BackEnd/JPA 2022.05.03

[JPA] JPA 란? 🤔

계속 사용을 하고 있는 기술이지만, 기본기를 잊는 것 같아 다시 복습을 하며 기록하고자 합니다. 김영한님이 쓰신 '자바 ORM 표준 JPA 프로그래밍' 책을 기준으로 정리하겠습니다. 🌱 github : https://github.com/KyungSik9870/jpa_study GitHub - KyungSik9870/jpa_study: JPA 기본기를 학습하기 위한 toy project JPA 기본기를 학습하기 위한 toy project. Contribute to KyungSik9870/jpa_study development by creating an account on GitHub. github.com 먼저 JPA의 개념부터 잡고가겠습니다. 그리고 글 마지막에 실제로 써보면서 느낀점을 써보겠습니다. JP..

BackEnd/JPA 2022.05.02