스프링 28

만약 대량의 데이터를 지워야 할 일이 있다면??? (JPA)

들어가기 본론 마무리 들어가기 만약 우리가 게시물을 지워야 한다면? 게시물과 연관된 테이블의 데이터를 먼저 지운 후 게시글을 지워야 한다. 게시물은 하나만 지우면 끝이지만, 게시물에 작성된 댓글이 만약 무수히 많다면? 게시글 - 사용자 : Many to One (다대일) 게시글 - 댓글 : Many to One (다대일) 만약 윗 코드처럼 댓글을 지우게 된다면 댓글의 갯수많큼 delete 쿼리가 발생할 것이다. 댓글이 많이 존재하지 않으면 괜찮은데, 이 댓글이 무수히 많다면? 성능상에 이슈가 발생할 여지가 생길 것이다. 어떻게 이를 해결할 수 있을까? 본론 이 글의 시작은 게시물에서 시작되었다. 예를 들어서 1번 게시물을 지우고자 할때, 윗 그림에서 확인할 수있는 것처럼, 연관관계가 맺어져 있기에 연관괸..

스프링/JPA 2023.01.14

cascade = CascadeType.REMOVE ? orphanRemoval = ture?

목차 들어가기 JPA CascadeType.REMOVE orphanRemoval = ture 마무리 들어가기 우리는 JPA에서 양방향 매핑시 cascade 전략을 이용해 부모가 자식 객체의 생명 주기를 관리할 수 있다. 이 때 전제 조건은 양방향관계를 맺고 있다에서 출발되는데, 양방향 전략 사용 시 둘 중 하나를 하나로 외래 키를 관리해야 한다. 문득 궁금했다. 이 Cascade 전략에 관련해서, 그러다 지식을 습득하는 과정에서 orphanRemoval이라는 키워드도 얻게 되었는데, 이 둘의 차이점이 무엇인지 정리함으로써 내 것으로 만들기 위해 이렇게 글을 정리하는 시간을 갖게 되었다. JPA CascadeType.REMOVE 이 CasCaseType.Remove를 지정했을 때, 부모 엔티티가 삭제되면 ..

스프링/JPA 2023.01.06

