일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 구현
- 셀러리
- BFS
- dau 3만명
- docker
- gRPC
- 디버깅
- ipo 매매자동화
- 누적합
- 알람시스템
- next-stock
- ai agent
- 백준
- spring event
- 이분탐색
- 카카오
- JPA
- 결제서비스
- 쿠키
- 완전탐색
- 아키텍쳐 개선
- AWS
- piplining
- 베타적락
- 프로그래머스
- 몽고 인덱스
- langgraph
- 크롤링
- 추천 검색 기능
- 관측가능성
- Today
- Total
목록전체 글 (190)
코딩관계론

어댑터 패턴을 사용하는 이유클라이언트가 사용하는 인터페이스와 내가 사용하는 인터페이스가 서로 다를 때, 이 두 인터페이스를 연결하여 호환성을 확보하기 위해 어댑터 패턴을 사용합니다. 특히, 오래된 코드나 타사 라이브러리를 새로운 시스템에 통합할 때 유용합니다. 어댑터를 통해 레거시 코드의 인터페이스를 변경하지 않고도 새로운 시스템과 통합할 수 있습니다.클래스 설명어댑터 패턴의 구조는 아래의 그림과 같다. 클라이언트 코드가 의존하는 인터페이스를 어댑터가 어뎁티를 이용해 구현해줌으로써 3rd-party가 제공한 기능을 커스텀하여 사용할 수 있게 된다.어댑터 패턴 구현 방법을 소개하기 전에 어떤 클래스가 클라이언트가 의존하는 클래스인지, 어떤 클래스가 Adaptee인지 설명하겠습니다.클라이언트가 의존하는 인터..

싱글톤 패턴을 사용하는 이유웹 애플리케이션은 일반적으로 여러 고객이 동시에 request 요청을 보낸다. 만약 우리가 각 요청마다 새로운 Service 객체와 Controller 객체를 생성하고, 이러한 객체들이 Garbage Collector에 의해 소멸된다면 이는 자원의 낭비를 초래할 수 있다. 따라서 객체를 미리 생성하고, 이 객체를 공유하는 방식으로 사용하게 된다면 사용자의 요청과 상관없이 하나의 객체만 사용자의 요청을 처리하게 될 것이다. 이러한 비효율성을 해결하기 위해 싱글톤 패턴이 등장하게 되었다.싱글톤 패턴 구현 방법1. 객체 생성자를 private로 선언하자싱글톤은 객체를 하나만 생성하기 때문에 다른 곳에서 싱글톤 객체를 생성하지 못하게 해야 한다. 이를 위해 생성자를 private로 ..

클러스터링클러스터링이랑 군집화를 의미한다. 즉 물리적인 디스트크에 어떤 기준으로 데이터들이 군집되어 있다는 것을 말하는데 PK를 기준으로 클러스터링 인덱스를 자동으로 생성됩니다. 이 클러스터링은 테이블당 하나만 생성됩니다. 이는 당연한 것으로 물리적으로 정렬되기 때문입니다. 또한 항상 디스크에 정렬된 상태로 존재하기 때문에 데이터의 추가, 삭제, 업데이트 시 물리적으로 정렬하는 과정을 커쳐야 하기 때문에 성능 저하의 이슈가 될 수 있습니다. 클러스터링의 동작 방식은 배열의 삽입 연산과 동작이 같습니다. 따라서 최악의 경우에는 O(n) 성능으로 동작하게 됩니다.만약 UserTable에 데이터가 아래의 그림과 같이 존제하고, "aaaa@naver.com, testuser1"을 넣어야 한다면 어떻게 동작하게..

DB Connection PoolDB Connection Pool은 웹 컨테이너(WAS)가 실행되면서 DB와 미리 connection(연결)을 해놓은 객체들을 pool에 저장해두었다가 필요한 시점에 연결이 아닌 이 풀에서 객체를 전달하는 방식을 의미한다. 이를 통해 애플리케이션의 성능을 향상시키고, 자원 관리를 효율적으로 할 수 있다.DB Connection Pool이 필요한 이유는?네트워크 연결 비용 감소: 네트워크를 통해 DB에 접속하게 된다. 이 네트워크는 TCP/IP 기반으로 동작하기 때문에 네트워크가 연결을 수립하기 전에 3-way handshake를 맺어야 한다. 이 과정은 추가적인 비용이 발생하며, 사용자 입장에서는 지연 시간이 생기기 때문에 애플리케이션의 사용 경험에 부정적인 영향을 미친다..

JDBC(Java Database Connectivity)는 자바를 통해 데이터베이스에 접근할 수 있도록 해주는 API입니다. 이 API는 자바 응용 프로그램과 데이터베이스 사이의 연결을 관리하고 쿼리를 실행하며 결과를 처리할 수 있도록 표준 인터페이스를 제공합니다왜 JDBC 표준 API가 필요했을까?JDBC 표준 API가 필요했던 이유는 벤더사마다 기능 구현이 달라질 경우, 데이터베이스를 변경할 때마다 코드 수정을 해야 하는 번거로움을 방지하기 위해서입니다. JDBC는 다양한 데이터베이스 벤더의 드라이버를 추상화하여 일관된 방식으로 데이터베이스에 접근할 수 있게 해줍니다. 이를 위해 자바 진영에서는 Driver 인터페이스를 제공하고, 각 벤더사에서 해당 Driver를 구현하여 라이브러리로 배포하게 됩니..

