전체 글 276

1. Relational Model

BackgroundRelational model is based on Set Theory and Predicate Logics (First Order Logics)Predicate Logics (술어 논리): 개체, 속성, 관계를 표현하는 논리 체계Relational DBMSBasic Structuresets D1, D2, ... Dn이 주어졌을 때 relation r은 D1 x D2 x ... x Dn의 부분 집합이다.tuple은 unique해야 한다.attribute 값은 atomic해야 한다.튜플이나 속성의 순서는 상관없다. Attribute Types- relation의 각 속성은 이름이 있다.- 각 속성에 허용되는 값의 집합을 domain이라고 부른다.- 각 속성의 값은 atomic해야 한다. ..

연관관계

요즘 자소서를 쓰면서 스스로 너무 부족한 사람이라는 것을 실감하게됐다...우울하기도 했지만 동기부여로 삼고 열심히 공부해보자.관련 오류도 수정할 겸 연관관계를 복습하고자 한다. 참고: 책 '자바 ORM 표준 JPA 프로그래밍'양방향 연관관계일대다 연관관계일 때데이터베이스 테이블은 외래 키 하나로 양방향으로 조회 가능 -> 처음부텅 양방향 관계 연관관계 매핑- 회원 엔티티@Entitypublic class Member { // 중략 @ManyToOne @JoinColumn(name = "userId") private User user; // 연관관계 설정 public void setTeam(Team team) { this.team = team; }..

Spring & JPA 2025.03.17

[고대로] Redisson을 통한 분산 락 적용

기존 배포 서버를 1개 사용하고 있었지만 최근 ECS로 배포 방법을 변경함에 따라 여러 컨테이너가 같은 DB 데이터에 접근할 수 있게 되었다. (사실 기존에도 개발용 서버를 배포하였기 때문에 상황은 동일하다...) 서버가 늘어날 수록 같은 데이터를 수정하는 스케줄러가 동시에 여러 개 시작되어 문제가 발생할 수 있기 때문에 이를 예방하기 위해 분산 락을 적용해야 할 필요성을 느꼈다. 특정 쿼리로 인해 발생할 수 있는 동시성 문제를 해결한다기보다 매일 정해진 스케줄러로 인한 문제를 예방하기 위한 것이므로 특정 서버 1개만 스케줄러를 실행해야 하는 상황이다. 즉 네임드 락을 적용하고자 한다. Spring Data JPA를 사용하는 방법과 Redis를 사용하는 방법이 있는데, 기존에 Redis도 ECS 서비스로..

Spring & JPA 2025.03.05

NAT gateway 대신 NAT instance 사용하기

지난번 프라이빗 서브넷에 ECS 클러스터를 구성하였다.그런데 알고 보니 NAT gateway는 시간당 0.059$의 요금이 청구된다...하루 운영하니 거의 7~8 달러가 늘어나서 급히 NAT gateway를 삭제하였다. 찾아보니 NAT gateway 대신 NAT instance를 사용하는 방법이 있어 적용해보았다. 1. EC2 인스턴스 생성인스턴스를 생성할 때 AMI 선택 시 NAT를 검색해 이미지를 선택해준다. 2. 탄력적 IP 할당생성된 인스턴스에 탄력적 IP를 할당받아 연결해준다. 3. 프라이빗 서브넷 라우팅 테이블 생성이전과 같이 라우팅 테이블을 생성하여 프라이빗 서브넷으로 사용할 서브넷을 연결해준다.이때 전과 달리 0.0.0.0/0 에 nat-gateway가 아닌 생성한 인스턴스를 선택하여 라우..

AWS 2025.03.03

AWS 로드밸런서와 https

가비아에서 구매해둔 도메인이 있어서 해당 도메인을 가지고 진행한다. 1. 탄력적 IP 할당EC2 > 탄력적 IP에 들어가 탄력적 IP를 하나 할당받는다. 2. 호스팅 영역 생성Route 53에서 호스팅 영역을 생성한다.'레코드 생성'을 누른 후 값에 할당 받은 탄력적 IP를 입력한다. 3. 가비아 등록3-1. 네임서버 등록레코드에 있는 NS 유형의 값을 가비아 도메인의 1~4차 네임서버에 입력해준다.이때 아래 값에 있는 마지막 .을 제외하고 입력해야 한다. 3-2. 탄력적 IP 등록가비아의 도메인 연결 설정에 들어가 DNS 레코드를 탄력적 IP로 수정한다. 4. Certificate Manager 인증서도메인을 가지고 퍼블릭 인증서를 요청한다.인증서가 만들어지면 ID를 눌러 들어간 후 route 53 레..

AWS 2025.02.26

AWS ECS

ECS를 사용해 배포해보고자 한다.아래와 같은 상태에서 시작한다. 1. ECR 생성1-1. 리포지토리 생성1-2. 생성한 리포지토리 생성 후 '푸시 명령 보기' 선택1-3. 사용할 도커 이미지를 위한 도커 파일을 생성한 후 해당 파일이 있는 위치에서 푸시 명령어를 차례대로 입력 2. ECS 태스크 정의앞에서 빌드한 도커 이미지의 uri를 사용하여 태스크를 정의한다.나는 스프링 태스크와 redis 태스크를 생성하였다.ec2 인스턴스와 bridge 네트워크 모드를 선택하였고cpu와 메모리는 기본 설정보다 작은 값을 설정하였다. -> 서비스 생성 시 프로비저닝 상태가 계속돼서 CPU와 메모리 모두 0.8로 설정하였다. 스프링 태스크에는 스프링 컨테이너를, redis 태스크에는 redis 컨테이너에 대해 설정한..

AWS 2025.02.26

AWS 로드밸런서와 오토스케일링 그룹

앞에서 설정한 서브넷을 가지고 로드밸런서와 오토스케일링 그룹 실습을 해보고자 한다.프라이빗 서브넷 내에 오토스케일링 그룹을 통해 EC2를 생성하고 로드밸런서를 생성한 뒤 로드밸런서를 통해 EC2에 접근하고자 한다. 1. 로드밸런서 생성1-1. 대상 그룹 생성 - 사용하는 프로토콜, 포트, 상태 검사 경로를 입력 - 인스턴스 등록은 하지 않고 넘어갑니다.  1-2. 로드밸런서 생성 애플리케이션 로드밸런서, 인터넷 경계 선택가용 영역은 퍼블릭 서브넷, 연결할 ec2가 있는 서브넷 선택만들어 둔 대상 그룹 선택  2. EC2 생성ec2를 생성한 후 서비스에 맞게 여러 패키지들을 설치하는 등 준비를 한다. 3. AMI 생성위 ec2에 대한 이미지를 만든다. 4. 시작 템플릿 생성Auto scaling group..

AWS 2025.02.24

AWS VPC와 서브넷

AWS ECS로 서버를 운영하고자 하는 몇 번의 시도를 실패하고 차근차근 공부해야 할 필요성을 느꼈다.일단 VPC부터 공부해보고자 한다. VPN (Virtual Private Network)VPN: 가상사설망인터넷을 통해 디바이스 간에 사설 네트워크 연결을 생성공인 인터넷을 사이에 둔 사설망과 사설망이 사설 IP를 이용해 통신할 수 있도록 지원 VPC (Virtual Private Cloud)기업이 공유 퍼블릭 클라우드 인프라에 프라이빗 클라우드와 같은 자체 컴퓨팅 환경을 구축할 수 있도록 제공하는 서비스VPC 별로 네트워크를 구성할 수 있고 각각의 VPC는 완전히 독립된 네트워크처럼 작동 Amazon VPCVPC에는 리전의 각 가용성 영역에 하나의 서브넷이 있고, 각 서브넷에는 EC2 인스턴스가 있고 ..

AWS 2025.02.24

[고대로] static 변수와 영속성 컨텍스트

https://jinjinjincode.tistory.com/313 [고대로] 운영 시간 관리Devkor에서 '고대로'라는 학교 안내 어플을 개발하는 활동을 하고 있다.학교의 건물, 강의실, 편의시설 등의 운영시간을 관리할 필요성이 생겨 해당 기능을 맡아 구현하였다. 프로젝트를 시작하jinjinjincode.tistory.com 운영 시간 관리를 구현하면서 영속성 컨텍스트 때문에 운영 시간 변동이 제대로 반영되지 않았던 오류가 발생하였다. 문제 상황기능 구현 이후에 DB를 확인하던 중 운영하고 있는 시간임에도 건물의 isOperating이 false임을 발견하였다. 우선 해당 건물이 운영 중이라고 판단하는 로직에 오류가 발생해 false로 값이 저장되었나 싶어서 log.info로 확인해보았는데 스케줄러가..

Spring & JPA 2024.08.17