공부기록
Git Submodule 적용기
배경2차 팀 프로젝트를 하면서 외부에 노출되면 안되는 값(DB 주소, 비밀번호, JWT 생성 키 등)들을 관리하기 위해서 Github Environment secrets, Dock .env 파일, Git Submodule 중에서 선택을 하게 되었다선택을 하게 된 이유로는 아무래도 추가적인 Github Repository에서 관리할 수 있고 Versioning도 되고 여러 파일로 나눠 특징 별로 application-jwt.yml application-db.yml와 같이 파일을 나눠 관리 및 추가와 수정 삭제등이 용이하다는 장점들 때문이다 Submodule 이란쉽게 말하자면 Git 저장소 안에 Git 저장소를 만들어 넣는 것이다 당연히 .git 폴더가 각각 생기고 개별적으로 Version, Commit 관..
Lock
Lock 이란?고립성(Isolation)을 보장하기 위한 방법데이터 항목에 상호 배타적으로 접근이 되도록 하는 것Lock을 사용함으로 해당 Lock을 가지고 있는 Transaction(사용자, 요청)만이 해당 데이터에 접근을 할 수 있다Lock 과 Transaction그러면 Lock과 Transaction의 차이는 무엇이 있는지 알아보면Transaction은 논리적 작업 단위를 이루는 연산들의 집합(All or Nothing - Atomicity 보장) 이고Lock은 Transaction이 동일한 데이터 갱신 작업을 할 수 없도록 하도록 구현한 방법 중 하나이다단순히 SELECT * FROM MEMBER; 와 같이 조회 만 하는 경우에는 일반적으로 데이터베이스 시스템은 Lock을 걸지 않는다또한 UPDA..
[실습] CICD-4
Trouble Shooting문제점 1Github Action을 통한 S3 bucket에 application zip file uploadUnable to locate credentialsAWS CLI 사용 시 권한이 없어서 생기는 문제S3에 접근 가능한 IAM USER 생성 후 Access key 할당github repository -> settings -> secrets and variables -> Action 탭에 할당받은 access key & secret key 추가S3 전송 전에 해당 step 추가 - name: Configure AWS Credentials uses: aws-actions/configure-aws-credentials@v3 with: aws-access..
실습CICD-3
기본 설명흐름사용자가 Repository로 코드를 push해당 code build 후 zip파일로 압축 후 S3업로드업로드한 파일을 codeDeploy를 통해 EC2에 배포 후 jar 파일 실행CodeDeploy란Amazon EC2 인스턴스, 온프레미스 인스턴스, 서버리스 Lambda 함수, Amazon ECS 서비스로 애플리케이션 배포를 자동화하는 배포 서비스배포 유형실행 중 배포(현재 위치 배포) - 운영 중인 Instance내에 App 중지 후 최신 App 설치 후 시작블루/그린 배포주요 구성 요소APPComputing Platform(EC2, ECS, Lambda)배포 구성, 그룹(개별 Instance 집합), 유형IAM Instance Profile: EC2 Instace에 연결하는 IAM 역할..
[실습] CICD - 2
CI workFlow 작성시나리오main branch에서 개발용 dev branch를 만들고 각 기능을 개발 할 feat branch 생성개발 완료 후 feat -> dev로 pull request를 통해 코드 리뷰와 merge 과정 진행name: Gradle Teston: pull_request: branches: [ "dev" ]permissions: contents: read# 실행 시킬 내용들의 집합체jobs: build: # runner : ubuntu 지정 runs-on: ubuntu-latest # 순차 실행 steps: - uses: actions/checkout@v3 - name: Set up JDK 17 uses: actio..
[이론] CI/CD - 1
CI/CD 간단 지식CI란CI(Continuos Integration) 지속적 통합자동화된 빌드 및 테스트가 수행된 후 개발자에 의해 변경된 코드를 Repository로 Merge를 진행하는 개발 방식핵심 목표 : 버그를 신속하게 찾아 해결 & 품질 개선 & 업데이트 검증 & release 시간 단축CD란CD(Continuous Deployment) 지속적 배포or CD(Continuos Delivery) 지속적 제공 (상호 교환하여 사용)CD(Continuos Delivery)애플리케이션에 적용한 변경 사항을 버그 테스트를 거쳐 Repository에 자동으로 업로드되는 것CD(Continuous Deployment)변경 사항을 Repository에서 프로덕션 환경(Cloud환경, On-Premises)..
[Infra] CICD
VPC 및 Subnet 설정 EC2, RDS, S3 생성 Github Action 설정 최종 Infra 구성 1차 진행 구조 우선은 VPC와 Subnet Routing Table, 외부 접속을 위한 Internet Gateway 까지의 설정을 할 것이다 VPC & Subnet Internet Gateway 2번에서 만들어 두었던 ImageUploaderVPC 와 방금 만든 Internet Gateway 를 연결해 준다 Routing Table 기존에 만들어 두었던 VPC를 확인해보면 기본적으로 만들어진 Routing table이 존재한다 해당 Routing table의 설정을 편집해서 Public Subnet을 연결을 할 것이다 연결 대상을 0.0.0.0/0 (모든 접근)에서 IGW(앞서 3번에서 만들어..
Spring Security - 동적 권한 처리
스프링 시큐리티를 사용하는 프로젝트를 진행하는 도중 동적으로 권한을 처리해야하는 경우가 생겼다 기존에 공부할때는 특정 접근 경로에 대해서 어떠한 권한(혹은 역할)이 있는지를 판단하는 것이 전부였고 간단한 상황에서만 사용이 가능했다 문제 상황 게시글을 작성한 사용자, 해당 게시글에 접근이 허락된 사용자들에 대해서 권한 처리 문제 게시글을 작성한 사용자에 대해서 기존 방식대로 권한을 주게 되면 ROLE_WRITER와 같이 주면 된다 requestMatchers("/post/**").hasRole("WRITER") 하지만 이 방식대로 권한을 주게되면 한가지 문제점이 있다 1번 글 작성자가 2번 글에 대해서 권한을 가질 수 있게 된다는 점이다 예를들어 1번글 작성자가 /post/1/update 경로로 접속을 하..
JPA - 복합키
이번 포스트에서는 복합키에 대해서 정리해볼려고 한다 이전에도 몇번 사용은 해봤지만 헛갈리는 부분도 있고 자주 사용하지 않았다보니 까먹는 부분이 있어 정리해 보고자 한다 Composite Key (복합키) 우선 복합키에 대해서 알아보자 다들 알다시피 DB (여기서 DB는 Oracle, MySQL과 같은 관계형 데이터베이스를 지칭한다) 에서는 주어진 개체 집합 내에서 개체들을 구별할 수 있는 방법이 있어야 한다 다르게 표현하면 한 개체 집합에서 모든 속성들의 값이 정확하게 같은 개체들이 존재하면 안된다는 말이다 이러한 것을 위해서 키의 개념이 필요하고 그 키 중에서는 Super key, Candidate Key, Primary key가 적용 가능하다 이 중에서 우리는 Primary key를 선정해서 개체를 ..
[추가] 스프링 시큐리티 OAuth 로그인 처리 방법 2
목차 [이론] 스프링 시큐리티 1 [OAuth] 스프링 시큐리티 OAuth [실습] 스프링 시큐리티 OAuth2 Login 1 [실습] 스프링 시큐리티 OAuth2 Login 2 [추가] 스프링 시큐리티 OAuth 로그인 처리 방법 1 [추가] 스프링 시큐리티 OAuth 로그인 처리 방법 2 앞서 스프링 시큐리티가 어떻게 yml파일만을 가지고 설정을 하는지에 대해 알아보았다 이번에는 로그인 요청이 들어왔을때 어떻게 처리하는지 알아보자 OAuth 로그인 요청 처리 역시 Spring Security 답게 Filter를 사용해서 로그인 처리를 하게 된다 앞서 form Login에서 UsernamePasswordAuthenticationFilter에 대해서 충분히 이해했다면 이 또한 쉽게 이해할 것이다 혹시라도..