본문 바로가기

전체 글37

@Transactional Dive @Transactional에 대한 이해가 부족함을 느낌 $ 우선 Propagation REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED) - Default Support a current transaction, create a new one if none exists Exception 발생시 부모/자식 모두 rollback SUPPORTS(TransactionDefinition.PROPAGATION_SUPPORTS) Support a current transaction, execute non-transactionally if none exists Transaction이 없어도 메서드는 정상 동작 MANDATORY(TransactionDefinition.PROPA.. 2023. 11. 24.
Elasticsearch study 공부 시작하자마자 알게 된 건 AWS와의 오픈소스 윤리 관련 시비? 논쟁? AWS의 Open Search는 아직 스프링 공식문서에 안 보이니까 Elasticsearch로 공부하기로 함 결론부터 적어보면 이것은 NoSQL DB 형태의 검색 엔진인 것 같음 핵심 특징은 Index(RDB의 database)에 데이터를 저장할 때 역색인을 해서 저장함 Apache lucene library 기반으로 분산 노드를 지원, 노드 묶음을 클러스터라고 함 각 Index는 샤딩 방식을 적용하여 Primary shard와 Replica shard로 구성되며 다른 노드에 할담됨 Restful API를 이용하여 http body에 json 형식의 데이터를 담아 매핑 구조로 CRUD 수행함 사용하려면 apt/docker등 다운/.. 2023. 11. 24.
삽질 ep.3 (feat. Transactional) 주문 서비스 중에 주문을 완료하고 받은 포인트를 사장 계정에 넣는 API를 구현 @Transactional을 걸어놨으니 주문은 주문대로 계정은 계정대로 알아서 Dirty checking할 것이라고 생각했으나.. @Transactional public void completeOrders(Account owner, Long accountId) { List orders = orderRepository.findAllByAccountId(accountId); int totalPrice = 0; for (Order order : orders) { checkOrderStatus(order).complete(); totalPrice += order.getMenu().getPrice() * order.getQuantit.. 2023. 11. 22.
JUnit5 테스트코드 배달 주문 어플리케이션 만들기 프로젝트를 진행하면서 주문 관련 도메인을 맡아서 만들고 있었다. Response body가 좀 복잡했다. 대략 이 정도? { “orders” : [ { “accountId“: 1, “address”: “서울 은평구 진관동”, “createdAt”: 2023.11.18 T00:00:00, “menus”: [ { “menuId”: 1, “name“: “menu name”, “quantity”: 1, “price”: 10000, “image”: “url” }, { “menuId”: 2, “name“: “menu name”, “quantity”: 2, “price”: 15000, “image”: “url” } ], “totalPrice”: 40000, “status”: “출발전“ .. 2023. 11. 22.
EC2 관리 Ubuntu 기준 CLI 명령어들을 시나브로 정리해보자. 접속 : ssh -i {YOUR_KEY_PAIR_FILE.pem} {USER_NAME}@{AWS_PUBLIC_DNS_} 하지만 보통 .ssh/config에 Host 이름을 만들어서 접속 Host {call name} HostName {ec2 IP address or domain} User ubuntu IdentityFile ~/.ssh/{key file name}.pem # Mac 기준 Port forwarding # forwarding command sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080 # list view command sud.. 2023. 11. 16.
Git convention 아.. Convention 검색하기 귀찮다. 블로그에 적고 북마크해놔야지! (일단 제목만...) Commit {Tag: Title} Tag Description feat 새로운 기능 추가 implement 코드 추가보다 큰 단위의 구현 style 코드 포맷 변경 등, 코드 수정 x refactor 코드 수정 simplify refactor보다 약한 수정 fix 버그 수정 update 정상 동작이었으나 보완 test 테스트 코드 chore 빌드, 패키지 구성 등 수정 comment 주석 추가 및 변경 docs 문서 수정 rename 파일/폴더 수정 remove 파일 삭제 design UI 디자인 변경 ! 커다란 API 변경 !HOTFIX 급하게 치명적인 버그 수정 Branch Branch name Form.. 2023. 11. 11.
ResponseEntity와 Jackson과 Getter GlobalExceptionHandler를 만들면서 ResponseEntity에 custom한 ErrorResponse를 실어서 보내고 있었다. 그런데 자꾸 failed in @ExceptionHandler와 HttpMediaTypeNotAcceptableException이 발생하는 것이다!! 이걸 해결해 보려고 이틀 동안 뒤져봤는데.. 허탈하게도 이유는 너무 단순했다. 내가 custom한 ErrorResponse 클래스에 Getter를 주지 않았던 것... ResponseEntity에서 body로 들어온 객체를 JSON으로 변경하기 위해 Jackson라이브러리에서 등록된 MessageConverter를 호출했고, 이 놈은 Getter/Setter property를 기준으로 작동하는데 ErrorRespo.. 2023. 11. 6.
Week03 회고 보호되어 있는 글 입니다. 2023. 11. 5.
HTTP Cookie HTTP 쿠키는 서버가 HTTP header를 통해 웹브라우저에 전송하는 작은 데이터 조각이다. Stateless한 HTTP 에서 상태 정보를 기억시켜 웹브라우저 식별을 가능하게 해준다. 쿠기의 주요 사용 목적 1. 세션 관리 : 서버에 저장해야 할 로그인, 장바구니, 게임 스코어 등의 정보 관리 2. 개인화 : 사용자 선호, 테마 등의 세팅 3. 트래킹 : 사용자 행동을 기록하고 분석하는 용도 지금은 Modern Apis의 종류인 Web Storage API (localStorage, sessionStorage)와 IndexedDB API를 사용한다. 더보기 sessionStorage - 세션에 한정해, 즉 브라우저 또는 탭이 닫힐 때까지만 데이터를 저장 - 데이터를 절대 서버로 전송하지 않음 - 저장.. 2023. 11. 5.