반응형 혼자 공부하는 것들145 @Component는 어떻게 동작하는 걸까? 실무에서 @Component로 Bean을 편리하게 만들어줘서 사용하고 있지만, 동작 원리부터 어떤 식으로 작용하는지 궁금했습니다. 일단 @Component를 쓰기 위해서는 @ComponentScan과 @Configuration을 알아야 합니다. @Configuration는 간단하게 이야기하자면 해당 클래스는 설정파일이라고 인식시켜 주는 것입니다. Bean Object 생성 이상으로 전체 애플리케이션을 구성하는 가장 중요한 기능들을 넣을 수 있습니다. @ComponentScan는 @ComponentScan를 적용한 해당 클래스 아래에 있는 @Component가 붙은 모든 클래스들을 Bean으로 등록할 수 있게 도와줍니다. 필요하다면 의존 Object를 찾아서 생성자를 찾아 파라미터로 넘겨주기도 합니다. @.. 2023. 1. 24. 221. Maximal Square 진짜 오래간만에 알고리즘을 풀어봤습니다! 오래간만에 풀어보니, 어렵네요... https://leetcode.com/problems/maximal-square/ Maximal Square - LeetCode Maximal Square - Given an m x n binary matrix filled with 0's and 1's, find the largest square containing only 1's and return its area. Example 1: [https://assets.leetcode.com/uploads/2020/11/26/max1grid.jpg] Input: matrix = [["1","0","1","0","0"],["1", leetcode.com 문제 자체는 심플합니다. 해당.. 2023. 1. 9. 이팩티브 자바 아이템1에서 열거타입 Enumeration 1) 상수 목록을 담을 수 있는 데이터 타입 2) 타입 세이프티를 보장할 수 있습니다. 3) 싱글톤 패턴을 구현할 때 사용하기도 합니다. 자문자답 간단하게 주문 상태를 가지고 있는 enum 클래스를 구성해보았습니다. public enum OrderStatus { PREPARING, SHIPPED, DELIVERING, DELIVERED; } 1. 특정 enum 타입이 가질 수 있는 모든 값을 순회하여 출력할 수 있는가? public static void main(String[] args) { System.out.println(Arrays.stream(OrderStatus.values()).collect(Collectors.toList())); } Enumeration의 values를.. 2022. 10. 9. [지구최강 JPA 스터디] 8-9주차 JPA의 프록시 활용 JPA에서의 프록시는 어떻게 사용하는지 정리해보겠습니다. 간단한 이해를 돕기 위해 이전에 작성했던 포스팅 정보를 첨부해놓겠습니다. https://applepick.tistory.com/159 프록시 패턴과 데코레이터 패턴 인프런 스프링 고급 원리를 들으면서 프록시 패턴과 데코레이터 패턴을 공부하고 있습니다. "둘이 뭔가 비슷한데? 뭐가 다른거지? 정확하게 어떠한 상황에서 사용해야 할까?"라고 느껴 정리를 applepick.tistory.com 프록시 특징 실제 클래스를 상속받아서 만들어집니다. 사용하는 입장에서 진짜 객체인지 프록시 객체인지 구분하지 않고 사용하면 됩니다.(때에 따라서...) 프록시 객체는 실제 객체의 참조(Target)를 보관합니다. 프록시 객체는 처음 사용할 때 한 번만 초기화 프록시.. 2022. 10. 8. 주문조회 페이징 처리 API 설계하면서 고민했던 점 및 트러블 슈팅 JPA에서 페이징 처리를 공부하면서 적용해봤습니다. 배경을 설명해드리자면, 주문 조회 시 시작 날짜와 종료 날짜를 입력받아 페이징 처리하여 보여주는 기능을 구현했습니다. package assignment.shop.order.repository; import assignment.shop.order.Order; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import java.tim.. 2022. 9. 24. [Spring + JPA] 동시성 문제를 해결해보자! 서버에서 여러 트랜잭션에서 동시에 같은 데이터를 변경하려고 시도할 경우 데이터 요청이 일부 유실될 수 있습니다. 이것은 큰 장애로 커질 수 있는데요. 예를 들어 상품이 100개인 상품이 있다고 가정해봅니다. 서로 다른 5명이 동시에 100개를 동시에 주문할 경우 한 명의 주문만 성공해야 합니다. 5명의 주문이 성공할 경우 큰 장애로 이어집니다. 이런 이슈를 JPA의 락 기능을 통해서 동시성 문제를 해결해보려고 합니다. 이슈 동시에 여러 트랜잭션을 통해 주문이 들어올 경우 주문이 모두 성공하는 이슈가 있었습니다. 해당 상품으로 테스트를 진행해보겠습니다. 상품 테이블에 맥북의 재고가 100개가 저장되어있습니다. 아래 테스트 코드를 보면서 문제점을 확인해봅니다. package assignment.shop.co.. 2022. 9. 9. spring-data-envers로 데이터 변경 이력(히스토리)을 관리해보자! Spring Boot + JPA로 상품 주문 프로세스 주제로 사이드 프로젝트를 하고 있었습니다. 이때 상품 주문에 대한 히스토리를 어떻게 관리해야 할지 고민을 했었습니다. 첫 번째 방법으로 직접 주문 히스토리 테이블을 설계하여 상품 주문, 취소 등등... 데이터가 변경될 때 하나하나 직접 테이블에 넣어주는 방식으로 설계하다 보니 정확한 시점에 못 넣는 일이 발생하고 사람이 코드로 직접 넣는 거다 보니 데이터에 적합성도 떨어졌습니다. 또한, 똑같은 코드가 반복해서 들어가는 보일러 플레이트 코드가 생산되는 단점이 있었습니다. 찾아보다가 spring-data-envers라는 데이터 변경을 쉽게 관리할수있도록 도와주는 것이 있다고 하여 학습하여 적용시켰습니다. https://github.com/hygl/spri.. 2022. 9. 4. [지구최강 JPA 스터디] 6-7주차 연관관계 매핑 4가지와 단방향, 양방향! 사실 테이블에서 방향이라는 개념은 따로 있지 않고 설계의 편의를 위해 적용 테이블이 한쪽만 참조하면 단방향이고, 테이블이 양쪽에서 참조하면 양방향입니다. 양방향에서 연관관계 주인이 중요합니다. 양방향 매핑에서 연관관계 주인은 외래 키를 관리하는 곳 연관관계 주인의 반대편은 외래키에 영향을 주지 않습니다. 단순 조회 가능 단방향은 연관관계 주인이라는 개념이 따로 없습니다. JPA에서 연관관계 매핑 방식이 4가지가 있습니다. 다대일 : @ManyToOne 외래 키가 있는 쪽이 연관관계 주인입니다. 다대일에서도 단방향과 양방향을 설계할 수 있습니다. 축구선수와 팀의 테이블을 설계해야 한다면 축구선수 테이블이 @ManyToOne입니다.(연관관계 주인은 축구선수 테이블) = [단방향] 축구선수 여러 명은 하나의 .. 2022. 8. 14. [지구최강 JPA 스터디] 4-5주차 객체 설계 할때는 단방향으로!? 양방향일 때 연관관계의 주인을 누구로 지정해야 할까? 객체의 두 관계 중 하나를 연관관계의 주인으로 지정해야 합니다. 연관관계의 주인만 외래 키를 관리(등록, 수정)가 가능합니다. 주인이 아닌 경우 읽기만 가능합니다. 주인 -> mappedBy 사용 x 주인이 아닌경우 -> mapppedBy 속성으로 주인을 지정 비즈니스 로직을 기준으로 연관관계의 주인을 선택하면 안 됩니다. 연관관계의 주인은 외래 키의 위치를 기준으로 정해야 합니다. Member와 Order Entity가 있다고 가정해봅니다. 양방향으로 매핑했다고 생각하고 연관관계주인을 설정한다면, 외래키가 Order 기준으로 있으므로 이 두 개의 객체의 연관관계 주인은 Order로 설정해야 합니다. @ManyToOne은 항상 연관관계의 주인(Mapp.. 2022. 7. 28. 이전 1 2 3 4 5 ··· 17 다음 반응형