Journey to CS 96

[ML 스터디 2주차] 확률과 가능도, 그리고 베이즈 정리

스터디 교재: "개발자를 위한 필수 수학" by 토마스 닐드참고 본문: 65p. 2.2.3 베이즈 정리-------------- 확률(Probability)과 가능도(Likelihood)는 얼핏 비슷해 보이는데 사실은 바라보는 방향이 서로 반대인 개념이다.확률은 원인에서 결과를 향하고, 가능도는 결과에서 원인을 향한다.확률과 가능도를 결합하면 이미 알고 있던 지식에 새로 관측한 증거를 곱해 결론을 갱신하는 베이즈 정리(Bayes' Theorem)가 나오는데, 이것은 단편적인 통계에 속지 않고 합리적인 판단을 하게 도와주는 근거가 된다. 1. 확률: 정해진 조건에서 결과를 예측1️⃣ P(결과 | 조건)확률은 이미 정해진 환경이 있는 상태에서 앞으로 어떤 일이 벌어질지를 예측하는 개념이다.즉, 설정은 고정되..

[ML 스터디 2주차] 단일 확률, 주변 확률, 결합 확률 용어 정리

스터디 교재: "개발자를 위한 필수 수학" by 토마스 닐드참고 본문: 62p. 2.2 확률 계산--------------1. 단일 확률 = 주변 확률(Marginal Probability)'주변 확률'은 '단일 사건의 확률'과 같은 개념이다.여러 가지 변수가 얽혀 있는 복잡한 상황에서, 다른 변수는 모두 무시하고 특정 사건 하나만 떼어서 볼 때의 확률을 의미한다.예: 동전을 하나 던져서 앞면이 나올 확률 = 1/2예: 주사위를 굴려서 6이 나올 확률 = 1/6그렇다면 왜 굳이 '주변(Marginal)'이라는 수식어를 붙였을까? 이는 통계학에서 확률 분포를 '표(Table)'로 그리는 관행에서 유래했다. 복잡한 확률 표를 분석할 때, 개별 사건의 총합(확률)은 항상 표의 바깥쪽 가장자리(Margin)에 ..

[ML 스터디 1주차] 미분과 극한, 그리고 도함수

스터디 교재: "개발자를 위한 필수 수학" by 토마스 닐드참고 본문: 43~52p. 1.10 미분--------------오일러 수에 대해 정리하며 마지막에 경사하강법(Gradient Descent)이라는 것을 언급했다.손실 함수(Loss Function)의 기울기를 계산하고 그 기울기의 반대 방향으로 파라미터를 조금씩 이동시켜 오차를 최소화한다는 원리인데, 결국 기울기는 "지금 이 순간 값이 어느 방향으로 얼마나 빠르게 변하는가"이며, 이 질문에 답하려면 미분을 알아야 한다.1. 미분의 조건1️⃣ 미분이 구하는 값'함수를 미분한다'는 것은 특정 순간에 값이 얼마나 빠르게 변하고 있는지, 즉 순간변화율을 구하는 과정이다.그래프 상에서는 특정 지점에서 접선의 기울기를 찾는 일이다.자동차의 누적 주행 거리..

[ML 스터디 1주차] 오일러수(e)와 미분(dy/dx)의 본질을 찾아서...

스터디 교재: "개발자를 위한 필수 수학" by 토마스 닐드참고 본문: 37p. 1.8.1 오일러 수--------------책에 있는 내용만으로는 미안하지만 "오일러수"가 어떤 개념이고 왜 있는 것인지 잘 이해가 안 됐다.모 LLM한테 오일러수를 딱 한 마디로 알아듣기 쉽게 정의해달라고 했더니 "자라는 속도가 자기 크기와 똑같아지는 유일한 숫자"라고 했다.이런 저런 설명을 하는데 여전히 알듯 말듯 모르겠다.그래서 그냥 내가 이해할 수 있는 말로 다시 정리해본다.1. 오일러수(e)의 본질: "커지는 속도 = 자기 크기"복리 이자 비유은행에 100만 원을 저축하고 1년에 100%의 이자를 받는다고 가정해 보자.이자를 1년에 한 번 받을 때보다, 6개월, 1달, 1일, 1초 단위로 쪼개서 복리로 받을 때 최..

[ML 스터디 1주차] 잡다한 질문

스터디 교재: 1. 내장 함수 이름을 변수로 쓰면 안 되는 이유본문: 31p. 예제 1-11 네 배열의 합계 구하기문제주피터 노트북에서 아래 파이썬 코드를 실행했더니 에러가 났다.x = [1, 5, 3, 4]n = len(x)summation = sum(10*x[i] for i in range(0, n))print(summation) 코드 자체는 아무 문제가 없어 보인다. 원인원인은 그 전 셀에 있었다.여기서 오른쪽의 sum(...)은 내장 함수로 정상 동작해서 30을 계산했다.문제는 그 결과를 sum이라는 이름에 그대로 대입했다는 것.그 순간부터 sum은 더 이상 함수가 아니라 정수 30이 된다.다음 셀에서 sum(...)을 호출하면 파이썬 입장에선 30(...)을 호출하는 셈이니, "int 객체는 호..

JSP 실행 매커니즘

1. filename_jsp.java 형식의 파일filename_jsp.java는 JSP 파일이 실행되기 위해 서블릿(Servlet) 소스 코드로 변환된 결과물이다.우리가 작성하는 .jsp 파일은 HTML 태그와 Java 코드가 섞여 있는 형태다.하지만 웹 서버(정확히는 WAS)는 JSP 파일 그 자체를 직접 실행할 능력이 없다.서버는 오직 컴파일된 자바 클래스 파일(.class)만 실행할 수 있다.따라서 내부적으로 JSP를 자바 소스 파일로 변환하는 과정을 거치는데, 이때 생성되는 것이 바로 서블릿 파일이다.2. JSP의 실행 메커니즘 (Lifycycle)사용자가 브라우저에서 filename.jsp를 호출하면 서버 내부에서는 다음과 같은 일이 벌어진다.변환(Translation): 톰캣 등의 WAS가 ..

Journey to CS/웹 2026.03.26

C 소스 패치파일 만들기

[linuxadmin@localhost ~]$ vi hello_old.c#include int main() { printf("Hello\n"); return 0;}[linuxadmin@localhost ~]$ vi hello_new.c#include int main() { printf("Hello, World!\n"); return 0;} 패치 파일로 만든다.[linuxadmin@localhost ~]$ diff -u hello_old.c hello_new.c > myprogram.patch [linuxadmin@localhost ~]$ sudo dnf -y install gcc 패치 명령어 사용을 위해 패키지 설치[linuxadmin@localhost ~]$ sudo dnf -y ..

[Java] 메서드의 메모리 적재 원리와 클래스 선언 규칙

1. 메서드를 메모리에 올리는 두 가지 방법자바에서 메서드는 성격에 따라 메모리에 적재(Load)되는 시점과 방식이 다르다. 1️⃣라이브러리 클래스에서의 메서드보통 기능을 제공하는 역할을 하는 클래스들이다.인스턴스 메서드 (Instance Method): new 연산자를 통해 객체를 생성하는 순간 메모리에 올라간다. 객체마다 고유한 상태(필드)를 가질 수 있으며, 반드시 객체 생성 후에만 사용할 수 있다.정적 메서드 (Static Method): 프로그램이 실행되자마자 메모리(Method Area)에 자동으로 올라간다. 객체 생성 없이 클래스명.메서드명()으로 즉시 호출할 수 있다.2️⃣실행 클래스에서의 메서드public static void main이 포함된, 프로그램의 시작점이 되는 클래스다.프로그램..

[Java] static과 인스턴스 - JVM이 main 메서드를 찾아가는 방법

public, static, 그리고 new 이 세 가지 키워드는 자바의 동작 원리와 메모리 관리 방식을 이해하는 데 중요하다.각 키워드의 역할과 객체 생성 과정에서의 메모리 흐름을 살펴본다. 1. main 메서드가 public이어야 하는 이유JVM(Java Virtual Machine)이 프로그램을 실행할 때, 클래스 외부에서 main 메서드를 찾아 호출해야 한다.만약 main 메서드가 public이 아니라면 JVM은 해당 메서드에 접근할 수 없으며, 프로그램은 시작을 할 수 없다.따라서 main은 항상 외부로 완전히 개방된 public 상태여야 한다. default 접근 제어메서드 앞에 아무런 제어자도 붙이지 않으면 자동으로 default 상태가 된다.이는"같은 패키지 내부"에서만 접근이 가능하다는 뜻..

C언어 구조체 포인터와 malloc 함수

아래 코드를 바탕으로 구조체 포인터를 선언할 때 왜 malloc 함수를 사용해야 하는지, 그리고 메모리에는 어떤 변화가 일어나는지 디버깅을 통해 알아본다.#include #include #include struct member{ char name[20]; int age;};struct member *create_member(const char *name, int age);int main(){ struct member *m; m = create_member("Hgd", 20); printf("name = %s, age = %d\n", m->name, m->age ); free(m); return 0;}struct member *create_member(const ..