본문 바로가기

개발 관련됨/개발 관련 유용한 정보함14

왜 서비스로더(ServiceLoader)를 알아야 하는가? java docs 에서 Service Loader 를 다음과 같은 한줄로 정의한다. A facility to load implementations of a service. 서비스 구현을 로드하는 기능입니다. 서비스 구현을 로드하는 기능이 왜 필요한지 부터 이해할 필요가 있을 것 같다. (여기서 서비스 구현의 의미는 비지니스 로직이 담겨진 구체적 클래스를 의미한다.) 우리가 라면을 만드는 코딩을 한다고 가정해보자. public class 신라면제조 { public void make() { pourWater(); boilWater(); putNoodle(); boilNoodle(); putSoup(); putVegetable(); } public static void main(String[] args) { .. 2024. 3. 21.
Intellij 북마크 기능(스타 부대지정 같은) / 이전 단어 재사용하기 Intellij 를 활용하면서 자주 사용하려고 했으나 사용할 때마다 단축어를 찾는 2가지 케이스가 있습니다. 바로 북마크 기능과 이전 단어 재사용하기 북마크 기능은 스타크레프트를 했던 사람이라면 친숙한 부대 지정과 비슷합니다. ⌥ F3 또는 Ctrl+F11 – 연상 기호 북마크 추가 일단 눌러보면 다음과 같은 화면이 뜹니다. 여기서 사용하고자 하는 단축키를 선택한다. 만약 1을 누르면 다음과 같이 코드 옆에 지정한 숫자 또는 문자를 찾을 수 있다. ^(MacOs) 또는 Ctrl(Windows)을 누른 상태에서 키보드에 지정된 숫자나 문자를 누르면 북마크로 이동할 수 있습니다. 최종 사용하는 모습 2. ⌥ + / - 이전 단어 재사용 2023. 8. 22.
조영호님과 객체지향에 대해서 이야기하기 트레바리에서 (전) CTO님 덕분에 오브젝트 저자 조영호님과 티타임을 가질 수 있는 기회가 생겼습니다. 티타임 자리에서 물었던 질문에 대해서 기록을 남깁니다. 아쉽게도 사진은 찍지 못했지만, 관련해 이야기 나눈 부분에 대해서 공유하기 위해 기록합니다. 대화했던 내용을 녹음했던 것은 아니였기 때문에, 정확하지 않을 수 있습니다. Q. 추상화란 무엇인가? A. 추상화는 필요없는 것을 없애는 것이다. 동시에 추상화는 용도와 의도가 명확해야 한다. 처음부터 추상화를 발견할 수는 없다. 절차지향으로 코드를 작성하고 난 뒤에 중복이 발견될 때, 추상화 될 가능성이 농후하다. 그러므로, 리팩토링을 통해 추상화를 만들어내자. 추상화는 어쩔 수 없이 탑-다운 방식이 아닌 바텀-업 방식에서 나타날 수 밖에 없다. Q. 추.. 2022. 12. 22.
postgresSQL의 Idle in transaction 이란 무엇인가? Node.js 에서 발생한 Transaction 이 부족해서 문제가 발생했고, 해결하는 과정에서 Idle in transaction에 대해서 알게 되었습니다. Idle in transaction 이란 무엇인가? 문서에 따르면 다음과 같은 의미를 가집니다. idle in transaction (waiting for client inside a BEGIN block) 클라이언트가 시작을 열어놓고 기다리고 있다. 즉, 클라이언트가 정상적으로 트랜잭션을 닫지 않았다. 대부분의 Application은 ConnectionPool 을 통해 N개의 Connection 을 쥐고 있습니다. N개의 Connection이 모두다 정상적으로 동작하지 않을 경우에는 다음 Connection 이 열리지 않아 문제가 발생합니다. 그.. 2022. 9. 11.
안전하게 코드 리팩토링하기 - 1 안전하게 리팩토링하기 SOLID 원칙 중 DIP가 있다. 어떻게 하면 쉽게 리팩토링 할 수 있는지 간단하면서도 강력한 방법을 이야기해볼까 한다. 이것을 아래와 같이 변경한다고 해보자. public class LotteriesFactory { private final RandomNumberGenerator randomNumberGenerator; public LotteriesFactory(RandomNumberGenerator randomNumberGenerator) { this.randomNumberGenerator = randomNumberGenerator; } // 만약 많은 곳에서 해당 코드를 사용하고 있다면 어찌하겠는가 ???????? public String createNumber(){ retu.. 2022. 7. 24.
gradle 기반의 여러 모듈에서 공통으로 쓰인 스크립트가 있다면? 멀티 모듈 시스템에서 공통으로 쓰인 Gradle Script 가 있다면 어떻게 해야 될까? RootProject | | - SubProjectA | -- build.gradle | - SubProjectB | -- build.gradle | - SubProjectC | -- build.gradle | - build.gradle 여기서 `SubProjectA` , `SubProjectB`, `SubProjectC` 가 build.gradle 에서 공통으로 사용되는 내용이 있다고 가정하자. 약 모듈이 5개정도 만들어지면서 반복되어지는 스크립트를 발견되었고, 코드 복사/붙여넣기가 불편하다고 느꼈다. 어떻게 해야될까? `base.gradle` 을 하나 만들어 전체 프로젝트에 공유하면 되지 않을까? 걱정되는 마음.. 2022. 2. 6.
MAC OS 에서 Icon 이 Bouncing 하지 않도록 하는 방법 https://howchoo.com/mac/disable-mac-icon-bounce 2021. 9. 26.
docker 에 올라온 postgres 에 접속해, Database 확인하는 방법 InteliiJ 의 편리함에 속아, 실제 DB 작업할 때는 어버버한 저를 위해 남깁니다. 먼저, 작성하기 전에 데이터베이스의 목적은 영속성입니다. 그러나 Docker는 쉽게 지우고 설치할 수 있습니다. DB의 영속성과 Docker? 사실 말이 안맞긴 합니다만... 😳 우리는 개발환경을 빨리 세팅하고 싶으니까...ㅎㅎ 참조문서 - https://hub.docker.com/_/postgres 아래 명령어를 실행했다고 가정하겠습니다. docker run --rm --name mypg -d \ -v ${PWD}/app/src/main/resources:/docker-entrypoint-initdb.d \ -p 5432:5432 \ -e POSTGRES_PASSWORD="password" \ -e POSTGRES.. 2021. 7. 9.
[Inteliij] 대문자 - 소문자 변환 단축키 Command + Shift + u 2021. 6. 3.
[intellij] 동일한 단어를 Multi-line 으로 블록하는 방법 아래 내용은 Mac OS 기준의 단축키로 설명합니다. '⇧ + F6' 이렇게 하면 동일한 단어에 대해서 아래와 같은 창이 뜬다. 그러나, 만약에 위 화면에서 4개의 단어 중 2개만 Multiline으로 하고 싶은 경우 또는, 팝업 창을 띄우지 않고 할 수 있는 방법이 있다. 만약 동일단어 4개 중 2개의 단어만 수정하고 싶은 경우 "^(options) + g" 이렇게 같이 누를 경우 누르는 버튼 횟수에 의해서 알 수 있다. 만약 동일단어 4개를 한번에 팝업창 없이 수정하고 싶은 경우 "^(options)+⌘(command)+g" 버튼을 통해 변경할 수 있다. [참고자료] www.jetbrains.com/help/rider/Multicursor.html?keymap=secondary_intellij_osx.. 2021. 2. 5.
IntelliJ 에서 정규표현식으로 글자 교체하기 (- +\[ \] +[0-9]{1,}\.) $1 $1, $2 이런식으로 교체하려는 문자의 텍스트를 가져올 수 있다. 2021. 1. 28.
[나만의 라이브러리 제작기-3] versioning SNAPSHOT 에 대한 고찰 배경 Bintray에 배포를 위한 준비를 마칠 쯤, Snapshot 에 대한 의구심이 들었습니다. 왜냐하면, SNAPSHOT 이란? 아직 배포되기 전 임시로 만들어 놓는 버전으로서, SNAPSHOT 은 개발 중이라는 버전을 의미한다고 알고 있었습니다. 그렇다면, 버전 이름을 SNAPSHOT으로 한다면 같은 이름으로 override되서 배포되지 않을까? 라는 호기심으로 진행되었습니다. Snapshot 이란? "A snapshot version in Maven is one that has not been released." stackoverflow.com/questions/5901378/what-exactly-is-a-maven-snapshot-and-why-do-we-need-it 즉, 개발중인 버전을 표.. 2020. 9. 12.
[나만의 라이브러리 제작기-2] JFlog Bintary는 무엇이고, 어떻게 라이브러리를 올렸는가? 들어가기 JFlog Bintray는 자바 의존성을 추가하기 위한 공개 저장소 중 JCenter에 배포하기 위해 존재하는 플랫폼 중 일부입니다. 그 부분에 대해서 좀 더 자세히 살펴보고, 올리는 과정에서 겪었던 이슈를 적어볼까 합니다. JFlog Bintray? 사실 위에서 언급한 것과 같이, JFlog는 그저 배포를 위한 플랫폼 중 일 부분입니다. Bintray는 "Software Distrubutuin as Service" 로서 홈페이지 설명에 따르면, - 단 한번의 배포로, 다양한 주요 패키지(docekr, debian, npm, maven ... )들을 한번에 배포할 수 있게 도와준다. - REST API를 활용하기 때문에 Jenkins와 같은 배포 도구에도 손쉽게 붙여 사용할 수 있다. - 그리고.. 2020. 9. 12.
[나만의 라이브러리 제작기-1] JCenter, MavenCentral 은 무엇인가? 들어가기 이번에 같이 스터디하는 햇님들과 함께 이야기를 나누다, 우리가 프로젝트를 진행시 자주 사용되는 Utility 성격의 Module은 라이브러리로 만든다면 어떠할까? 라는 질문으로 라이브러리를 제작하게 되었습니다. Assertion 이라는 라이브러리를 만들기 위한 여정으로, 그 시작은 JCenter, MavenCentral 등 흔히 Repository 라 불리는 것이 무엇인지에 대해서 이해해보려 합니다. 'Repository라 불리는 것은 무엇인가?' , 'gradle을 사용하지만, Maven Repository에 올릴 수 있는것인가?' 'Repository에 어떻게 올리는 것인가?' 등등 궁금한 부분이 많았습니다. 궁금증도 해결할 겸 나중에 이런 행위를 했었다는 것을 기억하기 위해 포스팅합니다. .. 2020. 9. 12.