JSP 어떻게 Servlet으로 변환되서 Client에게 전달되는지를 알기 위해서는 was가 무엇인지, 서블릿이 무엇인지, 서블릿 컨테이너가 무엇인지를 알고 있어야 이해하기 쉽다. 따라서 해당 개념을 먼저 설명한 후 JSP가 어떻게 변환되는지 설명하겠습니다. 1. 웹 요청과 Tomcat먼저, 우리가 웹 브라우저에서 어떤 페이지를 요청하면, 그 요청은 패킷이라는 작은 데이터 묶음으로 서버에 전달됩니다. 이 패킷을 이해하고 처리하는 프로그램이 필요합니다. 이 프로그램을 WAS(웹 애플리케이션 서버)라고 부르는데, 자바에서는 Tomcat이라는 프로그램이 주로 사용됩니다. 웹 요청을 받는 Tomcat은 크게 두 가지 역할이 있습니다웹 서버: 요청을 받아서 정적 파일을 보내주는 역활서블릿 컨테이너: 요청을 받아서..

HTTP 특징HTTP는 기본적으로 무상태, 비연결성 프로토콜이다. 따라서 사용자가 로그인을 하거나, 장바구니에 물건을 담았더라도 다음 요청에는 어떤 로그인을 진행했는지, 장바구니에 어떤 물건을 담았는지 서버는 알 수가 없다. 이러한 제약을 극복하기 위해 쿠키와 세션이 사용된다. 비열결성과 무상태성이란더보기서버와 client가 요청과 응답을 주고받으면 연결이 끊어지게(connectionless) 되기 때문에 서버에서는 요청자의 이전 상태를 기억하지 못하게 되는데 이를 무상태라고 합니다. 이러한 장점은 서버에서 자원 낭비를 하지 않기 때문에 대규모 처리에 유용하게 됩니다.쿠키쿠키는 Client의 상태를 기억하기 위해서 사용된다. 쿠키는 Client에서 정보가 관리되기 때문에 보안에 취약하다. 이 쿠키에 값을..

HTTP Method 종류GETGET은 데이터를 조회하기 위해 사용됩니다. 추가적으로 서버에 전달하고 싶은 데이터를 쿼리스트링을 통해서 전달할 수 있습니다. Body로도 전달할 수 있지만 지원하는 서버가 많이 없어 권장되지 않는다.POST와 Get의 가장 큰 차이점은 *멱등성이다(idempotent). POSTPOST 요청은 주로 데이터를 신규 리소스로 등록하거나, 프로세스의 처리에 사용한다. 예시로는 주문 전송을 생각하면 될 것이다. PUT과 POST의 가장 큰 차이점은 PUT은 Client가 자원의 디렉터리를 지정할 수 있을 때 사용하고, Post는 Client가 자원의 디렉터리를 저장할 수 없을 때 사용된다. form을 통해서 보내면 쿼리 파람 형식으로 서버에게 전송됨 대신 바디에 들어감 con..
먼저 자바의 Map Obejct에 대해서 간단히 설명하자면 특정 key를 넣었을 때 저장된 value를 돌려주는 자료구조이다. 상속관계는 아래와 같다.HashMap 구조도HashMap 클래스에는 버킷이라고 불리는 배열이 존제하고, 해당 버킷에 노드가 들어가는 형식이 된다. 이 노드는 연결리스트로 구현되어 있지만 노드가 일정 개수(기본:8)이상이 되면 tree 노드로 변환된다HashMap의 put()기본적으로 구현된 코드는 아래와 같다. 먼저 key 오브젝트의 hascode를 호출해서 버켓 배열의 인덱스를 정하게 된다. 그 후 해당 버켓에 노드가 없으면 지금의 key, value로 하는 노드를 생성해서 배열에 저장해준다. 만약 노드가 있다면 hashcode와 equals함수를 통해서 값 비교를 진행하고 완..

Synchronized CollectionSynchronized Collection은 멀티스레드 환경에서 컬렉션을 안전하게 사용할 수 있도록 동기화된 메서드나 블록을 사용하여 구현됩니다. 주로 Collections.synchronizedXXX() 메서드를 사용하여 기존 컬렉션을 동기화된 버전으로 감싸서 반환합니다. Synchronized Collection의 클래스 코드를 보시면 인스턴스 변수로 락을 위한 Object mutext가 존제합니다. static class SynchronizedCollection implements Collection, Serializable { @java.io.Serial private static final long serialVersionU..

제네릭 타입을 이해하기 위해선 먼저 공변과 불공변의 개념을 알아야 한다.공변공변이란 자기의 타입과 자신의 하위 타입까지 같다고 인식합니다. 아래의 코드를 보면 Anmain배열에 cats를 할당하고 있는데 Animal배열에서 Cat타입이 같다고 인식해 컴파일 오류가 발생하지 않는 경우입니다.class Animal {}class Cat extends Animal {}public class Main { public static void main(String[] args) { Animal[] animals = new Cat[10]; // 공변성 허용 animals[0] = new Cat(); // 유효 animals[1] = new Animal(); ..

자바에는 Error와 Exception이 존재하는데 이 두 클래스는 모두 Throwable 클래스를 상속 받습니다.그럼 java.lang.Error는 무엇일까?java.lang.Error는 시스템 수준에서 발생한 심각한 문제로 어플리케이션이 복구가 불가능한 상태가 됩니다. Error 클래스의 예로는 VirtualMachineError, OutOfMemoryError, StackOverflowError, AssertionError 등이 있습니다.그럼 java.lang.Exception는 무엇일까?java.lang.Exception는 어플리케이션 실행 중 복구 가능한 문제를 나타냅니다. 보통 프로그래머의 논리적 오류가 예외를 뜻합니다. Exception예제는 java.lang.RuntimeException,..