728x90
반응형

Develop(개발) 10

[AWS] 프리티어 VPC 과금 문제 해결법 (RDS Public IP 없이 MySQL 워크벤치 연결)

AWS 과금 정책의 변화비교적 최근 IPv4의 고갈 문제로 인해 AWS에서 IPv6사용을 권장함에 따라 2개 이상의 IPv4 할당에 대해 과금을 시작했습니다.이에 따라 1년가량 운영 중이던 저희 서버에도 과금이 진행됐는데요.이번에 AWS 계정간에 서버를 이전하며 과금 문제를 해결한 방법에 대해서 말씀드리도록 하겠습니다.2개의 IPv4를 할당받는다면 위와 같이 달에 4달러가량이 지출되게 됩니다. 과금이 되는 원리대부분의 사이드 프로젝트에서 2개의 IP는 다음과 같이 할당받습니다.1. EC2 인스턴스에 고정 IP를 할당하기 위해 등록한 탄력적 IP2. RDS 인스턴스를 외부에서 접근할 수 있게 열어둔 퍼블릭 액세스 가능이렇게 2개에 대해서 IPv4를 할당받는 경우가 대부분입니다.해결법이 문제를 해결하기 위해..

Develop(개발) 2024.07.18

스프링 동시성 문제 해결법의 종류와 장단점

동시성 문제란 무엇인가?Concurrency problems occur when multiple transactions are being executed on the same database in unrestricted problems. 동시성 문제는 동일한 데이터베이스에서 여러 트랜잭션이 동시에 실행될 때 발생합니다. 즉, 동시성 문제는 동일한 데이터에 대해 여러 트랜젝션이 동시에 수행될 때 발생하는 문제입니다. 스프링에서 동시성 문제 해결의 분류스프링에서 동시성 문제를 해결할 수 있는 방법은 크게 3가지로 나눌 수 있습니다. 1. 코드단에서 지원하는 Lock을 이용한 Application 내부 스레드 동기화 2. MongoDB, Redis와 같은 인메모리 DB를 이용한 트랜젝션 동기화 3. DB자체에..

Develop(개발) 2024.03.17

스프링이 어떻게 여러 요청을 동시에 처리할 수 있을까?

스프링의 다중 요청 처리 우선 스프링은 멀티쓰레딩 환경입니다. 그렇기 때문에 동시에 발생하는 여러 요청에 대해서 여러 쓰레드로 나눠서 비동기로 요청을 처리할 수 있습니다. 그러면 스프링에서 멀티쓰레딩을 어떻게 지원할까요? 스프링 내장 서블릿 컨테이너 Tomcat 스프링은 기본적으로 설정된 서블릿 컨테이너로 내장 웹서버인 Tomcat을 사용합니다. 이 Tomcat에서 멀티쓰레딩을 지원하기 위한 쓰레드풀을 기본적으로 생성해서 관리합니다. 쓰레드풀이란 쓰레드를 생성하고 제거하는데 드는 컨텍스트 스위칭과 같은 오버헤드를 줄이기 위해 미리 쓰레드를 만들어두고 관리하는 패턴입니다. 이 쓰레드풀의 쓰레드들을 통해 비동기 요청을 처리합니다. Tomcat 쓰레드풀 기본 설정 server: tomcat: threads: ..

Develop(개발) 2024.03.10

Github Action에서 간단한 테스트 자동화 하기!

왜 Github Action? Github Action을 이용하면 여러 테스트를 자동화할 수 있습니다. 저는 42Seoul 과정을 진행하면서 팀 과제를 진행하며 Github Action을 통해 2개의 테스트 자동화를 구축하고 사용하고 있습니다. 1. Makefile의 make명령이 제대로 make가 되는지 여부 테스트 2. Norminnete(코딩 컨벤션)을 맞춰서 코드를 작성했는지 테스트 이러한 테스트들을 통해 Make가 가능한 코드만 master에 머지를 한다던지 등의 팀 내규를 만들어서 소스코드를 관리할 수 있어서 매우 편리합니다. 어떻게 작동하나요? (간단히) Github Action은 일시적으로 가상 환경을 띄워서 그 안에서 사전에 지정해둔 job들이 실행되는 순서로 작동합니다. 꼭 테스트뿐이 ..

