0. 시작하며 프로젝트에서 SSE(Server Sent Event) 방식의 알림을 구현을 담당했습니다. 이때발생한 에러와 트러블 슈팅을 기록하려합니다. 1. 알림 구현 방식 후보군 1-1 Short Polling 클라이언트가 서버에 요청을 보내어 새로운 정보가 있는지 확인하는 방식입니다. 서버는 즉시 응답을 보내며 사용가능한 데이터가 있다면 보내줍니다. 일정 시간 혹은 동작후, 클라이언트는 다시 서버에 요청을 보내게됩니다. 이 방법은 쉽고 빠르게 구현될 수 있지만 필요치 않은 클라이언트의 요청이 많이 생길 수 있습니다. 이는 트래픽과 서버의 부담이될 수 있는 요인입니다. 1-2 Long Polling Short Polling에서 조금 더 개선된 방식입니다. 마찬가지로 클라이언트가 서버에 요청을 보내어 사..
0. 시작하며 이전 프로젝트에 검색 로직을 JPQL로 개발했었습니다. 이를 JPQL로 구현하니 코드가 매우 복잡하고 길어졌고 실무에서 많이 사용한다는 Querydsl을 사용하여 리팩토링하여 기록하려 합니다. 1. JPQL이란? Java Persistence Query Language 로서 이를 기반으로 JPA의 하이버네이트가 SQL문으로 변환하여 사용하게됩니다. 기본 JPA 메서드 보다 섬세한 쿼리를 사용할때 사용하게됩니다. 문자열로 작성됩니다. 특징 (장점) 별칭 엔티티의 별칭을 필수적으로 명시해야합니다.(as 생략 가능) 대소문자 구분 엔티티와 그 속성은 대소문자를 구분하여 작성해야합니다. 하지만 SELECT, FROM, WHERE등의 JPQL문법은 구분하지 않습니다. 엔티티 이름 JPQL에서 사용되..
0. 사용 이유 프로젝트에 얼굴인식을 수행해 대상의 신원, 나이, 성별을 인식하는 기능을 sk open api를 사용하여 구현이 완료된 상태입니다. 하지만 api 호출을 최소화 하기위해 이미지의 유효성검사를 자체적으로 실행하여 개선 목적으로 ProcessBuilder로 유효성 검사 실행을 도전했습니다. 성능 비교를위해 다음과 같이 임시 test를 진행해보겠습니다. 1. ProcessBuilder란? Process 클래스의 보조 클래스로 start 메서드를 호출하면서ProcessBuilder 클래스의 인스턴스에 정의 된 속성으로 새 프로세스를 만들 수 있습니다. ProcessBuilder는 동기화 된 클래스가 아니며, 명시적으로 동기화되지 않으면 멀티 스레드로부터 안전하지 않습니다. cmd로 명령을 수행하..
JPA 이름 규칙 Repository에서 이름규칙을 이용해 쿼리를 이용할 수 있습니다. 개발 편의성이 좋지만 잘 알고 사용하기위해 정리해 두려고합니다. 이는 공식문서에 잘 나와 있습니다. https://docs.spring.io/spring-data/jpa/reference/jpa/query-methods.html find...By 가장 많이 사용하는 단건 조회 키워드입니다. 복수는 Collection, Page 조회 가능 exists...By 조회 유무를 boolean타입으로 반환합니다. counts...By 검색 결과 총 record 수를 반환합니다. ...First... 결과값 수를 제한합니다. (First, Top) //조회할 record가 1개인 경우 별도의 인자 설정 ..
더보기 문제 상황 .yml 파일의 환경 변수 주입과 bean 과 환경 변수 주입 순서에대해 무지해 겪은 에러를 공유하고자 글을씁니다. 이번 프로젝트는 다음과 같은 환경에서 진행중입니다. Java 11(JDK) Spring Boot Maven 위 환경에서 sms알림기능을 위해 API KEY와 저의 핸드폰 번호 등을 환경변수로 관리해야하는 상황이었습니다. 직접 구현하는건 처음이지만 익숙한 기능이기에 빠르게 할 수 있을 줄 알았습니다.. 그러나 다음과 같은 두가지 문제가 발생했습니다. API_KEY, API_SECRET 환경 변수가 Null이다. (1번 해결후)제 휴대폰 번호가 아닌 다른 번호로 주입된다. Bean 생성시기와 환경 변수 주입 시기 bean이란? 기존 Java 에선 클래스를 생성하고 new를 입..
디자인 패턴이란? 프로그램을 설계할 때 지금 당장의 문제, 미래에 발생할 수 있는 문제와 추가될 기능 등을 고려해야하는데 이를 객체간의 관계 등을 이용하여 해결할 수 있도록 고안한 하나의 '규약'입니다. 즉, 개발시 문제 발생 위험도를 최대한 줄일 수 있도록 도와줍니다. 이를 자연스럽게 사용할 수 있다면 개발 시간을 많이 단축하고 효율적인 코드를 다룰 수 있을거같습니다. 이러한 디자인 패턴은 다양하게 존재하는데 이번 게시물에선 "싱글톤 패턴" 에 대하여 다루어 보겠습니다 싱글톤 패턴이란? 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴으로 보통 DB연결 모듈에 많이 사용된다고 합니다. 싱글톤 패턴의 객체는 서버에 많은 요청이 올때 new 를 통해 매번 새로운 객채를 생성하고 GC에 의해 삭제되는 오버..