코드를 구현한 후 로그를 확인하기 위해 새로고침을 했다. 실수로 연속 두 번을 눌러버렸다.그랬더니 예상치 못한 결과가 출력되었다. 예상한 결과와 달리 순서가 뒤죽박죽 섞인 로그가 출력되었다. 심지어 다른 스레드인데 트랜잭션 ID가 일치한다. 대체 무슨 일이 생긴 걸까? 동시성 문제 동시성 문제가 일어나는 과정은 다음과 같다.1. 스레드 A가 서비스 객체에 접근하여 데이터를 저장하고 조회하려고 한다.2. 스레드 A가 서비스 객체에 접근하여 데이터를 저장했다.3. 스레드 A가 저장한 데이터를 조회하기 전에 스레드 B가 서비스 객체에 접근하여 데이터를 저장했다.4. 스레드 A는 본인이 저장한 데이터가 아닌, 스레드 B가 저장한 데이터를 조회한다.5. 스레드 B는 본인이 저장한 데이터를 조회한다. 🙋🏻..
[AWS] EC2 + CodeDeploy + S3 + GithubActions 조합으로 자동화배포 구축하기 - (1) EC2 인스턴스 생성 및 세팅 해당 글은 2024년 4월 11일에 생성된 인스턴스를 기준으로 작성되었습니다. (Ubuntu 22.04로 만들었지만 20.04로 만들어도 문제없습니다! 직접 만들어서 확인해 봤습니다.) 💡 프로젝트 기술스택 : Sprin yooooooni.tistory.com 이전 글에서 EC2 인스턴스 생성 및 우분투 환경 세팅 과정을 확인할 수 있습니다. 1. CodeDeploy 애플리케이션 및 배포 그룹 생성 본격적으로 애플리케이션을 생성하기 전에 역할을 하나 더 만들어줄 겁니다. IAM > 역할 > 역할 생성으로 들어갑니다. 위처럼 AWS 서비스, CodeDeploy..
해당 글은 2024년 4월 11일에 생성된 인스턴스를 기준으로 작성되었습니다. (Ubuntu 22.04로 만들었지만 20.04로 만들어도 문제없습니다! 직접 만들어서 확인해 봤습니다.) 💡 프로젝트 기술스택 : SpringBoot + MySQL + JDK 17 1. EC2 인스턴스 만들기 AWS에 로그인한 후 EC2를 클릭하여 인스턴스를 시작합니다. 인스턴스의 이름을 작성하고 AMI를 선택합니다. 저는 우분투 22.04로 만들었지만, 20.04로 만들어도 괜찮습니다. 다음으로 키 페어를 만들어줍니다. 저는 기존의 키 페어를 사용했지만, 처음 만드시는 분들은 만들어 주셔야 합니다. 만드는 방법은 바로 아래에 나와있습니다. 새 키 페어 생성 버튼을 누른 후 키 페어 이름과 RSA를 선택한 뒤 생성합니다. 네..
io.awspring 라이브러리를 활용하면 S3를 더 간결한 코드로 연동할 수 있다는 것을 알게 되었다. 이번 글에서는 기존 S3 연동 코드를 지우고 새롭게 연동하는 과정을 정리하고자 한다. 간단하게 말하면 흔히 사용하는import com.amazonaws.auth.AWSStaticCredentialsProvider;import com.amazonaws.auth.BasicAWSCredentials;import com.amazonaws.services.s3.AmazonS3;import com.amazonaws.services.s3.AmazonS3ClientBuilder;이 네 개의 라이브러리 대신import io.awspring.cloud.s3.S3Resource;import io.awspring.clou..
현재 MySQL을 사용하여 프로젝트를 진행하고 있는데, 처음 프로젝트를 설계할 때 얘기나왔던 PostgreSQL에 대해 찾아보니 SQL과 NoSQL을 모두 지원한다는 것을 알게 되었다. NoSQL에 대한 개념을 Json쿼리로만 가볍게 이해하고 있었는데 이번 기회에 정리하고자 한다. 프로젝트에 있어 적합한 데이터베이스를 선택하는 것은 매우 중요하다. 단순히 프레임워크에 따라 결정하지 말고, 두 SQL의 차이를 이해하여 결정해야 한다. SQL이란 관계형 데이터베이스 RDBMS에서 데이터를 저장, 수정, 삭제, 검색 가능 데이터는 정해진 스키마에 따라 테이블에 저장 데이터는 관계를 통해 여러 테이블에 분산 따라서 스키마를 준수하지 않은 레코드는 테이블에 추가할 수 없다. 또한 중복을 피하기 위해서 '관계'라는..
앞 게시글을 보면 나의 배포 일기를 확인할 수 있다. https://yooooooni.tistory.com/132 [AWS] EC2 배포 일주일 삽질 스토리 (feat. 환경변수) 약 2주간의 삽질이 방금 끝났다.. 끝이 안 보이던 문제가 해결되니까 허무하고 어이없고 홀가분하다..! 지난 일주일간 있었던 일을 적어보자면 1. 탄력적 IP 부여해 줘도 접속 안 됨 인바운드 규칙 yooooooni.tistory.com 하지만 위 해결 방안은 jar을 직접 실행하는 방식이었기 때문에 자동화를 적용하지 못했다. 당시 상황은 EC2 우분투 환경으로 들어가 git ssh 클론을 받아 직접 jar을 실행했다. 나는 CodeDeploy를 이용하여 nohup 명령어를 통해 백그라운드 자동화 배포를 하고 싶었다. 그럼 ..
개발자들이 낭만이라고도 생각하는 '눈물 젖은 커피와 함께 며칠간 밤을 새우며 오류를 잡으려고 애쓰다가 전혀 생각지도 못했던 곳에서 간신히 찾아낸 작은 버그 하나의 추억'이라는 건, 사실 '진작에 충분한 테스트를 했었다면 쉽게 찾아냈을 것을 미루고 미루다 결국 커다란 삽질로 만들어버린 어리석은 기억'일 뿐이다.- 토비의 스프링 약 일주일 간의 고생이 방금 끝났다.. 끝이 안 보이던 문제가 해결되니까 허무하면서도 뿌듯하다..! 지난 일주일간 있었던 일을 적어보자면 1. 탄력적 IP 부여해 줘도 접속 안 됨인바운드 규칙으로 Port 열고 인스턴스에 JDK를 설치해서 해결했다. 처음에는 apache2도 설치했다가, 웹서버를 왜 사용했지..? 라는 의문과 함께 apache2는 삭제했다. 사실 헤매다가 네트워크..
요즘 많이 우울하다.. 서버를 배포하고 있는데 열어둔 포트로는 접속이 되지만 API 연결이 안 돼서 일주일 가까이 붙잡고 있다.. 어떤 이유로라든 해결이 됐으면 좋겠다. 지금 해보고 있는 해결 방안은 zip 파일 대신 jar 파일을 배포하는 것인데 이 과정에서 ssh 연결이 필요하다. git clone ssh를 한 후 ./gradlew build를 실행해 줬는데 10분이 넘게 끝나지 않길래 커맨드 C로 강제 종료해 줬다.. 근데 그 이후 ssh 접속이 되지 않았다. 사진상으로는 터미널에서 접속해 본 것이 끝이지만 터미널 외에 EC2 인스턴스에 직접 연결도 여러 번 했다. 근데도 무한 로딩이 걸렸다.. ssh 접속이 아예 거부당한 적은 많은데 접속이 되지 않고 무한 로딩이 걸린 것은 처음이라 당황스러웠다..