[루퍼스] 10주간 돌아보기
·
Essay/WIL
10주간의 과정 PG 개발에서의 원자성 보장과 테스트코드 당시에는 메서드에 붙은 @Transactional이 어떻게 작성되어야 원자성이 보장되는지 잘 알지 못했다. 이전 주차에 했던 내용이라 생각할 수 있겠지만 실패 케이스를 고려하거나 외부 API를 포함하지 않는 로직에 대해서는 고려하지 않았기 때문이다. 그렇게 Fail을 마주하고 트랜잭셔널에 대해서 로그를 찍어보면서 어떻게 실행되는지 확인하고, 처음부터 차근차근 개발했다. 애플리케이션을 제대로 돌아가게는 두어야 하기에 이벤트를 잠깐 두고 결국은 해냈다. 뭐든 차근히, 너무 멋있게 가 아닌 절차적으로라도 개발하면 그 이후는 더 쉽다는 것을 몸소 깨달았다. 그리고 그 후, 다른 사람들의 코드를 많이 보았다. 다른 분들은 어떻게 이 원자성을 지키려고 했을..
[WIL] 루퍼스_부트캠프 9주차
·
Essay/WIL
이번주는 랭킹 시스템을 개발하였고 레디스의 ZSET 자료구조를 사용했다. 그러면서 공부했던 것들을 정리해본다. 1. Redis 자료구조 학습랭킹 시스템 구현의 핵심은 Redis ZSET(정렬된 집합) 이다.ZSET은 (member, score) 쌍을 저장하고, 점수 기준으로 정렬된 상태를 유지한다.랭킹 시스템에서 자주 쓰는 명령어는 다음과 같다. 점수 추가/갱신:ZADD rank:product:day:20250914 100 productId:123 ZINCRBY rank:product:day:20250914 1 productId:123랭킹 조회 (Top-N):ZREVRANGE rank:product:day:20250914 0 9 WITHSCORES특정 상품 점수/순위 조회:ZSCORE rank:prod..
[WIL] 부트캠프 8주차
·
Essay/WIL
이번 주에는 카프카를 직접 써봤다.글로벌 이벤트와 로컬 이벤트… “이벤트에도 글로벌이 있구나” 싶은 순간도 있었다. 어디에 쓰이는지가 먼저 궁금K.A.F.K.A라는 이름 정도만 아는 상태에서, 이 도구가 무엇으로 구성되는지보다 어디에 쓰이는지가 먼저 궁금했다.그 부분은 월요일 멘토링에서 전체 흐름을 들으며 큰 도움을 받았다.이벤트 분리를 처음부터 미세하게 하려니 막막했는데, “쉬운 것부터 해보자”는 말이 전환점이었다.즉, 주문등록(재고 차감, 포인트 차감, 쿠폰 사용) 같은 핵심 트랜잭션부터 쪼개기보다, 우리 시스템 관점에서 바깥이라고 볼 수 있는 데이터 플랫폼 전송 같은 곳부터 분리해보기로 했다.그리고 나서 주문등록 이벤트를 떼어내 보니, 예컨대 주문 이벤트 발행 후 포인트 차감이 실패하면 보상 트랜잭..
[WIL] 부트캠프 7주차 : Spring Application Event 기본 용어와 튜토리얼 코드
·
Essay/WIL
Spring Application Event를 사용해보긴 했지만, 용어와 코드가 어떻게 매칭되는지는 늘 헷갈렸다. 이번 글에서는 이벤트 관련 용어와 Spring을 이용해 내부 이벤트를 사용할 때 참고할 수 있는 예시 코드를 소개하려 한다. 1. 이벤트 용어멘토링 시간에 들었던 예시는 이벤트 관련 용어를 이해하는 데 가장 도움이 되었다. 마라탕집 3000평 가게에 식사하러 갔다.테이블A에서 "계산해" 달라고 한다 → 지나가던 알바가 무전기로 "A테이블 계산이요"라고 전달한다. → 계산 서버가 달려와서 "계산해드리겠습니다"이벤트 프로듀서 (Publisher) = 테이블A이벤트 = "계산 해줘" → 커맨드가 아니니깐, “계산해줘” 보다는 "여기 식사 다 했어요!" 일 듯.이벤트 브로커 = 알바 + 무전기이벤트..
[WIL] 부트캠프 6주차
·
Essay/WIL
보호되어 있는 글입니다.
[WIL] 부트캠프 5주차
·
Essay/WIL
1. 새롭게 배운 개념/지식RestTemplate 적용잘한 점 : RestTemplate 사용법과 Redis 자료구조와 활용방안에 대해서 공부했다. 공부 방법: Redis 자료구조와 활용방안(레디스 공식 유튜브: 짧고 지루하지 않게 설명 잘함. 단점은 영어라서 피곤, 개발자를 위한 레디스: 자료구조와 활용방안 부분만 봤는데 좋은 책이였다! gpt나 블로그 보지 말고 그냥 이 책 보는 것이 시간 낭비 안함. 짧게 정리된 것만 보면 별 생각을 안하게 되는데, 책을 보면서 따라가다보면 생각을 하게 되기 때문이다. )RestTemplate 사용법과 Redis 자료구조는 정리를 해두었는데, 이거 정리해두니 다른 사람 코드가 잘 읽혔다! 2. 문제를 해결하면서 얻은 인사이트캐시 구현을 어느 레이어에서 어떤 방식으..
[WIL] 부트캠프 4주차
·
Essay/WIL
한 일주문/결제과정에서 여러 작업(재고차감, 포인트 사용)의 원자성 보장 : 트랜잭션을 이용동시성 처리 : 좋아요 수 증감, 재고 차감, 포인트 사용에 대해 하나의 자원에 여러 요청이 몰렸을 때 정합성을 보장하기 위한 처리. DB를 이용하여 적절한 lock 사용하기쿠폰 설계 : 정액/정률이라는 여러 정책을 개방/폐쇄 원칙에 맞게 설계하고 주문 단계에 적용하기 공부해야 할 것 Springframework의 Transaction에 대해 알아보기 해야 할 일 이번주 프로젝트를 하면서 고민했던 부분이 Facade 계층에 코드가 너무 많아 지는 것이였는데 application 계층 내에 유효성 검증을 위한 별도 Resolver 를 두도록 코드 리팩토링 resolver를 사용하는 부분 코드 리뷰 요청드리기 :..
[WIL] 부트캠프 3주차
·
Essay/WIL
이번주 이커머스를 구현하면서 당면했던 내용을 정리해본다. JPA를 사용하면서 알아야 하는 것들도메인 중심으로 개발하고 각 도메인이 연결되었을 때 역할, 책임, 경계에 대해 고민하면서 구현하는 한 주였다. 하지만 JPA라는 도구를 사용하면서 JPA엔티티를 도메인 엔티티와 같게 두고 사용하기에 도메인을 DB에 저장할 때 어떤 형태로 어떤 방법으로 할 지에 대한 것도 매뉴얼 적으로 알 필요가 있었다. 1. VO를 JPA/QueryDSL에서 사용할 때 @Convert vs @Embedded AttributeConverter는 VO ↔ DB 컬럼 값 간 변환이 필요할 때 사용하는 것으로, 크게 @Convert, @Embedded 방법이 있다.두 방식의 큰 차이는 Convert는 컬럼 1개로 저장하고, Embedd..
[WIL] 부트캠프 1주차
·
Essay/WIL
7월 12일부터 시작한 경력자 부트캠프의 1주일이 지났다. 지난 한 주간은 TDD에 대한 것을 주제로 아래 내용을 익혔다. TDD로 범위를 작게 개발하는 것.테스트코드를 작성하는 방법테스트더블을 이용한 테스트코드 법 그리고 일주일이 지난 이번 토요일엔 여러 형태의 코드 리뷰를 받았다.렌 멘토님의 전체 코드 리뷰 : 멤버 한 분의 코드를 보면서 코드리뷰를 했는데 비슷한 고민을 하면서 코드를 작성하기 때문에 공감가는 부분이 많았다. 이 시간에 많은 인사이트를 받았다랜덤 리뷰 : 다른 팀 멤버들과 랜덤하게 조가 편성되어 각자가 받은 PR을 공유했다. 우리 팀은 주제로 이야기를 나눴는데 @Transactional 에 대한 부분과 테스트코드에 대한 이야기를 했다. Transaction의 범위와 readonly=t..
콘서트 예매 시스템 개발 회고
·
Essay/WIL
지난 3주간 시나리오 기반 서버 구축을 진행했다. https://github.com/mybloom/hh_concert_java대기열 관련 백엔드 시스템 설계를 진행하고 변경에 유연한 코드를  위해 아키텍처와 테스트코드 작성하는 것을 배웠다.그리고 운영을 위해 필요한 로깅과 동시성 처리도 진행했다.가장 긴 시간을 할애한 것은 설계와 비즈니스 로직 작성이었다. 그러면서 이 시간에 변경에 유연하고 유지보수를 고려한 코드 작성하는 법을 익히고 싶었다.그러기 위해서는 아키텍쳐 지식도 있어야 하고 좋은 코드를 많이 보면서 지식을 어떻게 코드화하는지도 익혀야했다.1시간 남짓 설명을 통해 무엇을 공부해야하는지 파악하고 실제로 더 필요한 지식들은 스스로 익혀야 했었다.나는 만들면서 배우는 아키텍처라는 책이 도움이 많이 ..
자바 2주차 WIL
·
Essay/WIL
일급컬렉션
자바 1주차 WIL 키워드
·
Essay/WIL
자바 프로젝트로 사다리 게임을 만들면서 이번 한 주간 익혀야 했던 키워드입니다. Java 문자열 char, String StringBuilder, StringBuffer 차이 String API에 대한 학습 테스트 Java List, Generic 자바에서 제공하는 API 사용 방법을 테스트 코드를 구현해 학습 테스트 코드 작성 자바 클린 코딩 클래스 구현 순서 Naming Convention 클린 코드 지향 리팩토링 객체지향생활체조 원칙 객체지향 객체지향 프로그래밍에 대한 기초 지식 OOP, getter, setter setter 사용 지양하는 이유 이해 DTO(Data Transfer Object) TDD / BDD / ATDD, 클래스로더, 생명주기, 리플랙션 Git 학습 테스트 : 자바에서 제공하..