SpringBoot
12 posts
/static/94ea5dbd60dd10b2bce1af75da7db0f8/springboot.png
SpringBoot의 로그인 처리 쿠키와 세션(part.5 세션동작방식으로 로그인처리)

🎈 세션 동작 방식으로 로그인 처리하기! 지난 시간에는 쿠키로 처리할때 나타나는 치명적인 단점을 살펴보았고, 해결 방안에 대해 알아보았다 이어 해결 방안을 구현해 어플리케이션의 보안 문제를 해결 해 보자! 목표 앞서 쿠키에 중요한 정보를 보관하는 방법에는 여러가지의 보안 이슈가 발생했었다. 이 문제를 해결하려면 결국 중요한 정보를 모두 서버에 저장 해야 한다. 그리고 클라이언트와 서버는 추정 불가능한 임의의 식별자 값으로 연결 해야 한다. 이렇게 서버에 중요한 정보를 보관하고 연결을 유지하는 방법을 세션 이라 한다. 세션 동작 방식 세션을 어떻게 개발할지 먼저 개념을 이해해보자. 로그인 사용자가 , 정보를 전달하면, 서버에서 해당 사용자가 맞는지 확인을 한다. 세션 생성 세션 ID를 생성하는데, 추정 불가능 해야하는 값이여야만 한다. 그래서 사용하는것이 ****이다. 해당객체는 절대 겹치지 않는 임의의 값을 만들어주는 객체로, 쿠키에 해당옵션을 주기에 아주 적당하다. ex) …

December 07, 2023
SpringBoot
/static/94ea5dbd60dd10b2bce1af75da7db0f8/springboot.png
SpringBoot의 로그인 처리 쿠키와 세션(part.4 세션 쿠키 활용)

🎈 로그인 성공 시 세션 쿠키 생성 지난 시간에 이어 로그인에 필요한 세션 쿠키를 생성해 보도록 하자. 여기서 우리가 집중하여 볼것은 쿠키 생성 로직이다. 쿠키 생성 로직 로그인에 성공시 쿠키를 생성하고 에 담는다. 쿠키의 이름은 이고, 값은 회원의 를 담아둔다. 웹 브라우저는 종료 전까지 회원의 값(id)를 서버에 지속적으로 보내줄것이다. 실행 크롬 브라우저를 통해 HTTP 응답 헤더에 쿠키가 추가된 것을 확인할 수 있다. 🌵 홈화면 로그인처리 HomeController 기존 메소드의 있는 어노테이션은 꼭 주석처리를 하자. 를 사용하면 편리하게 쿠키를 조회 할 수 있다. 로그인 하지 않은 사용자도 홈에 접근할 수 있기 때문에 로 해주어야 한다. 로직 분석 로그인 쿠키(memberId)가 없는 사용자는 home()으로 보내며, 추가로 로그인 쿠키가 있어도 회원이 없다면, home으로 보낸다. 로그인 쿠키(memberId)가 있는 사용자는 로그인 사용자 전용 홈 화면인 으로 보낸다…

December 07, 2023
SpringBoot
/static/94ea5dbd60dd10b2bce1af75da7db0f8/springboot.png
SpringBoot의 로그인 처리 쿠키와 세션(part.3 로그인 기능 개발)

🎈 로그인 기능 이전에 만들었던 코드를 베이스로 하여 로그인 기능을 개발 해 보겠다. 우선은 로그인 ID, 비밀번호를 입력하는 부분에 집중해보자! (추후에 쿠키와 세션을 사용하여 단점을 하나씩 잡아가는 방식으로 진행하겠다.) 요구사항을 한번 더 확인하고 기능구현에 들어가보자. 위의 코드를 살펴보면 로그인의 핵심 비즈니스 로직은 회원을 조회한 다음에 파라미터로 넘어온 와 비교해서 같으면 회원을 반환하고 만약 다르다면, 을 리턴시킨다. 의 기능을 사용하여 비밀번호를 비교하였다. MemberRepository의 메소드를 확인해보면, 와 같이객체에 맴버를 감싸 반환한다. 이 Optional객체는 이러한 필터기능을 제공한다(자바8이상) ===== 🌵 LoginForm & Controller / View LoginForm LoginController.java 로그인 컨트롤러는 로그인 서비스를 호출하여 로그인에 성공하면, 홈 화면으로 이동시키고, 로그인에 실패하면 를 사용하여 글로벌 오류를 …

