일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 제네릭
- JAVA8
- 지연로딩
- Redis
- Ehcache
- 카카오 화재
- B+TREE
- 동시성
- springboot
- method area
- Metaspace
- Jenkins
- Spring Data Redis
- 트랜잭션
- JDK14
- nonclustered index
- 공변
- 상태패턴
- lazyloading
- 재고 시스템
- CaffeineCache
- backend
- JPA
- java
- 주문
- ci/cd
- 웹캐시
- GithubActions
- 리팩터링
- 부하테스트
- Today
- Total
목록전체 글 (31)
NDM
구축일지 1편에서는 왜 자동화를 선택했는지, Jenkins 대신 GithubActions를 사용했는지 알아보았습니다 이번 2편에서는 CI/CD 자동화를 어떻게 했는지에 대해 서술합니다. 하나하나 다 알아보지는 않고, 핵심적인 몇몇 단계만 짚어서 보겠습니다 전체 워크플로우는 다음과 같습니다. # application.properties 설정 파일 숨기기 특정 브랜치로 체크아웃 -> Java11 설정 -> Build까지 별 다를게 없는 설정입니다. 다만, make application.yml을 봐주시길 바랍니다. 저는 SpringBoot로 프로젝트를 진행하고있고, SpringBoot의 application 파일에는 설정정보들이 담겨져있습니다. DB의 host나 username, password등이 그 예시이..
https://www.youtube.com/watch?v=H4J-8pPMvEU&list=PLgXGHBqgT2TvpJ_p9L_yZKPifgdBOzdVH&index=15 을 보고 정리한 글입니다 중간중간 제가 추가한 내용이 포함되어있으니, 영상과는 다를 수 있습니다. # 캐시 데이터 / 값을 미리 복사해 놓는 임시 장소 미리 복사하여 데이터에 더 빠른 속도로 접근 가능 데이터를 빨리 접근할수록 사용가능한 공간은 적어진다. 즉, 저장소의 용량과 속도는 반비례한다. # 종류 두 가지만 알아본다. 캐시메모리 / 웹 캐시 캐시메모리 속도가 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리 CPU가 주기억장치에서 저장된 데이터를 읽어올 때, 자주 사용하는 데이터를 캐시 메모리에 저장한 뒤,..
카카오 사태 이후 문제점을 정리하는 포스팅이다 솔직히 면접에 나올까봐도 있고, 사람마다 다르지만 나는 백엔드 개발자도 인프라나 데브옵스 지식이 필수적으로 요구되는 때가 올거라고 생각하기 때문에 정리하기로 했다. 하지만 굳이 이런이유가 아니더라도 IT를 공부하는 학생으로써 자연스럽게 왜그런거지? 하는 궁금증이 들어 정리하게 되었다. 자연스럽게 궁금증이 생긴것을 보고 뿌듯한 마음도 있었으나 솔직히 DR이나 HW레벨에서의 이중화는 잘 모르는 분야였기에 조금은 좌절하게 되었던 것도 사실이다. # 문제의 시발점 무정전 전원 공급 장치(UPS) 사실상 전원은 UPS에 연결되어있으며, UPS가 여러대의 서버와 연결되어있는 구조 무엇이고, 왜 이걸 쓰는가? 카카오 사태처럼 전원이 순간적으로 끊기면 서버는 갑자기 전원이..
프로젝트를 진행하며 처음으로 Index를 걸어 사용해보는 경험을 하고있습니다. 때문에 인덱스의 깊은 이해도를 위해 궁금했던 점에 대해 포스팅을 하려 합니다. 목차는 다음과 같습니다. 인덱스의 자료구조 인덱스의 동작원리와 장단점 Clustered Index vs Non-Clustered Index? 멀티컬럼 인덱스 어떤 컬럼에 적용하고, 어떤 연산에 쓰는게 좋을까? 언제나 인덱스를 적용하는 것이 더 빠를까? 왜 클러스터가 읽기에서 더 빠른 성능을 보이는가? 인덱스의 자료구조 # HashTable key - value 를 한 쌍으로 저장하는 자료구조 Hash Colision이라는 변수가 존재하지만, O(1) 의 시간복잡도로 빠르게 데이터를 조회할 수 있음 =(eq)연산에 최적화되어있기 때문에, 등 범위연산이..
Java를 사용한 프로젝트를 하고있는데, Stream API와 람다식을 사용하는 경우가 많습니다(Java11 사용중입니다) 떄문에 더 잘 알아보고 사용하는 것이 좋다는 취지에서 Stream과 람다식에 대해 조금 더 알아보려고 이번 포스팅을 작성합니다. 목차는 다음과 같습니다 Final과 Effective Final Lambda에서 Final만 참조가 가능한 이유 동작원리의 관점에서 바라본 Lambda에서 Final만 참조가 가능한 이유 지역변수를 참조하는 lambda와 클래스, 인스턴스 변수를 참조하는 lambda의 차이 Final과 Effective Final Java의 Final 키워드는 모두가 알고 있듯이 변수 앞에 붙이면 상수가 됩니다. 그리고 상수는 반드시 초기화를 해줘야하며, 이후 변경이 불가..
배달 서비스를 구현하는 slowDelivery 프로젝트 진행중입니다. 주문 로직에 대해 제가 고려한 것을 포스팅 하려고 합니다. 도메인은 장바구니 / 상품/ 재고 / 가게 / 주문이 있으며, 결제API는 클라이언트쪽에서 연동하기 때문에 결제데이터를 save하는 정도로만 구현했습니다. 장바구니와 재고는 Redis로 되어있으며, 나머지는 RDB를 사용했습니다. 재고에 Redis를 사용한 이유는 https://ndm-tech.tistory.com/34 에 기록해 두었습니다. 이번 포스팅에서는 아래의 내용을 다룹니다. 주문 로직의 순서를 결정하게 된 고민 과정 프로젝트를 진행하며 처음에 고생했던 부분은 주문이 성공하고 나서야 재고를 감소시켰었다는 점 입니다. 이것은 실제 상황과 비교해 볼 때, 가장 유사한 순서..
배달 서비스를 구현하는 slowDelivery 프로젝트 진행중입니다. 주문 로직에 대해 제가 고려한 것을 포스팅 하려고 합니다. 도메인은 장바구니 / 상품/ 재고 / 가게 / 주문이 있으며, 결제API는 클라이언트쪽에서 연동하기 때문에 결제데이터를 save하는 정도로만 구현했습니다. 장바구니와 재고는 Redis로 되어있으며, 나머지는 RDB를 사용했습니다. 제 프로젝트의 주문 제한사항은 다음과 같습니다. 장바구니를 거쳐서만 주문할 수 있으며, 장바구니에 다른 가게의 상품을 담을 수 없습니다. 주문 로직의 순서 주문은 다음과 같은 순서로 이루어집니다 장바구니와 가게 데이터를 조회해 주문 객체를 만듭니다. 가져온 데이터로 검증을 시작합니다. ( 가게가 오픈했는가 / 주문 금액이 가게의 최소주문금액을 넘어섰는..
배달 어플을 구현하는 SlowDelivery 프로젝트에서 재고를 처리하는데 동시성 이슈가 있었습니다 더보기 하지만 사실 재고 도메인은 필요가 없었는지도 모릅니다. 일반적인 쇼핑몰과 다르게 배달 어플은 판매중인 상품의 재고를 숫자로 나타내지 않고 각 가게마다 유연하게 판매 가능 / 판매 불가능 상태값을 바꿔주는 로직만 작성해주면 굳이 재고의 증가/감소를 구현할 필요는 없었을 수도 있습니다. 하지만 이 프로젝트는 순수하게 학습용이고, 취업 시 [이런것도 구현하고 고민해 보았다] 를 어필하고 싶었고, 무엇보다 이커머스 분야에서 일하고 싶다면 한번쯤은 경험해보는게 낫겠다 싶어 억지로(?) 끼워넣은 도메인입니다 때문에 프로젝트 주제나 도메인에 있어 어색함이 있을 수 있습니다 현재 제 프로젝트의 주문 로직은 주문접..
@Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Shop extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "shop_id") private Long id; @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "seller_id") private Seller seller; @OneToMany(mappedBy = "shop") private List products = new ArrayList(); private String phone; private Str..
https://ndm-tech.tistory.com/22 [Java] Java8 MetaSpace https://ndm-tech.tistory.com/3 [Java] 자바 동작 원리와 JVM 2편 : Runtime Data Area 목차 Runtime Data Area Prior Java 8 After Java 8 Runtime Data Area 프로그램 수행을 위해 할당받은 공간. 자바 메모리.. ndm-tech.tistory.com https://ndm-tech.tistory.com/3 [Java] 자바 동작 원리와 JVM 2편 : Runtime Data Area 목차 Runtime Data Area Prior Java 8 After Java 8 Runtime Data Area 프로그램 수행을 위해 ..