[{"content":"not just a trendy person, I\u0026rsquo;m drawn to people who are really building their own niche.\nThere\u0026rsquo;s nothing cooler than someone who\u0026rsquo;s firmly established their colors,\neven if they\u0026rsquo;re not in the public eye.\nJust being around them expands my thinking and gives me another lens through which to see the world.\nWe seem to gravitate towards people like that.\nWhat these people have in common is that they are \u0026lsquo;people who live life\u0026rsquo;.\nIt\u0026rsquo;s not because it\u0026rsquo;s fashionable, it\u0026rsquo;s not because it\u0026rsquo;s a trend, it\u0026rsquo;s just a lifestyle.\nwake up in the morning, go to lunch, go to dinner, every day, every week, every month, just like that.\nSo that \u0026rsquo;life\u0026rsquo; itself comes out of whatever expression they want to use.\nIt\u0026rsquo;s something can never copy by trying to copy.\nThat\u0026rsquo;s why people who try to jump on the bandwagon of this fad, that fad, or a keyword for a while are not sustainable.\nThey might get a little bit of attention, but they\u0026rsquo;ll pretend for a while, and then they\u0026rsquo;ll move on to another keyword, and it\u0026rsquo;s a cycle.\nReal people just do it. They do it because they like it, and they do it a little bit every day.\nThey just like it, and they do it a little bit every day, and that little bit every day seems to create their own taste,\ntheir own territory, their own solid appeal.\nPeople who \u0026ldquo;live\u0026rdquo; like that have no pretense.\nIt\u0026rsquo;s good to be around people like this because it keeps expanding my horizons.\n","permalink":"https://hongjae.pages.dev/en/posts/241006-the-real-thing/","summary":"There\u0026rsquo;s nothing cooler than someone who\u0026rsquo;s firmly established their colors, even if they\u0026rsquo;re not in the public eye.","title":"the real thing"},{"content":"I played footsal with company colleagues and my two of friends. It was a great time to get to know each other better. We played 6:6 and had a great time. I was able to get to know my colleagues better and had a great time. I hope we can play footsal together again soon.\n","permalink":"https://hongjae.pages.dev/en/posts/footsal-with-fpt-korea-team/","summary":"I played footsal with FPT Korea team. It was a great time to get to know each other better.","title":"Footsal with FPT Korea team"},{"content":"It is called the Line incident. Line, a messenger similar to WhatsApp, is a popular app in Japan. It is owned by Z Holdings, which is a subsidiary of SoftBank. SoftBank is a Japanese conglomerate that has investments in many companies, including Yahoo Japan. Yahoo Japan is a joint venture between SoftBank and Yahoo. Yahoo Japan is now called Z Holdings.\nJapan, where the proportion of cash transactions is still high,\nby 2026, they set a goal of lowering the proportion of cash payments below 60%.\nAs the convenience of pay was recognized along with the government\u0026rsquo;s push,\nJapan\u0026rsquo;s cashless payment market has been growing rapidly.\nIn this process, Naver and Softbank, which were overwhelmed by the rapid growth of the cashless payment market, There was a head-on collision in the pay market. Softbank launched a campaign that gave back 20% of the payment amount with a limit of 10 billion yen.\nLine Pay also launched a counterattack. In May 2019, Line announced that it would spend 30 billion yen to promote Line Pay.\nAs a result, Pay Pay, which was ranked 3rd in market share, rose to 1st place. and Line Pay rose from 4th to 2nd place.\nHowever, in the process of competition, excessive costs were spent, and Naver and Softbank, merged Line and Yahoo with the intention of reducing unnecessary competition.\nand taking advantage of the synergy effect.\nNaver\u0026rsquo;s Line and Softbank\u0026rsquo;s Yahoo Japan merged to form Z Holdings.\nThe merger structure is as follows. Softbank holds 50% of the shares, and Naver holds 50% of the shares.\nand Softbank is in charge of management. while Naver is in charge of technology.\nAs it does business in Japan, a Japanese company, is at the forefront to reduce controversy over Line\u0026rsquo;s governance structure.\nHowever, as personal information leakage incidents occurred several times on Line, the Japanese government issued administrative guidance in March 2024 stating that a review of capital control relationships was necessary in order to establish a cybersecurity system,\nand carry out normal management and supervision of consignment companies.\nsince Naver, which is entrusted with customer information management by Line Yahoo, is a joint majority shareholder of Line Yahoo along with Softbank and Line Yahoo, they are not properly managing and supervising Naver, and Naver should reduce its influence over Line Yahoo.\nLined Yahoo submitted a report that included the plan to separate the system from Naver by 2026, but the Japanese government judged that the plan was insufficient and issued a business improvement order to Line Yahoo.\nAccordingly as a response to the information leak issue, Line Yahoo gradually terminated its consignment relationship with Naver and promoted technological independence.\nThe pressure on Naver to sell its stake appears to be a significant violation of the company\u0026rsquo;s property rights.\nReactions to the incident appear to be national in scope, with the South Korea government also issuing an official statement on the incident.\n","permalink":"https://hongjae.pages.dev/en/posts/thought_japanese-government-pressures-line-yahoo-to-sell-its-stake/","summary":"2024, the Japanese goverment pressures Line Yahoo to sell its stake in the company.","title":"Japanese government pressures Line Yahoo to sell its stake"},{"content":"AWS Systems Manager is the operations hub for your AWS applications and resources and a secure end-to-end management solution for hybrid and multicloud environments that enables secure operations at scale.\nAWS Systems Manager gives you visibility and control of your infrastructure on AWS. Systems Manager provides a unified user interface so you can view operational data from multiple AWS services and allows you to automate operational tasks across your AWS resources.\nWith Systems Manager, you can group resources, like Amazon EC2 instances, Amazon S3 buckets, or Amazon RDS instances, by application, view operational data for monitoring and troubleshooting, and take action on your groups of resources.\nHow Systems Manager works Access Systems Manager – Use one of the available options for accessing Systems Manager.\nChoose a Systems Manager capability – Select a capability to perform the desired action on your resources.\nVerification and processing – Systems Manager checks IAM permissions. If targeting a managed node, the SSM Agent executes the action. For other resources, Systems Manager or associated AWS services perform the action.\nReporting – Systems Manager, SSM Agent, and related AWS services report status. Systems Manager can forward these details to other AWS services if configured.\nSystems Manager operations management capabilities – If enabled, tools like Explorer, OpsCenter, and Incident Manager aggregate operations data, create OpsItems and incidents, and provide insights and automated remediation for issues.\nAWS Systems Manager Parameter Store AWS Systems Manager Parameter Store provides secure, hierarchical storage for configuration data management and secrets management. You can store data such as passwords, database connection strings, and license codes as parameter values. You can store values as plain text or encrypted data using AWS Key Management Service (KMS). You can then reference values by using the unique name that you specified when you created the parameter.\nAWS Systems Manager with SSM Agent The Systems Manager Agent (SSM Agent) is an Amazon software agent that runs on your Amazon EC2 instances and your hybrid instances that are configured for Systems Manager. The agent processes requests from the Systems Manager service in the cloud and configures your machine as specified in the request. The agent sends status and execution information back to the Systems Manager service by using the Amazon EC2 Instance Metadata Service (service prefix: ec2messages).\nWhat\u0026rsquo;s important to know about AWS Systems Manager AWS Systems Manager is a collection of capabilities that helps you automate management tasks such as collecting system inventory, applying operating system (OS) patches, automating the creation of Amazon Machine Images (AMIs), and configuring operating systems (OSs) and applications at scale. AWS Systems Manager simplifies resource and application management, shortens the time to detect and resolve operational problems, and makes it easy to operate and manage your infrastructure securely at scale. AWS Systems Manager helps you maintain security and compliance by scanning your managed instances for patch compliance and integrating with AWS Identity and Access Management (IAM) so you can control access to your resources. What\u0026rsquo;s different AWS Systems Manager and AWS Secrets Manager AWS Systems Manager helps you manage your infrastructure and applications securely at scale, providing tools for automation, patching, and resource management. AWS Secrets Manager helps you protect access to your applications, services, and IT resources by managing secrets such as database credentials, API keys, and other sensitive information. AWS Systems Manager can\u0026rsquo;t rotate secrets stored in AWS Secrets Manager. To rotate secrets stored in AWS Secrets Manager, you can use AWS Lambda functions to automate the rotation process. ","permalink":"https://hongjae.pages.dev/en/posts/aws_system-manager/","summary":"AWS Systems Manager is the operations hub for your AWS applications and resources and a secure end-to-end management solution for hybrid and multicloud environments that enables secure operations at scale.","title":"What is AWS Systems Manager"},{"content":"Summary: If you use JetBrain products, you need to update. Issue: Possible github access token hijacking\nWho: People using the versions listed below IntelliJ IDEA 2023.1.7, 2023.2.7, 2023.3.7, 2024.1.3, 2024.2 DataGrip 2023.1.3, 2023.2.4, 2023.3.5, 2024.1.4 PhpStorm 2023.1.6, 2023.2.6, 2023.3.7, 2024.1.3, 2024.2 WebStorm 2023.1.6, 2023.2.7, 2023.3.7, 2024.1.4 Link: link1 Issue When using JetBrains IDE, github access token is exposed and can be accessed by access control Based on CWE-522 ( Link: CWE-522 ) Weak Authentication || Plaintext Storage of a Passworng || Storing Passwords in a Recoverable Format || Weak Encoding for Password || Password in Configuration File || Unprotected Transport of Credentials || Missing Password Field Masking || Storing Passwords in a Recoverable Format || Exposure of Resource to Wrong Sphere how to fix Update IntelliJ (three upper right dots on Mac) Issue Official Links National Institute of Standards and Technology NIST (Vulnerability 7.5 / 10): https://nvd.nist.gov/vuln/detail/CVE-2024-37051 Specified Weaknes: https://cwe.mitre.org/data/definitions/522.html JetBrain Issue Fixed List(rated Critical): https://www.jetbrains.com/privacy-security/issues-fixed/ And what made me find it\u0026hellip; I use github through ide\u0026hellip; token expired and re-login is not allowed\u0026hellip; even though it\u0026rsquo;s a normal token ","permalink":"https://hongjae.pages.dev/en/posts/intellijhijakingissue/","summary":"If you use JetBrain products, you need to update. possible github access token hijacking","title":"if you using IntelliJ IDEA, DataGrip, PhpStorm, WebStorm, etc, you need to update. possible github access token hijacking"},{"content":" https://laist.com/news/education/lausd-los-angeles-unified-cellphone-ban-use-on-campus\nThe Los Angeles Unified School District will ban student cellphone and social media use during the school day amid rising concerns about the impact of the technologies on youth mental health.\nI was born and raised in South Korea. As I think about the trend of banning cell phones in LA schools, I have mixed feelings.\nI\u0026rsquo;m curious about the potential benefits of this move for LA kids, which will help kids focus on their learning, make better memories, and provide opportunities to practice a sense of being present and mindful.\nOn the other hand, given the high rate of school shootings in the United States, the ban may somehow inadvertently make the problem worse.\nDespite these fears, I believe that the cell phone ban is a necessary step towards creating a more centered environment for children.\nIn South Korea, many schools do not allow cell phones to be used during class time.\nEspecially since in today\u0026rsquo;s world, it\u0026rsquo;s easy to get caught up in constant notifications and interruptions, kids need to navigate these struggles.\nUltimately, I hope that banning cell phones will help kids develop the skills and resilience they need to succeed in an increasingly complex and fast-paced world :)\n","permalink":"https://hongjae.pages.dev/en/posts/240627_lausd/","summary":"As I think about the trend of banning cell phones in LA schools, I have mixed feelings.","title":"Los Angeles Unified School District will ban cellphones from school day in 2025"},{"content":" Separating business logic concerns Sometimes the business logic is 10 lines, but the DB procedure logic is 1000 lines. (Failure of separation of concerns)\nSince the business logic is mostly in SQL, it naturally becomes a bottleneck due to constant database performance degradation.\nDatabases are about storing and processing data and are optimized for that.\nIt is better to have a strict separation of concerns between business logic and data processing than a tightly coupled database-centric architecture.\nLayered Architecture (Hierarchical Architecture) Presentation\nBusiness Logic\nData Access\nScreen Processing\nBusiness Flow Control\nData Processing\nHowever, this architecture violates the principle of open closed. This is because every layer defines and owns its own interfaces to each function.\nHere we apply DIP to move the interfaces defined by the data access layer across the boundary to the business logic layer. The implementations of the data access layer are then forced to look at the interfaces of the business logic layer.\nHexagonal Architecture A big feature of the hexagonal architecture is that the high-level internal zones do not depend on external adapters at all. This is made possible by the configured ports of the internal regions. In a hexagonal architecture, the following distinctions are made\n— An internal domain that expresses business logic — An outer zone that is responsible for handling interfaces\nThe outer zone is an inbound adapter that handles requests coming in from the outside. Outbound adapters are called by the business logic to connect with the outside world.\nInbound adapters can be controllers that issue REST APIs, command handlers, event message subscription handlers, etc,\nOutbound adapters can be DAOs, event message issuing classes, proxies for calling external services, etc.\nClean Architecture Clean Architecture is an architecture proposed by Robert C. Martin and is very similar to Hexagonal. Software has behavioral and structural values, with structural values being more important. This is because it is the structural value that makes the software smooth.\nClean architecture is divided into entities, use cases, internal interfaces, frameworks, and devices (external interfaces) from the center.\nEntities are data-driven objects of core business rules. Core rules and data are inherently combined, so they are easy to create as objects.\nA use case captures the flow of using the system while honoring the core business rules inside the entity.\nAll other areas are details that wrap around the use case. — I/O devices — Storage — Web system — Servers — Frameworks — Communication protocols As shown above, a clear separation of coupling can enhance testability and development/deployment independence. In a microservice architecture, each service should be clearly separated according to its goals and utilization, and it is recommended to define the appropriate development language, repository, and internal architecture based on the purpose of each service.\nInternal Zone — Business Rules Within the internal realm of defining business rules, there are service interfaces, service implementations, domains, repository interfaces, domain event interfaces, and API proxy interfaces.\nThere are useful patterns for organizing these internal areas, especially the relationship between services and domains. They are Martin Fowler’s transaction script pattern and the domain model pattern.\nTransaction Script Pattern This pattern is good for handling simple business. Because it’s exactly like procedural programming, there’s a lot of room for sophistication in the service and for problems that we’ve seen in database-driven architectures.\nThe objects that represent business concepts don’t have behaviors; the responsibility for doing something lies with the service. This approach leads to service bloat over time, with domain objects acting as bundles of information. Also, because services are the unit of use case processing, and most of the business logic is done in services, services can end up with duplicate code for similar use cases. This can make maintenance difficult.\nDomain Model Pattern The domain model pattern is that domain objects have business behaviors as well as data. The data owned by an object is hidden by its behavior. Service methods are simplified because the responsibilities of the service are properly distributed across domains. The domain model of the Domain Model pattern is the object model of object-oriented design. It can be further evolved to apply the aggregate pattern of domain-driven design.\nThe Aggregate Pattern An entire collection of conceptually bound entities is called an aggregate. It’s a pattern that compensates for the shortcomings of object modeling.\n— External Zone API Publishing Adapter Call the service interface of the internal realm and provide it as a REST-formatted API. It is recommended that you create your own DTOs to convert and map entities and deliver them.\nAPI Proxy Adapter This is an outbound adapter that calls the API of another service. It implements the proxy interface defined in the internal realm, and the API of the other service can be a REST API, Socket, SOAP protocol, etc.\nStorage Processing Adapter There are OR and SQL mappings. OR is JPA, Spring Data, etc. and SQL is MyBatis, etc.\nDomain Event Publishing Adapter Domain events are changes in state as a result of some event, implemented as classes with names like ordered, canceled, and so on, and issued through the domain event issuing adapter for delivery to consumers. When applying the aggregate pattern, domain events are events that occur in the aggregate.\nIn reality, where domain events are generated is in the internal realm, and the domain event issuing adapter is responsible for issuing them outbound to a specific message queue or stream storage.\nDomain Event Handler Subscribes to externally issued domain events and forwards them to internal zones. Forward events to internal zones based on the state of the event.\nThe problem becomes apparent when business logic and database access logic are mixed together, making maintenance and performance optimization difficult.\nIn this situation, it is important to apply structures such as clean architecture or hexagonal architecture to maximize the separation of concerns.\nIn particular, it is necessary to apply domain model patterns and aggregate patterns to design business logic as object-centric and to clearly separate interfaces with external areas.\nThis makes your code more cohesive and less coupled, which improves maintainability.\nAlso, when considering a microservice architecture, it’s important to define clear boundaries so that each service can be managed and scaled independently. This minimizes dependencies between services and allows each service to be developed and deployed freely.\nFinally, it’s necessary to actively leverage object-oriented programming to address the complexity of your business. This helps you design systems that are behavior-driven rather than data-driven and improves the readability and maintainability.\n","permalink":"https://hongjae.pages.dev/en/posts/ddd_grape_03/","summary":"Jung-heon Han, he became disillusioned with the outsourced developer environment, where he felt like a conveyor belt worker.","title":"Summary: Microservice Development with Domain-Driven Design — Chapter 3"},{"content":" I also use LinkedIn to write about my project experiences.\nOn LinkedIn, I read posts from people who share a wealth of experience and insight.\nI’m fascinated by the different perspectives and insights.\nI find each post that pops up in my feed interesting and resonates with me\nor ignites my passion to the point of burning my heart to a crisp.\n(LinkedIn’s feed algorithm must have been very well done).\nBut, you know, I see the polished success stories that I see on Linkedin,\nand then I can’t ignore the less-than-polished stories of their employees.\nWhile many of you are showcasing your insights or accomplishments,\nI see them struggling with excessive workload, scope, and unpaid overtime.\nThen, when that project becomes a success, the accomplishment is displayed again.\nI want to create an environment that prioritizes solving these problems over superficial displays of success.\nI like teams that are authentic and prioritize the well-being and dignity of individuals.\nWhen that happens, I feel like I’m catalyzing meaningful change,\nand I’ll be an active participant in designing a more equitable and empathetic industry environment. 😁\n","permalink":"https://hongjae.pages.dev/en/posts/240404_while-reading-my-linkedin-feed/","summary":"While reading my LinkedIn feed, a thought came to my mind.","title":"While reading my LinkedIn feed"},{"content":" From an architectural perspective, MSAs can be broken down into three main parts.\nInfrastructure architecture On-premises Cloud System architecture Monolith Microservices Application internal organization Tightly coupled, locked-in technology stack Loosely coupled, flexible technology stack If I were an architect, these are all things I would be very concerned about.\nHowever, microservices don’t dictate or force you to use any equipment.\nHowever, if you equip MSA with bare metal equipment, it will be difficult to flexibly scale up or down the infrastructure. I think it’s safe to say that the only way to use bare metal for MSA is to build a private cloud environment on bare metal.\nIf you’re using a virtualized environment, you can broadly categorize it into virtual machines and containers.\nSo what is the difference between virtual machines and containers?\nFirst of all, virtual machines are not set up by default like containers, so you need to upgrade the OS version or install libraries.\nTherefore, for independent environments such as microservices, containers are more appropriate than VMs.\nAlso, if containers are the natural choice, you’ll need container orchestration skills. An orchestration tool that can scale containers up or down, load balance them, failover, etc.\nWhy Netflix moved to the cloud Around 2006, Netflix started its streaming business on a Monolith system, and suffered a massive loss of data in the streaming DB, which started the journey towards MSA. The company chose EC2 on AWS.\nIt wasn’t all smooth sailing. When you take a whole chunk of services and spread them across multiple services, you also have to prepare for failure propagation.\nNetflix had open-sourced a number of tools to address these issues.\nIn 2013, Docker \u0026amp; Kubernetes was released,\nan orchestration technology that continues to drive the evolution of the MSA ecosystem.\nService Discovery Pattern How would a client call multiple backend microservices?\nAnd if that instance is replicated across multiple instances, how can we balance the load?\nThe pattern for this is the discovery pattern. should be used to ensure proper load balancing.\nRouters chase IP addresses, but in a cloud MSA environment, we need to receive and change floating IPs that change dynamically.\nWe need a place to hold this information for mapping purposes, and this pattern is called the service registry pattern. And there’s a tool called Eureka from Netflix that actually does this.\neach service instance registers its service name/floating IP with Eureka router calls Eureka when client calls load balancing the instances that respond utilizes this information Calling instances as a result It’s used in the same way as above. API Gateway Pattern The Gateway pattern creates a single entry point to provide different APIs to different types of clients.\nIf you encounter latency issues during a service request, you might want to reroute the request to a different service.\nBFF Pattern Rather than having a single entry point like an API gateway, we want to provide optimized APIs based on the type of client. As a result, each client category has a BFF and goes through an API gateway.\nExternal Configuration Store Pattern A pattern that allows you to change information about the resources used by the MSA. We can refer to this pattern as the Config principle.\nThis is the principle that configuration information used by code should be managed completely separately from the code.\nDevelopment, test, production IP addresses/ports, etc. are used separately as environment variables.\nHowever, Spring Cloud Config allows you to inject this configuration information into containers in multiple MSA environments at runtime.\nKubernetes provides this external configuration store pattern with Kubernetes ‘ConfigMap’.\nAuthentication/Authorization Patterns It would be inefficient to duplicate authentication/authorization for multiple MSAs.\nIn the traditional monolith pattern, you store user information in a server session.\nIn MSA, however, instead of storing sessions for each service, we store sessions in shared storage and ensure that all services get the same user data.\nWe use Redis or Memcached for session storage.\nAgain, we’ll use an API gateway to handle the client-side JWT so that each service doesn’t have to handle authentication/authorization.\nwhen a client accesses a service, the API gateway makes a request to the service the service responds that they are not authorized to access it the client requests the authentication service from the API gateway when it is not authorized to access it the authentication service responds with a jwt client bites the jwt and again requests the service from the API gateway service responds success after allowing JWT authorization Circuit Breaker Pattern The circuit breaker pattern is like the stock market in South Korea, where we set upper and lower limits to prevent overheated markets.\nThe idea is to isolate one of your services when it fails and prevent it from spreading to other services. And it prevents the failure from spreading to other services.\nclient’s request service A calls service B service B fails isolate B service with circuit breaker pattern process alternative response to A service’s response failover Log Collection Patterns How should I manage logs for my microservices?\nDepending on the usage of your microservice, instances will be spawned and deleted at any given time, and local logs may disappear.\nThe typical stack we use in this case is the ELK stack.\nIt is a set of tools for collecting and examining logs in the form of event streams from services. Elastic Search, Logstash, Kibana.\nappend logs with Logstash move the loaded logs to the Queue area (like redis) a. We have a memory store to pause loading logs in between because if logs are too crowded, the log store will have performance issues Save logs to ElasticSearch Index the logs visualize with Kibana to view dashboards Service Mesh Pattern In the early days of MSA,\nit would have been very cumbersome to create each of the above-mentioned API gateways, service registries, configs, and other operations management perspective services separately.\nAnd if you don’t use Spring Cloud services, you don’t have the option of importing them from other technology stacks.\nSo recently, the service mesh pattern has been favored, which allows this to be done at the network infrastructure layer.\nService mesh is part of the infrastructure layer, which handles communication between services and seems to solve many of the problems mentioned above.\nA prime example of this is Google’s Istio.\nIt uses a sidecar pattern, deployed as a separate container from the application.\nIt is centrally controlled by a Control Plain function, which communicates between sidecars to manage operations. As such, they are completely independent of the business logic.\nIt is deployed in a pod in Kubernetes with a service container and an Envoy container, which is a sidecar implementation.\nComposite Pattern There is a methodology for splitting the frontend into multiple services and making them independently deployable.\nJust like backend microservices, they are separated by function and work in combination.\nIn other words, they become micro-frontends, each of which can be used to compose a flexible UI.\nThis means that the menu bar, header, content, footer, etc. can each be flexibly configured and operated separately from each other.\nMicroservice Connection Pattern Which method should I use to make microservice calls between frontend and backend?\nSynchronous When a request is made, it waits for a response or makes a re-call. (High dependency) Asynchronous You don’t wait for a response to a request and move on to the next thing. You’ll probably need to use a message broker like Kafka. You pass messages to the message broker asynchronously, and the message broker guarantees delivery. An additional issue here is that the message broker must scale to the size of the message processing. (The load issue)\nThis approach would have the advantage of allowing looser coupling and dependencies among the services that will be communicating with each other, controlled by Kafka.\nStorage Separation Pattern Even if you split it up into multiple microservices,\neven in a lull in requests, if you have a single unified database, it’s still going to be busy.\nIn that case, the automatic scaling of microservices is meaningless.\nThe complementary storage separation pattern is that each microservice owns its own data, meaning it only passes data to other services in API responses.\nThe benefits are:\ninformation hiding effect due to obtaining information only through APIs free polyglot storage Reduced data impact due to independent services Distributed Transaction Processing Pattern The distributed transaction processing pattern helps ensure data consistency.\nAs mentioned in Chapter 1, you can use techniques like two-phase commits, but they tend to have performance issues due to lock-ins.\nThe Saga pattern is a pattern for distributed transaction processing that is independent of microservices.\nExample:\ncreate a draft order in Ordering Service and issue an event (end transaction) Customer service checks the provisional order event and looks up the limit Process credit approval if the limit is met Process credit over the limit if the limit is not met order service checks the event issued by customer service and processes it Order authorization Order Rejected Instead of bundling them into one big transaction as above, you can take conformance into each separate local transaction.\nIt would be even better if you could apply them together using a message broker.\nCQRS pattern (Command, Query, Responsibility, Segregation) The CQRS pattern is Command Query Responsibility Segregation.\nIt does not perform CRUD processing on the same DB, but separates them.\nIt is also used to separate view tables and writable tables in the DB to separate query services from writeable services. By separating them, you can reduce the load and reduce latency.\nYou can also apply this method to separate microservices by applying a message broker.\nmicroservices corresponding to Create, Update Delete. a lookup microservice that only holds a View Table in Read. The lookup service might use a higher-performance stack,\nor it might scale instances differently than the command-side service.\nThis CQRS pattern also solves other problems.\nproducts, orders, customers, and shipments are being viewed from the order history side. Microservices in the order history service area have their own storage Respond to each service through event handlers. We get another benefit of loose dependencies and coupling. (?)\nEvent Sourcing Pattern As above, in the Saga and CQRS patterns, you must always be concerned about consistency. To ensure consistency, event messages must be issued all the time, and the application must rip objects and convert them into SQL statements. In this case, it may not be safe to consider many concurrent updates and deadlocks before being processed from the data perspective.\nSo why not just store the state transaction itself? This is the event sourcing pattern. Store state change events directly in an event store. When needed, compute the change transaction from the state’s starting point to the current point in time.\nYou can also reduce the amount of computation by running a batch to finish computing the state.\nThe idea is that the CQRS pattern-based command/inquiry service doesn’t need to handle all the CRUD, just the CR, to process the event store.\nExample:\nevent ID, Type, Object Data (JSON, etc.) are stored in the event store then other services only need to call Read As shown above, you only need to count the accumulated transactions at the application level. It’s amazing.\nIt is very easy to configure with external applications because it clearly stores state transactions.\n","permalink":"https://hongjae.pages.dev/en/posts/ddd_grape_02/","summary":"Jung-heon Han, he became disillusioned with the outsourced developer environment, where he felt like a conveyor belt worker.","title":"Summary: Microservice Development with Domain-Driven Design — Chapter 2"},{"content":" Foreword Jung-heon Han, he became disillusioned with the outsourced developer environment, where he felt like a conveyor belt worker.\nAt first, he enjoyed coding because he felt like he was creating something.\nBut then I became an unenjoyable developer who was forced to meet deadlines and implement features.\nHe became an expert in development methodologies and tried to apply CBD, MDD, and other techniques, but experienced many failures.\nWhat is good software? It needs to support rapid business change, but it also needs to be flexible and agile in design and process so that the developers who create it don’t have to suffer the same fate.\nFirst, we tried to improve our code by writing test code and continuous integration.\nSecond, we thought that paying attention to design quality would follow naturally.\nThen, as MSA in the cloud became a trend, the focus on design quality came naturally.\nIn the end, this book is for beginners who are familiar with the outsourced development scene but want to get into MSA development.\nChapter 1: Secrets of Amazon Business Agility Companies like AWS, Uber, Netflix, and others that dominate one industry of business today have one thing in common: agility.\nso that’s agility.\nTo give you a real-world example,\nAmazon’s shopping mall goes live in less than a second, whereas a typical project takes weeks to months to plan, design, develop, and deploy.\nAmazon’s mall is deployed 1.5 times per second (compared to 1 every 0.66 seconds)\nIf you look at e-commerce shopping malls in my country, the average is about once a week or once every three days.\nThe difference can also be seen as follows\n— Stores that update once every 3 days (11th, auction, etc.)\n— Stores that update once every 0.66 seconds (Amazon)\nThe store that updates once every 0.66 seconds, which is very reasonable, should have the edge.\nIn other words, Amazon feels like a living, breathing, cellular entity.\nThis is the difference in business agility.\n1. Cloud infrastructure Configuring infrastructure in an on-premises environment can be so time-consuming that there are teams dedicated to it.\nBut with the evolution of cloud infrastructure, you can configure your infrastructure with just a few clicks.\nMany fresh startups can create services in minutes like the one above, allowing them to be nimble and agile in their business development.\nBut as usage grows, shouldn’t you be able to increase the performance of your devices, or increase the number of devices? We call this scale-up and scale-out.\nScale-up is a vertical expansion, where you increase the specs of your device.\nScale-out is a horizontal expansion, where you increase the number of devices.\nFor example, to prepare for the influx of traffic during a time sale, a system operator might plan for the following operational scenarios\nincrease the capacity of the time sale service module replicate Time Sale service instances as traffic increases scale up \u0026amp; replicate to appropriate capacity through hands-on \u0026amp; clinical testing This is the difference between monoliths and microservices. In a monolith system, the entire monolith scales when you replicate an instance.\nHowever, in a microservice system, only the specific service that is experiencing heavy traffic is scaled up.\nFrom this point of view, the disadvantages of monolith systems are maximized.\nOn the other hand, each service module can be developed in a different language.\nEach service and repository can be isolated from other services and repositories and can be deployed independently.\nPolyglot: This autonomy of the language used to build a particular service is called a polyglot.\nWhat are the conditions for microservices? Conway’s Law, defined by Melvin Conway, defines the relationship between an organization and the SW it develops.\nIt states that each team is created for the same technology, e.g., a UI, server, and database are needed to create an application.\nUI team Server team DB team Therefore, communication between the three teams is necessary.\nThis team structure increases the cost of communication between teams and delays decision-making.\nSo, how should a microservices team be structured?\nIt should be functionally centered. Functional teams are composed of different roles that can perform a service from start to finish.\nThis is because they have all the necessary skills and capabilities to create a microservice,\nthey are loosely coupled with microservices created by other teams.\nWithin Amazon, these teams are sometimes referred to as cross-functional teams because of their cross-functional nature.\nCross-functional teams are responsible for both development and operations.\nOrganizations that create microservices like this do not seek strong central governance. They don’t enforce adherence to strong central standards or procedures.\nTo draw a real-world analogy, the United States might be organized similarly to the various states in the country.\nEach team finds and applies its own efficient methodologies, tools, and technologies.\nProduct teams choose NoSQL and Node.js for fast search. The contract team chooses Java, Oracle, and Redis for contract services. This process of each service team choosing the right language and repository for their team is called Polyglot Programming and Polyglot Persistence.\nChanging the development lifecycle: product-centric, not project-centric Most traditional development methodologies are project-based, meaning there is a separation between development and operations.\nHowever, microservices development methodology adopts product-centric agile development methodology to flexibly respond to changes.\nIt is developed and deployed in sprints of about two to four weeks to allow for refinement.\nThis approach treats the product as something to be continuously improved and evolved, rather than something to be delivered to the operations organization once the functionality is satisfied.\nChanging the DevOps landscape: Automating infrastructure Automating CI/CD is a big part of leveraging cloud infrastructure and speeding up development. In large organizations, the number of microservices is growing rapidly, which is why Infrastructure as Code (IaC) approaches are gaining traction — treating them as if they were software. Think Teraform, etc.\nStorage is changing: decentralized data management instead of federated storage While the trend used to be toward normalization to keep data organized, storage is now so cheap that there’s no need to cram each store into a small space.\nMicroservices opt for a polyglot storage approach, where they can’t directly call other services’ stores, but only access them via APIs.\nHowever, this structure complicates business processing.\nThere is the issue of data consistency in each microservice’s repository.\nTo handle data consistency, we usually use distributed transaction techniques such as two-phase commit. This is sometimes referred to as Eventual Consistency.\nCompensating transactions can be achieved with a queuing mechanism as shown below.\nEx) Order processing and order cancellation process\norder processing Order event occurs Send order event to Queue Read order event from delivery service shipping processing shipping fulfillment failure Send a failed shipment fulfillment event to Queue Read the failed shipment event from the order service cancel order (compensation transaction) — Changing the way we respond to crises: designing for failure Werner Vogels,\na vice president at Amazon, once said,\nAll software fails.\nTraditional system architectures strive for faultlessness or fail-safe integrity.\nBut it’s easier and more efficient to create a system that can respond quickly to failure than to create a system that never fails.\nAn example is the circuit breaker pattern.\nIt monitors services, and when one goes down or fails,\nit disconnects the services that call it and allows them to respond appropriately.\nNetflix even created a tool called “Chaos Monkey” to intentionally cause failures to check that this elastic architecture is working properly.\n","permalink":"https://hongjae.pages.dev/en/posts/ddd_grape_01/","summary":"Jung-heon Han, he became disillusioned with the outsourced developer environment, where he felt like a conveyor belt worker.","title":"Summary: Microservice Development with Domain-Driven Design — Foreword \u0026 Chapter 1"},{"content":"This is a summary after reading the book Microservice Development with Domain-Driven Design by Jung-Heon Han.\nActually, It’s a book that I’m studying with my colleagues in the company.\nI will summarize the book from the introduction to chapter 10.\nThe table of contents is shown below.\nTable of Contents\nChapter 01: Secrets of Amazon Business Agility 1.1 Successful Internet companies and business agility 1.2 What are microservices? 1.3 What are the conditions for microservices? Chapter 02: Understanding MSA 2.1 The Reactive Manifesto: Desirable Attributes of a Modern Application 2.2 The shift from tightly coupled to loosely coupled architectures 2.3 The external and internal architecture of microservices 2.4 MSA Components and MSA Patterns Chapter 03: Microservice Application Architecture 3.1 Where is the business logic? — Separation of concerns 3.2 Hexagonal vs. Clean Architecture 3.3 Defining the internal structure of a microservice Chapter 04: Microservices and the Agile Development Process 4.1 Domain-Driven Design and Microservices 4.2 Agile design/development process Chapter 05: Designing Microservices 5.1 How to Elicit Microservices 5.2 Design in DDD 5.3 Strategic Design in DDD 5.4 Event Storming to Derive Microservices 5.5 Detailed Design of Microservices 5.6 Domain Modeling Chapter 6: Case Study — Microservice Elicitation and Architecture 6.1 Defining Requirements 6.2 Event Storming to Elicit Microservices 6.3 Define the External Architecture 6.4 Defining the Internal Architecture 6.5 Architecture composition with JHipster Chapter 07: Case Study — Backend Microservice Implementation 7.1 Developing the Book Borrowing Microservice 7.2 Developing the User Microservice 7.3 User Microservice — Implementing Point Management Functionality 7.3.3 Implementing calls to the points earning, payment functions Chapter 08: Developing backend microservices using the CQRS pattern 8.1 Developing the Book Microservice 8.2 Book Catalog Microservice Chapter 09: Case Study — Performing the Demonstration 9.1 Running the Service Behavior Environment 9.2 Get the Gateway and Microservice Working 9.3 Testing the Scenario on the Web Screen Chapter 10: Application Integration and Deployment 10.1 Defining the Integration and Deployment Pipeline 10.2 Configuring a GCP Deployment Environment 10.3 Deploying Applications with JHipster And with that, I’ll begin my humble review. :)\n","permalink":"https://hongjae.pages.dev/en/posts/ddd_grape_00/","summary":"This is a summary after reading the book Microservice Development with Domain-Driven Design by Jung-Heon Han.","title":"Summary: Microservice Development with Domain-Driven Design — review intro"},{"content":"What makes me live in the moment? From my own experience,\nI think the awareness of death allows me to grow mentally.\nIf I don’t work today, I won’t eat tomorrow.\nI wouldn’t want to live a life where the place I sleep today won’t be there tomorrow.\nIn my experience, death is\nI think it’s a device that forces you to live in the here and now, to be immersed.\nWhenever I’m reminded that life is a one-time ticket, I though myself like this.\n‘Does that make life more valuable?’\nWhat kind of person am I and how should I live?\nI don’t know why l’ve lost my way lately.\nI would want to be faithful to what I have right now and work on it.\nThanks for reading my humble thoughts.\n","permalink":"https://hongjae.pages.dev/en/posts/240330_what-makes-me-live-in-the-moment/","summary":"From my own experience, I think the awareness of death allows me to grow mentally.","title":"What makes me live in the moment?"},{"content":"AWS Lambda Summary, as I Known AWS Lambda runs immediately based on events. You can execute Lambda directly, or you can subscribe to the event and execute the Lambda asynchronously.\nCloudWatch + Lambda Respond to log events (and even register specific patterns) in AWS CloudWatch S3 + Lambda Responds to specific events in AWS S3 (image upload, etc.) API Gateway + Lambda Responds to HTTP requests coming from AWS API Gateway using lambda functions SQS + Lambda Check events from AWS SQS, etc. and process them asynchronously using lambda functions Pros You only pay for what you use (cost savings) Compared to servers that run continuously, AWS Lambda that run only when used are charged proportionally to the number of executions. Very cheap at $0.2 per million executions Auto-scale-up, high availability Dynamically allocates resources and handles scaling as requests come in You may be charged more for more requests Rapid product launch You can focus on your code without having to worry about server management Cons Cold start (time it takes for lambda to wake up) Lambda is normally sleeping and wakes up to do its job when you run it. This can cause a delay of up to 1 second Not suitable for services where latency is unacceptable (real-time services) Dependent on server provider (AWS, GOOGLE, etc.) Not easy to move platforms because it\u0026rsquo;s platform dependent. Bad for long time consuming tasks (uploading videos) Limited memory and time available for lambda function calls. Large features need to be implemented in small pieces Difficult to reuse code Because each function is independent, you end up duplicating logic that you use in common Lambda Layer Among the disadvantages listed above is the difficulty of reusing code. This is a technique to solve this problem.\nYou can create layers of common parts and let lambda functions share them.\nThey can be shared not only between the same account, but also between different accounts.\nExplore Lambda Layers\nProvisioning Concurrency This is a technique to solve the problem of cold start of AWS Lambda.\nIt can be used when concurrency and latency are important, as it prepares lambda functions for execution in advance.\n","permalink":"https://hongjae.pages.dev/en/posts/230504_whats_included_in_aws_lambda/","summary":"AWS Lambda runs immediately based on events. You can execute Lambda directly, or you can subscribe to the event and execute the Lambda asynchronously.","title":"AWS Lambda Summary, as I Known"},{"content":"Operating System is software that users need to use a computer. The operating system acts as an intermediary between the hardware and software, managing resources, providing a user interface, and facilitating communication between different components of the computer system.\nA Typical Operating System is: Windows, Linux, Mac OS Windows Windows, developed by Microsoft, is the most widely used OS for personal computers, known for its user-friendly interface and extensive software compatibility. Popular in both home and office environments, it powers a range of devices from desktops to tablets.\nLinux Linux is an open-source operating system prized for its flexibility, security, and robust performance. It’s especially popular among developers and server administrators due to its customization capabilities and wide variety of distributions.\nMac OS Mac OS, developed by Apple, is known for its sleek design, seamless integration with other Apple products, and strong focus on user experience. It’s a favorite among creative professionals for its powerful multimedia tools and reliable performance.\nthe structure of a computer (simplified) If we simplify the structure of a computer, it looks like this as a below: simplify the structure of a computer\nProcessor usually means CPU. When we look at main memory, it\u0026rsquo;s divided in ROM and RAM.\nROM (Read-Only Memory) Non-volatile. it contents are still there when the power is turned off. uses a small part of memory. (just several KB)\nRAM (Random Access Memory) Volatile. when the power is turned off, everything in memory is wiped. uses a lot of memory. (several MB to several GB)\nHow does my computer turn on? Bootloader boots my computer When the computer is powered on, the processor (CPU) reads the contents in the ROM. in the ROM, Power-on self-test (POST) and bootloader are stored. when it is powered on, POST is the first program to checks the status of the current computer. After the POST operation is completed, the bootloader runs. Bootloader finds the Operating System stored on the hard disk, and brings it to the main memory (RAM). The process of this bootloader is called booting. What the bootloader is doing\nIn the above state, operating system is ready to perform. operating system ends when the computer powered off.\nkernel and command interpreter (shell) Operating system is largely divided into kernel and command interpreter (shell).\nKernel is core of operating system. kernel stores everything the operating system does.\nThe command interpreter is, it interprets commands that the user requests from the kernel (operating system). Request the kernel and output the result.\nUsers can request commands from the operating system in a way such as graphical user interface (GUI) or command line interface (CLI), such as fetching file lists in the current directory, executing programs, and checking disk capacity.\nLocation of the operating system Application is created for a specific operating system.\nTherefore, one application cannot run on different operating systems. (The same hardware has nothing to do with it.)\nFor example:\nif you move a program that Windows runs to Linux, it won\u0026rsquo;t run.\nShape of application and OS\nThe application runs on the operating system as shows in the figure above.\nThat is, only the resources provided by the operating system may be used without using the hardware resources directly.\nThe operating system is similar to the government in the real world.\nHere\u0026rsquo;s what the government does.\nResources such as land, manpower, and budget exist and must be used efficiently. For efficient resource management, it is divided into departments such as the administration, the Ministry of Land, Infrastructure, and Transport, the Ministry of Education, and the Ministry of National Defense. Each department is asked and appropriately distributes resources to the people. Here\u0026rsquo;s what the operating system does.\nHardware resources such as processes, memory, and hard disks exist, and they must be used efficiently. For resource management, functions such as process management, memory management, disk management, network, and security are divided. Each function is performed according to the request of the applications and resources are appropriately distributed. ","permalink":"https://hongjae.pages.dev/en/posts/211022_whatisoperationsystem/","summary":"The operating system acts as an intermediary between the hardware and software, managing resources, providing a user interface, and facilitating communication between different components of the computer system.","title":"What is the Operating System?"},{"content":" it\u0026rsquo;s homogeneous Arrays can only store elements of the same data type. integer arrays can only store integer variable, String arrays can only store String variable.\nit\u0026rsquo;s immutable Arrays can\u0026rsquo;t be resized. ex) Can\u0026rsquo;t change 5 lengths to 7\nif you want to resize length, then you need to create and initialize another Array. it\u0026rsquo;s Object it\u0026rsquo;s reference type, and it\u0026rsquo;s not primitive type. This means that the array does not store the actual data directly,\nand rather references the memory address where the data is stored.\nan array is an object of a dynamically created class. Java also can store primitive values or objects in arrays.\nwe can also create single-dimensional or multidimensional arrays in Java (same as C/C++).\nJava arrays implement the Serializable and Cloneable interfaces. Serializable interface\nThe Serializable interface makes an object serializable.\nThat is, it converts the state of an object into a stream of bytes so that it can be stored in a file or sent over the network.\nserialization: it convert from Object data of JVM Memory to bytes deserialization: Converting serialized byte data into objects that persist in the JVM. Things to watch out for when using Java serialization in practice\nProblem of changing class structure when deserializing Throwing java.io.InvaildClassException when a class member changes and the SUID (serialVersionUID) does not match Use default hash value of class if SUID is not declared Sometimes even the same SUID can cause problems Capacity issues Serializing objects of this type, such as classes or lists within a class, can be bloated because it has meta information about all the classes it references. With minimal metadata, such as JSON, it can be at least 2x and up to 10x larger for the same data than the tested format. Compatibility issues Only Java can handle it, which is inconvenient. Cloneable interface\nThe superClass of every class is java.lang.Object Object method, which implements the clone method to allow cloning of any of its children\u0026rsquo;s classes. The ability to copy a child\u0026rsquo;s object can be accomplished by overriding the clone() method of java.lang.Obejct. However, if the child class does not have cloneable functionality, a CloneNotSupportException is thrown. Therefore, the target child class that is being cloned must implements cloneable. (Template patterns can be extended) What\u0026rsquo;s included in Arrays? Contiguous memory space index and memory addresses ","permalink":"https://hongjae.pages.dev/en/posts/210124_whats_array_in_java/","summary":"Arrays can only contain the same type. and to manipulate the size of an array, you need to create a new","title":"Summary about Arrays"},{"content":" Many people suffer from digestive issues. I am one of them.\nIn my country (South Korea), people often take cabagin to help with digestive problems.\nIt\u0026rsquo;s a digestive aid extracted from cabbage, and it comes in the form of a dietary supplement.\nTherefore, we think that indigestion -\u0026gt; cabagin -\u0026gt; overcome indigestion.\nHowever, this is not the case. If you take cabagin every time you have a digestive disorder,\nyou will gradually become unnecessary due to the passive digestive behavior of your organs,\nand you will be prone to \u0026ldquo;gastric dilatation\u0026rdquo; a condition in which the stomach stretches downward.\nTherefore, instead of indigestion -\u0026gt; cabagin -\u0026gt; digestive disorder, exercise should be done to contract/relax the entire body to help relax the muscles around the esophagus/organs.\nHowever, if you\u0026rsquo;re suffering from reflux esophagitis, you\u0026rsquo;ll need to take medication.\nThere are several medications available, including Vonoplazan Fumarate.\n","permalink":"https://hongjae.pages.dev/en/posts/210108_about-digestive-issues-and-esophagitis-copy/","summary":"if you\u0026rsquo;re suffering from reflux esophagitis, you\u0026rsquo;ll need to take medication. There are several medications available, including \u003cstrong\u003eVonoplazan Fumarate\u003c/strong\u003e.","title":"About digestive issues and esophagitis"},{"content":" I like a waves.\nIn Korea, waves are called pado(波濤).\nWaves are ripples created by wind in the ocean, lakes, and rivers.\nWaves in the sea can travel thousands of kilometers before hitting land.\nI am no different, Just make waves.\nI am constantly moving and evolving. shaped by the winds of my experiences.\n","permalink":"https://hongjae.pages.dev/en/posts/210104_firstpost/","summary":"I like a \u003cstrong\u003ewaves\u003c/strong\u003e. In Korea, waves are called \u003cstrong\u003epado(波濤)\u003c/strong\u003e.","title":"My first blog post"}]