Backend/Spring 10

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

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

동시성이란?여러 작업(스레드)이 공통된 한가지 자원에 동시에 접근하는 것이런 상황에서 주로 발생하는 동시성 문제는 아래와 같다. 경쟁 상태(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

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

빈 스코프(Bean Scope)

빈 스코프(Bean scope) 빈이 존재 할 수 있는 범위를 뜻하며 스프링은 빈 등록시 기본적으로 싱글톤 스코프를 사용하고 있습니다. @Scope를 통해 스코프를 지정해 줄 수 있습니다. 싱글톤(Singleton) 스프링의 기본 스코프로, 스프링 컨테이너의 시작과 종료까지 유지되는 가낭 넓은 범위의 스코프 범위. 싱글톤 스코프로 빈을 등록하면 맨 처음 객체가 한번 생성됩니다. 빈 요청을 할 때 항상 동일한 인스턴스를 반환하여 사용 할 수 있습니다. 스프링에서@Component로 클래스 파일을 생성하면 싱글톤 스코프로 등록이 됩니다. @Test void singletonBeanTest(){ AnnotationConfigApplicationContext context = new AnnotationConfi..

Backend/Spring 2021.08.20

[Spring security password Encoding] Spring boot 패스워드 간단 암호화

spring boot에서 패스워드 암호화를 하기 위해 spring security를 사용해봤다. 먼저 가장 기본인 pom.xml에 dependency를 추가해준다 org.springframework.security spring-security-core 5.2.1.RELEASE 그냥 패스워드 암호화만 사용하고자 하면 이것만 추가하면된다 bean으로 등록해서 사용하기 위해 따로 클래스를 만들었다. package com.myProject.test.security.password; import java.util.Base64; import java.util.HashMap; import java.util.Map; import org.springframework.security.crypto.bcrypt.BCryptP..

Backend/Spring 2021.05.23

[Spring boot] 스프링 부트 기본 설정 및 프로젝트 구성 / template 프로젝트 만들기

​스프링 부트가 아무리 모든 설정을 다 해준다 해도 기본 경로설정이나 환경 변수 설정, 그리고 프로젝트 구성 같은 건 사용자가 직접 해야 한다. 공부를 하면서도 매번 까먹고 인터넷을 찾아보는 나 자신을 보며 반성의 자세를 가지고 정리를 한번 해봤다. IDE 툴 : STS 3.9.9버전 OS : Window 10 1. 프로젝트 생성 [File] → [New] → [Other...] 또는 [Package Explorer] → [New] → [Other...]에 들어간 후 Spring을 검색해서 Spring Starter Project를 클릭한 다음 Next~~ ​ 그다음 프로젝트 정보를 입력한다. Name : 프로젝트 이름 Type : 프로젝트 타입 Packaging : 나중에 리눅스 배포할 때 War로 배..

Backend/Spring 2021.05.06

Spring boot + tibero + mybatis 연동하기

​ 이거 연결하는데 이것저것 오류가 많이 발생했다.... ​ 연결하기 전 해야 할 것!!! 1. tibero를 설치한다. tibero는 tmax사이트에서 받을 수 있다. [설치 링크] 다운로드할 때 회원가입을 해야 하고 데모 라이선스를 신청하여 사용할 수 있다. Spring Boot 설정 1. application.properties에 db정보 입력 spring.datasource.url=jdbc:tibero:thin:@127.0.0.1:8629:tibero spring.datasource.driver-class-name=com.tmax.tibero.jdbc.TbDriver spring.datasource.username=test spring.datasource.password=test00 usernam..

Backend/Spring 2021.04.12