전체 글 83

행렬 제곱 (백준 10830번)

https://www.acmicpc.net/problem/10830 문제 풀이행렬을 제곱하기 위해서 B번 곱하면 시간 초과 분할 정복하여 log_B으로 제곱 연산 수행 (B번 -> log_B번으로 축소 가능)최종 시간 복잡도 O(N^3 logB) import java.util.*;public class Main { static int N; public static void main(String[] args) { Scanner sc = new Scanner(System.in); N = sc.nextInt(); long B = sc.nextLong(); long[][] matrix = new long[N][N]; for (int i =..

Algorithm 2025.12.15

JVM 자동 메모리 관리

런타임 데이터 영역1. 프로그램 카운터PC : 현재 실행 중인 스레드의 '바이트코드 줄 번호 표시기'자바 가상 머신에서의 멀티 스레딩은 CPU 코어를 여러 스레드가 교대로 사용하는 방식으로 구현되기 때문에 특정 시각에 각 코어는 한 스레드의 명령어만 실행하게 된다.스레드 전환 후 복원하려면 스레드 각각에 고유한 프로그램 카운터가 필요하다.각 스레드의 카운터는 서로 영향을 주지 않는 독립된 영역에 저장된다. 이 영역을 스레드 프라이빗 메모리라고 한다.스레드가 네이티브 메서드를 실행 중일 때 프로그램 카운터 값은 Undefined이다. 2. 자바 가상 머신 스택자바 가상 머신 스택도 '스레드 프라이빗'하다.각 메서드가 호출될 때마다 자바 가상 머신은 스택 프레임을 만들어 지역 변수 테이블, 피연산자 스택, ..

Java 2025.12.11

소수 판별

에라토스테네스의 체 에라토스테네스의 체수학에서 에라토스테네스의 체는 소수를 찾는 빠르고 쉬운 방법이다. 고대 그리스 수학자 에라토스테네스가 발견하였다.www.google.com 자바 코드// maxV는 최댓값boolean[] isPrime = new boolean[maxV + 1];Arrays.fill(isPrime, true);isPrime[0] = isPrime[1] = false;for (int i = 2; i * i i * i가 maxV보다 작거나 같은 값까지 실행하는 이유는? 만약 n보다 작은 어떤 수 m이 m=ab라면 a와 b 중 적어도 하나는 루트n 이하이다. 즉, n보다 작은 합성수 m은 루트n​보다 작은 수의 배수만 체크해도 전부 지워진다는 의미이므로, 루트 n​ 이하의 수의 배수만 ..

Algorithm 2025.12.01

아마존 웹 서비스 부하 테스트 입문 - 정리

부하 테스트 용어Throughput : 시스템이 시간당 처리할 수 있는 요청 수Latency : 테스트 도구가 요청을 보내고 응답을 받을 때까지의 시간부하 테스트 계획 준비1. 일정 결정한번 부하 테스트 시나리오를 완성하게 되면 다시 테스트하는 것은 어렵지 않아, 시스템 전체 완성을 기다리지 않고, 구성과 같이 부하 테스트를 하는 것도 좋은 방법이다.1~2주 정도 일정을 더 잡는 것도 좋은 방법2. 부하 테스트 목적 설정부하 테스트의 목적여러 사례를 토대로 각 시스템의 응답 성능을 예측한다.부하가 많이 발생하면 성능 개선을 한다.원하는 성능을 만드는데 필요한 하드웨어를 미리 선정한다.시스템 확장성을 가졌는지 확인한다.시스템 확장성에 대한 특성을 파악한다.1번의 여러 사례에 대한 예시서비스 시작 직후 많은..

카테고리 없음 2025.11.30

DispatcherServlet 개념과 동작원리 및 내부 코드

