일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 파이썬
- oracle
- spring
- MongoDB
- 오라클
- gradle
- 문법 정리
- auto configure
- K6
- 자바 프로젝트
- 프로젝트
- 파이썬 소스
- smart cast
- 학점
- jsp
- 백준 알고리즘
- 초대장
- 자바
- dynamic query
- hyperledger
- 리눅스
- 유사코드
- 티스토리
- 오라클 디비
- c#
- 알고리즘
- JVM
- 운영체제
- resilience4j
- SQL
- Today
- Total
목록목차 (231)
모종닷컴
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bbkm9N/btrLOgpHDQb/pSO557SIBD3qDxGmhHAEB1/img.png)
고가용성 (High Availability) 가용성이란 시스템이 정상적으로 사용 가능한 정도를 말합니다. 그렇다면 고가용성이란 시스템이 지속적으로 정상 운영이 가능한 성질을 말합니다. "가용성이 높다"는 뜻으로서 "정상적으로 사용 가능한 시간이 높다" -> "정상적으로 사용 가능한 시간을 늘린다"이라고 이해하면 될 것 같습니다. 이중화 or 다중화 시스템의 일부에 어떠한 장애가 발생했을 경우에 대비하여, 장애 발생시 시스템 전체의 기능을 정상적으로 계속 유지하기 위해 서버를 여러 개 두는 것입니다. 즉 고가용성을 위한 솔루션 중 하나입니다. 시스템이 이중화 혹은 다중화되기 위해서는 클라이언트와 서버 사이에 로드 밸런싱이 필요합니다. 로드밸런서가 여러 대의 서버를 보고있고, 트래픽을 적절하게 분산시킵니다...
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bC4Lt0/btrLMzCU9DM/qMT3XTPLaXCIljuKgFlKy0/img.png)
멀티 모듈 프로젝트를 사용하다 보면 하위 모듈의 프로퍼티 파일이 필요한 경우가 생깁니다. 예시를 들어보겠습니다. module-a와 module-b가 존재합니다. module-b에는 암호화 관련 서비스가 존재하고 module-a에서는 이 암호화 서비스가 필요하여 module-b를 사용하려고 합니다. 프로젝트의 구조를 보면 아래와 같습니다. module-a의 프로퍼티 파일(/src/main/resources/application.yml)이 존재하고, module-b의 프로퍼티 파일이 존재합니다. Module B @Service class CipherService( @Value("\${encrypt.secretkey}") SECRET_KEY: String ) { private val keySpec = Secr..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/MACFY/btrLKv83P0O/3eGgePorM5ded5OU3P5Szk/img.jpg)
atomic counter는 원자성 카운터입니다. 좀 더 쉽게 풀어 설명하자면 동기화된 카운터라고 이해할 수 있을 것 같아요. 카운터는 숫자를 1, 2, 3.. 이런 식으로 숫자를 세는 프로그램입니다. 애플리케이션 내에서는 이 카운터를 다양한 방법으로 동기화시켜 만들 수 있지만 전체 시스템이라면 얘기가 달라집니다. 시스템에서 카운터를 만드는 방법은 여러 가지 있지만 저는 이걸 데이터베이스를 사용하여 구현하고자 합니다. MySQL의 auto-increment를 이용한 카운터를 하는 방법과 mongodb의 findAndModify를 사용해서 구현하였고 이를 비교해보았습니다. 코드도 붙여넣을 예정인데 구현은 Spring+Kotlin으로 하였고 추가적으로 spring-boot-data-jpa, spring-..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cQZ79e/btrLipU4mZQ/Ud5iNKv0LZac7dDSrWvKfk/img.png)
Gradle은 사용자 홈 티렉토리와 프로젝트 루트 디렉토리 두 가지 디렉토리를 사용하여 작업을 수행하고 관리합니다. 사용자 홈 디렉토리 Gradle 사용자 홈 디렉토리는 글로벌 속성 구성과 초기화 스크립트, 캐시 및 로그 파일을 저장하는 데 사용됩니다. 디폴트 경로는 $USER_HOME/.gradle 입니다. 문서에서 설명하는 대략적인 구조는 아래 사진과 같다고 합니다. 각각 디렉토리에 대한 설명을 보도록 하겠습니다. 모든 프로젝트가 사용하는 글로벌 캐시 디렉토리입니다. 버전별 캐시입니다. (예: 증분 빌드 지원) 공유 캐시 (예 : 디펜던시의 아티팩트) Gradle 데몬의 레지스트리 및 로그 디렉토리입니다. 글로벌 초기화 스크립트 toolchain support에서 다운로드한 JDK Gradle Wra..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/baB8Bg/btrLiq0kTQi/v7Dzp4cDF1UMkPKVP88frK/img.jpg)
매번 느끼는 것이지만 작업을 하다 보면 몰랐던 것들이 너무 많습니다. 대학교 때 소켓 프로그래밍을 해봤지만 지금 다시 소켓 프로그래밍을 하려니 궁금한 것도 많고 그러네요. 오늘은 TCP handshake에 대해 알아보려고 합니다. 연결을 할 때 3 way handshake , 종료할 때는 4 way handshake로 하고 있습니다. TCP 연결 과정 - 3 way handshake TCP 종료 과정- 4 way handshake 툴 준비 실제로 어플리케이션을 만들고 패킷을 분석해서 실제로도 위와 같은 동작을 하는지 보려고 합니다. 패킷을 탈취하고 분석하기 위해서는 몇 가지 툴이 필요합니다. 저는 가장 흔하게 사용되고 있는 tcpdump와 wireshark를 사용하려고 합니다. 설치는 어렵지 않습니다. ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bX8kzd/btrKHuiApnd/pEzoFj44h9xpuLGA5o4SQk/img.png)
Gradle에 대해 알아보자 글에서 빌드 단계에 해당하는 내용이겠네요. 이번 글에서 그레이들 빌드 라이프사이클에 대해 알아보도록 하겠습니다. 그레이들의 핵심은 의존성 기반의 프로그래밍을 위한 언어입니다. Gradle 용어로 이것은 작업과 작업 간의 종속성을 정의할 수 있음을 의미합니다. Gradle은 종속성 순서대로 작업을 실행하고 각 작업이 한 번만 실행될수 있도록 보장합니다. 작업을 실행할 때 이러한 종속성 그래프를 작성하는 빌드 도구가 있어서 실행 전 종속성 그래프가 빌드됩니다. 빌드 스크립트가 이러한 종속성 그래프를 구성합니다. 따라서 빌드 스크립트는 엄밀히 말하면 빌드를 구성시키는 스크립트입니다. 빌드 단계 초기화 그레이들은 단일 및 멀티 프로젝트 빌드를 지원합니다. 초기화 단계에서 그레이들은 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/HGvzt/btrKJ6OMeNz/l4zLCDwKgDxJeEjtMWSDIK/img.jpg)
왜 안경은 안경닦이로 닦아야 깨끗할까요? 평화로운 주말 오전 공부하기 위해 카페에 들렀습니다. 공부하려고 노트북을 꺼내는 순간 안경이 뿌연 게 상당히 거슬립니다. 안경닦이 꺼내기 귀찮으니 옷으로 닦아보려는데 더 지저분해지는 것 같아요. 그래서 안경닦이를 꺼내서 닦는 순간 엄청 깨끗해집니다. 왜 안경은 안경닦이로 닦아야 깨끗할까? 공부하기 귀찮아서 알아본건 절대 아닙니다 궁금해서 네이버, 구글, 유튜브 등 많이 검색을 해봤는데 죄다 김서림 안경닦이의 원리만 설명해서 ㅋㅋㅋ 그러다 저와 아주 똑같이 생각을 한 글이 있더라고요. 일단 글에서 설명하는 주된 이유를 간략하게 설명하자면 안경닦이 천은 유분기를 잘 흡수하는 소재이기 때문이라고 합니다. 보통 안경을 잘 안 보이게 하고 더럽히는 주요인은 유분기(기름기)..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cHYsQm/btrKJ4JHZ7I/2RDsRqFo0B9M6T4aNjS59K/img.jpg)
안녕하세요. 오늘은 지난 Quartz Job Schedule 1편 - 소개 및 간단한 예제에 이어서 Quartz를 좀 더 다양하게 활용하기 위한 포스팅을 하려고 합니다. Quartz를 많이 다뤄보지는 못해서 활용도가 조금 떨어질 수 있지만 이런식으로 활용할 수 있겠구나 정도의 가벼운 마음으로 읽어주시면 감사하겠습니다 :) 이번 예제에서는 Controller를 활용할 예정이라 혹시라도 의존성이 없다면 web 관련 dependencies를 구성해주시기 바랍니다. 제대로 확인은 안했지만 spring-boot-starter-web 정도만 추가하면 되지 않을까 싶습니다. QuartzApiController 만들기 이번 포스팅에서 예제는 모두 api 형식으로 제공할 예정이라 컨트롤러를 먼저 작성하도록 하겠습니다. ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/xzXsv/btrKGSwBEgp/4hkEv95JbzwmsTSXdq8f5K/img.png)
멀티 모듈 프로젝트를 구성하다보니 그레이들에 대해 참 모르고 있던 부분들이 많았다는 걸 깨닳았네요.. Gradle 관련 공부를 어떤 방식으로 진행할 지 아직 정하지 못했기 때문에 간단하게 공식 문서상에서 소개하는 Gradle에 대해 알아보도록 하겠습니다. Gradle 이란? Gradle은 거의 모든 유형의 소프트웨어를 빌드 할 수 있음 만큼 충분히 유연하게 설계된 오픈 소스 빌드 자동화 도구입니다. Gradle 주요 특징 고성능 : Gradle은 입력 또는 산출물이 변경되어 실행해야 하는 작업만 실행함으로써 불필요한 작업을 방지합니다. 또한 빌드 캐시를 사용하여 이전 실행 또는 공유 빌드 캐시가 있는 다른 시스템에서도 작업 산출물을 재사용할 수 있습니다. 또한 현재까지도 팀에서 Gradle의 성능을 개선..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/p4CVY/btrKsPngjTk/RQq2Nn1FkPXe1cvHg7Xyh1/img.png)
잘못된 모듈 설계 19년도에 만들고 있던 개인프로젝트를 멀티모듈프로젝트를 진행했었다. 대충 기억을 되짚어보면 아마 front-end, admin-api, pay-api, common 뭐 이런식으로 모듈을 구성하였던 것 같다. 그리고 이런식으로 구성한 모듈이 우아한형제들 블로그에 올라온 글에서 실패한 설계의 예로 쓰이고 있음을 알게되었다. 그 때 개인프로젝트를 예시로 좀 들어보면 이렇다. A,B,C,D,E 모듈이 있다. C에 API가 하나가 작성되었고 이 API를 D, E 서버가 사용해야 한다고 가정해보자. API의 응답 및 요청 DTO들이 생겼다. 이걸 D, E 서버에 모두 넣어야 할까? 그럼 중복으로 코드를 작성하고 관리하기 힘들테니 common에 작성을 해놓는다. 자연스럽게 A, B도 common을 ..