December 07, 2023
SpringBoot
/static/94ea5dbd60dd10b2bce1af75da7db0f8/springboot.png
SpringBoot의 로그인 처리 쿠키와 세션(part.2 홈화면 개발)

🎈 Start SpringBoot project 이클립스(혹은 sts4)를 쓰고있다면 new project -> Spring Starter Project로 생성! intellij를 사용한다면 start.spring.io에서 프로젝트를 생성하자. 의존성 추가는 lombok과 spring Web, thymeleaf, validation을 추가해주고 임포트 혹은 다운을 받아 프로젝트를 실행! build.gradle에 의존성 추가가 되었는지 확인! ===== 🌵 홈 화면 개발 HomeController home.html 회원 가입 위의 컨트롤러 코드에서 를 로 변경해도 결과는 같다. 본인은 대상을 직접 지정함 ===== 회원 가입 뷰 템플릿(html) 실행 결과를 로그로 확인 회원용 테스트 데이터 추가하기! test편의를 위해 회원의 데이터를 임의로 추가해보겠다. to be continue…(로그인 기능 개발)

December 06, 2023
SpringBoot
/static/94ea5dbd60dd10b2bce1af75da7db0f8/springboot.png
SpringBoot의 로그인 처리 쿠키와 세션(part.1 요구사항 및 화면정의)

🎈 이번 편에서는.. 해당편에서는 스프링부트에서 제공하는 기능들을 활용하여 로그인 처리를 목적으로 할것이다. 차례대로 업그레이드 하면서 진행 할 예정이며, 이론적인 설명위주 보다는 예제 코드를 통해 로그인 처리를 어떻게 하는지에 대한 본질적인 접근으로 들어가도록 하겠다. ===== 🌵 회원 로그인 요구사항 정의 홈화면 (로그인 전) 회원 가입 로그인 홈화면 (로그인 이후) 로그인 한 회원의 이름(oo님 환영합니다)이 보이기 상품 관리 버튼 로그아웃 버튼 보안 요구사항 로그인 사용자만 상품에 접근하며, 아이템관리가 가능하다. 만약 로그인하지 않은 사용자가접근시 로그인 화면으로 이동 회원 가입, 상품 관리 🌚 화면 정의서 홈화면 (로그인 전) 홈화면 (로그인 후) 회원가입 로그인 상품관리 🌂 패키지 구조 com.xxxxx.xxx domain item member login web item member login 도메인 : 화면,UI,기술 인프라 등등의 영역은 제외한 시스템…

December 06, 2023
SpringBoot
/static/94ea5dbd60dd10b2bce1af75da7db0f8/springboot.png
AWS SQS + SPRING BOOT 사용법

👀 개요 이전 포스팅에서 SQS에 대해서 간단하게 다뤘었다. 요번에는 SQS를 SPRING BOOT 에서 사용하는 방법을 실습해 보겠다. ❗ SQS에 대해서는 이전 포스팅 참고 SQS란? 🦺 SQS 대기열 생성 큐 수신,송신에 대해서는 이전 포스팅 참고 SQS 사용법 📖 실습 💼 대기열 생성 일단 나는 아래 그림처럼 SQS 대기열을 생성했다. sqs.PNG 해당 대기열 클릭하여 들어가면 세부정보의 url을 확인 할수있다. 나중에 사용하기 위해 기억해두자 sqs1.PNG 🖋 필수 설정하기 의존성 추가 프로젝트 구조 application.yml application.yml 에 aws 관련 정보를 기재해 준다. 🖊 SQS Configuration 클래스 생성 application.yml에 있는 access-key, secret-key 값을 가지고 AWSCredentialsProvider 빈 생성 Message 송신에 사용되는 AmazonSQS 빈 생성 시 해당 credentials 정보…

