Coding

· Dev/Java
멀티스레드 (Multi-Thread) 개념 실행되지 않은 프로그램을 실행하게 되면 주기억장치에 해당 프로그램이 로딩되고 동작할 수 있는 상태인 '프로세스' 로 바뀝니다. 이러한 동적인 상태의 프로그램을 프로세스라고 하고 프로세스 내의 일련의 작업 단위 하나를 '스레드'라고 표현합니다. 어떤 프로세스든 기본적으로 하나의 메인 스레드가 존재 합니다. 메인 스레드를 중심으로 코드에 따라서 큰 흐름이 진행되는데 프로그램의 성질에 따라서 이러한 스레드가 여러 개 필요할 수 있습니다. 예를 들면 게임이나 웹 서비스 환경에서는 들어오는 요청 수가 동시적이면서 많을 수 있기 때문에 스레드 하나로 전부 처리한다면 간단한 요청에도 많은 시간이 걸릴껍니다. 그래서 Java는 이러한 환경에서 동시다발 적으로 들어오는 요청을 ..
· Dev/DB
이상현상이란? DB에서 이상현상이란 테이블 설계를 적절하게 하지 못한 경우 야기할 수 있는 문제들을 의미합니다. 관계형 데이터베이스는 릴레이션 간 관계를 설정함으로써 데이터의 무결성을 지키고 중복된 데이터들이 나오지 않도록 합니다. 하지만 어떤 서비스를 만들기 위해서 DB 설계 도중 잘못된 설계를 하여 이러한 부분이 깨지게 될 경우 3가지 정도 부분에서 문제가 일어나게 됩니다. 1. 데이터 삽입 시 문제가 발생하는 삽입 이상 (Insertion Anomaly) 2. 데이터 수정 시 문제가 발생하는 갱신 이상 (Update Anomaly) 3. 데이터 삭제 시 문제가 발생하는 삭제 이상 (Deletion Anomaly) 이제 차례대로 해당 이상현상들에 대해서 살펴보겠습니다. 우선, 이해를 빠르게 하기 위하..
· Dev/Test
문제 상황 재고가 감소되는 비즈니스 로직에 대해서 트랜잭션 처리를 해주고 비관적 락을 사용해 동시성 처리를 해주도록 해서 동시성을 제어하려고 로직을 짰다. 그리고 테스트를 통해 스레드풀을 생성해서 여러 스레드가 한번에 해당 트랜잭션에 접근하는 환경을 만들어 테스트를 하였다. 분명 Pessimistic Lock을 걸어서 해당 트랜잭션에 순차적으로 접근하도록 했다. 100개의 요청이 순차적으로 처리된다면 값은 0이 되어야 하는데 아래와 같이 순차적으로 처리가 되지 않았다. 어디선가 DB에 락이 제대로 걸리지 않았던가 트랜잭션 처리가 되지 않았거나 둘 중 하나의 문제인 것 같아서 어디가 문제인지 찾아보기로 했다. Pessimistic Lock 설정 위와 같이 쿼리와 함께 락 설정을 해주었다. 아래는 비즈니스 ..
· Dev/PS
import java.io.*; import java.util.StringTokenizer; public class RemoteController { static BufferedReader br; static StringTokenizer st; static String N; static int cnt; static String[] buttons; static int ans = 0; public static void main(String[] args) throws IOException{ input(); solve(); System.out.println(ans); } public static void input() throws IOException { br = new BufferedReader(new Inp..
풋데브
'Coding' 태그의 글 목록