2026/08 28

[C언어] 09. 포인터 (Pointer)

포인터는 C언어를 어렵게 만드는 동시에 강력하게 만드는 핵심 개념이다. 나도 여기서 한 번 막혔는데, 사실 한 문장으로 요약된다. 포인터는 값이 아니라 "값이 있는 주소"를 담는 변수다.지금까지 scanf에서 &를 붙였던 것, 배열 이름이 곧 주소였던 것이 모두 이 포인터로 이어졌다.1. 포인터란?모든 변수는 메모리 어딘가에 저장되고, 그 위치를 가리키는 주소를 갖는다.포인터(Pointer)다른 변수의 주소를 저장하는 변수다. 일반 변수가 "값"을 담는다면, 포인터는 "그 값이 사는 집 주소"를 담는다. 그래서 어떤 타입을 가리키든 포인터 자체의 크기는 일정하다(주소는 결국 하나의 정수이므로).두 개의 핵심 연산자가 있다.주소 연산자 &: 변수의 주소를 구한다. &i는 변수 i의 주소.간접 참조(역참조)..

language/c 2026.08.31

[Blazor Web App] 14. 로그인 로직에 xUnit 테스트 도입하기 - 테스트 프로젝트부터 첫 단위 테스트까지

지금까지 로그인 기능은 브라우저에서 직접 확인했다.기존 브라우저 구동 테스트 흐름앱 실행 ➡️ 아이디와 비밀번호 입력 ➡️ 로그인 버튼 클릭 ➡️ 메시지 창이 뜨는지 확인이 방법은 화면에서 어떻게 보이는지 확인하기에는 좋았다.하지만 LoginService 안의 로직을 수정할 때마다 정상 로그인이 되는 아이디나 틀린 비밀번호 같은 경우 다시 입력해야 한다. 금번 경우에 대해 일일이 로그인 규칙이 틀어지면 사람이 매번 같은 과정을 빠짐없이 반복하기가 어려울 것 같았다.그래서 이번에는 로그인 화면이 아니라 로그인 서비스 자체가 자동으로 검증하는 테스트 프로젝트를 만들어 보기로 했다.이번 작업의 목표이번에는 처음엔 테스트를 많이 만들지는 않겠다.먼저 아래 흐름이 실제 동작하는지 확인한다.첫 단위 테스트 실행 흐..

language/blazor 2026.08.27

[컴퓨터네트워크] 08. 네트워크 서비스

앞에서 배운 HTTP·FTP·SMTP 같은 프로토콜은 이론으로 끝나지 않는다.실제로 내 컴퓨터를 웹 서버나 파일 서버로 만들어 동작시킬 수 있다.오늘은 윈도우의 IIS를 통해 웹·파일·메일 서비스를 직접 구축하는 관점에서 네트워크 서비스를 정리했다.1. IIS: 윈도우의 서버 도구IIS (Internet Information Service)마이크로소프트가 제공하는 서버 운영 도구로, 별도 프로그램 설치 없이 윈도우에서 웹(WWW)·FTP 서버를 구축할 수 있다. 제어판의 "Windows 기능 켜기/끄기"에서 인터넷 정보 서비스를 체크하면 활성화된다.전용 서버 소프트웨어를 따로 깔지 않고도, 내 PC를 서버로 바꿔 클라이언트의 요청을 받게 하는 것이다. 그동안 이론으로만 배운 클라이언트-서버 구조를 내 P..

[데이터베이스] 05. 관계 데이터 연산

