[SpringBoot] JPA Specifications 를 이용한 Table Join
Spring Data JPA 에는 Specifications 라는 것이 존재합니다. 이를 활요어하면 복잡하게 구성될 수 있는 WHERE 조건, JOIN TABLE 등의 행위를 편하게 진행할 수 있습니다.
Spring Data JPA 에는 Specifications 라는 것이 존재합니다. 이를 활요어하면 복잡하게 구성될 수 있는 WHERE 조건, JOIN TABLE 등의 행위를 편하게 진행할 수 있습니다.
백엔드 개발을 진행하다 보면, 이미지나 파일 같은 raw data 를 직접 return 해야 하는 경우가 발생합니다. 물론 download 기능을 구현할 때에도 마찬가지겠지만, 그 이외에도 이러한 기능이 필요한 경우가 간혹 있습니다.
서버 측 개발 목적에 Datasource가 빠질 수 없습니다. 일반적으로 디비 라고 부르면서 어떤 데이터들을 데이터베이스에 저장하는 것을 말하는데, 최근에는 IT분야에 대한 충분한 지식이 없어도 이런 이야기들을 많이 하는 것 같습니다.
프로그래밍을 하는 데 있어서 라이브러리 라는 용어를 자주 사용하게 됩니다. 라이브러리는 “도서관” 이라는 의미겠지만, coding 에서 의미는 조금 상이합니다. 이번 내용은 Spring boot에 국한되는 내용은 아니고 최근 java프로젝트의 추세대로 설명을 하였습니다.
Spring Boot를 이용하여 프로그램을 개발하는 데 있어서 API를 개발하는 것은 당연한 부분입니다. 다른 시스템과의 Communication목적이거나, 혹은 화면(front-end)을 개발하고 그 화면에서 호출할 API를 제공하는 목적으로도 API개발은 필수적입니다. 물론 S...
Spring Boot 를 기반으로 한 프로젝트를 생성하는 것 부터 시작하겠습니다. 개발을 업무로 진행하시는 분들 중에서도 이 과정에 대해서 의외로 익숙하지 않은 분들이 더러 있습니다. 저 역시 대형 프로젝트의 경우에는 이런 과정을 거치기 보다는 S/W Architect라는 Role...
Docker는 Container 기반의 프로그램 구동을 돕는 도구 중 하나입니다. Container기반 이라고 이야기를 하였지만 현재는 container = docker 라고 할 정도로 docker가 정점을 찍고 있는 것 같습니다.
Java 는 사실 다른 어떤 작업보다도 우선시 회어야 하는 작업입니다. Spirng Boot 자체가 Java 로 된 프레임워크이고 따라서 Java가 없이는 전혀 구동할 수 없습니다. 또한 IDE로 사용하는 각종 도구들, Ecilpse / IntelliJ 와 같은 것들은 모두 Jav...
이제 IDE를 설치해 볼 차례입니다. IDE는 Integrated Development Environment 의 약자입니다. 통합 개발 환경 이라고 부르는데, 그냥 개발 툴이라고 쉽게 생각해도 무방합니다.
맥(Mac)을 이용해서 개발을 하고 있다면, 여기서 소개하는 brew 가 많은 도움이 될 수 있습니다. 물론, 개발이 아닌 목적으로도 맥을 사용하는 사람이라면 마찬가지겠죠. (하지만 개발을 하고 있는 사람이 그 효과를 크게 느낄 것입니다) 1 Homeb...
Spring Boot 에 대한 Study를 진행하면서 얻게 된 정보들, 그리고 저와 동일하게 공부를 시작하려는 분들에게 도움이 되고자, study 섹션으로 분리하여 정리하려고 합니다. 워낙 쉽게 개발 및 배포가 가능하도록 되어 있어 그런지, Spring Boot, Spring Fr...
Spring Boot를 사용하면서 다중 데이터소스를 사용하는 필요성이 가끔 있습니다. 과거 EJB환경이나 Web/WAS 등의 구조를 보면 이렇게 다중 데이터소스를 활용하는 일이 많았고, 현재도 여러 데이터소스, 예를 들어 사용자 관련 Datasource와 Transaction관련 ...
스프링에 대해서 이야기를 하다보면 의존성 주입(Dependency Injection, DI)에 대해 이야기를 할 수밖에 없습니다. 스프링의 특성 중 하나가 Singleton pattern을 가지고 있다는 점인데, 일반적인 Java 프로그래밍과는 다른 형태로 구현되었다고 볼 수 있습...
일반적인 Java Programming 을 하다가, Spring Framework, Spring Boot 를 사용하여 개발을 진행하면, 가장 크게 다가오는 것이 Annotation이라고 할 수 있습니다. 현재는 다양한 분야에서 이 Annotation을 이용하여 여러 기능들을 구현하...
여기서는 앞선 포스트에서 살펴본 logback 기능에 대해서 log level을 실시간으로 변경하는 방법에 대해서 작성하겠습니다. 시스템을 개발하는 중에는 로그 레벨을 변경하고 빌드하면 그만이고, 이를 설정값 등으로 조정하면 되겠지만, 운영중인 시스템에서 로그 레벨을 부득이하게 변...
Springboot 에서는 default context path 를 / 로 설정합니다. 대부분의 웹서버, WAS, 혹은 Springboot 의 내장 서버 역시 다 root 를 기본으로 가지고 있습니다. 즉, 로컬 개발 시 http://localhost:8080/ 과 같은 주소가 되...
backend나 frontend나 프로그램 개발에 있어, logging 처리는 아주 중요한 부분입니다. 특별히 truble-shooting을 위한 목적이 아니라고 하더라도 시스템의 운영 층면에서 필요한 부분이므로 아래와 같이 정리합니다.
웹이든 앱이든 서비스를 개발하는 데 있어서 SSO(Single Sign On) 의 필요성이 계속 화두가 되는 것 같습니다. 이제 기존 시스템 이라는 것이 거의 다 있게 마련이고, 따라서 기존에 사용하던 로그인정보를 그대로 유지해 달라고 하거나, 더 나아가서 session 도 유지해...
웹이든 앱이든 서비스를 개발하는 데 있어서 SSO(Single Sign On) 의 필요성이 계속 화두가 되는 것 같습니다. 이제 기존 시스템 이라는 것이 거의 다 있게 마련이고, 따라서 기존에 사용하던 로그인정보를 그대로 유지해 달라고 하거나, 더 나아가서 session 도 유지해...
웹이든 앱이든 서비스를 개발하는 데 있어서 SSO(Single Sign On) 의 필요성이 계속 화두가 되는 것 같습니다. 이제 기존 시스템 이라는 것이 거의 다 있게 마련이고, 따라서 기존에 사용하던 로그인정보를 그대로 유지해 달라고 하거나, 더 나아가서 session 도 유지해...
Spring Data JPA 에는 Specifications 라는 것이 존재합니다. 이를 활요어하면 복잡하게 구성될 수 있는 WHERE 조건, JOIN TABLE 등의 행위를 편하게 진행할 수 있습니다.
백엔드 개발을 진행하다 보면, 이미지나 파일 같은 raw data 를 직접 return 해야 하는 경우가 발생합니다. 물론 download 기능을 구현할 때에도 마찬가지겠지만, 그 이외에도 이러한 기능이 필요한 경우가 간혹 있습니다.
서버 측 개발 목적에 Datasource가 빠질 수 없습니다. 일반적으로 디비 라고 부르면서 어떤 데이터들을 데이터베이스에 저장하는 것을 말하는데, 최근에는 IT분야에 대한 충분한 지식이 없어도 이런 이야기들을 많이 하는 것 같습니다.
프로그래밍을 하는 데 있어서 라이브러리 라는 용어를 자주 사용하게 됩니다. 라이브러리는 “도서관” 이라는 의미겠지만, coding 에서 의미는 조금 상이합니다. 이번 내용은 Spring boot에 국한되는 내용은 아니고 최근 java프로젝트의 추세대로 설명을 하였습니다.
Spring Boot를 이용하여 프로그램을 개발하는 데 있어서 API를 개발하는 것은 당연한 부분입니다. 다른 시스템과의 Communication목적이거나, 혹은 화면(front-end)을 개발하고 그 화면에서 호출할 API를 제공하는 목적으로도 API개발은 필수적입니다. 물론 S...
Spring Boot 를 기반으로 한 프로젝트를 생성하는 것 부터 시작하겠습니다. 개발을 업무로 진행하시는 분들 중에서도 이 과정에 대해서 의외로 익숙하지 않은 분들이 더러 있습니다. 저 역시 대형 프로젝트의 경우에는 이런 과정을 거치기 보다는 S/W Architect라는 Role...
Docker는 Container 기반의 프로그램 구동을 돕는 도구 중 하나입니다. Container기반 이라고 이야기를 하였지만 현재는 container = docker 라고 할 정도로 docker가 정점을 찍고 있는 것 같습니다.
Java 는 사실 다른 어떤 작업보다도 우선시 회어야 하는 작업입니다. Spirng Boot 자체가 Java 로 된 프레임워크이고 따라서 Java가 없이는 전혀 구동할 수 없습니다. 또한 IDE로 사용하는 각종 도구들, Ecilpse / IntelliJ 와 같은 것들은 모두 Jav...
이제 IDE를 설치해 볼 차례입니다. IDE는 Integrated Development Environment 의 약자입니다. 통합 개발 환경 이라고 부르는데, 그냥 개발 툴이라고 쉽게 생각해도 무방합니다.
맥(Mac)을 이용해서 개발을 하고 있다면, 여기서 소개하는 brew 가 많은 도움이 될 수 있습니다. 물론, 개발이 아닌 목적으로도 맥을 사용하는 사람이라면 마찬가지겠죠. (하지만 개발을 하고 있는 사람이 그 효과를 크게 느낄 것입니다) 1 Homeb...
Spring Boot 에 대한 Study를 진행하면서 얻게 된 정보들, 그리고 저와 동일하게 공부를 시작하려는 분들에게 도움이 되고자, study 섹션으로 분리하여 정리하려고 합니다. 워낙 쉽게 개발 및 배포가 가능하도록 되어 있어 그런지, Spring Boot, Spring Fr...
신형 매직 키보드가 출시되었습니다. 약 한달 정도 지난 것 같고, 저는 국내 공홈에 출시된 직후 주문하여 받은 지 약 2주정도는 된것 같습니다.
코로나19로 인해 재택 근무가 늘어나면서 판매량이 늘어난 품목들이 있습니다. 모니터, 노트북, 화상 캠, 등등이 그 대상입니다. 저 역시 재택 근무가 늘어나면서 집에서의 환경을 조금 더 업무에 맞게, 개발하기 편안하도록 수정해 가고 있었습니다.
아마도 개발일을 꾸준히 하면서부터 키보드에 대한 욕심이 늘어난 것 같습니다. 거의 펜타그래프 방식의 키보드만 사용해 오다가, 언젠가 한번 호기심에, 특가로 올라왔다는 리얼포스 키보드를 구매하면서부터 키보드에 관심이 많아진 것 같습니다.
최근 에어팟 프로에 대해서 음질/연결 문제 관련하여 서비스 프로그램이 공지되었습니다. 저는 뒤늦게 알고 지난 주, 서비스를 온전하게 받아서 이렇게 공유 차원에서 글을 씁니다.
기존 블로그에서 adb 설치하기 글이 도움이 많이 되었는지 꾸준히 조회가 있어, 조금 더 최신에 맞게, 여러 OS에 대해, 다양한 방법으로 설명을 다시 하겠습니다.
블로그를 시작하려는 많은 사람들이 있습니다. 물론 최근에는 글을 통한 블로그 보다는 영상을 이용한 유투브를 더 많이 선호하는 것 같기도 합니다. 영상이 발전하고 휴대 기기를 통한 손쉬운 스트리밍이 발전하고, 전자책 역시 꽤 많은 발전을 이루어 왔음에도 불구하고, 여전히 서점은 있고...
zsh 을 사용하면서 참고하게 되는 사항들을 정리하여 둡니다. 나중에 재설정해야 하는 시점이나, 혹은 저처럼 맥북을 새로 구입하여 설정하시는 분들께 참고가 될 만한 자료입니다. zsh 은 시스템 설정인 만큼, 백업/복원이 쉽지는 않으니 참고가 되시기 바랍니다. (물론 타임머신 통백...
이메일을 업무나 개인적으로 많이 사용하게 되면서 다음의 설정들을 많이 활용하였습니다. 메모 목적도 있으나, 찾는데 시간을 많이 소요하게 되는 부분이라 공유 차원에서 작성하는 글입니다.
OS 들에 어두운 테마(Dark theme) 가 나오기 시작한 이후, 별도의 설정 없이 시스템 설정에 따라 강제로 dark theme 가 활성화되는 경우가 있습니다. Google chrome 역시 이런 프로그램 중 하나인데, 강제로 변경하는 방법을 소개합니다.
이번에는 일반적인 서버 환경에서의 권한(permission)에 대한 이야기를 해 볼까 합니다. 리눅스 계열의 서버 환경에서 파일 permission에 대한 부분은 아주 중요한 부분입니다. 개인용 PC용 OS인 Windows 와 MacOS 에서는 이 권한에 대한 부분을 크게 신경쓰지...
개발을 하다 보면 특정 문자열이 포함된 파일을 찾게 되는 경우가 더러 있습니다. 개발했던 파일들 - 예를 들어 .java, .properties, .xml, .json 등 - 은 결국 다 text 파일들이고, 따라서 문자열 검색을 할 수 있습니다. class 파일이나 pptx 파일...
윈도우와 마찬가지로 우분투 역시 WOL을 지원합니다. WOL은 원격지에서 Magic Packet 이라는 특정 패킷을 전송해서 Lan 카드를 통해 전원을 켜는 것을 말하는데, 전제 조건은 하드웨어 중 네트워크 카드가 이를 지원해야 합니다. (근래에 나온 거의 대부분의 랜카드가 이를 ...
linux 환경에서 개발을 진행하다 보면 편의를 위해서든, 프로그램 구동을 위해서든 다양한 이유로 shell을 접하게 됩니다. 아래 예시와 같은 상황에서 어떻게 shell 파일의 path를 알아내고 이를 활용할 수 있는지 찾아보았고, 잘 정리된 내용이 있어 메모 용도로 작성해 둡니...
MySQL(mariadb) 에서 데이터베이스 생성, 사용자 생성 방법에 대해서 자꾸 잊어버려서, 백업 목적으로 작성해 둡니다. 다양한 mysql client 프로그램(Heidi SQL, Sequel Pro 등)을 이용하여 데이터베이스나 사용자를 생성해도 되지만, 쿼리문을 활용하는 ...
몇 번을 찾아도 자꾸 까먹게 되는 명령어들이라 메모 형태로 적어서 보관합니다. 출처의 내용에서도 알 수 있듯이, Cent-os 기반으로 작성되었으나, 대부분의 linux 기반 시스템에서 유사하게 사용할 수 있으므로 참고용으로 활용할 수 있습니다.
개발 업무를 진행하면서 vi editor 를 사용하는 일은 너무 당연한 일이 되었습니다. 서버에 따라서 명령어나 사용법에 조금씩 차이가 있으나 서버 작업을 하는 데 있어서 가장 많이 사용하는 vi editor 의 사용법에 대해서 몇 가지를 기록합니다.
맥의 dock 은 프로그램 실행을 빠르게 할 수 있게 도와주는 유용한 환경입니다. 최근 목록을 보여주거나, 특정 폴더를 넣어서 그 내용을 빠르게 확인할 수 있습니다.
맥이든 위도우든 특정 기기를 처음 받거나, 포멧하여 새롭게 OS를 구성하기 시작하고, 이런 저런 프로그램들을 설치하게 되면 각종 시작 프로그램, 혹은 백그라운드 앱들이 실행되게 됩니다. MacOS 를 처음 접하면서 linux 에 대해서도 익숙하지 않은 사용자라면, ‘시작 프로그램’...
프로그램을 사용할 때는 거의 그런 일들이 없지만, 개발을 하다 보면 특정 포트가 겹쳐서 실행이 되지 않는 경우가 있습니다. 이럴 때에는 해당 프로세스를 찾아서 kill 하고, 내가 원하는 프로그램을 다시 실행시키면 됩니다.
화면을 캡쳐하는 동작은 업무를 막론하고 자주 있는 것 같습니다. 브라우저 내에서 화면의 내용을 캡쳐하는 것은 브라우저의 확장 프로그램을 사용하는 것이 편리할 수 있지만, PC내 전반에 걸친 캡쳐 기능도 상황에 따라서 유용하게 사용됩니다.
Mac 시스템을 사용하면서 Homebrew 의 이용은 거의 필수적입니다. 없다고 문제될 것은 없지만, 사용성 측면에서 확싫히 이점이 있으므로, Homebrew 를 꼭 이용해 보시기 바랍니다. 여기서는 Java, 특히 JDK 를 설치하고 관리하는 방법에 대해서 설명해 보려고 합니다.
마우스 속도 조절은 맥 사용자라면 누구나 더듬더듬 설정을 찾아갈 수 있습니다. 시스템 환경설정 > 마우스 에 진입하여 이동 속도 항목의 슬라이더를 오른쪽 끝으로 보내면 가장 빠른 속도입니다. 여기서는 그 설정 말고, 명령어를 통해 설정하는 방법을 공유합니다.
Java 8 부터 도입된 함수형 인터페이스(Functional Interface)에 대해서 알아보려고 합니다. Java 8 이 배포된 지 한참의 시간이 지났음에도 불구하고, 여전히 이에 대한 이해가 충분하지 않았습니다. 또한 일상적인 부분에서 잘 사용하지 않으면 활용하지 못하고 끝...
Java 에서 list 를 다루는 것은 매우 흔한 일이면서도 자주 사용하는 기능 중의 하나입니다. 저 역시 개발업무를 진행하면서 가장 많이 사용하는 것이 list 와 map 입니다.
Java 에서 종종 필요한 기능 중 하나가 랜덤 문자열 생성입니다.
Back-end 서버를 개발함에 있어, 보통은 client 의 요청(request)을 받아 특정 로직을 수행하고 그 결과를 보내(response)주지만, 시스템의 규모가 커질수록 서버 간 통신이 불가피하게 됩니다. 특히 시스템 초기에는 불필요햇으나, 서비스의 규모가 커지면서 시스템...
정규식은 개발 업무를 하는 데 있어서 가장 많이 사용되는 부분 중 하나입니다. 인프라를 구성하면서 설정 파일을 만들던, Backend server개발을 하면서 특정 요청들에 대해서 처리를 하던, UI에서 validation 처리를 하던 아주 많이 사용되는 기술 중 하나입니다. 여기...
Java 에서 원격 서버 명령어를 실행하는 데에는 apache-commons 에 있는 라이브러리를 사용하면 편리합니다. maven / gradle 환경에서 apache-commons 을 빈번하게 사용하기 때문에 그대로 사용하면 됩니다.
형상관리 시스템을 사용하는 데 있어, 지금은 거의 대부분의 환경이 git 을 사용하고 있는 것 같습니다. 이렇게 대중화되었음에도, 사용상에 조금 헷갈리는 부분이 있어 정리해 둡니다.
Git이나 SVN을 처음 접하고, 개발을 진행할 때에는 회사에서 단순히 ‘개발자’ 였기 때문에 별다른 어려움 없이 매일 같은 명령어만 사용해 왔습니다. 그러던 중 신규로 repository를 생성해야 할 일이 발생하였는데, 아무렇지 않게 가져다가 사용하던 repository들이,...
local git 이든, github 든 git 을 사용하다가 특정 commit 을 삭제하고자 하는 경우, 어떻게 해야 하는지를 설명해보고자 합니다. 흔한 일은 아니지만, 이런일이 발생하면 잘 기억이 나지 않아 해메는 경우가 있으므로, 메모해 둡니다. 추가로 git 사용하는데 쓸만...
흔히들 이야기하는 소스 형상관리(version control) 툴 이라고 하면 svn 과 git 을 떠올리게 됩니다. 두 가지 툴이 가장 많이 사용되는 것 같고, 저 역시 두 가지를 다 사용하고 있습니다. 복수의 다른 개발자들과 협업하고 소스를 안전하게 보관하는 목적으로 사용하기 ...
신형 매직 키보드가 출시되었습니다. 약 한달 정도 지난 것 같고, 저는 국내 공홈에 출시된 직후 주문하여 받은 지 약 2주정도는 된것 같습니다.
코로나19로 인해 재택 근무가 늘어나면서 판매량이 늘어난 품목들이 있습니다. 모니터, 노트북, 화상 캠, 등등이 그 대상입니다. 저 역시 재택 근무가 늘어나면서 집에서의 환경을 조금 더 업무에 맞게, 개발하기 편안하도록 수정해 가고 있었습니다.
아마도 개발일을 꾸준히 하면서부터 키보드에 대한 욕심이 늘어난 것 같습니다. 거의 펜타그래프 방식의 키보드만 사용해 오다가, 언젠가 한번 호기심에, 특가로 올라왔다는 리얼포스 키보드를 구매하면서부터 키보드에 관심이 많아진 것 같습니다.
최근 에어팟 프로에 대해서 음질/연결 문제 관련하여 서비스 프로그램이 공지되었습니다. 저는 뒤늦게 알고 지난 주, 서비스를 온전하게 받아서 이렇게 공유 차원에서 글을 씁니다.
container 형태로 여러 프로그램, 서비스들을 실행하려고 할 때에는 그 명령어들이 복잡한 이미지(docker images)를 얼마나 customizing 하느냐, 또 얼마나 많은 환경변수등을 추가해서 사용하느냐에 따라 엄청나게 길어질 수 있습니다. 예를 들어 jenkins를 ...
Docker container에서 환경변수를 활용하는 방법에 대해서 설명합니다. 현재 시점 기준으로 하여 docker documentation에 명시된 사항들을 대상으로 합니다. 다양한 방법을 소개하나, 각 인프라 환경에 맞게 취사선택하여 활용하는 것을 권장합니다.
Kubernetes 사용하는 경우, 공식 docker hub 를 사용하지 않고, 별도로 구축한 private registry 를 사용하는 방법을 설명합니다. 기본적으로 kubernetes 는 공식 registry 를 바라보도록 설정되어 있습니다.
개인적으로 jquery 를 사용하는 데 있어서의 가장 큰 목적은 selector 사용의 편리성이라고 생각합니다. 주관적인 판단입니다만, jquery 는 selector 부분을 아주 잘 만들어놓은 것임에 틀림 없습니다.
linux 환경에서 여러 svn 서버를 구동하는 경우에, 각 repository 별로 svnserve 명령어를 실행하는 것은 귀찮은 일입니다. 그럼에도 불구하고 각각 실행하는 것이 편리한 경우도 있습니다. 예를 들어 각 repository 를 재실행 할 때에 다른 repositor...
GitHub 를 사용하다 보면, 뜻하지 않게 경고 메일을 받을 때가 있습니다. 이러한 경고 메일은 물론, 본인이 개발하고 있는 프로그램이 보안에 취약해도 상관이 없다 - 즉, 단순히 공부 목적이라거나 하는 등으로 크리티컬하게 받아들이지 않는 경우에는 무시해도 됩니다.
윈도우와 맥을 병행해서 사용하다 보면, 키 매핑이 달라서 불편할 때가 있습니다. 예를 들어 윈도우의 Ctrl 키와 맥의 ⌘ 키가 그렇습니다.