mac에서 혼자 kafka를 연습해보았다참고 링크 : https://ojava.tistory.com/205 https://devocean.sk.com/experts/techBoardDetail.do?ID=163709 \+ 오류 구

쿠버네티스란? 컨테이너화의 의의와 쿠버네티스의 개요 쿠버네티스 Kubernetes : 컨테인화된 애플리케이션을 효율적으로 배포하고 운영하기 위해 설계된 오픈 소스 플랫폼. 왜 컨테이너를 사용할까? CI/CD* (지속적 통합, 지속적 배포) : 사용자에게 새로운 기


C++ 개발 환경을 세팅해보자!Visual Studio Code 설치VS Code용 C/C++ 확장 프로그램 설치MSYS2 를 통해 최신 버전의 MinGW-w64를 설치하자. 여기에는 최신 네이티브 빌드의 GCC, MinGW-w64 및 기타 유용한 C++ 도구와 라이브

개발 공부를 하다보면 다른 개발언어로 작성된 코드를 볼 일도 많고 특히 해외 사이트에서 discussion을 볼 일이 잦았는데 C/C++ 코드를 볼 일이 상당히 많았다. 자료구조 위주로 비교하며 자바를 C++로 어떻게 작성되하지 알아보고자 공부하였다. 데이터 유형 및

LeetCode에서 PS를 진행 도중 Submit완료 한 뒤 코드 성능 개선을 위해 여러 시도를 하던 중 List의 contains() 와 set의 contains()메서드 시간복잡도가 다르다는것을 알게 되었다. 이를 여러 자료 및 블로그를 참고해 간단히 정리하고자 남
프로젝트를 진행하며 공부한 내용을 기록하고자 한다. > # Client-to-server communication Http 클라이언트와 서버는 통신을 할 때 여러 방식을 채택할 수 있다. 이때 가장 대표적인 것으로 Http / Https 통신을 생각할 수 있을것이다

