목록분류 전체보기 (253)
개발일기

목표 :) Jenkins build를 사용하여 bucket에 Jar파일을 업로드한다. Auto Scaling이 되어있는 템플릿 ec2 서버에 jar 파일을 마운트하여 각각의 jar파일들을 EC2에 생성된다. 그 후, ec2 생성 시, jar파일을 빌드되게 만들어준다. 구동 후 응답 받은 값이 특정 상태 값이면 Auto Scaling 통해서 띄워준 서버를 테라폼을 통해서 ec2 서버를 끈다. 준비 과정 :) Jenkinsfile 생성 전, 준비 과정 1. 중요한 값들이나 변경사항이 있는 부분들은 Jenkins 설정을 통해서 json 변수로 넣어준다. 2. 멀티 모듈이기에 각각의 서비스에 따른 빌드를 해주기 위한 스크립트를 작성해준다. 3. aws bucket접근하기 위해서 aws credential 설정..
GPT 결제 관련항목 ChatGPT Team구독 GPT API 연동 ChatGPT 개인 구독비용 구조한사람 당 $25/월(Team 기준)(34,000원)사용량 기반 과금(token 수에 따라)인당 20$/월 (27,000원)소규모 사용 시가격이 있음훨씬 저렴함 , 서버 구축 및 초기 세팅 비용 + 지속적인 관리 비용이 있다.TEAM저렴 및 개인으로 사용사용량 비교단순한 고정비 관리트래픽 많으면 비용증가 위험단순한 고정비 관리커스터마이징 유연성제한적매우 높음(프롬프트/세션 설계 가능)제한적사내 데이터 연동X 불가가능 (RAG, DB연동 등)X 불가GPT 모델 및 성능GPT-4o커스텀하여 사용 가능GPT-4.5ChatGPT Team 기준 한달 $25 * 6 = $150달러ChatGPT 개인 구독 한달 $2..
사실 지금 회사 프로젝트 구조는 테스트 코드를 짜기에는 적합한 구조는 아니다. 하지만 그럼에도 불구하고 테스트 코드를 작성하였다. 내가 테스트 코드를 작성한 몇가지 이유는 아래와 같다.1. 부동산 관련 세금 정산은 오차가 있으면 안된다. 반드시, 검증을 통해 값이 올바르게 사용자에게 보여주는 지 확인이 가능해야 한다.2. 특정 코드를 수정하면 다른 코드까지 사이드 이펙트가 번질 확률이 있다. 3. 해당 코드는 한번 작성하면 부동산 정책이 바뀌지 않는 한 코드를 다시 작성할 이유가 없으며 추후에도 검증 코드를 리팩토링하여 재사용할 수 있다.4. 우리가 원하는 MSA구조로 리팩토링 할 경우, 기존에 가지고 있는 테스트 코드를 리팩토링하여 활용할 확률이 있다. 위에와 같은 이점 때문에 나는 테스트 코드를 작..
어제 배포 중, 우리 회사 서비스는 Spring Cloud Gateway를 사용해서 외부 API를 호출하는 방식이 아닌, RestTemplate 통해서, 호출해주는 방식을 사용하고 있다. 그러다 보니, 인증서를 통해서 HTTPS 서버의 SSL 인증서를 검증하지 못하여 아래와 같은 에러가 발생하였습니다. javax.net.ssl.SSLHandshakeException: PKIX path building failed:sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 오류에 대한 조치는 Dockerfile에 인증서를 추가해주는 방식으로 진행하였습니..
해당 오류는 환경변수에서 db에 jdbc:mysql:// 접두사 없이 그냥 mysql 디비 접속 정보를 넣어버렸기때문에 발생한 에러였다.

오류 원인은 회사에서 배치를 통해 자동으로 마켓을 여러개 오픈 해주는 로직이 있는데, 해당 부분이 비동기로 설정되어 있기 때문에 한번에 여러 메시지가 돌며 push 날릴 수 있는 것을 간과해서 발생한 문제였습니다. 간단한 예시로 Sequence 다이어그램으로 표시하면 아래와 같습니다.응답을 반환하는 과정은 생략했습니다. 왜냐면 notification 메시지에 유사한 title, content, notification Tag로 조합이 전달되면 FCM(Android)에서는 중복 알림으로 간주하고 기존 알림을 덮어씌웁니다. 해당 문제가 발생하였기 때문에 tag를 설정해줌과 동시에, id값도 설정해주었습니다. makeMulticastMessage 코드public MulticastMessage makeMu..

같이 하시는 분과 레이어드 형식 패키지에 대해서 이야기를 해보았다. 처음부터 DDD형식을 도입하는 것은 좋지 않다는 것을 이야기해보았다. 레이어드 아키텍처에서 도메인에 비즈니스 로직을 넣는 것이 좋다는 판단을 하였다. 레이어드 아키텍처 + 도메인 레이어를 추가한 것을 Onion 아키텍처로 시작하는게 어떠한가? 왜 Onion 아키텍처로 시작하는게 좋은가? 우리의 핵심 비즈니스 로직과 디비에 저장하는 로직이 항상 코드 사이에 결합되어 있는데, 이것을 해결하기 위해 Onion 아키텍처를 사용한다. 또한 기존의 헥사고날 아키텍처는 너무 큰 품이 든다. 처음부터 적용하기에는 문제가 있지 않나 싶다. 그래서 Onion아키텍처로 하는게 좋다. Onion Architecture란?제어의 역전 원칙을 기반으로 도메..

MVCC (Multi Version Concurrency Control)일반적으로 레코드 레벨의 트랜잭션을 지원하는 DBMS 제공하는 기능이며, MVCC 가장 큰 목적인 잠금을 사용하지 않는 일관된 읽기를 제공하는 데 있다. InnoDB 언두 로드(Undo log)를 이용해 이 기능을 구현한다. 멀티 버전이라 함은 하나의 레코드에 대해 여러 개의 버전이 동시에 관리된다는 의미다. 이를 위해 격리 수준(Isolation Level) 이 READ_COMMITED 인 MySQL 서버에서 InnoDB 스토리지 엔진을 사용하는 테이블의 데이터 변경 INSERT 문 실행시 아래 처럼 바뀜 update 후 UPDATE 문장이 실행되면 커밋 실행 여부와 관계없이 InnoDB 버퍼 풀은 새로운 값인 '경기'로 ..