일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- BFS
- 숫자 블록
- jwt 표준
- 프로그래머스
- branch 전략
- 검색어 추천
- piplining
- 쿠키
- prg 패턴
- gRPC
- 카카오
- 트랜잭샨
- 깊게 생각해보기
- 셀러리
- spring event
- 디버깅
- 좋은 코드 나쁜 코드
- 코드 계약
- 레디스 동시성
- 수신자 대상 다르게
- 알람 시스템
- 백준
- docker
- 결제서비스
- 이분탐색
- 완전탐색
- 구현
- 누적합
- 객체지향패러다임
- AWS
- Today
- Total
목록개발 (111)
코딩관계론
애그리거트 거크트의 목적 애그리거트 거크트(Aggregate Root)는 복잡한 도메인을 이해하고 효율적으로 관리하기 위한 핵심 개념입니다. 이것은 상위 수준에서 도메인을 조망하고, 이를 효율적이고 관리 가능한 단위로 나누기 위한 목적이 있습니다. 또한, 모델의 이해를 돕는 것뿐만 아니라 일관성을 관리하고 도메인의 복잡도를 낮춰 유지보수 시간을 최소화하는 역할을 수행합니다. 애그리거트 특징 애그리거트에 속한 구성 요소는 주로 함께 생성되고 함께 제거되는 특성을 가지고 있습니다. 이는 애그리거트가 단일 논리적 단위로 작동하며, 그 안의 모든 요소가 함께 일관된 상태를 유지할 수 있도록 해줍니다. 애그리거트 설정 방법 애그리거트를 설정할 때 가장 중요한 원칙은 도메인 규칙과 요구사항을 기반으로 하는 것입니다..
아키텍처는 전형적으로 '표현', '응용', '도메인','인프라스터럭처'의 영역으로 구성된다. 각각의 역활 및 코드에 대해서 알아보겠다. 표현영역 표현 영역의 역활은 http 요청이 오면 해당 요청을 응용 영역이 원하는 형태로 가공한 후 응용 영역에 전달한다. 예를 들면 음식 주문 요청이 들어오면 그것을 DTO로 변환한 후 응용 영역에 전달하고 응용에서 처리한 결과를 사용자에게 전달한다 package presentation type OrderController struct { // 필요한 의존성 주입 AppService application.OrderAppService } func (oc *OrderController) HandleOrderRequest(requestDTO OrderRequestDTO) {..
Protocol Buffer는 google 사에서 개발한 구조화된 데이터를 직렬화하는 기법입니다. 직렬화(Serialization)란 데이터를 메모리에 저장된 형식에서 다른 형식으로 변환하는 작업을 의미합니다. 프로그램에서 사용되는 데이터는 변수, 객체 등의 형태로 메모리에 저장되어 있지만, 이 데이터를 네트워크를 통해 전송하거나 파일로 저장하기 위해서는 텍스트 형식 또는 이진 형식으로 변환해야 합니다. 이때, Protocol Buffer는 이진 형식의 직렬화를 수행하여 데이터를 효율적으로 표현합니다. Proto File 1)Message and Field Proto File에서는 주고 받는 data들을 message 라는 것으로 정의합니다. 이 메시지는 여러가지 타입의 필드로 구성됩니다. 아래 예시로 ..
등장요인 server-client model 예전에는 프로그램은 하나의 메인 프레임에서 동작하는 모노롤틱 구조로 설계되었습니다. 따라서 모든 기능이 한 공간에서 구동되다 보니 지금처럼 네트워크 통신이 그게 중요하지 않았습니다. 기술 발전에 따라 소형 컴퓨터 장비들이 등장하게 되고, 기업 입장에선 매우 고가인 메인 프레임워크를 비교적 저가의 서버로 대체하고 싶어했습니다. 하지만 메인 프레임워크의 고사양 서비스를 저사양 서버에서 그대로 제공하기엔 한계가 존재했습니다. 이 때문에 메인 프레임워크 기능을 워크스테이션 서버로 분산시키고, 네트워크 연결로 서비스하는 방식을 채택하게 됩니다. 흔히말하는 Server-client model입니다. 이처럼 서버 간 혹은 서버와 개인 PC간 네트워크 연결/통신이 중요해지면..
문제 이해하기 숫자 0이 적힌 블록들에 다른 숫자가 적힌 블록들을 설치하려고 한다. 블록을 설치하는 규칙은 다음과 같습니다 블록에 적힌 번호가 n 일 때 가장 첫 블록은 n * 2번 째 도로의 위치에 설치, 그 다음은 n * 3, 4 ...도로의 위치에 설치합니다. 이 때 기존에 설치된 블럭이 존재한다면 해당 블록을 빼고 새로운 블록을 설치합니다. 각 블록은 오름차순으로 주어집니다. 또한 블럭의 숫자는 1 ~ 10,000,000까지의 숫자만 존재합니다. 문제 해결 방법 1. 도로의 입장에서 생각해보면 도로에 설치될 수 있는 블럭은 도로의 위치의 약수입니다. 예를 들면 10번 도로의 위치에는 1, 2, 5의 블록이 설치될 수 있다. 10의 블록이 설치될 수 없는 이유는 10(도로)은 10(블럭) * 1이기..
문제 이해 과제를 끝내는 순서대로 배열에 담아 반환하는 문제입니다. 여러 과제가 주어지는데, 가장 빨리 시작해야 하는 과제부터 선택하여 수행하고, 새로운 과제를 시작할 시간이 되면 기존에 진행 중이던 과제는 멈춥니다. 그리고 현재 수행 중인 과제가 다음 과제의 시작 시간보다 빠르게 끝나면 멈추었던 과제를 이어서 수행합니다. 멈추어 둔 과제를 실행하는 순서는 최신에 멈춘 과제부터 실행합니다. 문제 해결 방법 설명 1. 선택한 과제를 다음 과제를 시작하기 전까지 끝낼 수 있을까? 먼저 초로 단위를 통일했습니다. 해당 초를 정렬해줌으로써 수행하고 있는 과제와 다음에 수행해야하는 과제의 시간을 알아낼 수 있었습니다. 현재 과제의 시작 시간과 과제(A)를 끝내기까지 요구되는 시간(B)과 다음 시작 시간(C)을 알..
[문제 설명] A나라에서 발사한 미사일의 구간이 (s, e)로 주어지고, B나라는 최소한의 요격 미사일로 A가 날린 미사일을 요격해야 한다. B가 사용하는 최소한의 미사일을 개수를 찾는 문제다. [해결 방법] 저는 이 문제를 풀기위해 그리디 알고리즘을 사용했습니다. 그리디 알고리즘을 사용한 이유는 다음과 같습니다. 우리가 원하는 답은 최소한의 요격 미사일 개수 입니다. A가 날린 미사일의 위치를 모두 알 수 있으니, 우리는 미사일의 공통된 구간을 찾아서 요격 미사일을 날려주면 원하는 답을 찾을 수 있습니다. 코드 # Copyright 2023 bae # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use t..
소개안녕하세요! 이번에는 Celery를 사용한 비동기 프로그래밍에 대해 알아보겠습니다. 최근에 업데이트한 프로그램에서 Celery를 도입하여 작업을 비동기적으로 처리하게 되었는데요, 이를 통해 사용자가 프로그램을 커스텀하게 구성할 수 있게 되었습니다. 우선, 비동기 프로그래밍이란 CPU-bound 작업과 I/O-bound 작업을 구분하여 처리하는 방식을 말합니다. 이를 통해 시스템의 성능을 향상시킬 수 있습니다. 이번에는 이러한 비동기 프로그래밍을 구현할 때 사용한 Celery에 대해 자세히 알아보겠습니다. Celery는 Python 기반의 Task Queue 라이브러리 중 하나로, 비동기적으로 작업을 처리할 수 있습니다. 이를 통해 CPU-bound 작업과 I/O-bound 작업을 효율적으로 처리할 수..
비동기 처리의 개념과 필요성비동기 처리는 순차적으로 처리하는 것이 아니라, 요청이 발생한 순서와 상관 없이 결과를 반환하는 방식을 말합니다. 예를 들어, 웹 어플리케이션에서 사용자의 요청에 대한 처리가 비동기적으로 이루어지면, 서버는 해당 요청을 받은 후 다른 작업을 수행하다가 해당 요청이 완료되면 그 결과를 반환하는 방식으로 동작합니다. 이를 통해 서버의 자원을 효율적으로 사용할 수 있고, 사용자에게 더 빠른 응답이 가능해집니다. 비동기 처리의 필요성은 크게 두 가지로 볼 수 있습니다. 첫째, 대규모 트래픽이 발생하는 웹 서비스에서는 많은 요청이 동시에 발생할 수 있습니다. 이 경우 요청을 순차적으로 처리하면 응답 시간이 길어질 수 있습니다. 따라서 비동기 처리를 통해 대량의 요청을 빠르게 처리할 수 ..
문제 이해하기 판매원 A가 칫솔을 판매하면 판매한 금액의 10프로가 판매원 A의 상관인 B에게 분배되고, B의 상관인 C에게 분배되는 형태의 판매망을 운영하고 있습니다. 이 때 조직 내 누가 얼만큼의 이득을 가져갔는지 알고자하는 문제였습니다. 문제 해결 방법 설명하기 조직 내 누가 얼마만큼의 이득을 가져갔는지를 파악하기 위해서는 각 판매원이 판매한 금액을 추적해야 합니다. 예를 들어, 판매원 A가 100만원짜리 칫솔을 판매하면, A는 100만원의 10%인 10만원을 B에게, B는 10만원의 10%인 1만원을 C에게 주어야 합니다. 따라서 이 판매망에서 각 판매원이 얼마만큼의 이득을 가져가는지를 계산하려면, 각 판매원이 판매한 금액을 추적하고, 이를 기반으로 각 판매원이 상위 조직원에게 주는 이득을 계산하..
문제 이해하기 양의 정수 n을 k진수로 변환한 후, 다음의 네 가지 규칙에 맞는 소수를 찾는 문제입니다. 0P0 형태의 소수: 양쪽에 0이 있는 소수 P0 형태의 소수: 오른쪽에만 0이 있는 소수 0P 형태의 소수: 왼쪽에만 0이 있는 소수 P 형태의 소수: 양쪽에 0이 없는 소수 예를들면 437674이라는 십지수 정수를 3진수로 변환하면 "211020101011"이 됩니다. 이 숫자들 중에 규칙이 적용되는 숫자를 찾으면 2110(P0 조건) 011(0P 조건), 020(0P0 조건)이 있어 답이 3이 됩니다. 문제 해결 방법 설명하기 1. 10진수를 k진수로 변환할 수 있어야합니다. 10진수에서 n을 k 진수로 변환하는 방법은 아래와 같습니다. n을 k로 나눈 몫과 나머지를 구합니다. 해당 나머지를 가..
문제 이해하기 이진트리를 수로 표현하는 문제입니다. 이진트리의 노드를 가장 왼쪽 노드부터 가장 오른쪽 노드까지, 왼쪽에 있는 순서대로 살펴보고, 더미 노드인 경우 문자열 뒤에 0을 추가하고, 더미 노드가 아닌 경우 문자열 뒤에 1을 추가합니다. 마지막으로 문자열에 저장된 이진수를 십진수로 변환합니다. 문제의 예시인 42를 설명해보자면, 42를 이진수로 변환하면 101010이 됩니다. 이는 완전이진포화트리가 아니기에 0101010으로 변환됩니다. 하위 리프노드에 더미노드가 추가 되야 했지만, 카카오 예시에선 생략되어 있는 모습입니다. 문제 해결 방법 설명하기 1. 이진수를 포화 이진트리로 만들 수 있어야 합니다. 주어진 정수를 이진수로 변환하여 포화 이진트리를 만드는 것이 요구되고, 이때 0을 삽입해야 합..