전체 글 83

[Docker] build 시 apk ssl certificate verify failed, apk permission denied 발생 시

docker build 시 apk ssl certificate verify failed 혹은 apk permission denied 발생tls_post_process_server_certificate:certificate verify failed:ssl/statem/statem_clnt.c:2091:fetching https://dl-cdn.alpinelinux.org/alpine/v3.20/community: Permission denied alpine 이미지 작업에서 apk add 사용 중에 발생RUN sed 's/https/http/g' -i /etc/apk/repositories​ dockerfile에 위 명령어 추가하여 https를 http로 변경하면 정상처리

Infrastructure 2024.09.26

헥사고날 아키텍쳐 - 도메인 헥사곤으로 비즈니스 모델링(1)

도메인 헥사곤으로 비즈니스 모델링엔티티를 활용한 문제영역 모델링도메인 엔티티의 순수성문제영역 모델링의 주요 초점은 최대한 실제 시나리오를 코드로 변환하는 것, 비즈니스 요구사항을 이해하고 코드로 변환하는데 실패하면 결과적으로 비용의 손실이 발생할 수 밖에 없다문제영역 모델링의 핵심은 엔티티를 만드는 것이다. 엔티티가 비즈니스 요구사항과 밀접한 관계를 가져야 하기 때문에, 비즈니스 관련 코드와 기술 관련 코드가 혼동되는 것을 방지 해야한다.(기술적: 소프트웨어 맥락에서만 존재하고 의미가 있는 것)헥사고날 아키텍처는 전통적인 비즈니스 문제를 해결하려는 프로젝트에 초점이 맞춰져 있기 때문에, 새로운 개발 프레임워크와 같은 순수하게 기술적인 프로젝트에는 최선의 접근 방법이 아닐 수도 있다.도메인 엔티티는 비즈니..

프로그래밍 2024.08.18

헥사고날 아키텍쳐 - 프레임워크 헥사곤

프레임워크 헥사곤소프트웨어와 통신할 수 있는 기술을 결정한다. 통신은 두 가지 형태로 발생할 수 있다.드라이빙 방식(Driving): 입력 어댑터(Input Adapter)를 사용한다.드리븐 방식(Driven): 출력 어댑터(Output Adapter)를 사용한다.드라이빙 오퍼레이션과 입력 어댑터드라이빙 오퍼레이션은 소프트웨어에 동작을 요청하는 것이다.웹 애플리케이션에서 사용자가 버튼 눌러 폼을 제출하는 경우외부 시스템에서 REST API로 애플리케이션에 데이터를 요청하는 경우외부 시스템에서 MQ로 메세지를 보내는 경우이러한 API는 외부 엔티티가 시스템과 상호작용하고, 외부 엔티티의 요청을 도메인 애플리케이션으로 변환하는 방법을 정의한다.드라이빙이라는 단어는 외부 엔티티들이 시스템의 동작을 유도하기 때..

프로그래밍 2024.08.04

헥사고날 아키텍쳐 - 애플리케이션 헥사곤

애플리케이션 헥사곤애플리케이션 특화 작업을 추상적으로 처리하는 곳, 기술 관심사를 직접 다루지 않기 때문에 추상적인 것을 이야기한다. 도메인 비즈니스 규칙에 기반한 소프트웨어 사용자의 의도와 기능을 표현한다.유스케이스도메인 제약사항을 지원하기 위해 시스템의 동작을 소프트웨어 영역 내에 존재하는 애플리케이션 특화 오퍼레이션을 통해 나타낸다.엔티티 및 다른 유스케이스와 직접 상호작용하고 그것을 유연한 컴포넌트로 만들 수 있다.자바에서는 인터페이스로 정의된 추상화로 나타낸다.public interface RouterViewUseCase { List getRouters(Predicate filter);}입력 포트유스케이스 인터페이스를 구현하는 것이 입력 포트의 역할 이다. 애플리케이션 수준에서 유스케이스에..

프로그래밍 2024.08.04

헥사고날 아키텍쳐 - 도메인 헥사곤

도메인 헥사곤실 세계 문제를 이해하고 모델링하는 활동스타트업 같은 개발자나 도메인 전문가 모두 시스템의 목적에 대한 명확한 비전을 갖고 있지 않거나,문제 영역이 존재하고 도메인 전문가들이 분명하게 알고 있는 상황에서 문제 영역을 엔티티, 값 객체로의 변환 방법을 파악하지 못하면 잘못된 가정을 기반으로 구축되게 될 것이다.이러한 점은 소프트웨어가 간단하게 시작해서, 기반 코드가 커짐에 따라 기술 부채가 누적되고 유지 보수가 더 어려워지는 이유 중 하나로 여겨진다.엔티티식별자 (Identifier): 엔티티는 고유한 식별자를 가지고 있으며, 이 식별자를 통해 다른 엔티티와 구분된다. 동일한 엔티티는 시간이 지나도 동일한 식별자를 유지한다.변경 가능성 (Mutability): 엔티티는 시간이 지남에 따라 상태..

