현 회사를 다니며 진행한 프로젝트 중에 동시성과 병렬성 문제를 만나고 이를 해결한 경험을 기록하고자 한다. 상황 해당 프로젝트에서 외부 API 서버에 어떤 값을 request하고 외부 서버에 의해 처리된 데이터를 response로 받는 일종의 어댑터 패턴의 서버 개념으로 동작하는 API 서버를 빌드하는 것이 목표였다. 이때 외부 API를 호출하는 기능은 제공하는 SDK를 이용해서 구현하였으나 한번의 API 호출에 하나의 값만을 전달할 수 밖에 없는 구조로 되어있어 성능이 썩 만족스럽지 못 했고, n건의 요청을 한 경우 n건의 응답이 반드시 와야 하는 consistency가 중요했다. 여기서 SDK API의 부족한 기능은 Java의 parallelStream을 통해 해결하였고 (병렬성) 100% 확실한 c..
문제 상황 필드 변수를 선언할때 @RequiredArgsConstructor를 이용하기 위해 항상 하던 것처럼 @Value 변수를 선언할 때에도 private final로 선언했지만 다음과 같은 에러가 발생했다. 코드 import org.springframework.beans.factory.annotation.Value; @Slf4j @Service @Transactional @RequiredArgsConstructor public class Test { @Value("${email}") private final String EMAIL;콘솔 stdout Unsatisfied dependency expressed through constructor parameter 0; nested exception is..
문제점 vscode에서 vim 플러그인을 사용할때 다음과 같은 문제가 발생했다. 한글 입출력할때 글자가 씹히거나 깨지는 경우 한글 입력으로 설정되어 있을때 normal 모드 진입이 되지 않는 문제 대부분의 문제는 한글의 입출력과 관련돼서 발생했는데 구글링해본 결과 꽤나 역사가 깊은 버그인걸로 보였고 많은 사람들이 vim 대신 neovim 플러그인은 한글 관련된 버그가 발생하지 않는 점으로 추천하여 vim 플러그인 대신 neovim 플러그인을 사용하기로 결정하였다. 설치 바이너리 다운로드 및 설치 neovim을 사용하기 위해서는 바이너리 파일을 먼저 설치해야 한다. 다만 문제는 WSL2의 apt나 brew는 버전 업데이트가 되고 있지 않아 22.12.08 기준으로 0.4.3 버전으로 neovim 플러그인을..
상황 자바에는 String에 replaceAll 메서드가 존재한다. 이 메서드에서 \r\n을 찾는 표현식을 작성하고자 하면 다음과 같은 형식으로 코드를 작성해야 한다. rawText.replaceAll("(\\\\r\\\\n|\\\\n)", "\\\\n");결과적으로 하나의 \를 입력하기 위해서 총 4개의 백슬래쉬(\\\\)를 입력해야 하는 상황이 발생한다. 이유 이러한 식으로 작성해야 되는 이유는 다음과 같다. Java에서 \를 인식하기 위해서 \\가 필요함. replaceAll에 들어가는 첫 번째 parameter가 regexp이므로 여기서도 \를 입력하기 위해 \\가 필요하다. 위 2가지 조건이 중첩되어 Java에서 \를 인식하게 하기 위해 \\를 입력한 후에야 \를 \로 인식. 이때 만약 \\r만..
Vimium-C 많은 사람들이 Vimium을 사용하면 좋을 것같다는 생각에 튜토리얼을 작성하게 되었다. 비개발자들에게도 매우 편리한 도구가 될 것이지만 Vim을 좋든 자든 사용해야 되는 개발자들에게 적당한 찍먹의 수단으로 사용할 수 있을 것으로 생각한다. Vimium이란? 개발자들에게 높은 러닝 커브로 악명높은 Vim이라는 도구가 있다. 이 Vim에서 사용하고 있는 키매핑을 브라우저에서도 그대로 사용할 수 있도록 익스텐션의 형태로 제공하는 것이 _Vimium_이다. Vim이 고통스러운 이유는 무작위로 매핑된 것만 같은 키조합들을 전부 외워서 써야한다는 점과 편집 모드와 이동 모드가 따로 존재한다는 점들을 들 수 있을 것이다. 하지만 Vimium에선 Vim의 좋은 점들만 직관적으로 키매핑을 해두어 크게 억..
위아래로 빠르게 이동하고 싶을때 Vim을 이용해서 위아래로 빠르게 이동하는 방법에 있어 정답이 딱 정해져있진 않고 상황에 맞게 사용할 수 있게 여러 커맨드를 익혀두고 이용하는 것이 좋다. 문장의 처음으로 가고 싶다면 G, 마지막은 gg를 이용한다. 단락별로 이동한다면 { }를 이용한다. 문장별로 이동하고 싶다면 ( )를 이용한다. { }보다 조금 더 세밀한 움직임 가능. 단어를 알고 있다면 /검색할단어와 n N을 이용해서 찾아갈 수 있다. , 를 이용해서 { } 커맨드보다 더 빠르게 이동할 수 있다. :number로 정확한 라인에 찾아갈 수도 있고 :+number :-number를 이용해서 relativenumber를 이용해 상대적인 라인으로 이동할 수 있다. :+ - 대신에 단순히 {number}j,k..
.gitignore 파일이 프로젝트 최상단 (== git이 관리하는 프로젝트의 root)에 존재하지 않는 경우 .gitignore 파일을 생성한다. $ vim .gitignore 그리고 파일 내부에 단순하게 ignore하길 원하는 file명이나 directory명을 입력한다. (상대 경로나 절대 경로 등으로 입력할 필요가 없다.) # 이렇게만 적용해도 된다. MyClass.java # 실제 경로 src/main/java/com/project/api/my-directory/MyClass.java 트래킹이 되어 있지 않은 상태라면 여기까지 설정 후 commit 커맨드를 누르면 ignore 되는 상태가 되는 것을 확인할 수 있다. 만약 이미 git이 해당 파일을 tracking 하고 있다면 다음 커맨드를 이용..
alias ll='ls -alsh' alias vb='vim ~/.bashrc' alias vv='vim ~/.vimrc' alias sb='source ~/.bashrc' alias rm='rm -i' alias ins='sudo apt-get install' alias ..='cd ..; ls' alias ...='cd ../../; ls' alias ....='cd ../../../; ls' alias h='history' alias c='clear' alias d='docker' alias path='echo -e ${PATH//:/\\n}' alias now='date +"%Y-%m-%d %T"' alias vi=vim alias update='sudo apt-get update && sudo ..
staging과 commit 그리고 push까지 한번에 할 수 있는 function을 만들어서 등록하고 사용하는 방법은 다음과 같다. .bashrc 파일 열기 vim ~/.bashrc G를 눌러 파일의 마지막으로 간 다음 function을 등록 function의 이름은 아무거나 상관없다. function lazygit() { git add . git commit -a -m "$1" git push } 변경된 .bashrc 파일을 source로 등록. source ~/.bashrc 사용 예시 lazygit "My commit msg" 다음과 같이 소스를 변경하면 "" (quotes)없이 커밋 메시지를 등록할 수 있다. git commit -a -m "$1" //to git commit -a -m "$*" ..
Windows 기준 기본 터미널 변경 Ctrl + Alt + s 로 Settings 켜기. 혹은 File - Settings. 검색창에서 terminal 검색. 혹은 Tools - Terminal. 아래와 같이 cmd.exe로 되어있거나 powershell로 되어있는 것을 원하는 path로 변경. 필자는 WSL을 사용하고 싶어서 아래와 같이 변경하였다. C:\WINDOWS\system32\wsl.exe -d Ubuntu 이제 터미널을 열어보면 아래와 같이 설정한 터미널로 시작하는 것을 확인할 수 있다. (WSL로 인해 너무 길게 나오는 유저명과 PATH가 거슬린다면 여기를 참고해보자) 폰트 크기 변경 Ctrl + Alt + s로 Settings 열기. 검색창에 Color Scheme 검색. 혹은 Edit..
- Total
- Today
- Yesterday
- IDE
- Dap
- JavaScript
- neovim
- 배포
- 도커
- RequestParam
- vim
- ModelAttribute
- lunarvim
- 아키텍처
- 루나빔
- RequestBody
- 레디스
- RequestPart
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |