본문 바로가기

프로젝트 기록15

Linux에서 AWS-CLI 설정하기 AWS CLI 설치설치 명령어curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"unzip awscliv2.zipsudo ./aws/install upzip이 설치돼있지 않을 경우 아래 명령어를 통해 설치해줍니다.sudo apt install unzip 설치 확인aws --version IAM 계정과 액세스키 만들기aws-cli를 구성하기 전에, IAM 계정과 이에 접근하는 액세스키가 없다면 만들어주어야합니다. 저는 S3에 접근하는게 목적이므로 S3FullAccess 권한을 가진 계정을 하나 만들었습니다.그리고 우측 상단에 "액세스 키 만들기"를 눌러서 액세스 키를 하나 만들어줍니다.  CLI를 위한 계정을 만.. 2024. 12. 12.
Linux 크론(Cron)과 크론탭(Crontab) 리눅스(Linux) 계열에서 특정 시간에 특정 작업을 하는 데몬을 Cron(크론)이라 한다.크론(Cron)이 언제 무엇을 하는지 특정 파일에 저장하는 것을 크론탭(Crontab)이라고 한다.크론(Cron)이라는 데몬이 원하는 시간에 원하는 명령 또는 프로그램을 수행하도록 명령 리스트를 만드는 것이 크론탭이다. 크론탭의 설치sudo apt update -ysudo apt install -y cron 크론탭 기본 사용법// 크론탭 편집crontab -e// 크론탭 작업 내용 확인crontab -l// 크론탭 삭제. 삭제시 전체 작업이 삭제된다.crontab -r crontab -e 명령어를 통해 파일을 열었다면, 아래처럼 을 한줄에 적어주면 된다.크론탭 실행 명령// 크론탭 시작service cron st.. 2024. 12. 12.
[Redis AOF] AOF 설정한 Redis Docker Container 실행하기 Redis는 아무 설정을 하지 않으면 RDB 방식을 따라 데이터가 디스크로 백업된다. 레디스의 데이터 백업 방식에 대한 내용은 아래 포스팅을 참고해주세요.https://onfonf.tistory.com/108 [Redis] Redis 데이터의 영구 저장(RDB, AOF)Redis PersistencyRedis는 인메모리 DB이지만, 데이터를 디스크에 영구 저장 할 수 있는 특징이 있다.그래서 Redis가 restart되더라도 디스크에 저장해놓은 데이터를 다시 읽어서 메모리에 로딩하기 때문onfonf.tistory.com 그러면 AOF(Append Only File) 방식으로 데이터를 백업하려면 어떻게 해야할까?이 글은 Dockerfile을 만들어서 AOF 방식으로 데이터를 백업하는 redis 컨테이너를 .. 2024. 12. 10.
[Spring Data JPA] MariaDB에서의 동시성 이슈로 인한 갱신 이상 문제와 그 해결법(비관적 락, 낙관적 락) 동시성 이슈란?멀티 스레드로 동작하는 데이터베이스에서 동시에 2개 이상의 트랜잭션이 실행돼서 데이터의 정합성이 맞지 않게 되는 이슈를 의미합니다. 동시성 이슈를 확인해보자MariaDB에서 정말 동시성 이슈가 생기는지를 확인해보기 위해 Spring Boot 프로젝트 하나를 만들었습니다. 우선 이렇게 2개의 엔티티를 만들어주었는데, 각각의 용도는 이렇습니다.TestEntity: 초기에 count를 N개로 하고, 이 count를 감소시키며 갱신이상 문제가 생기는지 확인RequestRecord: 요청이 들어올 때마다 하나씩 생성해서 해당 트랜잭션이 롤백된게 아니라는 것을 증명하기 위해 사용 그리고 count 감소 API를 위한 TestController와 TestService도 만들어줬습니다. 요청이 들어오면,.. 2024. 11. 20.
[Docker] Docker Container 안의 파일을 로컬로 이동하기 AWS EC2 안에서 실행되고 있는 docker container 안에 쌓이고 있는 로그 파일을 로컬로 이동시키기 도커 컨테이너에 있는 파일을 EC2로 이동하기우선 aws 펨키를 통해 EC2에 ssh로 접속해줍니다.ssh -i [펨키경로] [사용자이름]@[인스턴스의 ip 또는 퍼블릭 dns] 그리고 아래 명령어를 통해 docker container 안에 접속해줍니다.container id는 docker ps 명령어를 통해 알 수 있습니다.sudo docker exec -it [컨테이너id] sh 이렇게 접속을 했다면, 다운로드하고자 하는 파일의 경로가 어딘지 파악해줍니다저는 /log 안에 다운 받고자 하는 파일이 있습니다. exit 명령어를 통해 컨테이너에서 빠져나오고 아래 명령어로 다운 받을 수 있습니.. 2024. 11. 20.
일급 컬렉션(First Class Collection)에 대해 약 두달전 프로젝트를 하며 아래와 같은 복잡한 정렬 코드를 구현한 적이 있었습니다. // 액션 아이템 모두 뽑아오기 List idList = doneRetrospects.stream().map(Retrospect::getId).toList(); List actionItemList = actionItemRepository.findAllByRetrospectIdIn(idList).stream() .sorted((a, b) -> { if(a.getIsPinned() && b.getIsPinned() && a.getActionItemStatus().equals(b.g.. 2024. 10. 9.