[C++/Algorithm] cin.tie(NULL) 과 ios_base::sync_with_stdio(false)
·
개발 ━━━━━/C++
백준 단계별로 풀어보기에서 문제를 풀던 중 15552번 : 빠른 A+B 문제 내용에 생소한 것이 쓰여져 있어 알아보았다. https://www.acmicpc.net/problem/15552 본격적으로 for문 문제를 풀기 전에 주의해야 할 점이 있다. 입출력 방식이 느리면 여러 줄을 입력받거나 출력할 때 시간초과가 날 수 있다는 점이다. C++을 사용하고 있고 cin/cout을 사용하고자 한다면, cin.tie(NULL)과 sync_with_stdio(false)를 둘 다 적용해 주고, endl 대신 개행문자(\n)를 쓰자. 단, 이렇게 하면 더 이상 scanf/printf/puts/getchar/putchar 등 C의 입출력 방식을 사용하면 안 된다. Java를 사용하고 있다면, Scanner와 Sys..
[MySQL] Invalid MySQL server downgrade: Cannot downgrade from 80300 to 80200. Downgrade is only permitted between patch releases
·
개발 ━━━━━/Troubleshoot
문제 기존 MySQL 데이터를 복원하는 과정에서 컨테이너가 무한 재시작을 하길래 에러 로그를 확인해보았다. [ERROR] [MY-014061] [InnoDB] Invalid MySQL server downgrade: Cannot downgrade from 80300 to 80200. Downgrade is only permitted between patch releases. 데이터 복원 작업을 위해 mysql:latest 태그가 붙은 이미지를 불러와서 docker volume 에 저장 후 그 볼륨을 기존에 사용하던 MySQL 이미지에 마운트하는 방식인데 태그가 latest 이다보니 그 사이 업데이트가 되어 버전이 맞지 않는듯 했다. 해결 태그명이 latest 로 되어 있기 때문에 정확한 버전을 알 수가 ..
[Java] Input 값 입력 받는 방법 ② - BufferedReader 클래스
·
개발 ━━━━━/Java
BufferedReader BufferedReader 클래스는 버퍼를 이용한 대표적인 I/O 클래스로, 입력된 데이터를 바로 전달하지 않고 버퍼에 저장해두었다가 전달하는 방식이기 때문에 속도 측면에서 빠르고, 많은 양의 데이터를 처리할 때 유리하다. 사용 방법 import java.io.BufferedReader; import java.io.InputStreamReader; 를 우선 import 해주어야 한다. BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); // 선언 String s = bf.readLine(); // String 으로 입력 받기 (기본) int i = Integer.parseInt(bf.readLine..
[Nginx] default.conf 에 환경변수 적용하기
·
개발 ━━━━━/Troubleshoot
문제 프로젝트에서 nginx 의 default.conf 파일을 아래와 같이 proxy_pass 부분에 실제 서비스 주소를 입력했었다. server { listen 80; listen [::]:80; server_name reuse.kro.kr; location /api { proxy_pass 실제 서비스 주소; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_set_header X-Real_IP $remote_addr; proxy_redirect off; } } 실행은 당연히 잘 되었지만 github 으로 파일을 관리하고 싶어서 위 주소를 환경 변수로 만들고자 했다. 같은 경로에 '..
[Nginx] Blue / Green 배포 전략으로 Spring 프로젝트 EC2 에 무중단 배포하기
·
개발 ━━━━━/Dev
무중단 배포 현재 연습하고 있는 프로젝트는 사진과 같은 단순 배포 방식으로 프로젝트가 배포 되고 있어 업데이트 사항이 있을 때 서버가 항상 종료가 되었다가 새로 시작하는 방식으로 운영되고 있었다. 종료가 된 상태에선 서비스 이용을 못할 뿐더러 새롭게 배포된 프로젝트에 문제가 있을시 수습되기 전까진 서비스 이용을 또 못하고 있는 상황이 연출되어 무중단 배포를 적용시켜보기로 했다. 무중단 배포 전략 1. Rolling Update (롤링 배포) 롤링 배포는 사용 중인 인스턴스 내에서 새 버전의 프로젝트를 점진적으로 교체하는 방식 서비스 중인 인스턴스 하나를 로드밸런서에 라우팅하지 않도록 한 뒤, 새 버전을 적용하여 라우팅하도록 한다. 새 버전을 배포할 때 인스턴스가 감소를 하므로 트래픽이 몰려 과부하가 발생..
[Docker] Docker Volume 을 이용한 MySQL 데이터 백업
·
개발 ━━━━━/Dev
Ubuntu 에서 Docker 로 띄워놓은 MySQL 컨테이너의 데이터를 Docker Volume 을 만들어 관리하려 한다. docker inspect mysql_컨테이너_ID 로 해당 컨테이너에 마운트 되어 있는 볼륨을 찾는다. "Mounts" 부분에서 찾을 수 있다. docker volume create 새로운_volume_이름 으로 새로운 볼륨을 생성해주고 docker run --rm -v 백업할_volume_이름:/from -v 새로_만든_volume_이름:/to alpine ash -c "cd /from && cp -av . /to" • 백업할_볼륨_이름을 /from 경로에 마운트합니다. • 새로_만든_볼륨_이름을 /to 경로에 마운트합니다. • alpine 컨테이너를 시작하고, /from에서 ..
[Redis] NOAUTH Authentication required
·
개발 ━━━━━/Troubleshoot
문제 상황 Docker-Compose 로 Spring + MySQL + Redis 컨테이너를 실행시키는데 Spring 컨테이너 로그를 살펴보니 NOAUTH Authentication required 이런 오류가 뜬다. 로컬에서 Redis 를 돌릴 땐 비밀번호가 필요 없었던 것 같아 프로젝트에서 삭제를 했더니 생긴 오류인 것 같다. 해결 우선 spring 프로젝트에서 비밀번호 부분을 다시 활성화시키고 Redis 컨테이너가 띄워진 상태로 // redis 컨테이너 접속 docker exec -it redis_컨테이너_ID bash // redis-cli 접속 redis-cli // Redis 비밀번호 확인 config get requirepass // Redis 비밀번호 설정 config set require..
[Docker] Spring + MySQL + AWS EC2 + Github Actions + Docker 를 활용한 프로젝트 진행하면서 발생했던 각종 오류들
·
개발 ━━━━━/Troubleshoot
글을 시작하기 전... 결론적으로 이 글은 Spring 프로젝트를 Dockerfile 로 빌드한 후 Github Actions 로 Docker Hub 에 올리고 EC2 환경에서 각종 컨테이너들을 Docker-Compose 로 관리하는 것을 목표로 이것 저것 해보면서 발생했던 모든 문제들을 다루는 글이라 내용이 다소 난잡하고 중구난방일 수 있다. 프로젝트 환경 진행했던 프로젝트가 있는데 성공적으로 끝마치고 나니 프로젝트 때 맡은 부분을 구현하느라 미처 해보지 못했던 서버 구성을 해보고 싶었고 이것 저것 실험해보고 싶은게 생겨 개인 서버를 구축해 프로젝트를 그대로 실행시켜 보기로 했다. 구 프로젝트는 1. Github Actions 로 jar 파일을 직접 배포하여 실행 2. MySQL 은 RDS 를 구성하여..