March 24, 2022
SpringBoot
/static/94ea5dbd60dd10b2bce1af75da7db0f8/springboot.png
Spring Boot + Aws OpenSearch(Elasticsearch) 연동

✅ 개요 AWS 의 OpenSearch에 접근하여 데이터를 생성해보자. Aws OpenSearch(Elasticsearch) 관련 포스팅은 여기를 참고하자 AWS OpenSearch 연동 기본 프로젝트 구조 의존성 추가 AWSRequestSigningApacheInterceptor 추가 참고 DataCheckController 포스트맨 호출 sbes1.PNG 키바나 확인 sbes2.PNG 🌭마무리 위와 같이 springboot에서 OpenSearch(Elasticsearch)에 인덱스를 생성해주었고 확인까지 할수 있었다. 다음에는 OpenSearch(Elasticsearch)를 활용한 간단한 애플리케이션을 만들어 보자. ✅ 개요 AWS OpenSearch 연동 🌭마무리

March 15, 2022
SpringBoot
/static/94ea5dbd60dd10b2bce1af75da7db0f8/springboot.png
SpringBoot + naver crova ocr 사용

개요 이전 포스팅에서 naver crova ocr 에대해 다뤘었다. 참고 해당 글을 보면 이미 나는 naver ocr api를 생성했고 요번 글에서는 springboot 에서 해당 api를 사용하는 방법을 포스팅 하겠다. 📌 multipart/form-data 사용 호출 방식은 두가지로 나뉜다 하지만 나는 로컬에 저장된 이미지 파일을 사용 할꺼라서 form-data 방식으로 호출한다. 🎀 다른 방식은 해당 문서 참고 프로젝트 구조 CheckController NaverOcrApi JsonUtill : 데이터 가공을위함 필수 X Json 관련 의존성은 기재 안하겠다 본인이 가공할거면 편한걸 사용하면 된다. NaverOcrApi JsonUtill CheckController 🏆 Postman 호출 springbootocr.PNG 이렇게 내가 원하는 이미지의 텍스트를 추출 할수가 있다. 🌭마무리 생각보다 문서도 잘되어있고… 내가 굳이 따로 글을 쓸필요가 있을까 싶을정도 이지만… 그래도 …

March 08, 2022
SpringBoot
/static/94ea5dbd60dd10b2bce1af75da7db0f8/springboot.png
AWS S3 파일 업로드,다운로드

👀 개요 이전 포스팅에서 S3에 대해서 간단하게 다뤘었다. 요번에는 S3에 파일을 올리는 과정을 포스팅하려 한다. ❗ S3에 대해서는 이전 포스팅 참고 S3란? 🦺 S3 버킷 생성에 대해서는 이전 포스팅 참고 S3 버킷 생성 🗑 S3 파일 업로드 버킷 생성 일단 나는 아래 그림처럼 file-upload-test-lee라는 명칭으로 퍼블릭한 버킷을 하나 생성했다. springboots3.PNG 해당 버킷을 클릭하여 들어가면 아무런 객체도 없는 상태이다. springboots31.PNG 그리고 iam 권한에 사용자에게 S3 FullAccess 권한을 부여해야 합니다. (이것이 있어야 S3에 파일 업로드를 할 수 있습니다.) 일단 aws 상에서의 작업은 이 정도만 해주면 된다. 이제 실제 애플리케이션에서 aws s3 서비스를 구현해 보자. AmazonS3ClientBuilder 를 사용한 업로드 구현 의존성 추가 프로젝트 구조 AmazonS3Config CheckController Aw…

