목록분류 전체보기 (48)
킴의 레포지토리
WAS를 구현해보면서 스프링부트의 내장 WAS인 톰캣은 어떻게 동시 요청을 처리하는지 알아보았다. 1. 스레드 풀1-1. 스레드 풀은 왜 사용하는가?WAS는 동시에 들어오는 요청을 처리하기 위해서 멀티 스레드로 동작한다. 동시에 들어오는 요청만큼 쓰레드를 계속 생성한다면 다음과 같은 문제가 발생한다. 1. 스레드를 생성하기 위해서는 시스템 콜을 통해 OS 커널 모드로 진입해 OS 스레드를 생성하는데 이 동안 요청은 대기하게 된다. 2. 스레드가 많으면 하나의 CPU에서 여러 스레드를 동시에 작업하기 위해서 스레드간의 컨텍스트 스위칭이 많이 발생해서 CPU 오버헤드가 커진다. 3. 스레드는 고유한 실행 컨텍스트를 가지며, 호출 스택을 저장하기 위해서 스택 메모리를 할당받는데 스레드가 너무 많아지면 Stac..
# 프로젝트 소개F-lab 멘토링 수강 중에 Green Developers 프로그램으로부터 크레딧 20만원을 지원받아 'AI-REVIEW(가제)'라는 서비스를 NCloud의 기술을 활용해 호스팅 해 보았습니다. 제가 개발한 서비스는 1. 사용자가 자신이 공부한 노트를 업로드하면 2. AI가 자동으로 복습을 위한 플래시카드를 만들어주고 3. 사용자가 플래시 카드별로 복습 상태를 체크할 수 있게해 복습을 도와주는 서비스입니다. 아직 웹사이트는 개발중이라 프로젝트 레포지토리만 살짝 공개합니다. https://github.com/review-with-ai/backend GitHub - review-with-ai/backendContribute to review-with-ai/backend development ..
이 글은 운영체제의 메모리 관리에 대해서 알아보고 실습한다. 먼저 1. 프로세스의 메모리 영역에서 운영체제가 프로세스에 할당하는 메모리를 어떻게 구분해서 관리하는지 알아본다. 다음으로 2. 가상 메모리에서 운영체제 메모리 관리의 핵심인 가상 메모리에 대해서 알아본다. 가상 메모리란 무엇이고, 왜 사용하는지 알아본다. 그리고 3. 가상 메모리의 응용에서 가상 메모리 기술을 응용하여 요구페이징과 스와핑이 어떻게 메모리를 효율적으로 사용하게 하는지 알아본다. 마지막으로 4.모니터링 실습에서 macOS 컴퓨터의 터미널에서 시스템 사용 상황을 모니터링 해본다.1. 프로세스의 메모리 영역프로그램을 실행하면 운영체제가 프로세스를 생성하고 메모리를 할당한다. 운영체제는 프로세스의 메모리를 코드, 데이터, 스택, 힙 영..
이 글은 프로젝트에서 스프링 시큐리티를 사용해서 OAuth 2.0 로그인을 구현한 과정을 담았다. 먼저 OAuth 2.0 프로토콜에 대해서 이해하기 위해서 관련 개념을 정리하고, 검사 도구를 사용해 네이버 OAuth2.0 로그인이 진행되는 과정에서 일어나는 네트워크 통신을 살펴보았다. 그 후, 스프링 시큐리티에서 어떻게 OAuth 2.0 로그인을 지원하는지 관련 클래스 코드들을 분석했다. 마지막으로 프로젝트에 적용하였다.1. OAuth 2.0 프로토콜1-1. OAuth 란?OAuth란 third-party 앱이 접근 제한된 서비스 자원(protected resource)를 사용하기 위해 리소스 소유자(사용자)의 허락을 받아 자원을 사용할 수 있도록 하는 프로토콜이다. 즉, 클라이언트 어플리케이션이 사용자..
1. ThreadLocal과 SecurityContext1-1.ThreadLocal이란?ThreadLocal은 java.lang 패키지에 속하는 클래로 특정 스레드와 관련된 상태를 저장하기 위해 사용된다. 클래스의 private static 필드로 사용되는 경우가 많다. thread는 메모리를 어떻게 공유하고 사용하나threadlocal은 왜사용하는가threadlocal 사용시 주의할점은Spring Security에서 ThreadLocal을 사용하는 이유Spring Security는 기본적으로 ThredLocal을 사용하여 SecurityContext를 저장한다. 아래는 SpringSecurity에서 인증 정보를 저장하기 위해 사용하는 SecurityContextHolder클래스이다. 1.에서 확인할 수..
leetcode에서 278. first bad version 이라는 문제를 풀다가 이 문제가 git 명령어인 git bisect의 구현과 일맥상통한다는 것을 깨달았다. git bisect를 살펴보면 이진 검색이 실제로 어떻게 활용되는지 알 수 있어 이진 검색에 대해 더 깊은 이해가 가능하다.이 글에서는 1. 이진 탐색이 무엇인지 2. git bisect는 어떻게 사용하는지 3. git bisect 내부 구현은 어떻게 되어있을지 first bad version 문제를 통해 추론해보고 마지막으로 4.정리해보자.1. 이진 검색이란이진 검색이란이진 검색은 정렬된 값들 중에서 원하는 값을 찾기 위해 범위를 절반씩 줄여가며 값을 찾아가는 방식이다.숫자가 오름차순으로 정렬된 배열에서 26을 찾는다고 할때 이진 검색으..
1. CPU 스케줄링이란 CPU는 한번에 단 하나의 프로그램만 수행할 수 있다. 여러 프로그램이 동시에 실행되려면, CPU가 여러 프로그램을 빠르게 번갈아가면서 수행해 동시에 동작하는 것처럼 보여야 한다. CPU 스케줄링이란 대기하고 있는 프로세스 중에 어떤 프로세스를 다음으로 실행할지를 결정하는 것이다. CPU 상에서 동작하는 프로그램이 있으면 다른 프로그램들은 대기해야한다. 동시에 실행되는 여러개의 프로그램을 어떤 순서로 실행하느냐가 시스템의 전체 성능에 직접적인 영향을 미친다. CPU 스케줄링에 따라서 프로세스의 대기시간(waiting time), 응답시간(turn around), CPU 이용률에 영향을 미치며 CPU 스케줄링에 따라서 시스템 성능이 좌우된다. 프로세스의 상태 NEW: 프로세스가 생..
List students = List.of( new Student("hong", 100, Student.Sex.MALE, Student.City.Seoul), new Student("kim", 80, Student.Sex.FEMALE, Student.City.Seoul), new Student("park", 50, Student.Sex.MALE, Student.City.Pusan) ); Map avgScoreBySex = students.stream() .collect( Collectors.groupingBy( Student::getSex, TreeMap::new, Collectors.averagingDouble(Student::getScore))); avgScoreBySex.entrySet() .for..
이전 프로젝트에서 JWT로 사용자 인증 및 인가 로직을 구현할때 인터셉터를 활용했다. 이 경험을 바탕으로, 필터와 인터셉터의 사용 목적과 차이점을 다시 한번 고민해보기로 했다. 우선, 필터와 인터셉터가 왜 사용되는지 살펴본다. 이어서, 서블릿 컨텍스트와 어플리케이션 컨텍스트이 차이점 그로 인한 필터와 인터셉터의 주요 차이점에 대해 알아본다. JWT 토큰 검증 로직을 인터셉터에 구현한 이유를 분석하고, 이 로직을 필터에 적용할 경우의 방법과 장점을 분석해본다. 1. 필터와 인터셉터는 공통 관심사를 분리하기 위해 사용된다. 공통관심사는 비지니스 로직으로부터 분리되어야한다. 인증 및 인가, 로깅, 인코딩 등 어플리케이션의 다양한 로직에서 걸쳐 공통으로 적용되는 로직을 공통 관심사라고 한다. 공통 관심사를 위해..
프로그램을 몇개 개발해보면서, 단순히 동작하는 프로그램을 넘어 변경에 유연하게 대응할 수 있는 설계의 중요성을 깨달았다. 계속해서 변경되고 추가되는 요구사항을 수용하려면 종종 프로그램 전체를 수정해야 하고, 예상치 못한 곳에서 발생하는 버그로 인해 프로그램 수정이 어려워지면, 결국 기존 코드의 재사용을 포기하고, 처음부터 새롭게 코드를 작성하는 상황에 직면할 수도 있다. 혼자 개발하는 상황에서도 변경된 요구사항을 반영하는게 부담되는데, 많은 컴포넌트가 상호작용하는 실제 서비스에서는 변경에 취약한 코드가 더욱 심각한 비효율을 초래한다. 이에, 진정한 의미의 좋은 설계가 무엇인지에 대해 다시 한번 깊이 고민해보기로 했다. 이 글에서는 첫째, 좋은 설계란 무엇인지 둘째, 왜 객체지향 설계가 좋은 설계를 위한 ..