전체 글 57

JPA_값 타입

값 타입 분류 기본 값 타입 자바 기본 타입(int,double…) 래퍼(Wrapper)클래스(Integer,Long) String 임베디드 타입 컬렉션 값 타입 임베디트 타입 새로운 값 타입을 직접 정의할 수 있음 기본 값 타입을 모아서 만들어서 복합값 타입이라고 함 위의 사진에서 Member라는 엔티티 안에서 Period, Address라는 객체를 새로 만들어서 아래의 코드 처럼 객체 선언 public class Member{ ... //임베디드 타입 private Period workPeriod; private Address homeAddress; } 임베디드 타입 사용법 @Embeddable → 값 타입을 정의하는 곳에 표시 @Embeddable public class Period{ private..

JPA 2023.10.05

JPA_프록시와 연관관계관리

프록시와 연관관계 관리 📒 em.find() vs em.getReference() em.find() → DB를 통해서 실제 엔티티 객체 조회 em.getReference() → DB조회를 미루는 가짜(프록시) 엔티티 객체 조회 프록시란? 실제 클래스를 상속 받아서 만들어짐 실제 클래스와 겉 모양이 같음 개발자 입장에서는 진짜 객체인지 프록시 객체인지 구분X 프록시 객체는 실제 객체의 참조(target)을 보관 프록시 객체를 초기화하면 프록시 객체는 실제 객체의 메소드 호출 프록시 객체는 JPA성능 최적화를 위해 제공하는 기술 → 지연로딩 핵심 원리 📒 프록시 초기화란? 프록시가 실제 엔티티 객체를 불러오는 과정 Member refMember=em.getReference(Member.class,member..

JPA 2023.09.26

JPA_연관 관계 매핑

JPA에서 대부분의 엔티티가 서로 관계를 맺고 있는 걸 확인할 수 있다. 연관관계 매핑이란? 객체의 참조와 테이블의 외래키를 매핑하는 것을 의미 연관관계 매핑 시 고려사항 1. 연관관계의 주인 2. 단방향, 양방향 3. 다중성 우선 그 전에 연관관계 주인에 대해 알아야 양방향관계에 대해서도 알 수 있으니 먼저 설명하겠다. 연관관계의 주인 테이블은 외래키 하나로 두 테이블이 연관관계를 맺음 객체 양방향관계는 A → B, B → A처럼 참조가 2군데 있음, 사실상 단방항관계가 2개 있는거 객체 양방향 관계는 참조가 2군데 있는데, 둘 중 외래키를 관리할 테이블을 지정해야함 연관관계의 주인 → 외래키를 관리하는 참조(주로 Many쪽에 있음) 주인의 반대편 → 외래키에 영향을 주지 않음, 단순 조회만 가능 ma..

JPA 2023.09.23

JPA_영속성 컨텍스트 & 객체와 테이블

영속성 컨텍스트란? 엔티티를 영구 저장하는 환경 애플리케이션과 DB사이에서 객체를 보관하는 논리적 개념 영속성 컨텍스트 장점 1차 캐시 1차캐시는 처음에 persist(user1)로 데이터를 넣으면 DB에 바로 저장되는 것이 아니라 1차 캐시라는 곳에 들어가 있는데 이때 만약 다름 쿼리가 em.find(User.class,user1)인 경우 DB에서 조회를 할 필요없이 1차 캐시에서 발견하였기 때문에 빠르게 반환가능 동일성 보장 두 개의 엔티티가 서로 같은 엔티티인지 DB차원에서 할 필요없이 바로 애플리케이션 차원에서 확인이 가능 트랜잭션을 지원하는 쓰기 지연 만약 em.persist(user1); em.persist(user2); 를 하였을경우 각각 DB에 커밋을 하는 것이 아니라 쓰기 지연 저장소에 ..

JPA 2023.09.19

[Spring] 스프링 시큐리티(Security)

더보기 스프링 시큐리티(Security)란? 스프링(Spring) 기반의 웹애플리케이션의 인증(Authenticate)과 권한(Authorize)을 담당하는 스프링의 하위 프레임 워크 그럼 스프링 시큐리티의 작동 원리는 어떻게 될까? 그 전에 우선 스프링의 작동원리를 알아보자. 사용자로부터 web.xml을 통해 요청이 들어온다. 보통은 localhost:8080을 통해 사용자와 스프링서버와 연결을 한다. Dispatcher Servlet은 8080포트를 통해 들어온 요청을 받아 IoC컨테이너안에 있는 스프링 빈을 검사하여 함수를 제공한다. Controller라고 사용자의 요청을 url을 통해 받아서 Service에게 요청처리를 부탁한다. 사용자의 요청을 받은 서비스는 Repository라고 하는 DB와 ..

SpringBoot 2023.07.24

[Spring] 트랜잭션(Transaction) 이란?

트랜잭션(Transaction)이란? 여러 작업을 진행하다가 문제가 발생한 경우 문제가 발생하기 전의 상태로 롤백(RollBack)하기 위해 사용되는 것이다. 다른 말로 더 이상 쪼갤 수 없는 최소 작업 단위를 의미 트랜잭션의 작업에는 크게 2가지가 있다. 커밋(Commit) -> 작업이 마무리 된 것을 의미 롤백(RollBack) -> 작업을 진행 중 문제가 발생하여 작업중이던 작업을 취소하고 이전의 상태로 되돌리는 것을 의미 Spring에서는 트랜잭션과 관련해서 몇 가지 기술을 제공하고 있다. 트랜잭션 동기화 트랜잭션 추상화 AOP를 이용한 트랜잭션 분리(선언적 트랜잭션) 트랜잭션 동기화 개발자가 여러개의 작업을 하나의 트랜잭션으로 관리하려면 Connection객체를 공유해야하는 불필요한 작업이 생긴..

SpringBoot 2023.07.02

[OOP] 스프링 삼각형(AOP)

AOP(Aspects - Oriented Programming) 핵심관심사와 횡단관심사를 분리하여 모듈화하여 재사용할 수 있도록 지원하는 것 관점 지향 프로그래밍이라고도 함 스프링 AOP는 인터페이스 기반으로 함. class Teacher{ public void sleep(){}; public void eat(){}; public void teach(){}; } class Student{ public void sleep(){}; public void eat(){}; public void learn(){}; } 위의 코드를 보게 되면 먹고 자는 행동은 학생과 선생님 둘 다 공통적으로 수행하는 부분이기 때문에 횡단관심사라고 하고 선생님의 역할을 가르치는 것이고 학생의 역할은 배우는 것으로 서로 핵심적인 역할..

JAVA-SOLID 2023.06.21

[OOP] 스프링 삼각형(IoC/DI)

스프링을 이해하기 위해서는 스프링 삼각형이 대단히 중요하다. 프로그래밍에서의 의존성이 의미하는 것은 무엇일까? 대답은 전체가 부분에 의존한다는 것을 의미한다. 자바에서는 new키워드가 의존관계를 표현한다고도 한다. 의존성을 주입하는 방법에는 스프링을 이용한 방법과 이용하지 않은 방법 2가지가 존재한다. 우선 스프링을 사용하지 않고 의존성을 주입하는 방법에 대해 설명하겠다. 스프링을 사용하지 않고 의존성을 주입하는 방법(생성자 주입) public class IocDi { public static void main(String[] args) { Case c=new ClearCase(); Phone phone=new Phone(c); System.out.println(phone.getCaseType()); }..

JAVA-SOLID 2023.06.18

[OOP] 디자인 패턴(Singleton, Template Method, Strategy)

Singleton Pattern(싱글톤 패턴) Singleton Pattern은 오직 단 하나만의 인스턴스를 만들고 그것을 계속해서 재사용하는 원칙을 의미한다. 따라서 Singleton Pattern을 적용하면 의미상 한 클래스에 두 개의 객체가 존재할 수 없는 것을 의미한다. Singleton Pattern을 적용하려면 아래와 같은 3가지 조건이 필요하다. new연산을 실행할 수 없도록 생성자에 private접근 제어자를 지정함 유일한 단일 객체를 반환할 수 있는 정적 메소드가 필요함 유일한 단일 객체를 참조할 정적 참조 변수가 필요함 위의 코드를 살펴보면 Singleton클래스의 참조변수를 정적변수로 선언을 하고 초기화를 하지 않았다. 그런 다음 기본생성자를 선언했는데 public이 아닌 privat..

JAVA-SOLID 2023.06.14

[OOP] 디자인 패턴(Adapter, Proxy, Decorator Pattern)

디자인 패턴 디자인 패턴은 다른 말로 설계패턴이라고도 한다. 또한 디자인패턴은 상속, 인터페이스, 객체를 속성으로 사용하여 이용하는 방식이다. 디자인 패턴은 설계라고 하면 SOLID원칙은 설계원칙이기 때문에 디자인 패턴은 SOLID원칙을 기반으로 한다. Adapter Pattern(어댑터 패턴) 어댑터는 변환기라는 의미를 가지고 있다. 여기서 변환기는 서로 다른 두 인터페이스 사이에 통신이 가능하게 하는 것을 의미한다. 어댑터 패턴을 사용하는 것은 대표적으로 JDBC가 있다. JDBC를 인터페이스를 이용하여 사용하는 DB를 바꾸어도 사용자는 신경쓰지 않아도 되기 때문이다. JDBC를 보니 뭔가 떠오른게 있는가? 바로 Adapter Pattern은 OCP(개방 폐쇄 원칙)과 DIP(의존 역전 원칙)을 이용..

JAVA-SOLID 2023.06.08