0. 파트너님께GPT로 내용정리했습니다. 스스로 내용정리를 해야 하는데, 시험본 후에 학부 활동하고 자료준비하려고 하다 시간을 많이 확보하지 못했습니다. ㅠㅠ. 시간 계획을 철저하게 짰어야했는데, 제 역량이 부족한 탓에 그러지 못했네요.1. 제네릭(Generic)이란?타입을 미리 지정하지 않고, 사용 시점에 타입을 결정하는 문법.클래스나 메서드가 다양한 타입에 대해 동작할 수 있도록 형태로 타입 매개변수를 사용.(1) 제네릭의 장점재사용성: 하나의 코드로 여러 타입을 처리 가능.타입 안정성: 컴파일 단계에서 타입 오류를 미리 발견 가능. 2. 제네릭이 없을 때 문제점(1) 클래스 재사용성 문제특정 타입 전용 클래스가 필요하여 비효율적이고 비유연함.public class Box { private I..
분류 전체보기
1.컴퓨터 그래픽스란?수학적 장면 정보를 이미지(2D/3D)로 변환 조작 출력하는 기술2. 그래픽스 파이프라인다음과 같은 과정을 거쳐서 이미지가 디스플레이된다.[ 애플리케이션 단계 ] (CPU) └─ 월드·카메라·조명 설정 ↓ ↓ ↓ ↓[ 지오메트리 단계 ] (GPU, Vertex Shader) 모델 → 월드 → 뷰 → 클립 ──┐ (4×4 행렬 곱) │ ① └─ 원근 나누기(Persp Div) ─┘ ↓ **NDC** : Normalized Device Coordinates (x,y,z가 모두 −1 ~ +1 범위)[ 래스터화 단계 ] (고정 기능) NDC 삼각형 →..
운영체제와 프로세스운영체제의 주요 역할중에 하나는 프로세스를 관리하는 것이였다.그러므로, 프로세스에 대해서 자세히 배운다.Program / Process의 정의🔸프로그램:디스크에 저장된 명령 목록(실행파일이라고불림)을 포함하는 파일과같은 수동개체(passiveentity)🔸프로세스:실행할 다음 명령 및 관련 리소스 집합을 지정하는 프로그램 카운터를 가지는 활성개체(activeentity)종종 스케줄링의 대상이 되는 작업(Task)과 같은 의미로 쓰인다.실행 중인 프로그램은 메모리와 레지스터에 적재되므로,프로세스의 범위ℹ️ 프로세스 = 메모리 구조 + CPU Register Set프로세스의 범위는 메모리 구조뿐만 아니라 CPU Register Set까지 포함한다.프로세스의 메모리 구조프로세스의 메모리 ..
운영체제, 커널, 쉘, 시스템 프로그램운영체제운영체제는 주로, C언어로 작성되는 소프트웨어이다.운영체제는 다른 소프트웨어가 작성되고 작동되기 위한 환경을 제공하는 소프트웨어이다. 즉, 응용 프로그램에게 표준화된 서비스를 제공한다.응용 프로그램 개발자는 운영체제가 제공하는 API를 통해 시스템 자원에 접근할 수 있다.또한 운영체제가 하드웨어를 직접 제어하여 사용자가 하드웨어 동작을 신경쓰지 않도록 해준다. 운영체제의 역할메모리 관리, CPU 관리(Process Scheduling), 스토리지 관리(파일 시스템),장치 제어를 한다.메모리를 각 프로그램에 할당하거나 회수한다.여러 프로그램에 CPU 시간을 적절히 분배한다.드라이버를 통해 하드웨어를 제공하고, 응용프로그램이 하드웨어 자원을 관리할 수 있도록 AP..
1.Operating system (운영 체제)란 무엇인가❖ 단 한 가지로 표현되는 정의는 없음• (1) 컴퓨터 하드웨어를 관리하는 소프트웨어• 컴퓨터 하드웨어에는 CPU, 메모리 및 I/O 장치와 스토리지가 포함• 운영 체제의 기본적인 책임은 리소스를 프로그램에 할당하는 것• 올바른 작동을 보장하고, 방해하지 않도록 프로그램을 관리 및 제어 • (2) 사용자와 컴퓨터 하드웨어 사이의 중개자• 사용자가 프로그램을 편리하게 사용할 수 있는 환경을 제공2. The components of a computer system사용자(User): 컴퓨터 시스템을 활용하여 원하는 작업을 수행하는 사람 또는 시스템.하드웨어(Hardware): CPU, 메모리, 입출력 장치 등 컴퓨터의 물리적 장치로 시스템 자원을 제공...
1. DFS (깊이 우선 탐색, Depth-First Search)🔥DFS란?한 길로 쭉 들어가서 더 갈 수 없으면 다시 돌아와서 다른 길로 가는 방법이다.한 방향으로 계속 가다가 막다른 길이 나오면, 다시 뒤로 돌아와 다른 길을 찾는 방식이다.🔥구현 원리Stack(스택)을 써서 구현한다.Stack은 책을 쌓듯이, 마지막에 들어온 책이 먼저 나가는 방식 이다. (LIFO, Last-In First-Out)🔥시간복잡도O(V+E)이다.O(정점의 수 + 간선의 수)이다.🔥주로 쓰이는 곳미로 찾기처럼 모든 경우의 수를 확인하거나, 특정 경로를 찾을 때 유용하다.2. BFS (너비 우선 탐색, Breadth-First Search)🔥BFS란?BFS는 먼저 입구에서 가장 가까운 길부터 확인하고, 그다음 조..

1. 세그먼트 트리란? - 목적, 내부 구조, 동작 원리목적:배열의 특정 구간에 대해 계산(예: 합계, 최소값, 최대값)을 빠르게 수행하기 위함이다.이를 위해 미리 구간별 연산 결과를 저장한다.내부 구조:리프 노드: 배열의 각 단일 원소이다.내부 노드: 자식 노드들의 값을 특정 연산(예: 덧셈, 최솟값, 최댓값)으로 결합하여 구간 전체에 대한 결과를 저장한다.동작 원리 :세그먼트 트리 구현의 원리는 분할 정복(Divide and Conquer) 이다.쉽게 말하면 미리 싹 다 계산해서 트리를 만들고 그 트리를 탐색하는 것이다.(구간 별 연산 결과를 미리 계산)성능 :2. 어디에 사용? - 백준 2042예시) 백준 2042번1,2,3,4,5 라는 수가 있고, 3번째 수를 6으로 바꾸고 2번째부터 5번째까지 ..
1. 엔티티 매니저 팩토리 생성 과정Persistance 인스턴스가 설정정보를 조회하고 name과 같은 EntityManagerFactory를 생성한다. 엔티티 매니저 팩토리 생성과정Persistance 인스턴스가 설정 정보를 로딩한다. Hibernate가 설정 정보에서 영속성 유닛을 찾아서 리소스를 준비한다. 영속성유닛영속성 유닛(Persistence Unit)은 엔티티 매니저를 구성하는 근간이 되는 단위이다. 예를 들어, 어떤 데이터베이스와 연결하고, 어떤 엔티티들을 관리하며, 어떤 속성으로 동작할지 등을 정의한다.(설정파일에 영속성 유닛1 영속성 유닛 2 이렇게 여러개가 존재할 수 있는 것, 그리고 각 유닛마다 DB드라이버, 방언, DB주소, id, pwd 설정이 있음) JPA에서는 이 영속성 유닛..

