[동시성] 오프라인 선점 락 (Redis)
Back-end/기타 (BE)2023. 12. 12. 23:53[동시성] 오프라인 선점 락 (Redis)

코드는 이곳에 ! https://github.com/progress0407/jvm-tools/tree/main/redis 과거에 맡았던 도메인 중에 동일 요청건에 대한 중복 결제 요청을 막아야할 일이 있었다 (자세히 기술할 수 없다!) 그때 사용했던 방식이다 과거에 최범균님의 DDD에서 본 방법인데, 이름은 오프라인 선점 잠금으로 알고 있다 마침 사내에서 Redis를 사용했고 락을 짧은 시간 동안 유지 + 분산 환경임을 고려하여 Redis를 사용했다 세간에 알려진 오프라인 선점 락과는 다소 다른 것은... 시간 순서에 따른 락을 선점 -> 해제는 아니었다 즉 아래와 같은 상황이 아니었다 API 1 접근: Lock 획득 API2 접근: Lock 방출 정확히는 아래와 같은 상황이다 API 1에 동시 접근 가..

[Test Code, Gradle] 각 모듈에 Test Fixture를 공유하고 싶을 때
Back-end/Build (Gradle, Maven)2023. 12. 10. 19:22[Test Code, Gradle] 각 모듈에 Test Fixture를 공유하고 싶을 때

소스 코드는 아래에 있습니다! https://github.com/progress0407/E-Commerce-with-MSA-and-DDD 종종 멀티모듈 환경에서 테스트를 작성할때 이미 작성한 Test Fixture를 공유하고 싶을때가 있다 처음에는 아래처럼 단순히 testImplementation를 붙이면 공유가 가능하다고 생각했다 그렇게 해서는 되지가 않았다... 즉 위처럼 하면 안된다 이런 경우 test-fixture라는 plugin을 추가해서 해결할 수 있다 아래처럼 사용하면 된다 plugins { id 'java-test-fixtures' } 나 같은 경우 common/general이 test-fixture의 기능까지 함께 담당한다 그리고 해당 모듈이 가져야할 dependecny는 testFixt..

코틀린에서는 일급 컬렉션이 필요할까
Back-end/Java, Kotlin2023. 12. 7. 17:05코틀린에서는 일급 컬렉션이 필요할까

발음 때문인지 난 코틀린하면 코뿔소가 생각났다... 블로그를 많이 못해서 예전에 github 블로그에 기술한 것을 다시 정리 겸 가져 왔다 https://progress0407.github.io/backend/2023/02/18/%EC%BD%94%ED%8B%80%EB%A6%B0%EA%B3%BC_%EC%9D%BC%EA%B8%89%EC%BB%AC%EB%A0%89%EC%85%98.html 위와 같이 의문형으로 적은 것은 First-Class Collection을 창안한 사람의 생각을 정확히 알지는 못하기 때문이다 그렇지만 기억에 따르면 동욱님의 글을 보면서 파악한 것은 일급컬렉션은 아래의 정의를 따른다 - "List of 객체"를 감싼 행동을 정의할 수 있는 새로운 클래스 단순하게 말해 아래와 같은 것이 일급..

[생각 정리] 내가 경험했던 뼈아픈 Gradle 멀티모듈 설계
Back-end/Build (Gradle, Maven)2023. 11. 28. 02:12[생각 정리] 내가 경험했던 뼈아픈 Gradle 멀티모듈 설계