March 07, 2022
SpringBoot
/static/94ea5dbd60dd10b2bce1af75da7db0f8/springboot.png
Spring Boot + Secrets Manager + 다중 RDS 연동 (SSH 터널링)

✅ 개요 AWS 의 SecretsManager의 RDS 정보를 받아 두개의 AWS RDS에 접근하여 데이터를 가져와보자 🔑 RDS 생성 먼저 AWS 에 RDS 를 2개 생성해야 한다. 나는 미리 생성해 놨다. 🦄 mySQL RDS 생성방법은 링크를 참고해주세요! 🦄 postegreSQL RDS 생성방법은 링크를 참고해주세요! ✨ 비공개 RDS 접근 방법은 링크를 참고해주세요! 🔑 SecretsManager 사용 생성한 보안암호에 AWS RDS의 정보들이 있다. 두개를 생성해야 한다. 나는 미리 생성해 놨다. 🦄 SecretsManager 생성방법은 링크를 참고해주세요! 🎁 AWS RDS 연동 의존성 추가 jsch 는 private한 RDS에 접근하기위해 터널링시에 필요한 의존성이므로 추가해 주었다 밑에서 자세하게 다룰예정 일단은 추가해준다. 시크릿 매니저가 생성 되었다면 이제 해당 값을 가져오는 로직이 필요하다. 나는 SecretManagerBuild class를 이용하여 진행하…

March 03, 2022
SpringBoot
/static/94ea5dbd60dd10b2bce1af75da7db0f8/springboot.png
Spring Boot + Secrets Manager + RDS 연동

✅ 개요 AWS 의 SecretsManager의 RDS 정보를 받아 AWS RDS에 접근하여 데이터를 가져와보자 🔑SecretsManager 사용 생성한 보안암호에 AWS RDS의 정보들이 있다. 나는 미리 생성해 놨다. 🦄 SecretsManager 생성방법은 링크를 참고해주세요! AWS RDS 연동 의존성 추가 application.yml 파일에 datasource 정의 RDS 데이터 확인(IntelliJ)\ DB 툴을 사용해서 확인도 가능하지만 나는 인텔리제이를 사용하므로 인텔리제이로 연동후 데이블과 데이터를 넣어줬다. 🦄 IntelliJ에서 RDS 연동 링크를 참고해주세요! 아래와 같이 테이블에 더미 데이터를 넣어줬다. springbootsm6.PNG 엔티티 생성 적당한 경로에 tb_file 테이블의 데이터를 가져오기 위한 엔티티와 리포지토리 를 만들어줬다. 컨트롤러 생성 정상적으로 값을 가져오는지 확인하기 위한 컨트롤러 생성한다. 포스트맨 호출 정상적으로 호출이 완료되는…

February 24, 2022
SpringBoot
/static/94ea5dbd60dd10b2bce1af75da7db0f8/springboot.png
Spring Boot AWS Secrets Manager 연동

✅ Spring Boot 연결하기 📌bootstrap.yml 사용 의존성 추가 프로젝트 상단에 bootstrap.yml파일을 추가해주고, 아래와 같이 설정 나의 경우 보안 암호 이름이 /secret/classificator_dev 이다 앞의 /secret는 해당 보안값이 들어가는 prefix 라고 보면된다. 따라서 **/secret/**뒤의 값을 넣어주면 된다. 시크릿 값 확인 아래처럼 간편하게 확인 하기위해 컨트롤러를 하나 생성해 주었다. 포스트맨 호출 정상적으로 값을 가져오는지 확인한다. 시크릿 매니저에 저장한 값들을 확인할수 있다. 위와같은 방식은 확실히 간편하고 편하다 하지만 aws 에서 secrets manager를 사용하다보면 rds의 연결 정보라던가 여러 값들을 가져와야하는 경우가 또생긴다. 그렇기땜에 secrets manager값들을 공통으로 받아서 처리할수 있는 부분이 있다면 더편하다. 📌SecretManagerBuild class 사용 디렉토리 구성 spring…

February 23, 2022
SpringBoot