프로그래밍 2024.08.04

헥사고날 아키텍쳐

포트와 어댑터 아키텍쳐라고도 불림 메인 아이디어비즈니스 코드를 기술 코드로부터 분리하는 것비즈니스 코드에 피해를 주지 않고 기술 코드 변경이 가능해야 한다핵심 도메인 로직을 외부 인터페이스(입출력, DB, 사용자 인터페이스 등)으로 부터 분리함으로 달성도메인 헥사곤소프트웨어가 해결하기를 원하는 핵심 문제를 설명하는 요소의 결합, 이러한 요소들은 기술에 구애 받지 않는 형태로 표현되어야 함구성 요소엔티티 - 식별자를 할당할 수 있는 것값 객체 - 엔티티들을 합성하기 위한 불변 객체애플리케이션 헥사곤도메인 헥사곤에서 나오는 비즈니스 규칙을 사용, 처리, 조정비즈니스 측면과 기술 측면 사이에서 양쪽과 상호작용하는 중개자 역할프레임워크 헥사곤애플리케이션 기능의 노출 방법을 결정, 예를 들면 REST, gRPC ..

프로그래밍 2024.08.04

@EnableScheduling 설정하지 않았는데 Schedule 동작 시

@EnableScheduling을 설정하지 않았는데도 Schedule이 동작하고 있을 때 한번 확인해보세요. 전체적으로 라이브러리를 훑어봤는데 Redis Config부분에서 발견되었습니다. spring-session-data-redis 사용하고, Redis 활성화 시에 RedisHttpSessionConfiguration를 사용하게되는데 아래와 같이 @EnableScheduling이 적용되어 있습니다. @Configuration @EnableScheduling public class RedisHttpSessionConfiguration extends SpringHttpSessionConfiguration implements EmbeddedValueResolverAware, ImportAware { pri..

Spring 2024.01.17

[Docker] 2. 컨테이너 관리

컨테이너 실행하기 컨테이너 실행 명령어는 다음과 같다 docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...] 옵션 설명 -d --detach Detached mode(백그라운드 모드) -p --publish 호스트와 컨테이너의 포트 연결(포트 포워딩) -v --volume 호스트와 컨테이너의 디렉토리 연결(파일을 호스트에 바로 저장, 마운트개념) --rm 프로세스 종료 시 컨테이너 자동 제거 --name 컨테이너 이름 지정 -i --interactive 표준 입력(stdin)을 활성화, bash 사용시 사용 -t --tty TTY 모드를 사용, bash 사용시 사용, 해당 명령을 사용하지 않으면 명령은 할 수 있겠지만 쉘이 표시되지 않음 Ubuntu 1..

Infrastructure 2022.06.17

[Docker] 1. 설치

linux / mac / window 와 상관없이 설치 가능하다 https://docs.docker.com/desktop/mac/install/ https://docs.docker.com/desktop/windows/install/ https://docs.docker.com/desktop/linux/install/ 도커는 리눅스 컨테이너이므로 mac / window의 경우 가상머신에 설치된다. 그러므로 하드웨어나 OS가 가상머신을 지원하지 않는 다면 동작하지 않을 수 있음 설치 확인 설치 후 버전 명령어로 설치를 확인 해보기 docker version 결과 Client: Cloud integration: v1.0.22 Version: 20.10.12 API version: 1.41 Go version: ..

Infrastructure 2022.06.17

[알고리즘-기초] Greedy, 탐욕법

부분해가 전체해가 될 수 있는 문제면 사용할 수 있는 솔루션이다. 최소값을 찾는다고 할 때 위와 같은 문제면, 탐욕법이 적합하지 않다. 부분해를 따라가다가 지역적인 최소값을 찾게되지만 전체해가 되진 않기 때문이다. 위와 같이 탐욕법으로 최소값을 찾다가다 보면 전체해가 되는 문제여야 된다. 문제를 해석하고 부분해가 전체해가 되는지를 파악하는게 중요하다. 참고 문제 - 최소한의 동전으로 금액을 완성시키자 1. [10, 100, 500] 동전으로 710원 만들기 500 x 1 -> 210원 남음 100 x 2 -> 10원 남음 10 x 1 -> 0원 총 4개 사용 위와 같이 주어지면 탐욕법이 적용 되는 듯 보인다 하지만 2. [10, 30, 40, 50] 동전으로 70원 만들기 50 x 1 -> 20원 남음 ..