분류 전체보기

· WEB/Spring
개요 Cache라는 개념은 많은 곳에 이용됩니다. CPU에도 L1, L2, L3캐시가 있고, 이들의 역할은 메모리를 조회하지 않아도 되도록 하는 것입니다. 같은 정보를 요청했을 때, 주 메모리에서 검색한 뒤 다시 CPU로 로드하는 것은 자원의 낭비이기 때문입니다. 이는 웹 서비스에서도 적용되는 개념입니다. 프론트엔드에서는 브라우저 캐시, HTTP 캐시 등과 같이 백엔드와 통신해서 가져오는 자원을 저장해둡니다. 백엔드에 같은 요청을 보낼 때, 이러한 캐시를 이용해서 통신에 필요한 자원을 절약합니다. 최근 진행한 프로젝트에서 백엔드 포지션을 맡았습니다. 이 때, 사용자와 어울리는 피드를 추천해주는 비즈니스 로직을 작성했습니다. 단순히 피드의 속성들과 사용자의 속성들에 대한 가중치를 연산하는 것이기에, 사용자..
· 잡담
개요(오래된 하드웨어들) 컴퓨터의 발전과 함께 수많은 하드웨어가 등장했습니다. 초기 컴퓨터인 에니악(ENIAC)을 개발하며 발견한 단점을 개선에 폰 노이만 구조가 등장했고 이후 에드삭(EDSAC)부터는 폰 노이만 구조를 사용했습니다. CPU와 주기억장치, I/O장치로 컴퓨터가 세분화되었고 지금의 컴퓨터도 이러한 구조를 채택하고 있습니다. 이후 CPU처리량과 주기억장치 간 속도 차이를 해결하기 위한 CPU캐시가 등장했고, CPU처리량과 주기억장치 용량이 커짐으로 컴퓨터에 대용량 자료를 적재해야 할 상황이 생기자, 이를 해결하기 위해 보조기억장치가 등장했습니다. 반도체는 기본적으로 속도가 빠를수록 가격이 비싸지고, 보조기억장치는 주기억장치보다 저렴한 가격에 많은 자료를 적재할 수 있었습니다. 이 때문에 컴퓨..
· JAVA/일반
개요 C, C++과 같은 언어는 운영체제. 즉, 실행환경에 따라 컴파일러가 그에 맞는 기계어 코드로 변환합니다. Java는 이와 같은 환경 종속성을 어느 정도 해결하기 위해 JVM, Java Virtual Machine이라는 구조를 채용했습니다. JVM은 Java를 실행하기 위한 환경을 제공해줄 뿐 아니라, GC, JIT 등과 같은 기능을 제공하고, 주기억장치를 할당받아 사용하는 역할을 맡고 있습니다. 오늘은 JVM이 주기억장치를 할당받으면 이를 어떻게 나누고 사용하는지 알아보도록 하겠습니다. JVM 메모리구조 JVM은 위와 같은 구조를 가지고 있습니다. 여기서, Java가 실행될 때 클래스, 메서드, 객체 등의 정보를 적재하는 부분은 Runtime Data Area입니다. 이러한 메모리구조는 각 Jav..
· CS
개요 일반적으로, Process와 Thread의 차이를 말할 때 다음과 같은 글을 마주할 수 있습니다. (Process와 Thread의 차이 : https://nangmandeveloper.tistory.com/4) 위와 같은 글에서 Process와 Thread는 작업 단위, 저장 블록, 공유 자원, 상태 등으로 나누어집니다. 이 글에서는 이러한 부분보다 조금 더 근본적인 이야기를 해보고자 합니다. 단순히 사용하는 자원, Context Switching을 벗어나서, 공부하다가 마주치거나 스터디 중 마주친 질문에 대한 대답을 정리해 보도록 하겠습니다. 문제 소지가 있는 부분에 대한 의견은 언제나 환영입니다. MultiCore의 등장 2005년, 인텔의 펜티엄 D시리즈와 AMD의 애슬론 64 X2시리즈가 발..
· JAVA/Thread
개요 지난 글에서 Virtual Thread가 어떻게 다른지, 어떠한 부분에서 연관되어 있는지 알아봤습니다. 이번 글에서는 Virtual Thread의 코드를 따라가보며 어떻게 동작하는지 살펴보겠습니다. Virtual Thread의 LifeCycle Virtual Thread의 라이프사이클을 요약하면 위의 그림과 같은 모습입니다. Virtual Thread는 많은 상태를 가진 상태 머신이고, 이 흐름을 따라가면서 설명하도록 하겠습니다. 그림에 있는 상태 이외에도 더 많은 상태가 있지만, 그림에 나온 주요한 상태만을 간략하게 알아보겠습니다. 1. NEW, STARTED, RUNNABLE Virtual Thread의 생성자 코드입니다. Thread.ofVirtual을 통해 가상 스레드를 생성하면, 위의 생성..
· JAVA/Thread
개요 Virtual Thread는 기존 Thread를 완벽하게 대체하는 개념이 아닙니다. 오히려 Thread, Process라기보다는 Task, Runnable에 가깝게 생각해야 이해하기 편합니다. 이번 글에서는 어떠한 부분에서 Virtual Thread와 Thread가 다른지, 어떠한 부분에서 같이 일하게 되는지 알아보겠습니다. Thread LifeCycle에서의 Virtual Thread Thread는 마구잡이로 사용하면 자원의 낭비를 불러올 수 있고, 때문에 ThreadPool에서 관리하여 사용합니다. (ThreadPool - https://nangmandeveloper.tistory.com/7) ThreadPool에서 동작하는 Thread는 다음과 같은 라이프사이클을 가질 것입니다. 1. Thre..
· WEB/Spring
개요 이전에 Virtual Thread, Spring에서 Virtual Thread의 사용에 대해 작성한 포스트가 있었습니다. (Java21 Virtual Thread : https://nangmandeveloper.tistory.com/6) (Springboot에서 Virtual Thread사용 : https://nangmandeveloper.tistory.com/11) 해당 글에서 가상 스레드를 사용하는 법, Spring에서 가상 스레드를 사용하는 방법을 소개했습니다. 특히, Springboot에서 가상 스레드를 사용하는 경우, blocked상태가 적은 경우 일반 thread가 효율적이며 blocked상태가 많이 발생하는 경우 가상 스레드의 처리량이 더 높다는 부분을 확인할 수 있었습니다. 그렇다면,..
· WEB/Spring
개요 Spring을 이용해 서버 개발을 할 때, DB를 이용하지 않는 순간은 거의 없을 것입니다. 그만큼 DB는 서버 개발에 있어서 필수적인 존재입니다. 하지만, Spring은 Java를 사용하고 MySQL과 같은 DBMS는 SQL을 이용합니다. 따라서 둘 간의 연결을 위한 인터페이스가 필요합니다. Java진영에서는 DBMS와의 연결을 간단하게 하기 위해 JDBC를 도입했습니다. JDBC를 이용하면, DBMS에게서 간단하게 Connection을 얻어와 쿼리와 데이터를 주고받을 수 있습니다. (JDBC에 대한 글 추가예정) DBMS측은 Java와 같은 언어에서 DBMS에 쉽게 접근하기 위해 Connector를 준비해두고 있습니다. https://www.mysql.com/products/connector/ ..
개요 모니터링은 오동작, 에러, 예외, 침입 등을 방지하거나 대응하기 위해 필요합니다. Spring은 Actuator를 사용하여, 사용자가 모니터링을 쉽게 하도록 지원합니다. (Spring Actuator - https://nangmandeveloper.tistory.com/12) 그럼에도 사용자가 서버를 모니터링하는 것은 쉬운 일만은 아닙니다. Actuator는 데이터를 텍스트 형태로 보내주기 때문에, 가독성이 떨어집니다. 쉽게 말해 직관성이 부족합니다. Prometheus, Grafana를 이용해 이러한 부분을 보완할 수 있습니다. Prometheus https://prometheus.io/download/ Download | Prometheus An open-source monitoring syst..
· WEB/Spring
개요Actuator는 SpringBoot가 제공하는 기본적인 서버 모니터링 도구입니다.CPU사용량, 메모리사용량과 같은 간단한 자원 사용량부터 시작하여, Heap사용량, Hikari Datasource정보 등 많은 정보들을 제공하기 때문에, 이들을 적절히 사용한다면 서버의 자원을 지속적으로 모니터링할 수 있습니다. 서버에 문제가 생기거나, 자원 사용량을 최적화해야 하거나, 작성한 논리구조가 실제로 어떻게 동작하는지 확인하거나...이외의 많은 경우에 대해 원인을 파악하고 판단을 내려야 할 때 모니터링이 필수적입니다.이번 글에서는, 중요한 모니터링 기능을 제공하는 SpringBoot Actuator에 대해 알아보도록 하겠습니다.Actuator 사용하기Actuator를 사용하는 방법은 간단합니다. org..
낭만주의 개발자
'분류 전체보기' 카테고리의 글 목록