일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- auto configure
- jsp
- dynamic query
- 학점
- 유사코드
- 알고리즘
- JVM
- 자바 프로젝트
- 자바
- 문법 정리
- 파이썬
- 파이썬 소스
- 오라클
- resilience4j
- smart cast
- hyperledger
- c#
- oracle
- 초대장
- K6
- 티스토리
- gradle
- 백준 알고리즘
- SQL
- MongoDB
- 프로젝트
- 리눅스
- 운영체제
- spring
- 오라클 디비
- Today
- Total
목록Programming (154)
모종닷컴
진행하고 있는 프로젝트가 슬슬 마무리가 되어가네요.. 포스팅할 거리가 많은데 프로젝트가 끝나면 하나씩 정리해서 올리도록 하겠습니다. 너무 오랫동안 글을 못 올리는 게 싫어서 짧은 글이지만 소개해보려고 합니다. 의존하고 있는 빈이 많은 클래스들이 간혹 보입니다. 설계를 잘못한걸수도 있지만 이런 클래스들은 특히 단위 테스트 코드를 짤 때 정말 귀찮습니다. 예시를 보도록 하겠습니다. 예시 코드 private val log = KotlinLogging.logger { } @Service class WelcomeStep { fun execute() { log.info("welcome") } } @Service class EnjoyStep { fun execute() { log.info("enjoy") } } @S..
CompletableFuture의 예외를 핸들링하는 3가지 handle, whenComplete, excetpionally CompletableFuture의 예외를 처리하는 방법에 대해 알아보려고 합니다. 여러 가지 방법들이 존재하지만 이번 포스팅에서 다룰 방법들은 자바에서 제공하는 기본 메서드들을 설명하려고 합니다. 이에는 handle(), whenComplete(), exceptionally() 세 가지 메서드가 존재합니다. 처음에 봤을 때 뭐가 다른 거지 하고 굉장히 헷갈려서 이번 기회에 글로 조금 정리해보려고 합니다. handle 먼저 handle 메서드를 보도록 하겠습니다. public CompletableFuture handle( BiFunction
오늘은 정말 간단한 글 하나를 올려보려고 합니다. 내용은 멀티 모듈 프로젝트에서 모듈의 겹치는 이름으로 인해 겪은 삽질기입니다. 상황을 재현해보기 간단하게 세팅을 먼저 해보도록 하겠습니다. 프로젝트 구조 프로젝트는 projectA, projectB 두 개로 만들어져 있습니다. projectA는 app, domain 모듈을 지니고 있고, projectB는 domain 모듈만 지니고 있습니다. projectA 빌드스크립트 war 관련 파일 설정이 추가되어있습니다. apply plugin: 'war' bootWar { mainClassName = "com.example.projectA.app.MainAppKt" // 코틀린 파일이 자바로 해석되면서 클래스명 뒤에 'Kt'가 붙는다 archiveName("${p..
그레이들 빌드 스크립트 작성의 기본적인 부분들을 다룹니다. 글에서 간단한 예시를 보면서 기초 개념들에 대해 알려줍니다. Projects, plugins and tasks 모든 그레이들 빌드는 하나 이상의 projects로 구성됩니다. 그레이들로 무엇을 하려는지에 따라 project가 정의가 달라집니다. 예를 들어 project는 JAR 라이브러리 혹은 웹 애플리케이션을 말하는 걸수도 있습니다. 혹은 다른 프로젝트에서 생산된 JAR로부터 어셈블된 ZIP을 말하는 걸수도 있습니다. 프로젝트가 반드시 무엇인가를 만들어야 한다는 것이 아닙니다. 스테이징 또는 프로덕션 환경에 애플리케이션을 배포하는 것과 같이 수행해야 할 작업을 나타낼 수도 있습니다(이 이야기들이 좀 애매해 보이는데 걱정하지 말라고 다독이네요ㅋㅋ..
멀티 모듈 프로젝트를 사용하다 보면 하위 모듈의 프로퍼티 파일이 필요한 경우가 생깁니다. 예시를 들어보겠습니다. 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..
atomic counter는 원자성 카운터입니다. 좀 더 쉽게 풀어 설명하자면 동기화된 카운터라고 이해할 수 있을 것 같아요. 카운터는 숫자를 1, 2, 3.. 이런 식으로 숫자를 세는 프로그램입니다. 애플리케이션 내에서는 이 카운터를 다양한 방법으로 동기화시켜 만들 수 있지만 전체 시스템이라면 얘기가 달라집니다. 시스템에서 카운터를 만드는 방법은 여러 가지 있지만 저는 이걸 데이터베이스를 사용하여 구현하고자 합니다. MySQL의 auto-increment를 이용한 카운터를 하는 방법과 mongodb의 findAndModify를 사용해서 구현하였고 이를 비교해보았습니다. 코드도 붙여넣을 예정인데 구현은 Spring+Kotlin으로 하였고 추가적으로 spring-boot-data-jpa, spring-..
Gradle은 사용자 홈 티렉토리와 프로젝트 루트 디렉토리 두 가지 디렉토리를 사용하여 작업을 수행하고 관리합니다. 사용자 홈 디렉토리 Gradle 사용자 홈 디렉토리는 글로벌 속성 구성과 초기화 스크립트, 캐시 및 로그 파일을 저장하는 데 사용됩니다. 디폴트 경로는 $USER_HOME/.gradle 입니다. 문서에서 설명하는 대략적인 구조는 아래 사진과 같다고 합니다. 각각 디렉토리에 대한 설명을 보도록 하겠습니다. 모든 프로젝트가 사용하는 글로벌 캐시 디렉토리입니다. 버전별 캐시입니다. (예: 증분 빌드 지원) 공유 캐시 (예 : 디펜던시의 아티팩트) Gradle 데몬의 레지스트리 및 로그 디렉토리입니다. 글로벌 초기화 스크립트 toolchain support에서 다운로드한 JDK Gradle Wra..
매번 느끼는 것이지만 작업을 하다 보면 몰랐던 것들이 너무 많습니다. 대학교 때 소켓 프로그래밍을 해봤지만 지금 다시 소켓 프로그래밍을 하려니 궁금한 것도 많고 그러네요. 오늘은 TCP handshake에 대해 알아보려고 합니다. 연결을 할 때 3 way handshake , 종료할 때는 4 way handshake로 하고 있습니다. TCP 연결 과정 - 3 way handshake TCP 종료 과정- 4 way handshake 툴 준비 실제로 어플리케이션을 만들고 패킷을 분석해서 실제로도 위와 같은 동작을 하는지 보려고 합니다. 패킷을 탈취하고 분석하기 위해서는 몇 가지 툴이 필요합니다. 저는 가장 흔하게 사용되고 있는 tcpdump와 wireshark를 사용하려고 합니다. 설치는 어렵지 않습니다. ..
Gradle에 대해 알아보자 글에서 빌드 단계에 해당하는 내용이겠네요. 이번 글에서 그레이들 빌드 라이프사이클에 대해 알아보도록 하겠습니다. 그레이들의 핵심은 의존성 기반의 프로그래밍을 위한 언어입니다. Gradle 용어로 이것은 작업과 작업 간의 종속성을 정의할 수 있음을 의미합니다. Gradle은 종속성 순서대로 작업을 실행하고 각 작업이 한 번만 실행될수 있도록 보장합니다. 작업을 실행할 때 이러한 종속성 그래프를 작성하는 빌드 도구가 있어서 실행 전 종속성 그래프가 빌드됩니다. 빌드 스크립트가 이러한 종속성 그래프를 구성합니다. 따라서 빌드 스크립트는 엄밀히 말하면 빌드를 구성시키는 스크립트입니다. 빌드 단계 초기화 그레이들은 단일 및 멀티 프로젝트 빌드를 지원합니다. 초기화 단계에서 그레이들은 ..
안녕하세요. 오늘은 지난 Quartz Job Schedule 1편 - 소개 및 간단한 예제에 이어서 Quartz를 좀 더 다양하게 활용하기 위한 포스팅을 하려고 합니다. Quartz를 많이 다뤄보지는 못해서 활용도가 조금 떨어질 수 있지만 이런식으로 활용할 수 있겠구나 정도의 가벼운 마음으로 읽어주시면 감사하겠습니다 :) 이번 예제에서는 Controller를 활용할 예정이라 혹시라도 의존성이 없다면 web 관련 dependencies를 구성해주시기 바랍니다. 제대로 확인은 안했지만 spring-boot-starter-web 정도만 추가하면 되지 않을까 싶습니다. QuartzApiController 만들기 이번 포스팅에서 예제는 모두 api 형식으로 제공할 예정이라 컨트롤러를 먼저 작성하도록 하겠습니다. ..