알고리즘 배우던 중.. 병합 정렬 너무 재밌어서 포스팅한다 병합 정렬이란?분할정복 알고리즘이다. 배열안의 모든 숫자를 나눠서 병합하는 방식으로 정렬을 한다. 입력 받은 수를 저장한 Array를 복사하고 정렬된 값을 담을 Array(입력 받은 수를 저장한 Array를 자주 쓴다)에 담아준다.기본적으로 투포인터를 사용해서 복사된 array 안의 인덱스 끼리 서로 비교를 해가면서 값을 담는다. 시간 복잡도는 O(nlogn) 으로 정렬 알고리즘 중 최상위권이다공간복잡도는 Array를 복사해야해서 O(2n) 이다 하하그래서 퀵이랑 힙이 정렬 알고리즘 중에 레전드 오브 레전드라고 불리는 거 같은데 하하하그래도 병합 정렬이 너무 재밌었다!!투 포인터를 사용하는 것도 재밌구 진짜 단순하기 때문이다. import jav..
StoreItem(매장 내 재고) 의 Entity 스펙은 아래와 같다.public class StoreItem { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false) private Integer stock; @Column(nullable = false) private Integer saleCnt; @Column private Integer recommend_stock; @CreatedDate @Column(updatable = false) private LocalDateTime createdAt; @LastMod..
왜 @Transactional(readOnly = true) 를 '그냥' 사용하는가??JPA 를 처음 배울 때 @Transactional(readOnly = true) 를 왜 쓰냐고 물어보면 '그냥 블로그에서 봤는데 이렇게 쓰면 조회성능이 좋아진대요, 그래서 기본으로 깔고 들어가면 좋대요' 라는 답변이 돌아왔다.그래서 '그냥' 사용 해보려고 했었는데 뭔가,, 그냥이라는 말이 걸려서 조회 메서드는 @Transactional 자체를 안 붙여도 되지 않을까? 생각했었다. 그래서 조회 메서드는 @Transactional 자체를 안 붙이고 진행 했었다.근데 조회 메서드는 readOnly = true 를 '그냥' 일단 깔고 들어가야 된다 라고 한다.. 흠...왜 '그냥' 일까..? 일단 이유가 뭔데?영속성 컨텍스트..
Docker 란 무엇인가?컨테이너 기반 가상화 도구애플리케이션을 컨테이너 라는 단위로 격리하여 실행하고 배포하는 기술 Docker 가 소개하는 Docker란?Open Platform어플리케이션을 인프라에서 분리해준다신속하다인프라를 어플리케이션을 관리하는 것 처럼 관리 할 수 있다.코드 배포에 용의하다. Container 란 무엇일까 ? 1컨테이너는 가상화 기술 중 하나호스트 운영체제 위에 여러 개의 격리된 환경을 생성한다.각각의 컨테이너 안에서 어플리케이션을 실행한다. 가상화 (Virtualization) 기술이란 무엇일까?하드웨어 리소스(프로세서, 메모리, 저장소 등)를 추상화 하는 것이다.가상화의 예메모리 가상화하드웨어 가상화(Hypervisor 기반)컨테이너 가상화네트워크 가상화 가상 머신이란 무엇..
JPA 를 사용하면서 지연로딩과 즉시로딩에 대한 개념을 알고 있었다. 근데 얘네 덕분에 N+1이 발생한다는 사실을 알았다. 사실 n+1에 대해서만 쪼오오끔 알구.. 쿼리dsl로 넘어 갔었어서 정확히 몰랐었다 ㅎㅎ… 이번 프로젝트에소 JPA 위주로 사용하니까 짚고 가려고 한다 즉시로딩@Entity public class Board { @Id private Long id; } @Entity public class Post { @Id private Long id; @ManyToOne @JoinColumn(name = "board_id") private Board board; } 이런 식의 엔티티들이 있다고 치자 @Service @RequiredArgsConstructor public class PostServ..
의도1. (어드민) 아이템 도메인에서 스토어 지정 가능 - (어드민)(멤버) 스토어 에서 브랜드 기준으로 아이템 불러와서 아이템 지정 가능2. 스토어 도메인 기준으로 어느 아이템 발주 넣을 건지 선택 후 요청, 어드민이 아이템 도메인에서 시리얼이 있는 아이템이면 시리얼 넣고 스토어_아이템 등록 (이걸 입고 테이블을 만들어서 관리할지 고민 중)3. 아이템 도메인에서 시리얼 미리 등록 가능 -> 추후 입고할때 시리얼 선택 후 입고 인데... 결국 지금 입고 테이블을 만들어야 하나 고민 중이다. 원래 발주 테이블도 없었당스토어_아이템에 총 재고수량이랑 현재 재고 수량이랑 판매수량이 있었는데총 재고수량(= 총 입고수량)을 없앴다, 발주 테이블 만들면서 요청 수 만큼 sum 하면 될 거 같았기 때문그럼 왜 재고수..
너는 바보인거냐 원호야!!!!!!!!어제 쓴 글https://wonowdaily.tistory.com/150 [CSO Project] 4 - 계단식 url 유효성 검사를 어떻게 해야할까?ERD item 부분 create 및 get 메서드를 만드는데, 궁금한게 생겼다. API 명세 현재 url 을 이렇게 겹겹이 계단식으로 쌓아서 개발을 진행중이다. 이런 식으로 url을 구성하면 해당 url 에 대해서 유효성 검wonowdaily.tistory.com 진짜 안일하게 생각했다!!!!/brand/{brandId}/category/{categoryId} 이렇게 하지말고/brand/category/item/{itemId} 이렇게 하면 해결되는 문제잖아!!그리고 거기에서 필요한 데이터 join..
ERD item 부분 create 및 get 메서드를 만드는데, 궁금한게 생겼다.API 명세 현재 url 을 이렇게 겹겹이 계단식으로 쌓아서 개발을 진행중이다. 이런 식으로 url을 구성하면 해당 url 에 대해서 유효성 검사를 해줘야한다. url 유효성 검사?현재 url은 /brand/{brandId}/category/{categoryId}/item/{itemId} 이런 계단식 형식으로 되어 있는데 /brand/1/category/1/item/1이렇게 입력하고 get 맵핑으로 요청을 보내면 1 번 브랜드의 1 번 카테고리의 1 번 아이템을 불러온다는 것이다. 그럼 서비스 코드를 이렇게 쓰면 되려나?public ItemDto getItem(Long itemId) { ..
UUID 대체키 만들어보려다가 2일 날리구,, 라이브러리 사용하기로 함 고민하고 있는 게 많다. 1. 바코드 번호를 Unique 로 할 것인지, Brand 내에서 Unique 로 할 것인지. 2. 이벤트에 따른 할인율을 하나 만들어 놓고 그걸 정하게 할 건지? 아니면 아이템 할인율을 따로 설정할 수 있게 할 건지? 그렇다면 아이템에 isSaleNow 같은 컬럼 만들고 boolean 타입에 따라서 세일 적용을 할지 discount 이벤트 기간 설정해놓고 그거 끝나면 Batch 로 boolean false 로 다 바꿔야할지 허허 ㅋㅋㅋㅋㅋ 허허 ㅋㅋㅋㅋ 허허 쇼핑몰 까지 만들었을 때 쿠폰에 따른 할인율은 이 테이블이랑 연계해서 어떻게 적용할 건지 그것두 고민고민 쿠폰을 아예 브랜드 FK 박아 놓을까? 3. ..