1. SQL과 JDBC를 직접 사용하던 시절의 고통요약초기 SQL과 JDBC API 작성하는데 오래걸림요구사항이 추가되면 Entity와 Dao의 SQL을 동시에 수정해야하는 일이 비일비재함.즉, 비지니스 로직의 엔티티와 데이터 접근 계층간에 아주 강한 의존관계가 존재함.처음에 프로젝트를 시작할 땐, 모든 쿼리를 손으로 작성하고 JDBC API를 일일이 호출해야 했다.회원 하나를 조회하려고 해도, Connection 객체 열고, PreparedStatement에 파라미터 바인딩하고,ResultSet에서 칼럼 값을 꺼내와서 다시 자바 객체로 매핑해줘야 했다.그뿐만 아니라, 여러 테이블을 조인해야 하는 상황이면 SQL문이 엄청나게 길어지고 복잡해졌다.가장 괴로운 점은, 나중에 요구사항이 바뀌어서 Member에..
1. Entitiesentity는 persistence domain object이다.entity는 ralational database의 table을 나타낸다.각 entity Instance는 table의 row에 해당한다.entity는 helper class를 사용할 수 있다.엔티티를 설계할 때는 가능한 한 데이터와 핵심 규칙만 담아 깔끔하게 유지하고, 복잡한 비즈니스 로직이나 변환, 검증 등의 부수적인 로직은 도메인 서비스나 헬퍼 클래스로 분리하는 것이 좋다.1. Requirements for Entity ClassesClass에 반드시 @Entity annotation이 있어야 한다.public 또는 protected 접근자의 인자가 없는 기본 Constructor가 있어야 한다.Class,metho..

