📖 개발 공부
-
RPC, gRPC, stub📖 개발 공부 2023. 8. 3. 22:23
RPC RPC는 Remote Procedure Call의 약자로 분산 네트워크 환경에서 조금 더 직관적인 프로그래밍을 가능하게 해주기 위해 등장하였다. Server-Client Model에서 상세한 정보를 감추고 개발자는 각 로직에 집중할 수 있게, Client와 Server는 메소드를 호출하는 것처럼 개발하면 된다. caller/callee 개발자가 필요한 비즈니스 로직을 생성하고 정의된 IDL(interface definition language)로 작성하여 stub 을 호출한다. Stub RPC에서 클라이언트와 서버 간에 통신을 하기 위해 Stub이 사용된다. Stub compiler 가 IDL 파일을 읽어 원하는 language 로 생성하고 파라미터를 변환(Marshalling)/역변환(Marsh..
-
[Kotlin] @Synchronized 어노테이션 동작 방식📖 개발 공부/kotlin 2023. 8. 3. 00:50
한줄요약: @Synchronized 어노테이션은 AOP와 관련된 게 아니라 synchronized JVM 메서드임을 알려주는 역할을 한다! 동시성 이슈 강의 스터디를 할 때 나는 코틀린으로 변환해서 코드를 작성하였다. 재고시스템으로 알아보는 동시성이슈 해결방법 인프런 재고시스템으로 알아보는 동시성이슈 해결방법 강의를 보면서 정리한 내용입니다. 재고시스템으로 알아보는 동시성이슈 해결방법 - 인프런 | 강의 동시성 이슈란 무엇인지 알아보고 처 ayoung0073.tistory.com 이때 synchronized 키워드를 쓸 수 없어 같은 동작을 하는 @Synchronized 어노테이션을 붙였다. 그리고 스터디 발표가 당청되어 내가 작성한 코드를 보며 발표를 하던 중..! 스터디를 같이 하는 팀원이 물었다. ..
-
재고시스템으로 알아보는 동시성이슈 해결방법📖 개발 공부 2023. 8. 2. 01:17
인프런 재고시스템으로 알아보는 동시성이슈 해결방법 강의를 보면서 정리한 내용입니다. 재고시스템으로 알아보는 동시성이슈 해결방법 - 인프런 | 강의 동시성 이슈란 무엇인지 알아보고 처리하는 방법들을 학습합니다., 동시성 이슈 처리도 자신있게! 간단한 재고 시스템으로 차근차근 배워보세요. 백엔드 개발자라면 꼭 알아야 할 동시성 이슈 www.inflearn.com 실습한 레포지토리 👉 https://github.com/ayoung0073/stock 코틀린으로 작성 mysql, redis, mongo 세 커밋으로 나누어서 코드 작성 동시성 문제 동시성 문제란 동일한 자원에 대해 여러 스레드가 동시에 접근 하면서 발생하는 문제다. 재고시스템에서 재고 감소 로직에서 동시성 문제가 발생할 수 있다. Synchroni..
-
[Kotlin] toBoolean(), toBooleanStrict()📖 개발 공부/kotlin 2023. 7. 26. 22:35
한줄 요약 문자열이 "true", "false"인 경우에만 Boolean 타입을 반환하고, 나머지는 예외 던지는 걸 기대한다면, toBoolean()이 아니라 toBooleanStrict() 을 사용하자. 코틀린에서 문자열(String)은 타입 변환을 해주는 확장 함수를 제공한다. toByte() toShort() toInt() toLong() toFloat() toDouble() toBoolean() 테스트 코드를 짜다가 생각치 못한 부분에서 버그를 발견했다. “random”.toBoolean() 은 어떤 값을 반환할거라 예상하는가? 한번 생각해보자. 나는 당연히 IllegalArgumentException 예외가 던져질 줄 알았다. 하지만 예상과 다르게, false 를 반환하는 것을 알 수 있다. f..
-
CQRS 패턴📖 개발 공부 2023. 7. 25. 22:31
단일 모델의 단점 주문 내역 조회 기능을 구현하기 위해서는 여러 애그리거트에서 데이터를 가져와야 한다. 주문 내역 조회 페이지는 로딩이 빨라야하는데 여러 도메인 모델을 가져오기 때문에 Select를 여러번 날리게 되고 결과적으로 느려지게 된다. 이러한 구현의 복잡도를 낮추는 간단한 방법은 상태 변경을 위한 모델과 조회를 위한 모델을 분리하는 것이다. 상태를 변경하는 범위와 상태를 조회하는 범위가 정확하게 일치하지 않기 때문에 단일 모델로 두 종류의 기능을 구현하면 모델이 불필요하게 복잡해진다. 단일 모델을 사용할 때 발생하는 복잡도를 해결하기 위해 사용하는 방법이 있는데, 그것이 CQRS이다. CQRS는 Command Query Responsibility Segregation의 약자로 상태를 변경하는 명..
-
[Flutter] App Lifecycle (라이프사이클)📖 개발 공부/flutter 2023. 7. 23. 11:58
이전 포스팅에서 Flutter의 Stateless Widget과 Stateful Widget을 알아보았다. [Flutter] Stateless Widget / Stateful Widget 앱 생명 주기의 생성, 렌더링, 업데이트 및 종료 방식을 알아야지 앱 생명 주기를 기반으로 코드를 이해하는 데 도움이 된다. Flutter의 모든 것이 Widget으로 이루어져 있어 생명 주기에 앞서 Flutter ayoung0073.tistory.com 이번엔 상태가 변하는 Stateful Widget을 기준으로 LifeCycle을 살펴보도록 하자! 앱 생명주기(라이프사이클) 단계 앱은 다음과 같은 상태의 LifeCycle을 가진다. createState() initState() didChangeDependencies..
-
[Flutter] Stateless Widget / Stateful Widget📖 개발 공부/flutter 2023. 7. 22. 17:44
앱 생명 주기의 생성, 렌더링, 업데이트 및 종료 방식을 알아야지 앱 생명 주기를 기반으로 코드를 이해하는 데 도움이 된다. Flutter의 모든 것이 Widget으로 이루어져 있어 생명 주기에 앞서 Flutter의 Widget에 대해 알아보자. Widget Flutter에는 크게 2가지 유형의 위젯이 있다. Stateless Widget Stateless Widget은 런타임에 크게 변경되지 않는 위젯이다. 그렇기 때문에 상태(State)를 다룰 필요가 없으며, 영구적으로 변하지 않는 변수, 버튼, 심볼 등과 같은 표현 요소를 나타내거나 앱에서 데이터를 가져오는 데에 쓰인다. 이러한 위젯은 build 메서드를 오버라이드하여 위젯을 반환한다. Stateless 위젯은 UI가 데이터의 변경에 의존하지 않는..
-
[Git] Git 커밋 되돌리는 다양한 방법 (git reset / git revert)📖 개발 공부/git 2023. 7. 14. 22:47
Git으로 작업을 할 때 버그가 생기거나, 이미 작업했던 커밋 중 수정하고 싶은 경우 커밋 내용을 되돌리거나(git revert), 커밋을 아예 취소하는(git reset) 경우가 종종 발생한다. 이 글에서는 실습과 함께 되돌리거나/취소하는 명령어에 대해 알아보려고 한다. 명령어를 알아보기 전, 실습을 이해하기 위해 간단한 커밋 로그들을 보고가자! commit b366d6832cc4ef88196ad4ba8850b71ce8ba60a8 (HEAD -> main) Author: ayoung0073 Date: Fri Jul 14 22:14:54 2023 +0900 test3.txt 추가 commit aad06133842414db6a3e9bcab1ead015e0a168ab Author: ayoung0073 Dat..