전체 글 55

OS 시스템 구조

올해 목표는 CS 개념을 확실하게 공부하는 것!!    Operating System운영체제는 소프트웨어와 하드웨어 사이에서 중재자 역할을 하는 시스템 소프트웨어 입니다.  사용자가 응용프로그램을 통해 서비스를 요청하면, 운영체제는 하드웨어를 제어하여 요청된 서비스를 수행하고 자원을 관리합니다. 사용자와 컴퓨터 시스템 간의 인터페이스를 제공하여 프로그램을 효율적으로 실행합니다. 사용자 영역과 커널 영역으로 이루어지며, 커널, 사용자 인터페이스, 시스템 라이브러리, 시스템 유틸리티로 구성됩니다.   Operating System FunctionsUser Interface (CLI, GUI)Program ExecutionI/O operation (device control)File system manipul..

OS 2025.03.21

Thread Pool과 병렬 처리(ForkJoinPool, ParellelStream)

멀티 스레딩과 병렬 처리는 성능 최적화와 좌원 사용에 있어서 중요한 요소입니다. 이를 효율적으로 관리하기 위해서 자바에서는 Thread Pool, ForkJoinPool, ExecutorService, parallelStream과 같은 다양한 병렬 처리 기법을 제공합니다.  🚩 이번 글에서는 각각의 개념과 내부 동작 방식, 그리고 상황에 따라 어떤 방식을 선택할지에 대해서 공부해보겠습니다. 멀티스레딩 vs. 병렬 처리 멀티 스레딩은 동시성을 구현하는 방식 중 하나로, 하나의 CPU에서 여러 작업을 번갈아가며 실행합니다.  속도가 빨라 여러 스레드가 동시에 실행되는 것처럼 보이지만, 실제로는 운영체제가 컨텍스트 스위칭을 통해 교대로 실행합니다. 병렬 처리는 여러 CPU 코어에서 여러 작업이  동시에 실행..

Java 2025.02.09

🙋‍♂️ 왜 enum 생성자는 자동으로 private로 설정될까?