Spring AOP 기반 런타임에 동작하는 어노테이션으로 @Transactional , @Cacheable , @Async 등이 있습니다. Spring AOP (어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는

새로운 엔티티인지 여부는 JpaEntityInformation의 isNew(T entity) 에 의해 판단된다. 다른 설정이 없다면 JpaMetaModelEntityInformation 클래스가 동작한다. @Version 이 사용된 필드가 없거나 Version 이 사용

ddl-auto 옵션은 스프링 부트 애플리케이션에서 Hibernate와 같은 JPA 구현체를 사용할 때 데이터베이스 스키마 관리를 제어하는 설정이다. 이 옵션은 application.properties 또는 application.yml 파일에서 설정할 수 있으며, 다양

JPA N+1 문제는 연관 관계가 설정된 엔티티를 조회할 경우에, 조회된 데이터 개수 N개 만큼 연관관계의 조회 쿼리가 추가로 발생하느 ㄴ현상이다. 예를들어, 블로그 게시글과 댓글이 있는 경우, 게시글을 조회한 후 각 게시글마다 댓글을 조회하기 위해 추가 쿼리가 발생한

Checked Exception 은 컴파일 시점에 확인되며, 반드시 처리해야하는 예외다. Java에서는 IOException , SQLException 등이 이에 속한다. Check Exception을 유발하는 메서드를 호출하는 경우, 메서드 시그니처에 throw 를

일급 컬렉션(First-Class Collection)은 하나의 컬렉션을 감싸는 클래스를 만들고, 해당 클래스에서 컬렉션과 관련된 비즈니스 로직을 관리하는 패턴을 말한다. 아래 코드중에서 Order의 List 자료구조를 감싼 Orders가 일급 컬렉션의 예시다.일급 컬

인덱스는 데이터베이스 테이블의 검색 속도를 향상시키는 위한 자료구조로 백과사전의 색인과 같다. 저장되는 컬럼의 값을 사용해 항상 정렬된 상태를 유지하는 것이 특징이다. 이러한 특징으로 인해 인덱스는 INSERT, UPDATE, DELETE의 성능이 희생된다는 것이 단점

트랜잭션의 격리 수준은 동시에 여러 트랜잭션이 실행될 때 한 트랜잭션이 다른 트랜잭션의 연산에 영향을 받지 않도록 하는 정도를 말한다. 낮은 격리 수준은 동시 처리 능력을 높이지만, 데이터의 일관성 문제를 발생시킬 수 있다. 반대로, 높은 격리 수준은 데이터의 일관성을

자바에서 객체를 복사할 때 얕은 복사와 깊은 복사라는 두 가지 방식이 있다. 먼저 Book과 Author라는 두 클래스를 사용해서 예제를 알아보자. Book은 책의 이름(name)과 저자(author) 정보를 가지고 있고, Author는 저자의 이름을 가지고 있다.sh

로그는 서버가 동작할 때 서버의 상태와 동작 정보를 시간 경과에 따라 기록된 결과다. 로그는 시스템의 오류와 문제들을 쉽게 찾아낼 수 있도록 도와준다. 반면, 메트릭은 시스템의 성능과 상태에 대한 통계적인 정보를 의미한다. 메트릭을 잘 수집하면 시스템의 현재 상태를 손

JPA에서 ID를 생성하기 위해서는 직접할당 과 자동할당 을 사용할 수 있다.직접 할당은 @Id 어노테이션만을 사용해 Id 값을 직접 할당하는 방식이다. 반면, 자동 할당은 @Id 와 @GeneratedValue 를 함께 사용해서 원하는 키 생성 전략을 선택하는 방식이

equals와 hashCode 메서드는 객체의 동등성 비교와 해시값 생성을 위해서 사용할 수 있다. 하지만, 함께 재정의하지 않는다면 예상치 못한 결과를 만들 수 있다. 가령, 해시값을 사용하는 자료구조(HashSet, HashMap, ...) 을 사용할 때 문제가 발

동일성과 동등성은 객체를 비교할 때 중요한 개념이다. 자바에서는 이 두 개념을 equals() 메서드와 == 연산자를 통해 구분할 수 있다.equals()는 객체의 내용을 비교하는 반면, ==는 객체의 참조(레퍼런스)를 비교한다. 따라서 두 객체의 내용이 같더라도 서로

@Component, @Service, @Controller, @Repository는 각각의 클래스를 특정 역할을 수행하는 Spring Bean으로 등록할 때 사용된다. 각 어노테이션은 클래스가 어떤 역할을 하는지를 명시적으로 나타내며, Spring의 @Compone

외부 서비스 장애로 인해 응답이 오래 걸린다고 했을 때 외부 API 응답으로 대기하는 자원들이 운영 서버 내부에 쌓이면서 성능에 악영향을 줄 수 있다. 이를 해결하기 위한 가장 기본적인 방법은 타임아웃을 설정하는 것이다. 크게 타임아웃에는 커넥션 타임아웃과 리드 타임아

공유 락과 배타 락은 비관적 락(Pessimistic Lock)의 데이터 일관성과 무결성을 위해 사용하는 락 유형이다.공유 락은 읽기 락(Read Lock)이라고 부르며, 공유 락이 걸린 데이터는 읽기(SELECT)연산만 가능하며, 쓰기(UPDATE, DELETE)는

단위 테스트는 소프트웨어으 가장 작은 단위, 즉 개별 메서드나 함수의 기능을 검증하는 테스트다. 특정 기능이 올바르게 동작하는지 확인하기 위함이며 독립적이고 빠르게 실행된다. 반면 통합 테스트는 개별 모듈들이 결합되어 전체 시스템이 올바르게 동작하는지 검증하는 테스트다

스레드, 프로세스, 코어의 수가 많을수록 시스템 성능이 향상된다고 생각할 수 있지만, 실제로 그렇지 않을 확률이 크다.쓰레드가 지나치게 많아지면 운영체제가 쓰레드 간 컨텍스트 스위칭을 자주 수행해야 하여 CPU 자원이 쓰레드 관리에 소모된다. 이로 인해 실제 작업 수행

애플리케이션과 데이터베이스가 통신을 하기 위해서는 데이터베이스 커넥션이 필요하다.데이터베이스 드라이버를 사용하여 데이터베이스에 연결데이터 읽기/쓰기를 위한 TCP 소켓 열기소켓을 통한 데이터 읽기/쓰기연결 종료소켓 닫기커넥션 풀이 없다면 애플리케이션에서 데이터베이스에

사용자가 https://www.google.com/ 를 입력하면, 브라우저는 HTTP 프로토콜을 사용해 구글 웹 서버와 통신하려고 한다. HTTP는 OSI 7계층 중 애플리케이션 계층에서 동작하는 프로토콜이다.이때 브라우저는 요청한 도메인 이름 (www.goo

연산을 여러번 적용하더라도 결과가 달라지지 않는 성질을 멱등성이라고 한다. HTTP 메서드의 멱등성은 동일한 요청을 한 번 보내는 것과 여러번 보내는 것이 서로 동일한 효과를 지니며, 서버의 상태도 동일하게 남을 경우에 멱등하다고 말할 수 있다. 대표적으로 멱등한 메서

동시성 제어 방식 중 대표적으로 MVCC(Multi-Version Concurrency Control) 와 Lock-Based Concurrency Control 이 있다.MVCC는 데이터의 여러 버전을 유지하여 트랜잭션이 동시에 데이터를 읽고 쓸 수 있도록 하는 방식

브라우저는 가장 많이 사용하는 소프트웨어일 것이다. 탈리 가르시엘이란 이스라엘 개발자가 게시한 글을 통해 이를 자세히 알아보자.최근 인터넷 익스플로러, 파이어폭스, 사파리, 크롬, 오페라 이렇게 5개의 브라우저가 많이 사용되지만 파이어 폭스, 크롬, 사파리와 같은 오픈

Phantom Read는 트랜잭션이 동일한 조건의 쿼리를 반복 실행할 때, 나중에 실행된 쿼리에서 처음에는 존재하지 않았던 새로운 행이 나타나는 현상을 말합니다. 이는 주로 읽기 일관성(Read Consistency) 을 유지하는 과정에서 발생할 수 있는 문제로, 데이

CORS(Cross Origin Resource Sharing)는 출처가 다른 곳의 리소스를 요청할 때 접근 권한을 부여하는 메커니즘이다. 리소스를 주고받는 두 곳의 출처가 다르면 출처가 교차한다고 한다. 이때 출처는 URL뿐만 아니라 프로토콜과 포트까지 포함된다. 만

포워드 프록시는 주로 클라이언트 측에 위치하여, 사용자가 인터넷에 접근할 때 중개자 역할을 한다.예를 들어, 회사 내부 네트워크에서 근무하는 직원이 외부 웹사이트에 접속하려고 할 때, 포워드 프록시 서버를 통해 요청이 전달된다. 이 과정에서 사용자의 실제 IP 주소는

Connection Timeout은 클라이언트가 서버에 연결을 시도할 때, 일정 시간 내에 연결이 이루어지지 않으면 발생하는 타임아웃이다.TCP 소켓 통신에서 클라이언트와 서버가 연결될 때, 정확한 전송을 보장하기 위해 사전에 세션을 수립하는데, 이 과정을 3-way-

서버 사이드 렌더링(SSR) 은 서버 측에서 렌더링하는 방식이다. 클라이언트가 서버에 컨텐츠를 요청하면, 서버는 페이지에 필요한 데이터를 즉시 얻어와 모두 삽입하고, CSS까지 모두 적용해 렌더링 준비를 마친 HTML과 JS 코드를 응답한다. 브라우저에서는 JS 코드를

스택(Stack) 은 후입선출이라는 개념을 가진 선형 자료구조다. 스택 자료구조에서 삭제(pop)는 가장 최상단(top)에서만 이루어진다. 비어있는 스택에서 값을 추출하려고 시도하는 경우를 스택 언더플로우라고 하며, 스택이 넘치는 경우를 스택 오버플로우라고 한다. 대표

웹 서버 는 정적 컨텐츠(HTML, CSS, JS, Image, ... etc) 를 제공하는 역할을 수행한다. 동적 컨텐츠를 요청하면 그 요청을 WAS로 전달할 수도 있다. 대표적인 웹 서버로 Apache, Nginx 등이 있다. 웹 어플리케이션 서버 (Web Appl

HTTP는 Hypertext Transfer Protocol의 약자로 서버와 클라이언트간 통신을 위한 통신 규약이다. 하지만, HTTP는 암호화되지 않는 평문 데이터를 전송하기 때문에 제 3자가 정보를 조회할 수 있다는 위험이 있다. 이를 해결하기 위해 HTTPS가 등

Record는 Java 16에서 정식 출시된 특별한 유형의 클래스로 불변성(Immutable)을 기본으로 한다.기존의 클래스와 달리 모든 필드가 final 키워드로 선언되며, 객체 생성 후 변경할 수 없다. 또한 필드 선언만으로 자동으로 생성자, getter , equ

DB Replication은 데이터베이스의 고가용성과 데이터 안정성을 보장하기 위해 활용되는 핵심 기술이다. 특히, 대규모 애플리케이션 환경에서는 데이터의 지속적인 가용성과 신뢰성이 매우 중요하기 때문에, 원본(Source) 서버와 복제(Replica) 서버간의 데이터

SOLID 원칙은 객체지향 설계 5원칙이라고도 불리며, 각 원칙의 앞 글자를 따서 만들어졌다. 객체지향 설계의 핵심 중 하나인 의존성 관리를 잘 하기 위해 SOLID 원칙을 준수해야한다. 단일 책임 원칙 (Single Responsibility Principle) 은

다중 서버 환경에서 세션 기반 인증 방식은 세션 불일치 문제를 초래할 수 있다. 만약 서버 A, B를 관리하고 있을 때, 로드 밸런서는 사용자의 요청을 상황에 맞게 A, B 중 한 곳으로 전달한다. 유효한 로그인 요청이 A 서버로 처음 도착하면 사용자에 대한 세션 정보

애플리케이션을 지원하는 리소스 풀에 들어오는 네트워크 트래픽 (들어오는 요청) 을 균등하게 분산하는 것을 의미한다. 이를 수행하는 로드 밸런서는 애플리케이션 서버 앞단에 위치하며 클라이언트 요청을 지시하고 제어한다. 이를 통해서 애플리케이션의 가용성, 확장성, 보안 및

동시성이란?

캐시의 목표는 성능 향상과 부하 감소.Cache Aside 방식은 캐시 히트시 캐시에서 데이터를 불러오며, 캐시 미스 발생 시 원본 데이터베이스에서 조회하여 반환한다. 애플리케이션은 캐시 미스가 발생하면 해당 데이터를 캐시에 적재한다.장점은 실제 요청된 데이터만 캐시에

REST(Representational State Transfer) 는 자원의 표현을 이용하여 상태를 주고받는 것을 의미한다. 여기서 자원이란 소프트웨어가 관리하는 모든 것을 의미하고 자원의 표현은 자원을 나타내기 위한 이름을 의미한다. 예를들어, 서버가 관리하는 주문

ACID는 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 지속성(Durability)의 약자이며, 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 의미한다.원자성은 트랜잭션 내부 연산들이 부분적으로 실행되

기존 개발하던 서비스의 서버가 한계에 다다랐을 때 Scale-Up (스케일 업) 혹은 Scale-Out (스케일 아웃) 을 고려한다.스케일 업은 기존의 서버를 더 높은 사양으로 업그레이드하는것이다. 예를들면 AWS EC2 t2.micro에서 t2.small로 업그레이드

컨텍스트 스위칭은 CPU나 코어에서 실행중이던 프로세스나 쓰레드가 다른 프로세스나 쓰레드로 교체되는 과정이다. 이는 멀티태스킹 시스템에서 여러 작업을 효율적으로 관리하기 위해 필수적인 메커니즘이다.컨텍스트는 프로세스나 쓰레드의 현재 상태를 의미한다. 여기에는 CPU의

HTTP는 웹상에서 클라이언트와 서버간의 통신을 위한 프로토콜이다. HTTP/1.0의 경우 한개의 요청과 응답마다 TCP 커넥션을 생성하여 사용되었다. 하지만 이러한 요청은 매 요청마다 연결을 생성하는 오버헤드가 발생한다. HTTP/1.1은 이러한 문제를 지속 커넥션

관계형 데이터베이스는 고정된 row와 column으로 구성된 테이블에 데이터를 저장한다. 그리고 SQL을 사용하여 여러 테이블에 존재하는 데이터와 관계에 따라서 조인하여 합칠 수 있다. 관계형 데이터베이스는 데이터를 중복 없이 한번만 저장하고, 데이터 무결성을 보장한다

Java 개발을 하다 보면 문자열을 조합해야 하는 상황이 자주 발생한다. 이때 두 가지 주요한 방법이 있는데이 두 가지를 사용한다.둘 다 같은 결과를 만들어내지만, 내부적으로는 어떤 차이가 있을까? 성능상 차이도 있지 않을까?이런 궁금증에서 시작해 실제 Spring B

들어가며 프로그래밍을 하다 보면 특정 객체가 딱 1개 필요한 상황이 있다. 예를 들어 설정 파일 관리자, 로그 기록기 등이 있다. 이런 경우 사용하는 것이 싱글턴 패턴 이다. 싱글턴 패턴이란? > 클래스의 인스턴스가 오직 하나만 생성도도록 보장하고, 이 인스턴스에

들어가며 최근 AI와 LLM이 소프트웨어 개발의 새로운 패러다임으로 자리 잡으면서, 기존 Spring 생태계에서도 이러한 변화에 대응할 수 있는 프레임워크가 필요해졌다. Spring AI는 이런 요구에 응답하여 탄생한 프레임워크로, Spring 개발자들이 익숙한 방식으로 AI 기능을 통합할 수 있게 해준다. AI에 큰 관심과 향후 커리어에 AI를 접목하...