전체 글 55

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

JVM 내부 동작 원리

JVM (Java Virtual Machine)Write once, Run everyWhereJava 프로그램 실행을 담당하는 가상의 컴퓨터로, Java 바이트 코드 실행, 메모리 관리, 가비지 컬렉션 등을 담당한다.자바와 운영체제 사이에서 중계자 역할을 하며, 자바가 운영체제에 구애받지 않고 프로그램을 실행할 수 있도록 도와준다.JRE (Java Runtime Environment)Java 프로그램 실행을 위한 환경을 제공하며, JVM과 Java 클래스 라이브러리가 포함된다.JRE만 있으면 Java 프로그램을 실행할 수 있지만, Java 프로그램을 개발하기 위해서는 JDK가 필요하다.JDK 를 설치하면 JRE도 같이 설치된다. (JDK = JRE + a)JDK (Java Development Kit)J..

Java 2025.01.08