능구
-
MariaDB. ST_Distance_Sphere does not exist. Let's create!개발 기록 2024. 4. 4. 14:50
ST_Distance_Sphere는 MariaDB의 버전을 탄다. 로컬(10.4.32-MariaDB)에서는 ST_Distance_Sphere가 작동해서 테스트를 문제없었지만 서버(10.4.8-MariaDB)에서는 ST_Distance_Sphere does not exist 에러가 발생했다. 아래에 ST_Distance_Sphere 함수 지원에 대한 정보가 있지만 믿을만한지 모르겠다... https://mariadb.com/kb/en/st_distance_sphere/ ST_DISTANCE_SPHERE Spherical distance between two geometries (point or multipoint) on a sphere. mariadb.com 없으면 만들어서 사용한다. 함수를 만드는 방법을..
-
Rocky Linux 9 install개발 설치 2024. 1. 12. 15:47
설치 배경 https://www.redhat.com/ko/topics/linux/centos-linux-eol CentOS Linux의 End of Life (EOL) 필수 정보 요약 CentOS Linux 7의 지원 종료 (End of Life, EOL)는 2024년 6월 30일입니다. 이에 대한 준비 상황과 Red Hat의 마이그레이션 지원 방법을 알아봅니다 www.redhat.com Centos 지원 종료에 예정으로 많은 기업 또는 사용자가 Rocky Linux로 전환할 듯 하다. Rocky Linux https://rockylinux.org/ko Rocky Linux Rocky Linux is an open enterprise Operating System designed to be 100% bu..
-
Nextjs 14. how to add unsupported metadata개발 기록 2024. 1. 12. 00:27
nextjs 14.0.4로 개발 하던중 을 추가해야할 일이 생겼다. nextjs 14에서 메타 태그를 추가하는 방법은 layout.js나 page.js에 아래와 같은 방법으로 매타 데이터를 추가해주면 된다. // layout.js | page.js import { Metadata } from 'next' export const metadata = { title: '...', description: '...', } export default function Page() {} 하지만! 현재 지원하지 않는 태그들도 있다. https://nextjs.org/docs/app/api-reference/functions/generate-metadata#unsupported-metadata Functions: gene..
-
Spring boot. JPA Expecting a SELECT query개발 기록 2023. 9. 20. 14:45
JPA를 사용해 delete 쿼리를 날리던중 "Expecting a SELECT query" 라는 오류 메세지가 등장했다. @Query("delete from AbcKeyword ak " + "where ak.profile.id = :id ") void deleteAllByProfileId(UUID id); JPA는 delete를 수행하기 전에 select를 날리기 때문이다. 디버깅 모드로 끊어서 보면 repostory의 delete를 실행하는 시점에서는 실제로 select가 실행되고 select 결과에 따라서 트랜젝션이 끝날때 delete를 실행한다. @Transactional // 2. delete 실행 public void deleteAbc(...){ abcRepository.delete~~(id)..
-
Spring Boot. How to get custom header value using @RequestHeader개발 기록 2023. 8. 31. 18:58
환경. spring boot 3.1.1 목표. 웹 필터에서 커스텀 헤더를 추가하고 컨트롤러에서 @RequestHeader를 이용해서 값을 가져온다. 시작. 웹 필터에서 커스텀 헤더를 추가하기 위해선 보통 MutableHttpServletRequest를 만들어서 사용할 것이다. 하지만 인터넷에 돌아다니는 보통 많이 쓰는 코드를 가져오면 컨트롤러에서 @RequestHeader를 이용해서 값을 가져오지 못할 것이다. 이유는 getHeaders()를 오버라이딩 하지 않은 코드이기 때문이다. 컨트롤러에서 @RequestHeader를 사용하고 디버깅을 걸어서 코드를 따라가보면 스프링이 getHeaders()에서 값을 가져오는 것을 알 수 있다. (그 중에서도 coyoteRequest라는 변수에서 값을 꺼내온다.) ..
-
Spring Boot. GoogleIdTokenVerifier's parameters(HttpTransport, JsonFactory) : How to know that?개발 기록 2023. 8. 10. 12:34
환경. java 17 spring boot 3.1.1 google-api-client:2.2.0 목표. 1. GoogleIdTokenVerifier 생성에 필요한 파라메터를 찾는다. (HttpTransport, JsonFactory) 2. 사람들은 이것을 어떻게 알아냈는지 알아본다. 문제. https://developers.google.com/identity/gsi/web/guides/verify-google-id-token?hl=ko 서버 측에서 Google ID 토큰 확인 | Authentication | Google for Developers 이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English 의견 보내기 서버 측에서 Google ID 토큰 확..
-
Spring Boot. JPA Repository insert multi table under the same Transaction.카테고리 없음 2023. 7. 20. 12:46
공부할 겸 JPA를 한번 사용해 보려고 한다. 환경. java 17 spring boot 3.1.1 목표. 한 트랜젝션에서 여러개의 테이블에 insert나 update 작업이 필요하면 어떡하지? 문제. JPA의 레파지토리를 보면 CrudRepository 인터페이스부터 save()를 제공한다. 이 save 메소드는 SimpleJpaRepository에서 overriding해서 구현되어진다. @Repository @Transactional(readOnly = true) public class SimpleJpaRepository implements JpaRepositoryImplementation { ... @Transactional @Override public S save(S entity) { Asser..
-
Spring Boot. @PathVariable with a dot(.) gets truncated개발 기록 2023. 7. 3. 16:21
이 내용은 스프링 문서에 있는 내용의 요약이다. https://www.baeldung.com/spring-mvc-pathvariable-dot @PathVariable은 컨트롤러에서 사용되는 어노테이션이다. // ex. controller @GetMapping("{email}") public ResponseEntity getByEmail(@PathVariable String email) { System.out.println(email); return ResponseEntity.ok(email); } 문제는 이메일과 같은 dot(.)을 포함하는 문자열이 들어가면 원하는대로 작동하지 않는다. (.) 이후의 문자열은 사라진다. abc@abc.com => abc@abc 어떻게 해야할까? 스프링 문서에 답이 있다..
-
MySQL. 'Select tables optimized away' vs 'Using index'개발 기록 2023. 6. 30. 18:34
쿼리를 짜다 보면 마지막 seq를 가져와야 되는 경우가 생긴다. 이 경우 보통 2가지 경우를 사용한다. -- seq는 pk다. SELECT MAX(seq) FROM abc; SELECT seq FROM abc ORDER BY seq DESC LIMIT 1; seq가 pk 이기 때문에 둘다 빠르다. 하지만 개발자라면 무엇이 더 빠를지 고민이 생길 것이다. 그래서 explain을 사용해본다. EXPLAIN SELECT MAX(seq) FROM abc; -- => Extra: Select tables optimized away EXPLAIN SELECT seq FROM abc ORDER BY seq DESC LIMIT 1; -- => Extra: Using index 그러면 Extra의 설명에 위와 같은 메세..
-
MyBatis. BindingException: parameter '~~' not found개발 기록 2023. 5. 31. 14:12
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'userId' not found. Available parameters are [arg1, arg0, param1, param2] MyBatis를 사용하면 Mapper 부분에서 종종 만나는 오류이다. 코드를 수정한 것이 없는데 개발을 하다 보면 갑자기 나오기도 한다. 하나하나 파악해보겠다. 환경: java 1.8 spring boot 원인: (아래의 코드들은 자바 버전에 따라서 개선된 부분이 있지만 큰 틀은 비슷하다.) 오류가 난 부분부터 코드를 따라가다 보면 MapperMethod 클래스의 이너..