최신 글
-
내가 테스트 코드를 작성하지 못하는 이유에 대해서
테스트 코드의 중요성을 배워도, 실질적으로 잘 작성하는 건 또 다른 문제입니다.내가 작성하는 테스트 코드는 정말 의미가 있을까?잘 작성된 테스트 코드는 어떻게 다음 할 일을 알려준다는 걸까?테스트 코드가 개발 과정에서 길을 잃었을 때 나를 도와준다는 말이 무슨 뜻일까? 이처럼 많은 이야기를 들어도 테스트 코드를 잘 쓰지 못했던 이유가 있었습니다. 내가 테스트 코드를 잘 쓰지 못하는 이유테스트 코드를 제대로 작성하지 못하는 이유를 세 가지로 정리해 보았습니다.1. 너무 빠르게 작성하려고 한다테스트 코드를 작성하다 보면, 자연스럽게 프로덕션 코드와 테스트 코드 사이를 끊임없이 오가게 됩니다. 문제는 이 과정에서 코드의 본질을 충분히 이해하지 못한 채, 테스트를 “통과”시키는 데만 집중하게 된다는 점입니다.테..
2024.12.01
-
스프링에서 제공하는 XXTemplate 은 무엇일까? (RestTemplate, JdbcTemplate, TransactionTemplate, HibernateTemplate, SqlSessionTemplate...)
인프런의 토비 스프링 강의 일부 내용을 좀더 딥다이브한 내용입니다.Template 이란 무엇일까? 템플릿이란 어떤 목적을 위해 미리 만들어둔 모양이 있는 틀. 고정된 틀 안에 바꿀 수 있는 부분을 넣어서 사용하도록 만들어진 오브젝트입니다. 우리가 아는 템플릿 메소드 패턴또한 템플릿을 사용합니다.템플릿 메소드 패턴이란?템플릿 메소드 패턴은 고정된 틀의 로직을 가진 템플릿 메소드를 슈퍼클래스에 두고, 바뀌는 부분을 서브클래스의 메소드에 두는 구조로 이뤄진다. 스프링에서 제공하는 `XXTemplate`은 특정 프로세스의 공통 부분을 재사용하면서, 세부적으로 다른 로직을 쉽게 확장할 수 있도록 지원하는 클래스입니다. 이 클래스는 Template 메서드 패턴을 활용하여 변경되는 부분과 고정된 부분을 분리해 줍니다..
2024.11.08
-
(수정)DB 에서 하는 동시성제어와 애플리케이션에서 하는 동시성 제어는 어떤게 다른걸까?
데이터베이스에서 하는 동시성 제어와 애플리케이션에서 하는 동시성 제어는 모두 동시성 문제를 해결하는 방법이지만,적용되는 레벨과 사용되는 기술에서 차이가 있다. 이 둘은 각각 다른 목적으로, 다른 상황에서 사용되며, 서로 보완적인 역할을 할 수 있다.1. 데이터베이스에서의 동시성 제어 데이터베이스에서의 동시성 제어는 트랜잭션 관리를 통해 여러 클라이언트가 동시에 동일한 데이터에 접근할 때 발생하는 데이터 무결성과 일관성을 보장하는 것을 목표로 한다. 그래서 자주 사용하는 것은 잠금(Locking), 격리 수준(Isolation Level) 등의 기술을 사용한다.트랜잭션 기반이라는 말은, 데이터베이스는 트랜잭션 단위로 동시성을 제어한다. 트랜잭션은 하나 이상의 쿼리가 실행되며, 트랜잭션이 완료될 때까지 데..
2024.10.08
-
Java 에서 패키지(Package) 라는 것을 왜 사용해야만 할까?
자바에서 사용하는 패키지는 왜 사용할까? 일단 Java 에서 Package 라고 하면 다음과 같이 생각하는 것이 일반적이다.패키지(Package) 패키지란? 클래스의 묶음으로 클래스를 용도별이나, 기능별로 그룹화 [참고 - https://wikidocs.net/231]이것을 고민했던 이유는 다음과 같습니다.이걸 보면, Zzzz 클래스는 아무런 패키지없이도 만들 수 있습니다. 그런데 패키지가 왜 필요한거지?멘토링을 진행하면서 '이렇게 패키지 구조를 만들었는데, 적절한가요?' 라는 질문을 정말 많이 받았는데요. 이 질문에 답변을 하는 과정에서 패키지 구조만 보고 내가 어떻게 적절하다고 판단을 하지? 라는 생각을 했습니다. 적어도 옛날에 읽었던 클린 소프트웨어 책에서 패키지는 이렇게 하는거야! 라는 내용을 읽..
2024.10.03
-
왜 사람들은 빈약한 도메인 모델을 만들어 활용할까?
왜 사람들은 빈약한 도메인 모델을 만들까?조영호님의 인프런 강의를 들으며 좋은 인사이트를 많이 얻을 수 있었는데, 강의를 모두다 수강한 뒤에 궁금한 것이 있었다.우리 선배개발자님들은 왜 빈약한 도메인 모델을 관례처럼 만들까? 왜그럴까?도메인 계층에는 객체지향 프로그래밍을 해야된다는 것을 머리속으로는 알고는 있지 않을까? 궁금함을 찾을 수 없어, 조영호님에게 직접 물어보았다.왜 선배개발자님들은 빈약한 도메인 모델과 트랜잭션 스크립트 패턴을 작성하게 되었을까?현 시점에 우리의 선배개발자님이 이렇게 된 배경에는 2가지가 있을 수 있다고 조심스럽게 조영호님께서 말씀해주셨다.하나는 개발을 배우거나 실무에서 참고하는 기존 코드들이 이미 절차적으로 작성되어 있기 때문에 많은 사람들이 이 방식을 그대로 답습하고 있기 ..
2024.09.22
-
RDB의 FTS 를 적용하면서 부딪힌 부분들
개요기준 Postgres 기준으로 ts_vector, ts_query 를 활용하여 Full Text Search 을 실행할 수 있음.함께 읽어보면 좋은 내용 - RDB 의 FTS(Full Text Search) 이해하기 RDB 의 FTS(Full Text Search) 이해하기RDB 의 FTS(Full Text Search) 란?배경이 글의 목적은 FTS(Full Text Search) 로 RDB(Relational Database) 적당한지 판단합니다. 검색엔진으로서 대부분 ElasticSearch 를 사용하는데요. 간단한 검색엔진으로서는 다happy-coding-day.tistory.com 배경SpringBoot와 JPA 를 활용하여 개발하는 경우가 다수이다.흔히 Repository 를 활용한 영속..
2024.09.16
-
RDB 의 FTS(Full Text Search) 이해하기
RDB 의 FTS(Full Text Search) 란?배경이 글의 목적은 FTS(Full Text Search) 로 RDB(Relational Database) 적당한지 판단합니다. 검색엔진으로서 대부분 ElasticSearch 를 사용하는데요. 간단한 검색엔진으로서는 다소 과한 오버스펙일 수 있어, 조사하는 과정에서 PostgreSQL, MySQL 도 Full Text Search 기능이 있어 기술조사를 진행했습니다. 그 과정에서 RDB 의 FTS 에 대해서 이해하는 것을 목적으로 합니다.아래 내용은 postgresSQL 기준으로 설명합니다. 왜냐하면 MySQL 보다 기본으로 제공하는 기능이 좀더 많습니다.비교 기준PostgreSQLElasticSearch일반 검색 (LIKE/정규 표현식)아키텍처 및 ..
2024.09.16
-
Java의 비동기(Async) 프로그래밍을 제공하는 JDK를 다시는 무시하지 말자!
개발을 하다보면, 어깨너머 듣는 이야기가 '비동기 언제 사용해요?', 'Redis 의 스핀락 사용해보셨어요?', '메세지 큐를 활용한 비동기 프로그래밍' 등등의 뭔가 어려운 것들을 나한테 묻곤 하는데, 잘 사용해본 적도 없을 뿐더러, 이미 Java JDK 에서 충분히 제공되고 있다고 생각했다. 이래서 한번 언젠가는 정리해봐야지- 라고 생각만하다가 드디어 알아본다.알아볼 Java의 비동기 프로그래밍1. Thread2. ExecutorService3. CompletableFuture4. Flow상황은 다음과 같습니다. SomethingCounter 가 있습니다. 해당 객체는 다음과 같이 count 를 가집니다.final class SomethingCounter { // 횟수 Integer cou..
2024.07.28
-
[똑똑한 사람은 어떻게 생각하고 질문하는가?] 리뷰 - 이시한
이 책을 선택하게 된 이유'똑똑한 사람은 어떻게 생각하고 질문하는가.' 책 제목에서부터 머릿속에 물음표를 만들어주는 질문을 던진다.이 책에 흥미가 갔던 첫번째 이유는 나의 행동 패턴에 있었다. 개발을 하며, 모르는 부분에 대해서 구글링하던 나의 모습에서 점차 ChatGPT 에게 질문을 하고 있는 패턴에서 비롯되었다. 처음 ChatGPT 가 나올적에는 할루미네이션이 심해 아무말대잔치였으나, 지금은 꽤 신뢰도 높은 대답을 해주곤 한다. 행동 패턴이 변화됨에 따라 이 책을 읽어보고 싶다는 마음이 들었다.두번째 이유는, 질문을 잘 못하는 나의 모습이 속상해 이 책을 선정하게 되었다. 회의할 적이나 컨퍼런스에 참여 할 때 항상 끝에 이런말을 한다. '~ 혹시 질문 있으신가?' 라는 주변 분위기가 급격하게 고요함..
2024.07.21
-
영속성 처리하는 Method에 @transactional는 항상 붙이는게 맞을까?
문제오늘 회사에서 특정 기능을 배포하자마자 문제가 발생했다. 핀포인트에서 발생하고 스택 트레이스는 다음과 같았다.> lazyinitializationexception could not initialize proxySpring Boot, JPA 활용하는 개발자에게는 흔히 발생되는 예외중 하나이다.이 예외가 발생하게된 이유는 무엇일까?코드를 통해 이해해보자.@Entitypublic class Order { private long id; @OneToMany(mappedBy = "order", fetch = FetchType.LAZY) private List orderItems; }public interface OrderRepository extends JpaRepository { ..
2024.04.20
-
왜 서비스로더(ServiceLoader)를 알아야 하는가?
java docs 에서 Service Loader 를 다음과 같은 한줄로 정의한다. A facility to load implementations of a service. 서비스 구현을 로드하는 기능입니다. 서비스 구현을 로드하는 기능이 왜 필요한지 부터 이해할 필요가 있을 것 같다. (여기서 서비스 구현의 의미는 비지니스 로직이 담겨진 구체적 클래스를 의미한다.) 우리가 라면을 만드는 코딩을 한다고 가정해보자. public class 신라면제조 { public void make() { pourWater(); boilWater(); putNoodle(); boilNoodle(); putSoup(); putVegetable(); } public static void main(String[] args) { ..
2024.03.21
-
잘 알아보고 사용하자 Java Annotation(주석)
오픈소스를 개발하면서 @AggregateId 라는 필드를 추가할 적이였다. Id 에 대해서 자동생성시키기 위한 @AggregateId(assignStrategy=AUTO or MANUAL) 같이 만들고자 했으나, 그렇게 하면 안될 것 같다는 피드백을 받았다. 왜일까? Java 에서 쓰이는 Annotation 은 무엇인가? 위키 백과 따르면 다음과 같다. 자바 애너테이션(Java Annotation)은 자바 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종이다. 보통 @ 기호를 앞에 붙여서 사용한다. JDK 1.5 버전 이상에서 사용 가능하다. 자바 애너테이션은 클래스 파일에 임베디드되어 컴파일러에 의해 생성된 후 자바 가상머신에 포함되어 작동한다. 여기서 말하는 메타데이터는 무엇일까? 메타데이터(m..
2024.03.10
-
[특강] 도메인 주도 설계의 사실과 오해 2부
소프트웨어는 도메인에 관련된 문제를 해결하는 것에 초점이 맞춰져 있다. 함께 개발하는 것. 원칙적으로는 그렇다. 도메인 주도 설계의 맥락에서 도메인 모델 = 코드 해결해야할 두 가지 연관된 문제 요구사항에 적합한 모습으로 도메인을 어떻게 모델링할 것인가? 도메인을 반영한 코드를 어떻게 개발할 것인가? = 올바른 모델이 찾는 것이 아니라, 유용한(수정하기 좋은/변경하기 좋은/코드짜기 좋은) 모델을 찾아야 한다. DDD 는 위 두가지를 계속 이야기한다. 도메인을 잘 분석하면 코드로 연결해주는 것을 도와주는 부분이 파트 2에서의 내용 도메인을 분석해서 넣는게 좋은 블록들이 ASSOCIATION / VALUE OBJECT / ENTITY / SERVICE / MODULE 이렇게 해놓고 실제로 동작하는 기능을 만..
2024.03.07
-
이벤트스토밍을 처음 주도해보니...
근무중인 팀에서 '이벤트스토밍'이라는 단어는 '낯선' 용어이다. 나에게는 '익숙한' 용어이다. 스타트업 재직 당시 어떤 기획이든 이벤트 스토밍을 우선으로 진행했다. 코딩을 작성하는 코더로서의 역할은 최대한 지연시키고, 개발하고자 하는 것이 무엇인지, 나의 이해관계자들은 무엇이 가치가 있는지 탐구하는 것을 첫번째 목표로 했다. 나와 함께 해준 프론트엔드 개발자 1인, PM 1인. 두 분 모두 이벤트스토밍이라는 것 자체가 처음이라고 나에게 말씀하셨다. 부담감 현재 회사로 이직하고 난 뒤에 대부분의 업무는 1인 1기능 개발 프로세스였다. 그래서 업무가 할당되면 혼자 이벤트스토밍하고 UML, 시퀀스 다이어그램등 다양한 방법을 활용해왔다. 어느 정도 익숙하다고 판단해 점진적으로 팀에 전파하고 싶었던 마음에 함께..
2024.01.19
-
2023년 나는 무엇을 했으며, 앞으로 무엇을 성취할 것인가?
폭설이 내리는 2023년 12월 30일 우리 집앞 나의 첫 질문은 이거였다. 22년도와 23년의 가장 큰 변화점은 무엇일까? 이제 이 질문에 대한 대답을 찾아가보자. 2023년도의 나는 다음과 같은 행위를 했다. 어떤 책을 읽었고 무엇을 느꼈는가? 1. 린치핀 - 세스 고딘 2. 심플한 소프트웨어를 진심으로 고민해본 적이 있나요? - 심플 소프트웨어 3. 도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지 4. 일에 대해서 - 이게 무슨 일이야 5. 성장에 대해서 - 개발자 원칙 6. 우리 모두는 브랜딩이 될 수 있다 - [오늘부터 나는 브랜드가 되기로 했다] 책을 읽고 7. 어디서 살 것인가? - 유현준 8. 레거시 코드 활용 전략 - Github Link 9. 자바 I/O & NIO 네트..
2023.12.30
인기 글
-
HTTP 304 Not Modified의 이해 및 예제(with. spring)
1. HTTP 상태 코드 1.1 응답 메시지 & 상태라인 After receiving and interpreting a request message, a server responds with an HTTP response message. 요청 메시지를 받고 해석한 뒤에, 서버는 HTTP 응답 메시지를 보낸다. Example: HTTP/1.1 304 Not Modified Date: Fri, 07 Sep 2012 14:51:43 GMT Server: Apache/2.2.22 (Win32) mod_jk/1.2.37 Connection: Keep-Alive Keep-Alive: timeout=5, max=94 ETag: "d00000001f216-1e7-4c908f1fc4d6e" The first line o..
2020.11.14
-
1. API First Design 설계의 선순환
들어가기 Slipp 에서 사이드 프로젝트를 진행하면서 API First Design 설계 라는 용어를 처음 접하게 됐습니다. 그리고 API First Design을 실천하기 위해 고군분투했던 내용들을 정리하면 좋을 것 같아 이렇게 내용을 내려적습니다. 아래 내용은 다우기술 전사 세미나에서 제가 발표했던 내용입니다. 슬라이드는 여기있습니다. 1. API First Design 이란 무엇을 의미하는 걸까요? "협업하는 개발 프로세스에서 API를 첫 번째 우선 순위로 가져가는 것." 위 그림은 로버트 C 마틴이 클린아키텍쳐에서 말하길, 약 8번의 릴리즈를 하면 처음보다 약 40배의 비용이 들어간다는 것을 말하는 그래프입니다. 우리가 운영하고, 서비스하는 회사들의 대부분은 위와같은 형태를 따릅니다. 제가 근무하..
2020.09.30
-
Mock 객체란 무엇일까? 왜 써야될까?
아래 내용은 위 책에서 말하는 4장 TDD with Mock 에서 내용을 발췌했습니다. TDD를 공부하면서 Mock 이라는 용어는 너무나도 많이 나오고, 실제로 테스트 프레임워크를 사용하면 Mock 객체를 많이 사용되게 된다. 그놈의 Mock! Mock 객체를 사용해서, 테스트를 용이하게 만들수 있고, 아직 만들어지지 않은 개념을 활용해 내가 만들고자 하는 객체를 구체화시킬 수 있는 도구라는 사실은 알았다. 그러나 문제점은 여기에 있었다. 주로 Mockito 프레임워크를 사용하는데, 각 Mock 객체가 어떤 역할을 하는지 이해하기 어려웠다. 더하여, 어떻게 활용해야 하는지도, 이해하기 어려웠다. 이번 장에서는 다시한번 Mock을 써야하는 이유, 그리고 Mock 객체가 어떤 역할을 하는지, 마지막으로 어떻..
2021.03.11
-
[특강] 도메인주도설계의 사실과 오해 후기 - 조영호
우리가 아는 '객체지향의 사실과 오해' 책에서 말하는 형식의 '도메인 주도 설계의 사실과 오해'가 아니다. 오늘의 특강 핵심 주제는 '도메인 주도 설계'가 어떻게 등장하게 되었는지에 대한 히스토리와 도메인 주도 설계와 객체 지향 프로그래밍에 대한 차이점 에 대해서 포문을 열었다. 우리가 말하는 도메인 주도 설계란? 무엇일까? 조영호님이 말씀하셨던 오해는 '대부분 우리가 말하는 도메인 주도 설계를 한다면?' 값객체, 엔티티, 팩토리, 애그리게이트 와 같은 것을 사용해야지만 도메인 주도 설계를 한다고 생각한다. 하지만 도메인 주도 설계란? 그렇지 어떤 기술적인/기법적인 것에 의존하는 것이 아니다. 그렇다면 도메인주도 설계란 무엇일까? 조영호님이 장표를 사전허가 없이 첨부할 수 없어 비슷하게 만들었습니다. 도..
2023.08.18
-
build.gradle 에서 다양한 방식으로 변수 사용하기.
들어가기 다양한 방법들 build.gradle 에서 변수를 사용하는 방식은 아래와 같습니다. 사실 위 System.xxx 의 경우 gradle에서 제공하기 보다는 Java에서 제공한다는 말이 맞습니다. 그러나 제목과 같이 build.gradle 에서 사용하는 방법이므로, 포함시키겠습니다. task printTask(){ println(System.getenv("X_USER")) println(project.getProperties()["X_USER"]) println(System.getProperty("X_USER")) } > "xxx" ./gradlew printTask "xxx" 여기서 xxx 하는 것에 따라서 변수를 다르게 넣을 수 있습니다. System.getenv("X-USER") // 시스템의..
2020.09.04
-
성능테스트 k6 결과 내역을 이해해보자.
공식 사이트 중에서도 k6 의 결과를 설명해주는 페이지 를 보고 이해하고자 했습니다. data_received..............: 148 MB 2.5 MB/s data_sent..................: 1.0 MB 17 kB/s http_req_blocked...........: avg=1.92ms min=1µs med=5µs max=288.73ms p(90)=11µs p(95)=17µs http_req_connecting........: avg=1.01ms min=0s med=0s max=166.44ms p(90)=0s p(95)=0s http_req_duration..........: avg=143.14ms min=112.87ms med=136.03ms max=1.18s p(90)=1..
2021.07.09
-
Gradlew Command 살펴보기
./gradlew > Task :help Welcome to Gradle 6.8. To run a build, run gradlew ... To see a list of available tasks, run gradlew tasks To see a list of command-line options, run gradlew --help To see more detail about a task, run gradlew help --task For troubleshooting, visit https://help.gradle.org BUILD SUCCESSFUL in 521ms 1 actionable task: 1 executed 매개변수가 없이 할경우 위와 같은 결과 나옴 ./gradlew tasks ❯ ./g..
2021.01.27
-
Springboot 에서 react.js 연동시 모든 view 맵핑을 index.html으로 forwarding 하는 방법은?
[문제] SpringBoot 에서 thymeleaf 대신, React.js 를 ViewTemplate 로 사용하려 한다. 기존의 thymeleaf 는 html 별로 View을 맵핑하고 있었기 때문에, 하나의 html 에서 URL에 따른 여러 화면으로 라우팅되는 SPA Application 에서는 ViewName 맵핑이 정상적으로 동작되지 않는다. ( 참고자료 ) 예를 들어, product/list 라는 View 이름으로 맵핑을 시도한다고 가정해본다면, 프로젝트에서는 /WEB-INF/templates/product/list.html 와 같은 형태로 ViewTemplate 을 맵핑하기 위한 html 이 존재해야 합니다.(꼭, html 일 필요는 없음) 그러므로, 하나의 html 에서 원하는 URL로 라우팅시..
2022.04.26
-
직접 코딩으로 느껴본 Spring Data JPA와 Spring Data JDBC 의 차이점
기존의 트랜잭션 스크립트 패턴으로 구현된 코드를 JPA로 변경해보면서 의존성을 분리하고, 다시한번 트랜잭션 스크립트 패턴으로 구현된 코드를 Spring Data JDBC (Spring JDBC와는 다른 Spring Data 에서 제공하는 라이브러리입니다.) 로 변경하면서 느꼈던 차이점에 대해서 작성할 예정입니다. Github - https://github.com/LenKIM/jwp-refactoring 트랜잭션 스크립트로 작성된 코드의 브랜치 - step1 JPA로 구현된 코드의 브랜치 - step3 Spring Data JDBC 로 구현된 코드의 브랜치 - try-spring-jdbc-step2-service Index Referance 에서 말하는 Spring Data JDBC와, JPA의 차이점 내..
2021.07.18
-
postgresSQL의 Idle in transaction 이란 무엇인가?
Node.js 에서 발생한 Transaction 이 부족해서 문제가 발생했고, 해결하는 과정에서 Idle in transaction에 대해서 알게 되었습니다. Idle in transaction 이란 무엇인가? 문서에 따르면 다음과 같은 의미를 가집니다. idle in transaction (waiting for client inside a BEGIN block) 클라이언트가 시작을 열어놓고 기다리고 있다. 즉, 클라이언트가 정상적으로 트랜잭션을 닫지 않았다. 대부분의 Application은 ConnectionPool 을 통해 N개의 Connection 을 쥐고 있습니다. N개의 Connection이 모두다 정상적으로 동작하지 않을 경우에는 다음 Connection 이 열리지 않아 문제가 발생합니다. 그..
2022.09.11
-
헥사고날 아키텍처(Hexagonal Architecture) 코드로 이해 해보기
EventsJdbcEntityRecordPublishedEventService 이 부분은 '만들면서 배우는 클린 아키텍쳐' 의 책을 보고 배운점과 느낌점을 설명합니다. 헥사고날 아키텍쳐란 무엇인까요? 헥사고날 아키텍쳐는 레이어드 아키텍처(Layered Architecture)의 단점을 해결하기 위해 나왔습니다. 어떻게 해결했는가? 바로 의존성의 역전법칙입니다. 우리가 흔히 아는 레이어드 아키텍쳐는 위에서 아래로 의존성을 가진 형태를 의미합니다. 여기서 만약 의존성 역전 법칙을 활용하면 아래와 같은 아키텍쳐로 변경되어집니다. 이런 형태를 각 계층마다 적용하다 보니, 핵사고날 아키텍쳐의 형태를 띄게 됩니다. 육각형 안에는 도메인 엔티티와 상호작용하는 유즈케이스가 있고, 모든 의존성을 엔티티를 향해 있습니다...
2022.04.29
-
Eventuate.io 간단 파헤치기
https://eventuate.io/ 요즘 일주일에 2시간이상의 시간을 들여, 학습 중인 프레임워크입니다. 해당 프로젝트의 저자는 마이크로 서비스 패턴 라는 이름의 책으로 출판되었습니다. 이 책을 발견하기 전에, 마이크로서비스에서 메세지 알고리즘을 좀 더 쉽게 쓸 수 없을까? 라는 물음표를 시작으로 Eventuate 프레임워크를 알게 되었고, 점차 MSA의 문제점을 해결하는 Eventuate에 매료되었습니다. 그럼, Eventuate는 어떤 프레임워크일까요? 모놀리식에서 MSA로 변경시 가장 문제가 되는 부분은 분산 데이터 관리 문제라고 합니다. 여기서 말하는 분산 데이터 관리 문제란? 각 마이크로 서비스에는 자체 개인 데이터베이스가 있습니다. 여러 서비스에서 데이터를 검색하는 쿼리뿐만 아니라 여러 서..
2020.10.29
-
자바의 직렬화(serialization)를 코드와 함께 이해하기
Photo by Casey Horner on Unsplash 회사 사내세미나를 했던 자료를 옮겨왔습니다. 자세한 소스코드는 여기를 참고해주세요. 1. 직렬화란 무엇일까요? serialization (or serialisation) is the process of translating data structures or object state into a format that can be stored (for example, in a file or memory buffer) or transmitted (for example, across a network connection link) and reconstructed later (possibly in a different computer environment..
2020.09.16
-
Layered Architecture 의 단점이 무엇이라고 생각하는가? 두번째 이야기
첫번째 이야기 ( https://happy-coding-day.tistory.com/189 ) Layered Architecture 의 단점이 무엇이라고 생각하는가? 들어가기 이전 포스팅의 내용이였던 DDD-Lite 동영상 시청 리뷰 의 내용을 정리하다가 문득 궁금증이 생겼습니다. 정명주 강사님께서 `Layered Architecture 의 단점으로 인해, Hexagonal(Onion) Architecture.. happy-coding-day.tistory.com 요즘에는 만들면서 배우는 클린 아키텍쳐라는 책을 읽고 있습니다. 이 책에서는 Layered Architecture 에 대한 단점을 언급하는 부분이 있어, 이 부분 또한 2탄으로 정리할 필요가 있겠다 라는 생각을 가졌습니다. 첫번째 이야기는 20..
2022.04.13
-
모니터란 무엇인가?
자바 모니터 자바 스레드 동기화 모델은 "모니터"라는 개념을 적용하고 있다. 모니터에 대해서 먼저 간단하게 살펴보고 자바 동기화에 대해 상세하게 살펴보자. Monitor(모니터)의 개념 하나의 데이터(객체)마다 하나의 모니터를 결합할 수 있으며, 모니터는 그것이 결합된 데이터(객체)가 동시에 두개 이상 의 스레드에 의해 접근 할 수 없도록 막는 잠금(lock)기능을 제공함으로써 동기화를 수행한다는 것이 주된 내용이다. 즉, 데이터(객체)에 모니터를 결합하면 하나의 스레드가 그 데이터를 사용하는 동안에는 다른 스레드들이 그 데이터를 사용할 수 없게 된다. 자바에서는 synchronized 메소드가 선언된 객체와 synchronized 블럭에 의해 동기화되는 모든 객체에 고유한 모니터가 결합이 되어 동기화 ..
2019.07.21