[C/C++] 26495번 - Big Number

https://www.acmicpc.net/problem/26495 26495번: Big Number One of the professors at PLU has had a lot of trouble reading student programs. He just cannot read that small print. Your job is to write a program that will read a positive integer and rewrite the number in large block format. The block format for each d www.acmicpc.net 문제 0 ~ 9를 각 숫자로 이루어진 큰 수 아스키아트로 만들어 출력하는 문제이다. 단순히 손으로 아스키코드를 찍던지 머리..

백준(BOJ) 2024.03.31 0

CGI와 Servlet, 그리고 WS와 WAS

CGI와 Servlet에 대해 이야기하기 전에 먼저 WS와 WAS의 차이에 대해서 이야기하도록 하겠습니다. 일반적으로 웹서버라고 하면 WS와 WAS를 모두 통칭하는 경우가 많지만 이 글에서는 정적인 웹 페이지만을 반환하는 WS와 동적인 요청또한 처리할 수 있는 WAS를 분리해서 설명하도록 하겠습니다. Web Server (WS) WS의 정의는 다음과 같습니다. 웹 브라우저와 같은 클라이언트로부터 HTTP 요청을 받아들이고, HTML 문서와 같은 웹 페이지를 반환하는 컴퓨터 프로그램 또는 위에 언급한 기능을 제공하는 컴퓨터 프로그램을 실행하는 컴퓨터 즉 웹서버란 HTTP 프로토콜에 따른 요청을 받아서 HTML과 같은 정적인 웹 페이지를 반환하는 프로그램이나 컴퓨터를 의미한다고 이해할 수 있습니다. 결론적으..

CS(Computer Science) 2024.03.22 3

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

동시성 문제란 무엇인가?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 3

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

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

Develop(개발) 2024.03.10 0

[C/C++] 26495번 - Big Number

https://www.acmicpc.net/problem/26495 26495번: Big Number One of the professors at PLU has had a lot of trouble reading student programs. He just cannot read that small print. Your job is to write a program that will read a positive integer and rewrite the number in large block format. The block format for each d www.acmicpc.net 문제 0 ~ 9를 각 숫자로 이루어진 큰 수 아스키아트로 만들어 출력하는 문제이다. 단순히 손으로 아스키코드를 찍던지 머리..

백준(BOJ) 2024.03.31 0

CGI와 Servlet, 그리고 WS와 WAS

CGI와 Servlet에 대해 이야기하기 전에 먼저 WS와 WAS의 차이에 대해서 이야기하도록 하겠습니다. 일반적으로 웹서버라고 하면 WS와 WAS를 모두 통칭하는 경우가 많지만 이 글에서는 정적인 웹 페이지만을 반환하는 WS와 동적인 요청또한 처리할 수 있는 WAS를 분리해서 설명하도록 하겠습니다. Web Server (WS) WS의 정의는 다음과 같습니다. 웹 브라우저와 같은 클라이언트로부터 HTTP 요청을 받아들이고, HTML 문서와 같은 웹 페이지를 반환하는 컴퓨터 프로그램 또는 위에 언급한 기능을 제공하는 컴퓨터 프로그램을 실행하는 컴퓨터 즉 웹서버란 HTTP 프로토콜에 따른 요청을 받아서 HTML과 같은 정적인 웹 페이지를 반환하는 프로그램이나 컴퓨터를 의미한다고 이해할 수 있습니다. 결론적으..

CS(Computer Science) 2024.03.22 3

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

동시성 문제란 무엇인가?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 3

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

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

Develop(개발) 2024.03.10 0

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 4

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

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

트러블슈팅 2024.02.12 3

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 0

[1958번][C/C++] LCS 3

https://www.acmicpc.net/problem/1958 1958번: LCS 3 첫 줄에는 첫 번째 문자열이, 둘째 줄에는 두 번째 문자열이, 셋째 줄에는 세 번째 문자열이 주어진다. 각 문자열은 알파벳 소문자로 이루어져 있고, 길이는 100보다 작거나 같다. www.acmicpc.net 접근 처음에는 LCS가 무조건 이어진 문자열 이어야 한다고 생각해서 이어진 문자열에 대한 코드를 작성했다. 악랄하게도 주어진 예제도 그렇게 이해하고 풀 수 있는 예제였다 ㅠ 예제 입력 abc abc ac 예제 출력 2 a, b가 떨어져있더라도 그냥 띄어서 개수를 셀 수 있다는 것이다.. 위와 같은 반례가 있기 때문에 다르게 다 풀고서 처음부터 다시 접근했다. 해결 기본적으로 DP로 풀어야한다는 감이 온다. (a..

백준(BOJ) 2023.06.27 0

[UNIX] read() write() 시스템 콜의 사용법과 주의사항

UNIX file 접근의 기초 read/write 시스템 콜에 대해 설명하기 전에 먼저 UNIX file 접근의 기초에 대해서 이해해 보자. UNIX상의 모든 file은 byte들의 linear sequence이다. 이 말은 즉, Text file과 Binary file이 따로 나누어져 있지 않다는 의미이다. 모든 파일은 Binary file이다. UNIX에서는 이런 파일들을 프로세스상에서 구분하기 위해서 open 해놓은 파일에 대해서 file descriptor라는 파일 구분자를 운영한다. 이는 file을 open 할 때마다 구조체 배열에 파일의 메타데이터가 저장되는 식으로 작동된다. 참고로 open 시스템 콜을 사용해서 file을 open 하게 되면 가공되지 않은 binary code를 그대로 받게 ..

UNIX 2023.02.05 2