1. 서론 및 매칭 알고리즘 구조서론현대의 온라인 플랫폼 및 서비스에서는 사용자의 다양성과 특성을 고려한 정밀한 매칭이 필수적이다. 기존의 매칭 알고리즘은 전체 후보자 집합에서 모든 쌍을 비교하는 방식(브루트포스)을 사용하여 높은 정확도를 보장하지만, 후보자 수가 많아질 경우 연산 비용이 기하급수적으로 증가하는 단점이 있다. 이에 따라, 효율성과 확장성을 동시에 달성할 수 있는 새로운 매칭 알고리즘이 필요하다.본 알고리즘은 후보자들의 평점, 스터디 분야, 선호 시간대를 8:1:1의 가중치로 반영하여 K-means 클러스터링을 통해 유사한 후보자들을 그룹화한다. 이를 통해 전체 후보자 집합을 소규모 클러스터로 나누어 연산량을 크게 줄인다. 각 클러스터 내에서는 인접한 이웃 후보자들 중 최대 5명을 대상으로..
MySQL 쿼리 최적화: 테이블 스캔, 인덱스 스캔, 옵티마이저, 인덱스 힌트, EXPLAIN ANALYZEMySQL에서 쿼리 성능 최적화를 위해 가장 중요한 요소 중 하나는 옵티마이저(Optimizer)가 선택하는 실행 계획(Execution Plan) 이다.MySQL의 옵티마이저가 올바른 인덱스를 선택하지 못할 경우, 인덱스 힌트(Index Hints)를 사용하여 최적의 실행 계획을 유도할 수 있다.즉, EXPLAIN ANALYZE를 활용하여 옵티마이저의 실행 계획을 분석하고, 인덱스 힌트를 사용한다.1. 테이블 스캔 vs 인덱스 스캔테이블 스캔 (Full Table Scan)정의: 인덱스를 사용하지 않고 테이블의 모든 행(데이터 페이지)을 순차적으로 읽어오는 방식이다.특징:EXPLAIN 결과의 “..
확률 & 유사도 기반 1:1 매칭 엔진매칭 시스템은 단순히 “조건이 일치하면 매칭”하는 정적인 방식을 넘어,연속적 유사도 점수를 통해 후보 간 차이를 세밀하게 반영하는 확률 기반 매칭 알고리즘을 도입하려고 한다.평점, 스터디 분야, 선호시간대 등 다양한 조건을 동시에 고려하며,누적분포(CPD)와 가중치 기반 랜덤 선택(Weighted Random Selection)을 활용하여 자동매칭을 수행한다.1. 매칭 알고리즘의 핵심 개념📌1.1 평점 유사도와 α의 영향평점 유사도는 요청자와 후보자의 평점 차이에 따라 계산된다.아래와 같은 지수 함수로 표현한다.$$S_{rating}=e^{−α⋅∣rating_{req}−rating_{cand}∣}$$여기서 α값은 평점 차이에 대한 민감도를 조절한다.α가 높으면..
1. Included Columnsmysql에서는 이 기능을 활용할 수 없다. DBMS의 한 종류인 SQL-server는 이 기능을 지원한다.SQL-server를 통해서 Included Columns에 대해서 알아보자.Included Columns는 개념적으로 배워야 할 가치가 있으므로 mysql에서 지원하지 않는다 하더라도 한 번 알아보자.1. Included Columns란?📌 비클러스터형 인덱스의 리프 노드에는 id만 존재했기 때문에 그 id를 찾아서 다시 클러스터형 인덱스를 순회(Clustered Index Lookup)해야 했었다.하지만, 비 클러스터형 인덱스의 리프노드에 추가 컬럼을 포함시킨다면 2번 순회할 필요가 없을 것이다.📌 포함된 컬럼은 오직 비클러스터형(Non-Clustered) ..
1. 인덱스 조각화(Fragmentation)란?MySQL에서 데이터가 수정되거나 삭제될 때 인덱스 페이지가 비효율적으로 배치되는 현상을 의미한다.📌 조각화가 발생하는 주요 원인✅ INSERT (삽입): 새로운 데이터를 삽입하면서 기존 페이지 공간이 부족하면 새로운 페이지가 생성됨✅ UPDATE (업데이트): 데이터 크기가 커지면 원래 있던 페이지에 공간이 부족해지고, 일부 데이터가 다른 페이지로 이동함✅ DELETE (삭제): 일부 데이터가 삭제되면서 페이지에 빈 공간이 생김조각화가 심해지면 검색 속도가 느려지고, MySQL의 성능이 저하됨.📌 인덱스 조각화 확인 과정MySQL에서 조각화를 확인하는 방법을 단계별로 살펴본다.1. 고객 테이블(Customer Table) 생성다음과 같은 고객 테이블을..
이 글에 대한 내용은 SQL-SEVER DBMS에 관한 내용이다. 학습하기에 다른 DBMS와는 큰 차이가 있을 수 있다.1. SQL server 기본 개념 : Page📌 페이지(Page)란?데이터는 테이블(Table) 형태로 저장됩니다.테이블에는 여러 개의 레코드(Record) 또는 행(Row) 이 포함됩니다.하지만 내부적으로는 데이터가 페이지(Page) 단위로 저장됩니다.📌 페이지의 역할과 크기하나의 테이블 데이터는 여러 개의 페이지에 나뉘어 저장될 수 있습니다.SQL Server에서 한 페이지의 크기는 8KB(킬로바이트) 이다.1KB = 1024바이트8KB = 8192바이트📌 페이지 구조페이지에는 여러 개의 요소가 포함됩니다.페이지 헤더(Page Header)시스템 정보를 저장하는 부분이전 페이..

