Develop 43

kotlin jdsl에서 ElementCollection 컬럼 조건 추가하기

코프링으로 개발중에  ElementCollection으로 된 컬럼을 조건으로 조회하는 기능을 개발하던중 여러 여러가지 안되는 상황이 있어서 기록하고자 글을 남긴다... 해결방법은 kotlin-jdsl github 이슈에서 찾았다!! exists subquery 문의 · Issue #774 · line/kotlin-jdsl안녕하세요. exists subquery에 대해 문의드립니다. Entity 구조가 아래와 같을 때, @Entity class Notification( @Id val id: Long, @Enumerated(EnumType.STRING) @ElementCollection(fetch = FetchType.EAGER) @CollectionTable(name ...github.com  엔티티 구조..

Backend/kotlin 2024.12.20

Spring JPA Custom Id Generator 만들기

▤ 목차 개요JPA를 사용할 때 보통 id는 시퀀스 id를 자주 사용합니다.@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id; 만약 요구사항으로 "앞에 특정 문자를 포함한 아이디 체계"를 사용해야 한다고 하면 어떻게 해야할까 고민해보다가 내용을 찾고 정리해봤습니다.  IdGeneratorType Annotation 검색을 해보면 GenericGenerator 애너테이션을 사용해서 Generator 구현체와 함께 사용하는 예제들을 많지만 해당 애너테이션은 deprecated 되어있었습니다.   다른 방식으로는 IdGeneratorType으로 애너테이션을 만들어서 사용하는 방법이 있습니다.   내부에는 Generator를 상속 받는 ..

Backend/Spring 2024.11.06

Spring boot 3.x OAuth2(Google, Kakao) 로그인/회원가입 구현 2 - API 개발

▤ 목차 이전글2024.07.31 - [Backend/Spring] - Spring boot 3.x OAuth2(Google, Kakao) 로그인/회원가입 구현 - Flutter Spring boot 3.x OAuth2(Google, Kakao) 로그인/회원가입 구현 - Flutter▤ 목차🙇‍♂️ Flutter 개발자가 아니라 코드 작성부분은 다소 생략하였습니다.ㅠㅠ  Flutter로 하는 OAuth2 로그인 방법Spring security로 OAuth2로그인을 구현 하려고 하면 보통 web으로 로그인 하는게keepbang.tistory.com   로그인/회원가입 API이번 글에서는 Flutter에서 호출하는 로그인 / 회원가입 API를 살펴보겠습니다.이전글을 보셨다면 아시겠지만 사용한 API는 한 ..

Backend/Spring 2024.10.02

Spring boot 3.x OAuth2(Google, Kakao) 로그인/회원가입 구현 1 - Flutter

▤ 목차🙇‍♂️ Flutter 개발자가 아니라 코드 작성부분은 다소 생략하였습니다.ㅠㅠ  Flutter로 하는 OAuth2 로그인 방법Spring security로 OAuth2로그인을 구현 하려고 하면 보통 web으로 로그인 하는게 많이 보입니다. 하지만 kakao developer 문서를 보면 네이티브 앱에서는 리다이렉트 방식을 사용 할 수 없다고 나옵니다.그래서 공식 문서를 참고하여 프론트(Flutter)와 백엔드(Spring)의 역할을 나눠 개발하기로 했습니다. Google과 Kakao 로그인 개발을 하기 위해 아래 두 문서를 참고했습니다. [참고]  Kakao Developers카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 A..

Backend/Spring 2024.07.31

Java 불변 객체(immutable object)