주의 이 글은 매우 김... YAGNI 아직 필요하지 않은 것에 대해 섣불리 구현을 해서는 아니된다는 뜻이다 난 이 원칙을... 멀티모듈 설계를 하면서 뼈저리 느낀 것 같다... 멀티 모듈이 가져다 주는 이점이 무엇인가? 이에 대해 생각하지 않고 먼저 모듈화하면 큰 이득 없이 시스템의 복잡도가 가파르게 올라가는 것을 느꼈다... 개인적으로... 아키텍처의 철학을 투영하기 위한 모듈화는 좋은 예시는 아니라고 생각해요 위 얘기는 내가 곧잘 보는 개발자가 안 좋은 모듈링에 대해 언급한 내용이다 좋은 모듈링이란 제약이 반드시 필요한 곳에 거는 것... 이라고 하였다 자세히는 언급할 수 없으나... 내가 재직하던 회사 중 한 곳의 어떤 프로젝트가 Layer 기준으로 모듈화가 되어 있었다 (아래 예시는 정확하지 않..

실전에서 마주한 MSA에 대한 생각 - 희망편
Back-end/Spring Cloud, MSA2023. 11. 26. 23:58실전에서 마주한 MSA에 대한 생각 - 희망편

저번 글이 너무도 MSA에 대한 단점을 기술해서 장점 또한 분명히 있다는 것을 적기 위해 작성했다 (하하..) 아래는 실제로 MSA 환경에서 일하면서 느꼈던 장점을 적어보았다 독립적인 작업의 용이함 팀원과 같이 작업을 하다보면 항상 출근 직후 하는 한 가지 루틴이 있다 바로 개발 브랜치를 다운 후 작업 중인 브랜치와 싱크를 맞추는 것이다 - git pull origin dev - git checkout feat/my-working-branch - git merge dev 저게 별거 아닌 것 같아도 은근 번거로울 때가 많다 작업 중에 긴급하게 배포해야 하는 경우 - main 브랜치 이동 - pull & sync - hot-fix 브랜치 따기 - 버그 수정 - 확인후 배포 - main 브랜치 병합 - dev..

실전에서 마주한 MSA에 대한 생각 - 절망편
Back-end/Spring Cloud, MSA2023. 11. 23. 21:43실전에서 마주한 MSA에 대한 생각 - 절망편

이 글은 마이크로 서비스 아키텍처에 대해 굉장히 주관적인 생각을 담고 있습니다 혹시나 불편하실 수 있다는 점 말씀드립니다... MSA를 하는 회사에 처음 들어가게 되었다... 회사에서 프로젝트를 보기 전엔 회사 아키텍처가 MSA란 것을 알지 못했다 공고엔 Spring Cloud라고 적혀있었지만, 특정 기술로 구성된 서버만 별도로 분리하고 그 외의 백엔드 서버는 모놀리식으로 구성되어 있다고 생각했다 큰 규모의 회사도 아니었고 그런 비용이 높은 설계를 굳이 채택할 필요가 없었다는 생각이 있었던 것 같다 그 덕분에 MSA에 대해 직접적인 경험을 할 수 있었다 사실 난 MSA에 관해 아주 많은 관심이 있던 사람 중 한 명이다 패션을 좋아하면 올해에 무슨 색이 시그니처인지 관심이 가는 것 처럼, 나 또한 22~2..

Gradle 다시 보기 (정리중)
Back-end/Build (Gradle, Maven)2023. 9. 10. 23:56Gradle 다시 보기 (정리중)

최근에 회사에 n단계 depth에 걸친 gradle이 있어서 여러 고민에 있다 아래에 예시로 둔 프로젝트가 있다 이 상황을 가정해서 한 번 진행하고자 한다 https://github.com/progress0407/multi-module-gradle-project GitHub - progress0407/multi-module-gradle-project: 멀티 모듈 프로젝트 연구 및 연습용 리포지토리 멀티 모듈 프로젝트 연구 및 연습용 리포지토리. Contribute to progress0407/multi-module-gradle-project development by creating an account on GitHub. github.com task: 하나의 빌드 작업 plugin: task들이 묶여서 ..

러닝 5km 달성~!! ><
Life/운동2023. 9. 10. 23:33러닝 5km 달성~!! ><

오늘 처음으로 러닝 5km를 달성했다 ㅠㅠ 넘나 감동적인 것... 솔직히 3km 넘었을 때는 정신력으로 뛴 것 같았다... 속으로 비명지르면서 뛴 것 같기도 ... ㅎㅎ 그래도 뿌듯하다 저 정도의 페이스로 뛰어야 5km를 달성할 수 있었던 것이군?! 하고 ㅎㅎ 아마 처음 러닝을 했을 때는 3km도 가장 뒤에 뛰면서 뒤쳐졌던 기억이 있다... 사람들도 나를 보고 "성우 많이 성장했네~ㅋㅋ" 하는 걸 보면 ㅋㅋㅋ 후,,, 이렇게 헬스인이 되어가는걸까? 이러다 평일엔 개발, 주말에는 헬스 트레이너가 되다가... GPT에게 개발세상이 먹히면 이직을 하는.. 그런 날이 오면 어쩌면 소중한 기회가 될지도 ㅋㅋㅋ

7 ~ 8월 휴직 기간 회고
Life/운동2023. 9. 4. 00:097 ~ 8월 휴직 기간 회고

한 것 - 아침 모각코 - 오프라인 모각코 - 헬스 - 러닝 동호회 (유산소 운동) - MySQL 1권 거의 완독 - Kafka 필요한 부분 완강 (Stream 제외) - MSA 중요 부분 완강 (배포 제외) - 김영한님 마지막 강의 개인적으로 중요한 부분 완강 - 스타필드 당일 치기 여행 - 인천 1박 2일 여행 ... 많이 한 것 같다.... 아침 모각코 이 모각코가 내 삶을 지탱해주는 코어라고 할 수 있었다 정말 잘 열었다 (사실 우리 스터디원들이 느끼는 감정은 잘 모르겠다... ㅋㅋ) 이 모각코가 없었으면 어쩌면, 평정심이나, 중심을 잃었을 것이라 생각한다... 처음에 C**님이 오셨을때는 정말 놀랐다 아니.. 왜 이런분이 내 방에 오셨지?? 하고 개발얘기도 좋아하며, 소스코드도 깔끔하게 잘 짜시..

대규모 시스템 설계 기초 스터디 2, 3회차 (챕터 6 ~ 8장,  9 ~ 11장)
Book & Lecture/Books2023. 9. 3. 18:35대규모 시스템 설계 기초 스터디 2, 3회차 (챕터 6 ~ 8장, 9 ~ 11장)

[ 9장 웹크롤러 ] 웹페이지의 내용을 수집해야 한다 이때 예의있게 수집해야 하는 것이 포인트다 즉 한 번 요청한 대상에 대해 되도록 다시 요청하지 않는다 해당 페이지 URL을 해시 등으로 변환한 값을 내부적으로 지니게 한 뒤에 포함여부를 조사하여 (해시 연산) 이미 방문했는지 여부를 알아낸다 그리고 DFS로 접근하면 안됀다! 깊이가 무한히 반복되는 덫 사이트가 있을 수 있다! 이런곳에 접근하면 크롤러가 빠져나올 수 없다... 너비 우선 탐색으로 접근하자 [ 나온 키워드들 ] 웹크롤러와 웹스크래핑 웹크롤러는 페이지를 계속 탐색해 나가면서 indexing을 해나간다 (주로 검색 엔진에 사용) 웹스크래핑은 계속 탐색해나가지는 않으면서 컨텐츠 내용을 수집한다 출처: https://www.baeldung.com..

@Transactional 어노테이션 넌 뭐야?
Back-end/기타 (BE)2023. 8. 31. 23:55@Transactional 어노테이션 넌 뭐야?

@Transcational 어노테이션에는 정말정말 매우 많은 기능이 있다 - 선언만으로 트랜잭션 보장 - DB 접근 계층 추상화 - 리소스 동기화 (쓰레드별 트랜잭션 관리) - 격리레벨 조정 - 전파레벨 설정 - 롤백 에외 설정 (특정 예외에 대해선 롤백하지 않는다) - readOnly + JPA사용시 약간의 성능 향상 (스냅샷 저장 X) 원리 이 마법을 어떻게 스프링은 이루어냈을까? AOP로 이것을 해낸다 사실 이 하나만으로 해낼 수는 없고 AOP와 IoC와 빈 후처리기(Bean Post Processor), 프록시가 이것을 해낸다 우선 스프링은 메서드 혹은 클래스 레벨에 @Transactional 어노테이션이 있는 클래스에 대해 CGLIB이란 라이브러리를 통해서 동적으로 생성한 Proxy객체를 생성하..

23 인프콘 참여 후기
Activity/Conference2023. 8. 22. 01:0723 인프콘 참여 후기

이번에도 인프콘을 탈락했다 근데 우연히 전날 밤 인프콘을 갈 사람을 찾는 것을 보고 바로 연락을 했다 너무 감사한 나머지 인프콘 티켓가의 2~3배 되는 금액을 드리려 했지만... 그분은 거절하셨다 ㅠㅠ 아침에 확인해보니 왠걸... 내 이름과 성이름까지 완벽히 똑같았다!! ㅠㅠ 덕분에 인프콘에 가게 되었다... 걱정되는 것은 한가지 "우테코" 애들을 마주칠까 하는 마음... 난 대다수의 우테코 애들과 달리 좋은회사에 간 것도 아니며 무직상태였다 그래서 그런지 애들을 마주치는게 조심스럽고... 사실 피하고 싶은 마음도 컸다 ㅠㅠ (우웅 미안해...) 그러나 곧이어 애들을 연달아 마주쳤다... 가장 처음에 마주친 것은 우디였다 "형!!" 하는 그애의 목소리... 보니까 안경이 뿔테로 바뀌었다 (정말 ㄹㅇ 훨씬..

image