Backend 25

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

Spring Transactional Isolation

이전 글 : Propagation Spring Transactional Propagation 이번에 회사에서 transactional anotation을 사용하면서 부족한 게 많아 정리를 한다! @Transactional DB는 트랜잭션 단위로 쿼리를 실행하며 commit을 통해 작업내용을 처리하고 트랜잭션을 종료한다. spring keepbang.tistory.com Propagation에 이어서 Transactional의 속성인 isolation을 정리해볼까 한다. Transaciton은 ACID라는 원칙을 보장해야 한다고 한다. Atomicity(원자성) : 트랜잭션내의 모든 작업은 완료되거나 모두 실패해야 한다. 트랜잭션의 작업중 하나만 완료하거나 할 수 없고 하나라도 실패하면 모두 실패한 후 롤..

Backend/Spring 2023.01.04

Spring Transactional Propagation

이번에 회사에서 transactional anotation을 사용하면서 부족한 게 많아 정리를 한다! @Transactional DB는 트랜잭션 단위로 쿼리를 실행하며 commit을 통해 작업내용을 처리하고 트랜잭션을 종료한다. spring에서는 Transactional 어노테이션을 통해서 DB connection부터 commit까지의 일련의 작업들을 프록시 형태로 제공한다. spring에서 제공하는 AOP(관점 지향 프로그래밍)중 대표적인것이 바로 이 Transactional 어노테이션이다. 사용 방법은 간단하다. ... @Transactional public void save(Member member) {} @Transactional public void findById(Long id) {} ... ..

Backend/Spring 2022.12.28

자바에서 페이징 처리 구현하기(feat. batch)

개발을 하다보면 조회할 때 페이징 처리를 해야하는 경우가 생긴다. 이 글에서는 조회할 때가 아닌 데이터를 저장/수정하거나 삭제 할 때 사용할 수 있는 페이징 방법을 소개해 볼려고 한다. 페이징 처리 데이터를 처리 할 때 너무 많은양의 데이터를 처리할 경우 db성능이나 timeout, 속도등의 문제로 데이터를 일정한 개수만큼 나눠서 처리하는 것을 말한다. 주로 API에서 데이터를 조회할 때 많이 사용했었는데 이번에는 배치에서 데이터를 제어할 때 페이징 처리를 구현하게 되었다. 공통 코드 public class LimitRangeUtil { // default size : 1000 private int fetchSize = 1_000; public LimitRangeUtil(int fetchSize) { t..

Backend 2022.12.24

Java 8에 추가된 것들 2

람다(Lambda) 표현식 / 함수형 인터페이스(Functional Interface) 람다 표현식과 함수형 인터페이스는 밀접한 관계가 있어서 함께 정리했다. 메소드가 하나인 인터페이스를 익명클래스로 구현할 수 있는데 익명 클래스를 사용하면 가독성도 떨어지고 코드가 길어지는 단점이 있다. 이러한 단점을 보완하기 위해서 람다 표현식이 만들어졌고 익명 클래스로 구현된 인터페이스를 좀더 간단하게 표현하기위해서 사용되어진다. 람다표현식은 인터페이스에 메소드가 하나인 것들에만 적용이 가능하다. 아래는 익명 클래스를 람다표현식으로 바꾼 예제이다. interface TestInterface{ int calculate(int a, int b); } //익명 클래스 TestInterface calculateAdd = n..

Backend/JAVA 2021.09.17