불변 객체?객체의 상태가 변경되지 않는 객체. 변경이 불가능한 객체를 말한다.Java에서는 final 키워드를 사용하여 불변 객체를 만들 수 있다. 불변 객체의 사용 이유객체가 변경되어도 항상 새로운 객체를 반환하기 때문에 여러 쓰레드가 동시에 한 객체에 접근해도 안전하다.디버깅이나 예측 가능성이 높아지고 메서드 실행시 사이드 이펙트를 예방할 수 있다.변경되지 말아야할 필드값이 존재할 경우 사용가능(JPA)함수형 프로그래밍으로 사용 될 수 있다. 코드로 알아보는 불변 객체 Person.classpublic class Person { public String name; public Age age; public Person(String name, Age age) { this.na..

Backend/JAVA 2024.05.16

이커머스 서비스에서 동시성 문제 처리해보기

동시성이란?여러 작업(스레드)이 공통된 한가지 자원에 동시에 접근하는 것이런 상황에서 주로 발생하는 동시성 문제는 아래와 같다. 경쟁 상태(Race Condition) : 두 개 이상의 스레드가 동시에 공유 자원에 접근하고 수정을 시도할 때 발생한다. 예상치 못한 결과가 발생(DB 일관성이 깨짐)하거나 잘못된 데이터를 조회할 수 있다.교착 상태(Deadlock) : 두 개 이상의 스레드가 서로 다른 자원을 기다리면서 대기하고 있는 상황을 말한다. 서로 다른 스레드가 소유한 자원을 기다리며 멈추어 있다.  이커머스 서비스에서 발생 할 수 있는 동시성 문제재고 갱신시 동시성 문제 : 여러 사용자가 동시에 상품을 구매할 경우, 재고 갱신 과정에서 동시성 문제가 발생할 수 있다. 10명의 사용자가 동시에 같은 ..

Backend/Spring 2024.05.08

Gradle + Nexus Repository library 사용 / Nexus 개인정보 암호화

Spring으로 개발을 하다보면 공통된 기능들을 따로 모아서 여러 프로젝트에 사용한다. 그럴때 많이 사용하는게 Nexus이다. 이번 글에서는 아래 두가지에 대해 알아볼려고 한다. Nexus 개인정보 암호화 하는 방법 Nexus에 올린 library를 가져와서 사용하는 방법 개발환경 macOS(M2 Pro) IntelliJ IDEA gradle 8.1.1 이 방법을 적용하면서 번거로운 부분도 있었다. 전체 프로젝트에 적용이 된다. 패스워드나 아이디, url이 변경될때마다 값을 바꿔줘야한다. 프로젝트를 처음 받는 사람은 설정하기 까다롭다. 그냥 이런 방법도 있구나~~하는 마음으로 봐주시길 바랍니다. 1. Nexus 개인정보 암호화 하는 방법 Nexus library를 사용하기 위해서 build.gradle에..

ETC 2024.03.14

github issue label 모든 repository에 한번에 적용하기

회사에서 ci 작업을 진행하던 중 issue label을 적용시켜야 하는 상황이 생겨서 label을 적용하는 스크립트와 내용을 공유하고자 한다. github 조직에서 관리자 권한은 issue label 을 한 번에 적용시킬 수 있을 거라 생각해서 찾아보니 처음 repository를 생성할 때 적용시키는 것만 있었다. Set the labels that will be included when a new repository is created in this organization. 그래서 더 찾아보니 cmd로 api를 날려서 label을 적용 할 수 있는 github-label-sync 라는걸 찾았다! 필요한건 3가지 정도가 필요하고 위에서 말한 github-label-sync 는 단일 repository만..

Git 2023.11.06

Spring boot 3 JUnit test java.lang.NoSuchMethodError 'parseQualifiedMethodName' 이슈 해결

junit test를 진행할 때 given/when/then 형태로 테스트 작성을 많이 한다. 이때 입력 데이터를 다양하게 받고 싶을 때 아래와 같이 사용하곤한다. private static Stream testParameter() { return Stream.of( Arguments.arguments("test", 1, new TestObject(1)), Arguments.arguments("test", 2, new TestObject(2)) ); } @ParameterizedTest @MethodSource("testParameter") void test(String arg1, Integer arg2, TestObject testObject) { ... } 이슈 사항 이번에 Spring boot 3 ..

Error resolution 2023.09.06

[가상면접 사례로 배우는 대규모 시스템 설계] 처리율 제한 장치

가상면접 사례로 배우는 대규모 시스템 설계 책에서 4장 처리율 제한 장치에 대한 내용을 정리 처리율 제한 장치 처리율 제한 장치는 서버에서 특정 임계치를 정해놓고 해당 임계치를 넘는 요청이 클라이언트나 서비스에서 들어오면 해당 요청을 중단시키는 역할을한다. 처리율 제한 장치를 사용하는 이유는 무엇일까? Dos공격에 의한 자원 고갈을 방지 비용 절감 효과. 서버 과부하를 막음. 사용하는 서버나 시스템 규모에 따라서 처리율 제한 장치의 알고리즘이나 설계가 달라질 수 있다. 따라서 아래에 요구사항에 따라 처리율 제한 장치를 어떻게 사용할 지 정해야 한다. 사용하는 시스템에 따른 처리율 제한 장치의 요구사항을 정리한다. 시스템 규모나 환경, 제어 규칙, 제한 장치의 위치, 제한된 요청의 알림 여부등의 내용들이 ..

ETC 2023.01.12