web 개발 39

OAUTH

oauth란"Open Authorization"의 약자로, 인터넷 사용자들이 비밀번호를 제공하지 않고도 하나의 웹사이트에서 다른 웹사이트의 자원에 접근할 수 있게 해주는 인증 및 권한 부여 프로토콜OAuth는 주로 웹 애플리케이션에서 사용되며, 사용자가 자신의 자격 증명을 노출하지 않고도 타사 애플리케이션이 자신의 데이터에 접근하도록 허용하는 데 사용 OAuth의 주요 개념Resource Owner (자원 소유자): 사용자를 의미하며, 자신의 자원에 대한 접근 권한을 가지고 있다.Client (클라이언트): 사용자의 자원에 접근하려는 애플리케이션이다.Resource Server (자원 서버): 보호된 자원이 있는 서버로, 사용자의 데이터가 저장된 곳이다.Authorization Server (인증 서버)..

web 개발 2024.07.11

spring scheduler 사용

간단히 spring schedular사용에 후기에 대해작성해 보려고 한다. spring schedulerSpring Scheduler는 Spring Framework에서 제공하는 스케줄링 기능,주기적으로 반복되는 작업을 쉽게 구성하고 실행할 수 있게 해줌shceduler 방식public class Scheculer() { @Scheduled(fixedDelay = 1000) // scheduler 끝나는 시간 기준으로 1000 간격으로 실행 public void scheduleFixedDelayTask() { System.out.println( "Fixed delay task - " + System.currentTimeMillis() / 1000); } @S..

web 개발/spring 2024.07.02

SpringSecurity 인증 방식

spring security 사용하는 이유spring의 생태계에서 보안에 필요한 기능을 제공spring이라는 프레임워크 안에서 활용하기 적합한 구조로 설계 되어 있어, 보안 기능을 추가 용이 Spring Security 아키텍처 사용자의 요청이 서버로 들어옴Authentication Filter가 요청을 가로채고 Authentication Manager로 요청 위임등록된 Authentication provider를 조회하여 인증 요구Authentication provider 가 실제 데이터 조회 → userDetails 반환securityContextHolder에 저장  Spring Security 작동 구조사용자가 자격 증명 정보 제출, AbstractAuthenticationProcessingFilt..

web 개발/auth 2024.06.29

naver mail을 이용한 회원가입

성공 화면!!  전체 회원가입 과정정보 입력받기중복 형식 테스트 → 실패 시 리턴토큰 발행, 토큰도 객체에 넣어서 레디스에 임시저장메일 전송(토큰 포함된 링크) 사용자 메일 입력메일 회신에서 온 토큰과 레디스에서 뽑은 토큰 일치 확인 → 불일치 시 리턴토큰 일치 시 레디스 정보 DB 저장회원가입 완료!!1. bulid.gradle 에 의존성 입력 //naver mail implementation 'org.springframework.boot:spring-boot-starter-mail:3.0.5' implementation 'com.sun.mail:jakarta.mail:2.0.1' 2. 메일 config 파일 작성@Configuration@PropertySource("classpath:..

web 개발/auth 2024.06.23

프로젝트 ERD

https://www.erdcloud.com/d/BatZefBiFtRkQefui TWINGKLINGDraw ERD with your team members. All states are shared in real time. And it's FREE. Database modeling tool.www.erdcloud.com  member로그인 시 가지고 올 기본 정보로그인 만을 위한 table로 기타 개인 정보는 detail에 나누어 관리member detail로그인을 제외한 기타 개인정보등을 보관member address배송을 위한 회원 주소메인 주소와 서브 주소로 나눌 예정메인 주소는 고정이며 서브 주소는 가장 최근 사용을 기준으로 5개만 보관할 예정 role아이디를 따로 부여해서 역할 또한 따로 배정물건..

web 개발/DB 2024.06.21

데이터베이스 lock

낙관적 잠금(Optimistic Locking)데이터베이스의 충돌이 적을 것이라 예상하고 별도의 잠금 없이 트랜잭션을 처리하는 방식트랜잭션 시작 시점의 데이터를 기록해 두고, 트랜잭션 종료 시점에 변경사항 검증 동작 방식트랜잭션 시작: 현재 상태 기록데이터 변경: 트랜잭션 내에서 데이터 수정검증: 트랜잭션 커밋하기 전에 데이터의 상태가 트랜 잭션 시작 시점과 동일한지 확인충돌 처리: 상태가 변경 되었으면 트랜잭션 롤백@Entitypublic class MyEntity { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @Version private Integer version; // other fi..

web 개발 2024.06.18

트랜젝션 격리수준

격리성트랜잭션 수행시 서로 끼어들지 못하는 것복수의 병렬 트랜젝션은 서로 격리되어 순차적으로 실행 되는 것처럼 작동 되어어야 함DB에 여러 사용자가 같은 데이터에 접근 할 수 있어야 함  격리 수준 serializable가장 높은 격리 수준트랜잭션 순차적으로 진행여러 트랜젝션이 동시에 같은 행에 접근 불가다른 트랜젝션이 DB에 접근 시 앞의 트랜잭션이 끝날 때 까지 대기 해야함교착상태 가능성 증가, 성능 하락 repeatable read트랜잭션이 시작 된 시점의 데이터 상태 보장하나의 트랜잭션이 접근 하고 있는 행을 다른 트랜잭션이 수정 불가새로운 행을 추가하는 것은 막지 않음DB의 기본 격리 수준phantom read한 트랜잭션 내에서 동일한 쿼리를 보냈으나 결과가 다른 현상다른 트랜잭션 내에서 테이블..

web 개발 2024.06.16

Docker와 Jenkins를 이용한 CD/CI 과정 (feat WebHooks)

Jenkins와 GitHub Webhooks 작성GitHub Actions는 GitHub 이벤트에 반응하여 자동화된 작업을 설정할 수 있게 해주는 도구입니다.반면, Jenkins는 별도의 CI/CD 도구로서, GitHub의 이벤트와 직접적으로 연동되지 않습니다.따라서 GitHub의 이벤트를 감지하고 그에 따라 Jenkins로 작업 요청을 전송하는 중간 역할이 필요합니다.GitHub Webhooks 실행 단계 GitHub Webhook을 설정이벤트 발생 시 GitHub에서 Jenkins 서버로 HTTP 요청을 전송Jenkins는 해당 이벤트에 맞는 작업(테스트, 빌드, 배포)을 실행 Docker를 이용한 CI/CD 이미지 생성 및 Docker Hub에 업로드개발자가 코드 변경사항을 Git 저장소에 push..

web 개발 2024.06.10

로드 밸런서와 로드 밸런싱 방식

L4 로드 밸런서 (Transport Layer) vs L7 로드 밸런서 (Application Layer)항목L4 로드 밸런서L7 로드 밸런서작동 계층전송 계층(Layer 4)애플리케이션 계층(Layer 7)주요 프로토콜TCP, UDPHTTP, HTTPS로드 밸런싱 기준IP 주소, 포트요청 내용(URL, 헤더, 쿠키 등)처리 속도상대적으로 빠름상대적으로 느림기능 및 유연성상대적으로 제한적다양한 기능 및 유연성 → 요청 내용(사용자)에 따라 다른 서비스를 제공할 것이 아니므로 L4 로드밸런서 사용 결정함  로드 밸런싱 방식 선택 Round Robin (라운드 로빈)요청을 각 서버에 순차적으로 분배간단하고 균등한 분배 가능Connections (최소 연결 수)현재 연결 수가 가장 적은 서버로 트래픽을 보냄..

web 개발 2024.06.10

로드밸런싱, NGINX, ELB

로드 밸런싱 부하 분산: 로드 밸런서는 여러 서버나 리소스에 걸쳐 들어오는 요청 분배가용성 및 내구성 증대: 하나의 서버나 리소스에 문제가 발생 시 전체 시스템의 가동 중단 없이 계속 작동 가능확장성: 로드 밸런싱은 시스템에 더 많은 서버를 추가함으로써 확장성을 제공→ 로드 밸런서가 자동으로 트래픽을 새 서버로 분산 시키므로, 추가적인 서버를 네트워크에 쉽게 통합 가능, 성능 최적화: 서버의 부하를 적절히 분산 →  각 서버를 최적의 성능으로 운영 가능  NGINX로드 밸런싱: NGINX는 여러 서버로 들어오는 트래픽을 분산시키는 로드 밸런서 역할 효율성 향상 : 서버 하나가 과부하되는 것을 방지, 서버 간에 균등하게 트래픽을 분배 →  전체 시스템의 효율성 향상SSL/TLS 종단 처리: NGINX는 S..

web 개발 2024.06.10