📘 이분 그래프 판별 (DFS 활용)📌 문제 설명K개의 줄에 걸쳐 입력으로 주어진 그래프가 이분 그래프이면 YES, 아니면 NO를 순서대로 출력한다.사이클이 발생하지 않으면 이분 그래프로 나눌 수 있다.🔍 이분 그래프의 성질DFS를 실행할 때 현재 노드에서 연결된 노드 중 이미 방문한 노드가 이전 노드와 같은 집합이면 이분 그래프가 아님연결된 두 노드가 서로 다른 그룹에 속해 있으면 이분 그래프 조건을 충족한다.이분 그래프는 두 개의 집합으로 나눌 수 있는 그래프다.그래프의 모든 간선이 A 그룹의 노드와 B 그룹의 노드를 연결한다.같은 색의 노드들끼리는 서로 연결되지 않고, 항상 다른 색의 노드들끼리만 연결된다.📝 예시v1 -- v2 | | v4 -- v3이 그래프도 이분 그래프이다..

kadane 알고리즘주어진 배열에서 최대 연속합을 찾아라.와 같은 문제를 DP로 O(N)의 시간복잡도로 해결한다.dp[i]는 0부터 i번째 요소까지 고려했을 때, i로 끝나는 최대 연속 부분합이다.dp[i] = max(a[i], dp[i-1] + a[i])와 같은 점화식의 DP 알고리즘이 카데인 알고리즘이다.위의 점화식을 해석하면,i로 끝나는 최대 연속 부분합 = max(현재 요소 하나의 값,i-1로 끝나는 연속 부분합 + 다음 요소를 추가)이다.그리고 dp[0]~dp[i]중에 최대를 택하면 그게 배열에서의 최대 연속 부분 합이다.어떻게 이런 아이디어를..?기존에 계산했던 걸 바탕으로 연속 부분합을 누적적으로 계산하려는 아이디어인 것이다.그런데 단순히 dp[i]를 i요소까지 고려했을 때 최대 연속 부분합..