Develop(개발) 2024.02.25

[Spring] Transaction으로 인한 중복 아이디 회원 생성 문제

회원가입 엔드포인트로 빠르게 연속으로 요청 시 중복 회원 생성 문제 회원가입 엔드포인트로 빠르게 연속해서 같은 회원가입 요청을 보내면 생성 중인 유저에 대한 존재 유무가 체크되지 못해서 중복된 회원이 생성되는 문제가 발견됐습니다. 프론트엔드에서 회원가입 버튼을 연타하지 못하게 비활성화한다면 일시적으로는 괜찮겠지만 근본적으로 서버에서 이런 현상이 가능하다는 것이 문제이기 때문에 서버에서 문제를 방지하는 해결책이 필요합니다. 문제 원인 분석 이 문제는 백엔드에서 유저 생성이 Transaction 하게 처리되기 때문에 발생하는 문제입니다. 유저의 정보가 모두 생성되는 시점에서야 DB에 유저의 정보가 반영되기 때문에 유저의 정보가 생성되는 시간 동안 똑같은 이름의 유저를 생성하는 요청을 서버에 보내더라도 DB에..

vscode 터미널에서 실행하는 환경변수 직접 설정하는 방법

터미널에서 vscode 바로 실행하기 vscode의 'code' command를 PATH로 설정해주면 "code 폴더경로" 명령어를 실행 시, 쉘이 프로젝트 폴더로 vscode를 실행시킨다. 이를 설정하는 방법은 2가지가 있다. [방법 1] vscode에서 설정하기 vscode를 실행한다. Cmd + Shift + P 를 눌러서 커멘드 팔레트를 연다 "Shell Command: Install 'code' command in PATH"를 찾아서 실행시키면 끝 [방법 2] 직접 설정하기 만약 Bash를 사용한다면 다음 전체 커멘드를 shell에 복붙한다. cat > ~/.bash_profile # Add Visual Studio Code (code) export PATH="\$PATH:/Application..

Develop(개발) 2023.10.03

[CSS] float 사용시 clear: both 를 왜 적어야할까?

어.. 왜 html 요소들이 내 마음대로 안 배치되고 뭔가 이상한 것 같지..? ㅠㅠ 라고 느낀 당신. 혹시 float 속성을 잘못 사용하지는 않았는가? html에서 block 요소들은 기본적으로 요소마다 한 줄씩 띄워진다. 개발자가 원하는대로 화면을 제어하고, 구성하기 위해서 css에서는 float와 flex 속성을 지원한다. 우리는 이 중 float 속성을 살펴보자. CSS에서는 float 속성을 요소에 적용해서 block 요소들을 상하가 아닌 좌우로 배치되게 만들 수 있다. 다음과 같이 float 를 사용할 수 있다. 다음은 section 부모 요소 안에 3개의 article 자식 요소를 넣는 html 코드이다. 이에 css를 다음과 같이 적용해보자. .floatEx section { border:..

C++로 만든 UP DOWN GAME

복학전에 공부겸 심심풀이로 C++또는 파이썬으로 게임을 만들어 보기로 했다. 가장 기초적인 게임부터 하나씩 만들어 볼 거다. 오늘 만들어본건 컴공 수업을 처음 들을 때 배우는 UP DOWN GAME인데 만드는 난이도가 쉽다. 여러 헤더를 얕고 다양하게 쓸 수 있어서 만들어보면 좋은 게임 같다. 아래는 소스 코드 #include #include #include #include #include using namespace std; string play("play"); string help("help"); string quit("quit"); bool hp=false; int main() { srand((unsigned int)time(0)); while(true) { system("cls"); cout

728x90
반응형