enum을 사용하여 에러 코드를 관리하는 중에 enum의 생성자는 private로 강제되며, 명시적으로 private을 적지 않아도 된다는 부분에 궁금증을 느꼈습니다.   문제@Getterpublic enum ErrorCode { INVALID_USERNAME(100, "not found username", HttpStatus.NOT_FOUND), INVALID_PASSWORD(101, "not found Password", HttpStatus.NOT_FOUND), INVALID_AUTHENTICATION(102, "not found username and paassword", HttpStatus.NOT_FOUND), NOT_AUTHORIZED(103, "Authorization i..

Java 2025.02.07

Controller, RestController 어떻게 다를까

@Controller, @RestController가 어떻게 다른지 알아보자.@Controller는 뷰를 반환할 때 사용된다. ModelAndViwe 객체나 Model 객체를 활용하여 데이터를 전달하고, 템플릿 엔진을 통해 HTML 뷰를 렌더링한다. 만약 JSON, XML과 같은 데이터를 반환하려면 @ResponseBody를 추가해야 한다.@RestController 은 @Controller + @ResponseBody으로 RESTful 웹 서비스에서 사용되는 컨트롤러로, Json 형태로 객체 데이터를 반환한다. 컨트롤러 어노테이션RestController annotation@RestController에는 @ResponseBody가 들어있는 것을 확인할 수 있다.ResponseBody는 메서드의 반환 값..

Spring 2025.02.02

commit 반영이 안될 때

언젠가부터 커밋을 하는데 잔디가 안심어지고 커밋에 verified 태그가 안뜬다..   나의 이유는 내 깃 이메일과 로컬 깃에 설정된 이메일 이름이 달라서였다    문제 확인 방법터미널에 나의 설정 정보를 확인해보자.// 이메일 확인git config --global user.email// 이름 확인git config --global user.name  그리고 깃허브 Settings -> [Acess] Email 에서 이메일 정보를 확인해보자.     해결방법두 개의 이메일이 다르다면 깃허브 이메일 계정의 값으로 맞춰주자.  // 이메일 변경git config --global user.email "변경 할 이메일"// 이름 변경git config --global user.email "변경 할 이름"

카테고리 없음 2025.02.02

[KBOTicket] 캐시 도입을 통한 경기 목록 조회 최적화

경기 목록 조회 기능은 접근 빈도가 높은 데이터에 대해 반복적으로 DB를 요청한다.특히, 특정 시간대에 사용자가 몰리며 서버 부하가 증가하고, DB 접근 횟수가 급격히 늘어나 평균 응답 시간이 느려지는 문제가 있다.이를 해결하기 위해 캐시를 도입해 DB 접근 빈도를 줄이고 조회 속도를 개선하고자 한다. 특히 경기 목록은 특정 시간(당일 티켓팅 오픈 시간)에 집중적으로 조회되고, 데이터에 변경이 없기 때문에 캐시 적용 시 성능 개선 효과가 클 것이라고 판단했다.       캐시란? 복잡한 연산이나 자주 사용되는 데이터를 속도가 빠른 임시 저장소에 저장해두고, 요청 시 빠르게 제공하는 방식이다.  반복적인 동일 데이터 요청이 많거나, 읽기 성능 개선이 필요한 경우, DB 부하를 줄여야 하는 상황에서 유용하다..

Project 2025.01.20

Spring과 Spring Boot 동작이 어떻게 다른거야~

원티드 백엔드 강의를 들으면서, 내가 스프링과 스프링 부트의 동작 흐름에 대한 차이를 제대로 이해하지 못하고 있다는 걸 깨달았다.이전 회사에서는 Spring Framework를 사용했는데, 설정 단계와 프로젝트 초기 세팅이 꽤나 복잡해서 고생했던 기억이 있다. 이번 프로젝트에서는 Spring Boot를 사용하게 되면서 초기 설정이 훨씬 간편해졌다는 걸 느꼈지만, 두 기술의 내부 흐름을 제대로 알 못한 채 활용하고 있다는 생각이 들었다.그래서 이번 기회에 Spring과 Spring Boot의 동작 흐름과 차이점을 정리해 보려고 한다.Web Server, WAS인터넷이 처음 나왔을때, 웹 페이지는 주로 텍스트 기반의 단순 정적 콘텐츠(HTML 파일)로 구성되었다. 사용자가 요청할 때마다 콘텐츠를 빠르고 안정..

Spring 2025.01.20

Stack 사용을 왜 지양해야 할까?

Stack을 지양해야 한다는 말을 들었으나, 그 이유를 정확히 몰라서 학습하고자 이 글을 작성하였다.들어가기 전 스택의 구조는 모두 알고 있겠지만 한 번 더 보자!스택 스택의 가장 큰 특징은 LIFO 후입 선출구조로 가장 최근(마지막)에 들어간 값이 제일 먼저 나온다.Stack을 지양해야 하는 이유로는 총 4가지로 구성해 보았다.스택을 왜 지양해야 할까?1. Stack 클래스는 Vector 클래스를 상속한다Stack은 상위 클래스로 Vector를 상속받는다.Vector는 동적 배열로 설게되었으며, 특정 인덱스를 기반으로 삽입, 삭제하는 기능을 지원한다. 하지만 스택은 후입선출 구조로 요소를 추가, 삭제하 할 때 마지막 요소를 기준을 동작한다.따라서 Vector의 get(), set() 메서드, inser..

Java 2025.01.20

GC(Garbage Collection)에 대하여

Garbage Collector 이란 무엇일까? automatically manages the application's dynamic memory allocation requests. 애플리케이션의 동적 메모리 할당을 자동으로 관리해주는 JVM의 구성 요소이다.   동작 방식1. 운영체제로부터 메모리를 할당 받고, 반환한다.2. 애플리케이션이 요청할 때 메모리를 제공한다.3. 애플리케이션에서 메모리의 어떤 부분이 사용되고 있는지 확인한다.4. 사용되지 않는 메모리를 반환한다.    자바에서 자동으로 메모리를 관리하는 기능으로, 사용하지 않는 객체들을 자동으로 메모리에서 제거해,  메모리 누수를 방지한다.따라서 개발자가 메모리를 수동으로 관리할 필요없이, 메모리 누수와 이중 해제 등 메모리 관련 버그를 줄..

Java 2025.01.09

자바의 실행과 JIT(Just-In-Time) 컴파일러

자바 컴파일러를 통해 자바 소스 파일을 JVM이 이해할 수 있는 클래스 파일(.class/바이트코드)로 변환한다. 자바 바이트 코드JVM이 이해할 수 있는 언어로 변환된 자바 소스 코드 자바 컴파일러에 의해 변환되는 코드의 명령어 크기가 1 바이트여서 자바 바이트 코드라 한다. 자바 바이트 코드는 자바 가상 머신만 설치되어 있으면, 어떤 운영체제에서도 실행될 수 있다.   그 후에는 어떻게 할까?JVM의 Excution Engine 안에 있는 인터프리터를 통해 바이트 코드를 특정 환경의 기계어로 번역하고 실행한다.  컴파일러와 인터프리터컴파일러와 인터프리터 모두 고수준 언어를 기계어로 변환시킨다.컴파일러는 소스코드 전체를 한 번에 번역하여 중간 코드로 만들어 메모리에 적재하는 방식이다.인터프리터는 소스코..

Java 2025.01.08
728x90