Spring 7

[TDD] API 응답속도를 개선해보자.

TDD프로젝트를 진행하면서 우연히 프론트분에게 todo를 불러오는데 로딩이 좀 있는거 같다 라는 연락을 받게 되었다.. 문제(?)의 동영상저걸 보고 전 어라? 저 부분은 데이터도 적은 부분인데 왜 로딩이 되지...? 라는 불안감이 생겼고, API테스터로 response time을측정해보니,,,,,,보자마자 와 뭐지,,API호출하는데 1.5초가 걸린다고? 라는 생각이 들면서 뭐가 문제인지 고민을 해보았습니다. 우선 제가 생각한 문제는 일자별로 DB에서 검색하는게 오래걸렸나..? 라는 생각을 하였습니다..그래서 cache를 적용해야하나? 라는 고민을 하며 우선 로그를 찍어서 한번 확인해보기로 했습니다. 우선 문제의(?) API의 Service를 보면fun findTodoLists(todoDateRequest..

Project 2024.08.13

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

[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] 스프링 삼각형(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