🔎 문제 설명https://www.acmicpc.net/problem/32350몬스터들이 순서대로 배열되어 있고, 각 몬스터의 체력이 주어진다.공격을 해서 데미지(d)를 입힐 수 있다.만약 공격으로 몬스터의 체력이 0보다 적게 떨어지면, 초과 피해량(Overkill Damage)이 다음 몬스터에게 일정 비율(p)로 전달됩니다.몬스터들을 모두 처치하는데 필요한 총 공격 횟수(cnt)를 구하는 문제이다.🔧 변수 값n : 몬스터의 수d : 한 번의 공격으로 입히는 기본 데미지p : 오버킬 데미지가 다음 몬스터에게 전달되는 비율(%)m : 각 몬스터의 체력 배열rem : 마지막 공격으로 죽기 전에 남는 체력over : 오버킬 데미지🚀 풀이 과정for문으로 몬스터 배열을 순회해야 함.그리고 몬스터를 죽이기 ..
https://school.programmers.co.kr/learn/courses/30/lessons/150370?language=cpp문제 설명이 줄줄이 길게 있다.하지만 결국에 이 문제를 요약을 하면은 이런 문제다.다음과 같이 today와 terms, privacies가 주어지고privacies와 terms 더 한 거(만료일)을 today와 비교하는 문제이다.그리고 만료일 string today = "2022.05.19"; vector terms = {"A 6", "B 12", "C 3"}; vector privacies = {"2021.05.02 A", "2021.07.01 B", "2022.02.19 C", "2022.02.20 C"}; vector solution(string today,..

https://www.acmicpc.net/problem/2252⭐ 문제 요약이 문제를 읽어보고 요약하면 이런 것이다.학생들이 N명 있고 아래와 같은 정보가 M개가 주어진다.1이 2보다 키가 크다, 2가 3보다 키가 크다, ...그리고 그 M개의 조건을 위배하지 않는 순서대로 학생들을 출력하는 문제이다.답은 여러가지가 존재하고, 그 중에 하나의 답만 출력하면 된다.🪜 STEP 1이걸 단순히 아이디어 없이 정렬하려고 하면 상당히 어렵다.어떻게 정렬해야 할 지 감이 안오게 된다.단순히 이런 방식을 생각해볼 수 있기는 하다.먼저 1,2,3,4,5..., N까지 값이 있는 배열을 둔다.그리고 M개의 조건을 하나 하나 읽을 때마다 그 조건에 성립하는지 확인한다.성립하지 않으면 성립하도록 만든다.이런식으로 로직을..

Configuration과 싱글톤스프링컨테이너가 빈을 잘 생성하는지 직접 확인@Configuration으로 등록한 AppConfig 코드를 보면memberService 빈이 만들어질때 new로 memberRepository 객체를 생성한다.orderService 빈이 만들어질때도 new로 memberRepository 객체를 생성한다.자바 코드를 보면 그렇다.그러면 스프링 컨테이너가 싱글톤을 유지시켜 주는지 아닌지 궁금할 것이다.자바 코드를 보면 MemoryMemberRepository가 2개 생성될 것만 같다..!!직접 테스트 코드로 확인을 해보면 제대로 알 수 있을 것이다. 확인을 해보니 완전히 같은 것을 알 수 있다.어째서 이게 가능할까?스프링 컨테이너가 단순히 내가 AppConfig에서 정의한 메..

BeanDefinition스프링 빈 설정 메타 정보스프링 컨테이너가 다양한 형식의 설정 정보를 지원할 수 있는 이유는 BeanDefinition이라는 추상화 인터페이스 덕분이다.BeanDefinition은 스프링 빈 설정 메타 정보로, 스프링 컨테이너가 빈을 생성하기 위한 정보를 담고 있다.스프링 컨테이너의 동작 원리우리가 작성한 AppConfig.class 또는 appConfig.xml에서 BeanDefinition이 생성된다.스프링 컨테이너는 BeanDefinition을 참조하여 스프링 빈을 생성하고 관리한다.BeanDefinition 생성의 이유AnnotationConfigApplicationContext는 AnnotatedBeanDefinitionReader를 소유하여 자바 어노테이션 기..