DispatcherServlet 개념DispatcherServlet은 HTTP 프로토콜로 들어오는 모든 요청을 먼저 받아서 적합한 핸들러를 찾아, 컨트롤러 위임을 하는 역할입니다.(쉽게 말하여, 제일 앞에서 요청을 받아, 적합한 박스를 찾아ispatcherServlet 개념DispatcherServlet은 HTTP 프로토콜로 들어오는 모든 요청을 먼저 받아서 적합한 핸들러를 찾아, 컨트롤러 위임을 하는 역할입니다. (쉽게 말하여, 제일 앞에서 요청을 받아, 적합한 컨트롤러로 보내주기) DispatcherServlet을 쓰는 이유DispatcherServlet이 없다면, 모든 서블릿에 대해 URL 매핑을 해주어야 합니다.(web.xml ...) 하지만, DispatcherServlet을 사용하여, 핸들러..

Spring/Spring MVC 2025.08.02

브라이언 게츠의 자바 병렬 프로그래밍 1부 기본 원리 정리

1. 스레드 안전성스레드 안전성이란?여러 스레드가 클래스에 접근할 때, 실행 환경이 해당 스레드들의 실행을 어떻게 스케줄하든 어디에 끼워 넣든, 호출하는 쪽에서 추가적인 동기화나 다른 조율 없이도 정확하게 동작하면 해당 클래스는 스레드 안전하다고 말한다. 스레드 안전한 클래스는 클라이언트 쪽에서 별도로 동기화할 필요가 없도록 동기화 기능도 캡슐화한다.상태 없는 객체는 항상 스레드 안전하다.단일 연산증감 연산자는 단일 연산이 아니다변수 값을 가져온다.값에 1을 더한다.변수에 값을 저장한다.늦은 초기화 시 경쟁 조건한 스레드에서 생성자를 통해 객체를 생성할 때, 다른 스레드에서 인스턴스에 접근하면 null일지 객체가 생성되었을지 알 수 없다. 다른 스레드가 읽기 전에 복합 동작을 모두 수행할 경우, 단일 연..

[인프런 워밍업 클럽 BE 3기 클린코드 & 테스트] Day18 미션

Day18 미션1. @Mock, @MockBean, @Spy, @SpyBean, @InjectMocks 의 차이를 한번 정리해 봅시다.2. 아래 3개의 테스트가 있습니다. 내용을 살펴보고, 각 항목을 @BeforeEach, given절, when절에 배치한다면 어떻게 배치하고 싶으신가요?(@BeforeEach에 올라간 내용은 공통 항목으로 합칠 수 있습니다. ex. 1-1과 2-1을 하나로 합쳐서 @BeforeEach에 배치)"@BeforeEach void setUp() { ❓} @DisplayName(""사용자가 댓글을 작성할 수 있다."")@Testvoid writeComment() { 1-1. 사용자 생성에 필요한 내용 준비 1-2. 사용자 생성 1-3. 게시물 생성에 필요한 ..

[인프런 워밍업 클럽 BE 3기 클린코드 & 테스트] Day16 미션

Day16 미션Layered Architecture 구조의 레이어별 테스트 작성법을 알아보았습니다. 레이어별로 1) 어떤 특징이 있고, 2) 어떻게 테스트를 하면 좋을지, 자기만의 언어로 다시 한번 정리해 볼까요? 1) 레이어별 특징 정리 Persistence Layer데이터베이스 및 외부 저장소와 상호작용하며, 데이터를 저장, 로드하는 계층 비즈니스 가공 로직은 Business Layer에서데이터 CRUD에 집중 Business Layer비즈니스 로직을 처리하는 계층도메인 모델을 조작하고, 검증하는 핵심 로직을 처리트랜잭션을  보장하고, 관리한다.Persistence Layer와 상호작용하여 비즈니스 로직을 실행Presentation Layer사용자와 소프트웨어의 첫 접점, UI와 요청 처리를 담당하는..

[인프런 워밍업 클럽 BE 3기 클린코드 & 테스트] Day4 미션

Day4 미션1. 아래 코드와 설명을 보고, [섹션 3. 논리, 사고의 흐름]에서 이야기하는 내용을 중심으로 읽기 좋은 코드로 리팩토링해 봅시다.2. SOLID에 대하여 자기만의 언어로 정리해 봅시다. public boolean validateOrder(Order order) { if (order.getItems().size() == 0) { log.info("주문 항목이 없습니다."); return false; } else { if (order.getTotalPrice() > 0) { if (!order.hasCustomerInfo()) { log.info("사용자 정보가 없습니다."); ..

[TIL] 3.5 1Day HTTP 메서드에 Body문

지금까지 GET과 POST만을 썼어서 다른 메서드에 대한 지식이 부족했다. 오늘, DELETE 매핑을 써서 Body문을 받으려고 했는데, 일부 클라이언트와 서버에서는 body문을 허용하지 않는다고 한다. @RequestBody허용하는 메서드는 POST, PUT, PATCH, DELETE(일부분 허용, fetch API, axios 미지원)@RequestParamtomcat은 기본적으로 post 메소드만 application/x-www-form-urlencoded를 허용한다. parseBodyMethods 설정을 해야지 put, patch, delete도 body를 사용할 수 있다.

TIL 2025.03.06