데이터를 표(릴레이션)로 저장했으니, 이제 그 표에서 원하는 데이터를 꺼내는 방법을 정의할 차례다.관계 데이터 연산은 "릴레이션을 입력받아 릴레이션을 출력하는" 연산들의 체계다. 다소 수학적이고 추상적이라 처음엔 "이걸 왜 배우나" 싶었다.그런데 우리가 매일 쓰는 SQL의 SELECT가 사실 이 연산들이 옷을 갈아입은 모습이었다. 이 토대를 알아두니 SQL이 내부에서 무슨 일을 하는지가 보였다.1. 관계 대수 vs 관계 해석원하는 데이터를 표현하는 방식에는 두 갈래가 있다. 이 구분은 프로그래밍의 "명령형 vs 선언형"과 정확히 같다.구분성격표현하는 것관계 대수(Relational Algebra)절차적어떻게(How) 얻을지, 즉 연산 순서를 명시관계 해석(Relational Calculus)비절차적무엇(..

data/database 2026.08.25

[C언어] 08. 문자열 (String)

[C언어] 08. 문자열 (String)다른 언어에는 문자열 타입이 따로 있지만, C에는 없다. C에서 문자열은 문자(char)들의 배열이다. 이 단순한 사실에서 C 문자열의 모든 특징과 주의점이 나온다는 걸 오늘 정리하며 알았다.1. 문자열과 NULL 문자문자열은 문자들이 죽 늘어선 것이고, 문자 배열(char[])에 저장한다. 그런데 배열만으로는 "어디까지가 문자열인지" 알 수 없다. 그래서 C는 문자열의 끝에 특별한 표식을 둔다. NULL 문자 '\0'이 문자열의 끝을 표시한다모든 C 문자열은 끝에 NULL 문자('\0')가 붙는다. printf나 strlen 같은 함수는 이 '\0'을 만날 때까지를 하나의 문자열로 인식한다. 즉 "abc"는 사실 a, b, c, '\0' 네 글자가 저장된 것이다...

language/c 2026.08.24

[자바프로그래밍] 06. 클래스와 객체

자바는 철저한 객체 지향 언어다. C가 함수 중심으로 절차를 짠다면, 자바는 객체들이 서로 메시지를 주고받으며 프로그램을 구성한다. 오늘은 객체 지향의 핵심인 클래스·객체·생성자·this·static을 정리했다.1. 객체 지향과 클래스·객체세상 모든 것은 고유한 속성(데이터)과 동작(기능)을 가진 객체로 볼 수 있다. 객체 지향은 이를 그대로 코드로 옮겨, 소프트웨어의 재사용성과 현실 모델링을 쉽게 한다. 그 4대 특성이 캡슐화·상속·다형성·추상화다.클래스와 객체클래스(Class): 객체의 설계도. 속성은 필드, 동작은 메서드로 정의한다.객체(Object/Instance): 클래스를 new로 메모리에 구현한 실체. 한 클래스로 여러 객체를 만들 수 있다.public class Circle { int..

language/java 2026.08.21

[Blazor Web App] 13. 로그인 흐름을 비동기로 바꾸기 - Task, async, await 이해하기

지난 작업에서는 LoginService가 구체적인 TestUserRepository가 아니라 IUserRepository 인터페이스에 의존하도록 구조를 바꿨다.현재 로그인 호출 흐름은 다음과 같았다.Home.razor↓LoginService.Login()↓IUserRepository.FindByUserId()↓TestUserRepository지금 사용하는 TestUserRepository는 메모리 안의 List를 검색한다.따라서 검색 결과가 거의 즉시 나오고, 반드시 비동기로 만들 필요는 없다.하지만 나중에 실제 DB나 외부 API를 연결하면 결과를 바로 받을 수 없다.💡 실제 DB 비동기 호출 흐름DB에 사용자 검색 요청 ➡️ DB 서버에서 쿼리 실행 ➡️ 검색 결과 반환이 과정에는 기다리는 시간이 ..

language/blazor 2026.08.20

[컴퓨터네트워크] 07. 응용 계층

지금까지의 계층들이 "데이터를 어떻게 전달하는가"였다면, 응용 계층(7계층)은 우리가 실제로 쓰는 서비스 그 자체다.웹·메일·파일 전송 같은 것이 여기서 동작한다.오늘은 주요 응용 계층 프로토콜과, 데이터가 전 계층을 거치는 전체 흐름을 정리했다.1. 응용 계층의 역할응용 계층은 사용자(애플리케이션)가 네트워크에 접근하는 창구다. 대개 클라이언트(요청)와 서버(제공)의 관계로 동작한다. TCP/IP 모델에서는 OSI의 세션·표현·응용 세 계층이 여기에 합쳐져 있다.세션: 연결 설정·유지·종료표현: 암호화·압축·코드 변환응용: 실제 서비스(파일·메일·웹) 제공2. 주요 응용 계층 프로토콜프로토콜전송포트기능HTTP / HTTPSTCP80 / 443웹 송수신FTPTCP21, 20파일 전송SMTPTCP25메일 ..

[데이터베이스] 04. 관계 데이터 모델

관계 데이터 모델은 데이터를 표(테이블)의 형태로 다룬다. 이 단순한 아이디어가 수십 년째 데이터베이스 세계를 지배하고 있다.단순해 보이는 표 뒤에는 정밀하게 정의된 용어와, 데이터가 망가지지 않게 지키는 규칙(무결성)이 있다. 오늘은 그 어휘와 규칙을 정리했다. 데이터베이스를 다루는 거의 모든 이야기가 결국 이 용어들 위에서 이뤄지기 때문이다.1. 릴레이션의 구성관계 모델에서는 표를 릴레이션(relation)이라 부르고, 행과 열에도 고유한 이름을 붙인다. 일상의 "표/행/열" 용어와 짝지어 외워두니 편했다.용어의미일상 표현릴레이션(relation)행과 열로 구성된 표테이블속성(attribute)릴레이션의 열컬럼(세로)튜플(tuple)릴레이션의 행로우(가로)도메인(domain)한 속성이 가질 수 있는 ..

data/database 2026.08.18

[C언어] 07. 배열 (Array)

학생 10명의 점수를 다루려고 변수 10개를 따로 선언하면, 합계를 구할 때 10번 더해야 하고 인원이 바뀌면 코드를 전부 고쳐야 한다. 배열은 같은 종류의 데이터 여러 개를 하나의 이름으로 묶어, 이런 번거로움을 없애준다.1. 배열이란?배열(Array)같은 자료형의 데이터 여러 개를 하나의 변수 이름으로 묶어 관리하는 자료구조다. 각 데이터는 0부터 시작하는 인덱스(index)로 구별하며, 크기는 고정되고 메모리의 연속된 공간에 저장된다.int scores[10]; // int형 10개짜리 배열scores[0]부터 scores[9]까지 10개의 요소가 만들어진다. 인덱스가 0부터 시작하므로, 크기가 10인 배열의 마지막 인덱스는 9다. 이걸 놓쳐 scores[10]에 접근하면 배열 범위를 벗어나는 ..

language/c 2026.08.17