IT 썸네일형 리스트형 동시성 문제(synchronized, pessimistic lock, optimistic lock) 노드는 싱글스레드로 동작하지만 자바는 멀티스레드를 지원한다. 노드는 스레드가 하나이기 때문에 스레드 하나가 모든 요청을 처리하지만 자바는 요청에 따른 스레드를 생성하고 각각의 스레드가 요청을 처리한다. test1의 경우 for문을 통해 100번을 돌면서 product의 quantity가 하나씩 감소하며 결론적으로 0이 된다. 하지만 동시에 여러 입력이 들어왔다고 가정을 해보자.100번이 똑같이 실행됐지만 결과를 확인해보면 테스트가 실패한 것을 확인할 수 있다.4번의 삭제밖에 이루어지지 않았다. 왜 이런문제가 생긴 것 일까? 동시에 실행되기 때문에 프로세스의 끝나는 시간이 모두 일치하지 않는다. quantity값을 읽고 처리하기 전에 이전 스레드가 처리한 결과값을 이어받지 못해 하나의 스레드가 quanti.. 더보기 스프링 batch + scheduler 정산 시스템 구현 Job은 여러가지 Step, Step은 여러가지 Tesklet 또는 Chunks(아이템처리자)로 나누어져서 실행된다.아이템 처리자는 Reader(읽기), Processor(변환 작업), Writer(쓰기)를 구현하여 실행 할 수 있다. 아이템 처리자의 방법은 정산과 같은 여러 데이터를 받아오는 값을 나눠서 실행할 수 있다.스프링 batch와 scheduler를 사용하여 기존 만들었던 쇼핑몰 시스템의 주문 목록을 정산하기 위해 활용해보려고 한다. 정산데이터는 매달 15일 새벽4시에 생성된다.만약 정산하려는 품목이 수만개라면 DB에서 불러올 때 문제가 될 수 있지만 100개씩 받아오거나 할 수 있다. 따라서 필자는 아이템 처리자의 방법을 사용하였다. @Beanpublic Job makeRebateOrderI.. 더보기 JWT(JSON WEB TOKEN ) JWT : JSON WEB TOKEN 토큰 : 특정 규칙에 맡게 문자열 JWT(JSON Web Token)란 인증에 필요한 정보들을 암호화시킨 JSON 토큰을 의미한다.그리고 JWT 기반 인증은 JWT 토큰(Access Token)을 HTTP 헤더에 실어 서버가 클라이언트를 식별하는 방식이다JWT는 JSON 데이터를 Base64 URL-safe Encode 를 통해 인코딩하여 직렬화한 것이며, 토큰 내부에는 위변조 방지를 위해 개인키를 통한 전자서명도 들어있다.따라서 사용자가 JWT 를 서버로 전송하면 서버는 서명을 검증하는 과정을 거치게 되며 검증이 완료되면 요청한 응답을 돌려준다.개요브라우저와 SB(Spring Boot)가 통신할 때 최초 요청에는 쿠키에 대한 JSessionID가 없다. 새로운 사람.. 더보기 쿠키(Cookie)와 세션(Session) HTTP 프로토콜의 특징비연결 지향(Connectionless)클라이언트가 request를 서버에 보내고, 서버가 클라이언트에 요청에 맞는 response를 보내면 바로 연결을 끊는다.keep-alive 옵션을 주어 커넥션을 재활용하게 한다.상태정보 유지 안 함(Stateless)연결을 끊는 순간 클라이언트와 서버의 통신은 끝나며 상태 정보를 유지하지 않는다.쿠키와 세션의 필요성HTTP 프로토콜은 위와 같은 특징으로 모든 요청 간 의존관계가 없다.즉, 현재 접속한 사용자가 이전에 접속했던 사용자와 같은 사용자인지 아닌지 알 수 있는 방법이 없다.계속해서 연결을 유지하지 않기 때문에 리소스 낭비가 줄어드는 것이 큰 장점이지만, 통신할 때마다 새로 연결하기 때문에 클라이언트는 매 요청마다 인증을 해야 한다는.. 더보기 AWS Lightsail (4) DB 생성(DB접속 및 WorkBench연결) 이전에 AWS Lightsail에서 서버를 빌리고 도메인 연결 후 https로 띄우는 작업까지 마쳤다. 실제 프로젝트를 돌리기 위해서는 당연히 DB는 필수적이다. 이번에는 AWS Lightsail에서 제공하는 DB서버까지 활용해서 터미널을 통해 DB서버에 접근하고 WorkBench에 연결해보려한다. 1. AWS Lightsail 데이터베이스 생성데이터베이스 탭에서 데이터베이스를 생성2. 생성한 DB 옵션필자는 MySQL로 첫 3개월이 무료인 1G DB를 생성하려고 한다.생성 후 다소 시간이 걸릴 수 있다.3. 사용자 명, 암호, 엔드포인트 확인사용자명과 DB 암호, 그리고 엔드포인트와 포트를 확인할 수 있고 이를 통해서 DB에 접근이 가능하다. 4. 데이터베이스 연결접속한 서버에서 DB에 접근mysq.. 더보기 AWS Lightsail (3) HTTPS로 띄우기(Certbot을 통한 무료 SSL 발급) 이전에 포스팅한 AWS Lightsail (1), AWS Lightsail (2) 에 이어서 HTTP로 띄운 서버를 Certbot을 통하여 HTTPS로 전환하여 보안을 강화하려한다1. HTTPS 란HyperText Transfer Protocol over Secure Socket Layer, HTTP over TLS, HTTP over SSL, HTTP Secure 등으로 불리는 HTTPS는 HTTP에 데이터 암호화가 추가된 프로토콜이다. HTTPS는 HTTP와 다르게 443번 포트를 사용하며, 네트워크 상에서 중간에 제3자가 정보를 볼 수 없도록 암호화를 지원하고 있다.2. certbot 설치Let's Encrypt라는 비영리 기관을 통해 무료로 TLS인증서를 발급받을 수 있다.certbot 이란 le.. 더보기 AWS Lightsail (2) 도메인 연결(nginx 설정 및 도메인 연결) 이전에 AWS에서 제공하는 Lightsail Ubuntu Linux를 빌려 키파일을 생성하고 서버에 접속하는 시간을 가졌다. 이번에는 nginx를 설치하고 도메인을 구입하여 이 서버의 IP와 연결하려고 한다. 1. 서버 접속 2. nginx 설치sudo apt install nginx -y3. nginx 설정 nginx를 설치하면 /etc/nginx 폴더 안에 sites-available, sites-enabled 폴더가 존재sites-available은 가상 서버 환경들에 대한 설정 파일들이 위치하는 부분으로 가상 서버를 사용하거나 사용하지 않던간에 그에 대한 설정 파일들이 위치하는 곳이다.sites-available에 있는 가상 서버 파일들중에서 실행시키고 싶은 파일을 symlink로 연결한 폴더로.. 더보기 스프링부트 카카오 소셜 로그인 4(카카오 프로필 사진 활용) attributes에 어떤 값을 가져오는지 알아야 사용자 값을 활용할 수 있을 것이다. 롬복의 @Slf4j를 추가하여 log를 찍어보고 결과를 출력해보자. **참고**System.out.println과 비슷하나 log.debug가 더 자세한 결과를 얻을 수 있고 debug는 지우지 않아도 상관없다. (*로그 레벨을 셋팅하면 운영모드에는 실행되지 않기 때문에)logging: level: com.ll.exam.appname: debugattributes 값을 출력해보면 properties에 nickname, profile_image, kakao_account등의 개인 정보를 포함하고 있다. attributesProperties를 활용하여 프로필 값을 변수에 넣어주어 활용하였다. 프로필 사진 url은.. 더보기 이전 1 ··· 8 9 10 11 12 13 14 ··· 19 다음