Backend 22

Spring boot 3.x + flutter 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

Java 8에 추가된 것들 1

내가 쓰는 언어의 버전에서 어떤걸 사용할 수 있는지 알아보고자 정리하였다. 먼저 자바 8에서 추가된 주요 기능들을 나열하면 아래와 같다. 1. Optional 2. 인터페이스의 기본 메소드(Default method) 3. 날짜와 시간 관련 클래스들 추가 4. 병렬 배열 정렬 5. StringJoiner 추가 6. 람다(Lambda) 표현식 7. 함수형 인터페이스(Functional Interface) 8. 스트림(Stream) Optional(옵셔널) 선택적으로 뭔가를 처리 할 때 사용하는 것으로 객체를 편리하게 처리하기 위해서 만든 클래스다. Optional클래스는 null 처리를 보다 편리하게 하기 위해서 만들어졌다. NullPointerException이 발생할 수 있는 상황에서 문제를 보다 간편..

Backend/JAVA 2021.09.09

Spring Bean 설정 방법

1. XML 설정 사용 XML을 사용하면 컴파일 없이 빈 설정 정보를 변경할 수 있다. 빈 설정에 에러가 났을 경우 컴파일러가 이를 잡아주지 못하고 문제가 생겼을 경우에 원인을 찾는게 어렵다. 최근에는 스프링 부트를 많이 사용하면서 XML기반의 설정은 잘 사용하지 않는다. XML 설정 방법 resources폴더 아래에 xml파일을 생성하여 설정한다. [appConfig.xml] id : 등록할 빈의 이름 class : 패키지명을 포함한 빈으로 정의할 클래스 scope : 빈의 스코프(singleton, prototype, reqeust...), 설정하지 않으면 기본적으로singleton이 적용된다. autowired : 기본적으로 타입과 이름, 생성자등이 있다.(autowired방법) constructo..

Backend/Spring 2021.08.29

스프링 빈(Bean)

빈이란? 자바 객체를 말하며 스프링에서는 IOC컨테이너를 제공하는데 이 컨테이너가 관리하는 객체를 빈(bean)이라고 합니다. 빈은 IOC컨테이너에 의해서 인스턴스화 되고 조립 및 관리되는 객체입니다. IOC Container, DI Container 어떤 객체가 사용하는 의존 객체를 직접 생성해서 사용하는 것이 아니라 객체를 생성하고 관리하면서 의존관계를 연결해 주는 것을 말하며 이러한 개념을 토대로 만들어진 것을 IOC Container 또는 DI Container라고 합니다. 스프링에서는 BeanFactory, ApplicationContext가 IOC로 만들어진 인터페이스이며 ApplicaitonContext를 Spring Container라고 합니다. BeanFactory 스프링 컨테이너의 최상..

Backend/Spring 2021.08.20