[#2] Spring Securiy Context Holder

목차 들어가기 Spring Security Context Holder 마무리 들어가기 앞서 [#1]에서 간략하게 어떻게 필터들이 동작하고, 시큐리티가 동작하는지를 확인할 수 있었다. 이 속에서 우리는 Context라는 것을 알게 되었다. 시큐리티는 사용자의 정보를 담기위해 Security Context라는 것을 만들어서 사용자의 Authenticaton(인증) 객체를 확인하고, 저장하는 과정을 가지게 되며, 이 인증된 객체를 전역에서 꺼내쓸 수 있다. 이러한 이유는 인증된 객체는 ThreadLocal에 저장되어 있기 때문이라고 간단하게 언급했었는데, 해당 객체에 관한 인증이 완료되면 HttpSession에 저장되어 애플리케이션 전역에서 참조가 가능한 것이다. 그럼 어떻게 내부적으로 동작을 하는 것일까? ..

스프링 2023.01.03

[#1] Spring Security - 시큐리티는 무엇이고, Filter는 무엇인지

목차 들어가기 What is Spring Security 마무리 들어가기 로그인? 보안? Spring Security? 우리는 서비스를 이용하다보면 로그인을 마주하게 된다. 이 로그인을 통해 사용자를 분석하고, 불법적인 각종 행위들을 막으며 여러모로 유용한 기능 중 하나라고 생각한다. 그러나 이 중요한 로그인을 기능으로 구현한다면 어떻게 해야할까? 내가 아는 범주에선 우선 그냥 먼저 사용자 table을 만들어서 사용할 ID와 PW을 저장한 후, 사용자가 해당 페이지 혹은 기능으로 접근할 때, 저장된 데이터와 접근한 사람의 데이터를 대조하는 방식으로 진행할 것이다. 이렇게 일일히 모든 기능마다 검증 로직이 필요하고, 보안은 물론 이게 로그인이 맞나? 싶을 정도다... 로그인 관련 기능을 구현하던 중 Spr..

스프링 2022.12.29

[10분 테코톡] - @JDK Dynamic Proxy & CGLIB

🤥개요 우리는 Entity를 조회할 때 연관 관계를 이용하는데, 비즈니스 로직에 의해 사용될 때도 있고, 아닐 때도 있다. 그래서 맺어진 정보들이 필요가 없을 경우가 있는데, 이럴 경우를 대비해서 JPA 내부에선 필요 없는 DB 조회를 줄이면서 성능을 최적화 하는데, 이러한 문제를 해결하기 위해 DB 조회를 지연하는 방법을 제공한다. 이 것을 지연 로딩이라고 한다. 지연 로딩 (LAZY) = 가짜 객체를 이용해 DB 조회를 지연시키는 것. 즉시 로딩(EAGER) = 연관된 엔티티를 조인해서 다 가지고 오는 것. 이 지연로딩 기능을 사용하려면 DB 조회를 지원할 수 있는 가짜 객체가 필요한데, 이를 프록시 (Proxy) 객체라고 한다. 프록시의 출발은 여기에서 시작한다.. 🤔목차 프록시란?🧐 프록시를 왜 ..

스프링 2022.12.22

[10분 테코톡] - @Transactional

🤥개요 트랜잭션에 대한 이해를 바탕으로 왜 이 트랜잭션이라는 개념이 중요한지를 알게되고 더 나아가 활용의 범주까지 지식의 스펙트럼을 넓히며 면접 및 취업을 대비하기 위해 [10분 테코톡]을 시청 후 본 내용을 정리하고 내 것으로 만들기 위해 작성한 내용입니다. 들어가기 우리는 사용자가 제공한 데이터를 잘 전달받고, 저장해서 이 데이터를 기반으로 서비스를 운영한다. 그럼 과연 이 동작들이 어떻게? 어떠한 방식으로? 왜? 등 여러한 궁금증이 생길 수 있는데 그 속에는 트랜잭션이라는 무서운 놈이 숨어있다. 🤔목차 트랜잭션이란? 🧐 트랜잭션의 성질과 특징 💪 선언적 트랜잭션과 프로그래밍 트랜잭션 😶 마무리 😃 1). 트랜잭션이란? 🧐 트랜잭션은 요청한 작업이 진행되는 일련의 단위이다. 예를들어 내가 요청한 작업..

스프링 2022.12.21

Spring- Lombok의 이해와 @Annotation (계속 추가합니다.)

자바진영의 어떤 서비스를 다루다보면 우리는 편하게 @Annotation을 접할 수 있을 것이다. 이 어노테이션은 각 프레임워크나 라이브러리가 지원해주는 다양한 기능들을 내포하고 있다. 물론 무조건 사용하라는 법은 없지만 아무래도 이미 개발된 내용의 기능들을 가져다 사용하면 코드의 가독성도 증가하고 해당 로직을 작성하는데 소모되는 에너지를 줄일 수 있을 것이다. (직접 어노테이션을 만들어서 사용도 가능하다.) 이 글은 해당 어노테이션이 어떤 기능을 제공하는지를 학습하면서, 그 과정속에서 얻게된 정보들을 정리하는 글 입니다. 1. Annotation - @을 이용한 주석, 코드에 주석을 달아 특별한 의미를 부여한 것 - 컴파일러가 특정 오류를 억제하도록 지시하는 것과 같이 프로그램 코드의 일부가 아닌 프로그..

스프링 2022.12.14

JPA - 영속성 컨텍스트 (2022.12.11 추가)

전에 JPA가 무엇인지 간략하게 짚고 넘어갔고, 이번엔 왜 JPA가 중요한지에 대해 짚고 넘어가고자 한다. JPA가 부여받은 임무는 다음과 같다. 객체와 관계형 데이터베이스 매핑하기(Object Relational Mapping) 영속성 컨텍스트 객체와 RDB를 Mapping? 영속성 컨텍스트? 대체 이 것들이 무엇일까? 왜 JPA에서 이 두가지가 중요한지 궁금증이 생길 것이다. 우선 영속성 컨텍스트에 대해 짚고 넘어가야 한다. 1. 영속성 컨텍스트란 무엇인가? 2. Entity 생명 주기 3. 영속성 컨텍스트의 장점이자 이점 1. 영속성 컨텍스트? 영속성 컨텍스트는 애플리케이션과 데이터베이스 사이에 데이터를 보관하는 논리적 개념인데, 쉽게 설명하면 "엔티티를 영구 저장하는 환경" 이라는 뜻..

스프링/JPA 2022.12.09

What is JPA(Java Persistence API)?

if(백엔드 개발자를 희망하는 사람 中) if(Spring Framework를 사용하는 사람이라면) known JPA 웃고자 대충 만들었다. 그 정도로 Spring을 사용해본 경험이 있으면 JPA를 모를수가없다. 오늘은 이 JPA와 관련해 이야기를 나눠보려고 한다. 이 글은 인프런-김영한 자바 ORM 표준 JPA 프로그래밍을 참고한 내용입니다. 우리는 Spring JPA를 사용하면서 이 JPA가 무엇인지, 왜 사용하는지를 여러 번 고민해본 적이 있을 것이다. JPA는 그냥 어마무시한 놈이다 이 JPA를 사용하는 이유는 바로 이 것이다 객체와 관계형데이터베이스(RDB)간의 패러다임의 불일치를 해결 - 목차 - 1. JPA란? 2. JPA를 왜 사용해야 하나? 3. JPA의 동작과정 1. JPA란? JPA(..

스프링/JPA 2022.12.09

스프링 AOP

이 글은 우테코(봄의 AOP와 Spring AOP) 및 여러 정보들을 종합해 학습한 내용입니다. https://www.youtube.com/watch?v=hjDSKhyYK14&list=WL&index=84&t=305s https://engkimbs.tistory.com/746 https://yadon079.github.io/2021/spring/spring-aop-core What is 스프링 AOP? AOP는 Aspect Oriented Programming의 약어 (관점 지향 프로그래밍) 이 관점 지향은 "관점"을 이용해 로직을 관점의 측면에서 나누어서 본다(핵심vs부가적). 그래서 이 관점을 기준으로 각각을 모듈화 하겠다는 것이다. 그럼 이 모듈을 필요로 하는 곳에서 호출만 하면 되니 어떻게보면 J..

스프링 2022.12.07