728x90

개발/Java & Kotlin 134

[Spring] 동시성 이슈 해결 방법 (2)

지난번 포스팅과 코드를 이어간다. https://devhooney.tistory.com/108 [Spring] 동시성 이슈 해결 방법 (1) 간단한 재고 시스템으로 알아보는 동시성 이슈 Stock @Entity public class Stock { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private Long productId; private Long quantity;.. devhooney.tistory.com 지난번에 race condition을 방지하기 위해서 데이터에 하나의 쓰레드만 접근하도록 하는것이 방법이었다. 이외에도 다른 방법들이 있는데, 하나씩 정리해보려고 한다. 자바에서 지원하는 방법으로 문제를 해..

[Spring] 동시성 이슈 해결 방법 (1)

간단한 재고 시스템으로 알아보는 동시성 이슈 Stock @Entity public class Stock { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private Long productId; private Long quantity; @Version private Long version; public Stock(){ } public Stock(Long productId, Long quantity) { this.productId = productId; this.quantity = quantity; } public Long getQuantity() { return quantity; } public void decrease..

[Java] 쓰레드(Thread)의 실행제어

1. 쓰레드의 생성부터 소멸 쓰레드를 생성하고 start()를 호출하면 바로 실행되지 않고 실행 대기열에 저장되어 차례를 기다린다.(큐 자료구조) - FIFO 실행대기상태에 있다가 자신의 차례가 되면 실행상태 실행시간이 다 되거나 yield()를 만날 경우 다시 실행대기상태 실행 중에 suspend(), sleep(), wait(), join(), I/O block를 만나면 일시 정지 상태 일시정지시간이 다되거나, notify(), resume(), interrupt()가 호출되면 실행대기열에서 자신의 차례를 기다린다. 실행을 다 마치거나 stop()이 호출되면 쓰레드는 소멸 - 번호대로 쓰레드가 실행되는 것은 아님 2. 쓰레드의 동기화 - 한 쓰레드가 진행 중인 작업을 다른 쓰레드가 간섭하지 못하도록 ..

[Java] 쓰레드(Thread)의 기초

1. 프로세스와 쓰레드 - 프로세스는 실행 중인 프로그램을 말한다. - 프로그램을 실행하면 OS로부터 메모리를 할당받아 프로세스가 된다. - 프로세스는 데이터, 메모리 등의 자원과 '쓰레드'로 구성되어 있다. - 자원을 이용하여 실제로 작업을 수행하는 것이 '쓰레드'이다. - 모든 프로세스에는 최소한 하나 이상의 쓰레드가 존재하며, 두 개 이상일 경우 멀티 쓰레드라고 한다. 멀티태스킹과 멀티쓰레딩 - 멀티태스킹은 다중작업을 말한다. 멀티태스킹이 가능하면 여러 개의 프로세스가 동시에 실행될 수 있다. - 멀티쓰레딩은 하나의 프로세스 내에서 여러 쓰레드가 동시에 작업을 수행한다. 멀티쓰레딩의 장단점 장점 - CPU의 사용률을 향상시킨다. - 자원을 효율적으로 사용할 수 있다. - 사용자에 대한 응답성이 향상..

[Java] 열거형(enums)

자바의 정석 챕터 13을 읽고 정리 1. 열거형이란? - 열거형은 서로 관련된 상수를 편리하게 선언하기 위해 사용 - 자바의 열거형은 타입에 안전한 열거형 - 실제 값이 같아도 타입이 다르면 컴파일 에러 발생 class Card { static final int HELLO = 0; static final int WORLD = 1; static final int HL = 0; static final int WR = 1; final int kind; final int num; } // 열거형으로 표현 class Card { enum Kind { HELLO, WORLD } enum Value { HL, WR } final Kind kind; final Value value; } - 비교를 하면 if (Card..

[Spring] 스프링시큐리티 OAuth2.0 적용해보기(Naver)

이번엔 네이버 로그인을 작업해보려 한다. 지난 포스팅을 참고하고, 이어서 작업하려 한다. https://devhooney.tistory.com/101 [Spring] 스프링시큐리티 OAuth2.0 적용해보기(Facebook) 이번엔 페이스북 로그인을 작업해보려한다. 지난 포스팅에 사용했던 코드에 이어서 작업하려한다. https://devhooney.tistory.com/100 [Spring] 스프링시큐리티 OAuth2.0 적용해보기(Google) 구글, 페이스북, 네 devhooney.tistory.com 1. 네이버 개발자 센터 - 상단 메뉴의 Application에서 애플리케이션 등록 클릭하여 이름을 작성하고 사용 API selectbox에서 네이버 로그인 선택 - checkbox가 나오면 회원이름,..

[Spring] 스프링시큐리티 OAuth2.0 적용해보기(Facebook)

이번엔 페이스북 로그인을 작업해보려한다. 지난 포스팅에 사용했던 코드에 이어서 작업하려한다. https://devhooney.tistory.com/100 [Spring] 스프링시큐리티 OAuth2.0 적용해보기(Google) 구글, 페이스북, 네이버 로그인을 적용해보려고 한다. 지난 포스팅에 사용했던 코드에 이어서 작업하려한다. https://devhooney.tistory.com/99 [Spring] 스프링시큐리티 예제 이전에 작성한 포스팅은 단순 devhooney.tistory.com 1. 페이스북 개발자 사이트 - 사이트에 접속해서 내 앱 > 앱 만들기 클릭 - 소비자 선택 - 표시 이름 작성, 선택된 비즈니스 관리자 계정 없음 선택 후 앱 만들기 - 만들어진 앱 선택 후 Facebook 로그인 빠..

[Spring] 스프링시큐리티 OAuth2.0 적용해보기(Google)

구글, 페이스북, 네이버 로그인을 적용해보려고 한다. 지난 포스팅에 사용했던 코드에 이어서 작업하려한다. https://devhooney.tistory.com/99 [Spring] 스프링시큐리티 예제 이전에 작성한 포스팅은 단순히 책에 있는 내용을 정리한 것이었는데, 이번엔 직접 코드를 짜보면서 복습해보려고 한다. 1. 라이브러리 설치 implementation 'org.springframework.boot:spring-boot-starter-secur.. devhooney.tistory.com 1. 구글 api console https://console.cloud.google.com/apis/dashboard Google 클라우드 플랫폼 로그인 Google 클라우드 플랫폼으로 이동 accounts.go..

[Spring] 스프링시큐리티 예제

이전에 작성한 포스팅은 단순히 책에 있는 내용을 정리한 것이었는데, 이번엔 직접 코드를 짜보면서 복습해보려고 한다. 1. 라이브러리 설치 implementation 'org.springframework.boot:spring-boot-starter-security' 2. IndexController 생성 - controller 패키지 생성 후 IndexController 생성 @GetMapping({"", "/"}) public String index() { return "index"; } - resources/template/index.html 생성 인덱스페이지입니다. 3. user, admin 메소드 생성 - IndexController에 두 개의 메소드를 만들어 준다. @GetMapping("/use..

[JPA] LIKE 정리

SpringData JPA를 사용하여 개발한 기능에서 에러가 발생 - 이유는 select되어야 하는 데이터가 2개 이상이라.. - 쿼리문이 where data like '%조건'을 원했는데 contains를 사용했더니 앞 뒤로 %가 붙었다. - 이참에 정리해놓으려 한다. Contains - 파라미터로 사용되는 data변수에 자동으로 앞 뒤로 '%'가 붙어서 DB조회를 한다. List dataList = findByDataContains(data); List dataList = findByDataContaining(data); List dataList = findByDataIsContaining(data); Like - 직접 파라미터에 '%'를 넣어주어야 한다. List dataList = findByDa..

728x90