1. 요구사항 명세서란?(What is SRS)A Software Requirements Specification is a detailed document that outlines the objectives, functionalities, constraints, and expectations of a system, software, or project. It serves as a foundational reference for all stakeholders—clients, developers, designers, and testers—ensuring everyone has a shared understanding of what the project will deliver.(요구 사항 사양은 시스템, 소프..

순수 자바 프로젝트로 도메인 설계와 구현 - 21. 새로운 할인 정책 개발악덕 기획자 : (서비스 오픈 직전) 정률 할인으로 변경하고 싶어요순진 개발자 : 그래서 내가 말했었잖아....(이건 나쁜 소통의 예시이다..)악덕 기획자 : 에자일 소프트웨어 개발 선언 몰라요?https://agilemanifesto.org/iso/ko/manifesto.html우리는 문제없다. DiscountPolicy의 구현체 RateDiscountPolicy만을 만들면 된다.Service 쪽 코드는 전혀 건드리지 않아도 된다. 라는게 우리 생각이였다.하지만 다시 잘 생각해보면 그건 착각이였음을 알게 된다. 우리가 지키지 않은 원칙이 하나 있다.DIP 원칙을 지키지 않았다.코드를 보면 추상체에게만 의존해야하는데 구현체에도 의존..

순수 자바 프로젝트로 도메인 설계와 구현1. 시작김영한 스프링 핵심 원리 기본 편을 바탕으로 하였음을 밝힙니다.이번 프로젝트에서는 순수한 자바로만 회원, 주문, 할인 도메인을 설계하고 구현할 예정입니다. 역할과 구현을 명확히 분리하여 인터페이스와 구현 객체를 나누어 개발하며, 객체 지향 설계의 핵심 원칙(OCP, DIP)이 잘 지켜지는지 또한 검증해볼 것입니다. 또한, 비즈니스 요구사항 변경에 유연하게 대응 가능한 설계를 목표로 합니다.start.spring.io 사이트를 통해서 빠르게 스프링 프로젝트를 구상합니다.단순히 프로젝트 환경설정의 편리함을 위해서 스프링 부트를 사용한 것이고, 스프링 없이 순수한 자바로만 개발할 것이다.프로젝트를 인텔리제이로 열었으면 한번 run을 해봅니다.스프링 웹 프로젝트를..

다익스트라 알고리즘언제 사용?하나의 시작 노드로부터 모든 다른 노드까지의 최단경로를 찾는 알고리즘이다.(벨만포드와 같다)가중치가 0이거나 양수인 경우만 사용할 수 있다.가중치가 음수라면 사용할 수 없다.구현 방법사용 변수vertex 개수 , edge 개수, start_node 값,사용 자료구조최소거리를 담은 배열, 방문했는지 기록하는 배열, 이전 노드를 기록하는 배열(방문순서를 기록하기 위함) 인접리스트,우선순위 큐어떻게 작동?우선순위 큐에 시작 노드를 넣는다.아래를 반복한다.우선순위 큐가 비면 반복을 멈춘다.우선순위 큐에서 노드를 꺼낸다.방문한 노드면 즉시 continue한다.방문하지 않는 노드면 방문 표시를 하고, 인접노드를 전부 순회한다.매 순회마다 이를 반복한다.더 좋은 최단 경로를 찾았다면 인접..
보호되어 있는 글입니다.

백준 32714번 방벽 게임문제를 보면 가로 또는 세로로 연속하는 두 칸을 선택해서 방벽을 설치할 수 있다고 한다.쉽게 말해 그냥 방벽을 설치하는 것이다.세로로도 방벽을 설치할 수 있다.건덕이가 움직이는 걸 시뮬레이션으로 직접 코딩할 필요가 없다. 위치를 추적하거나 규칙을 확인할 수 없지 않기 때문이다.(다시 생각해보니 위치추적도 시뮬레이션으로 안해도 될 것 같긴 함) 규칙성만 발견하여 움직이는 횟수만 계산하면 된다.규칙성도 바로 보일 것 같이 생겨서 만만하게 봤는데 만만한 게 맞았다. 한 10분정도 걸렸다. 구구단 문제는 8분 걸렸고, 비슷한 수준의 문제 같다.그런데 처음에는 지그재그로 막게 하면 될 거라고 생각하고 1+1+(2(k-3)) + 1로 식을 세웠다. 그런데 오답이 나와서 지그재그보다 효율적..