전체 글 93

[컴퓨터네트워크] 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

[Blazor Web App] 12. Repository에 인터페이스 적용하기 - 생성자 주입과 DI 이해하기

지난 글에서는 테스트 사용자 정보를 LoginService에서 분리해 TestUserRepository로 옮겼다.역할은 다음처럼 나뉘었다.LoginService→ 로그인 입력 검증→ 비밀번호 확인→ 로그인 결과 생성TestUserRepository→ 테스트 사용자 목록 보관→ 아이디로 사용자 검색기능은 잘 동작했지만 LoginService를 다시 보니 특정 Repository 클래스에 직접 의존하고 있었다.private readonly TestUserRepository testUserRepository;생성자도 TestUserRepository를 직접 받았다.public LoginService( TestUserRepository testUserRepository){ this.testUserRe..

language/blazor 2026.08.16

[데이터베이스실습] 07. 집합 연산자와 조인

여러 테이블(또는 여러 조회 결과)을 하나로 합치는 방법은 크게 두 가지다. 집합 연산자는 결과를 위아래로(세로로) 잇고, 조인은 좌우로(가로로) 잇는다. 이 둘의 방향 차이를 먼저 잡아두니 헷갈리지 않았다.특히 조인은 관계형 데이터베이스의 진짜 위력이 드러나는 지점이다. 정규화로 잘게 나눠둔 테이블들을 다시 의미 있게 엮어주는 것이 바로 조인이기 때문이다.1. 집합 연산자두 SELECT 결과를 세로로 잇는다. 두 SELECT의 열 개수와 자료형이 같아야 한다.연산자의미UNION합집합, 중복 제거UNION ALL합집합, 중복도 모두 출력MINUS차집합 (첫 결과에서 두 번째 결과를 뺌)INTERSECT교집합 (양쪽에 다 있는 행만)SELECT empno, ename, deptno FROM EMP WHER..

data/oracle 2026.08.15