2026/08 9

[Blazor Web App] 11. 로그인 데이터 분리하기 - UserAccount와 TestUserRepository 만들기

지난 작업에서는 로그인에 성공했을 때 사용자 정보를 UserInfo에 담아 LoginResult로 반환하도록 구조를 정리했다.로그인 상태를 보관하는 LoginStateService는 사용자 정보를 직접 만들지 않고, LoginService가 만들어준 결과를 저장만 하도록 바꿨다.구조가 조금씩 정리되고 있었지만, LoginService를 다시 보니 아직 테스트 사용자 정보가 직접 들어 있었다.private readonly string testUserId = "sample-admin";private readonly string testPassword = "1111";로그인에 성공했을 때 표시할 사용자 이름과 등급도 LoginService 안에서 직접 만들고 있었다.userInfo.UserId = loginR..

language/blazor 14:22:11

[Blazor Web App] 10. UserInfo 생성 책임을 LoginService로 옮기기

지난 작업에서는 UserInfo 모델을 만들고, 로그인한 사용자 정보를 LoginStateService에 저장하도록 바꿨다.처음에는 이 구조도 괜찮아 보였다.LoginStateService ├─ IsLoggedIn ├─ CurrentUser └─ StatusMessage그리고 로그인 성공 시 LoginStateService.Login(userId) 안에서 임시 사용자 정보를 만들었다.public void Login(string userId){ UserInfo userInfo; userInfo = new UserInfo(); userInfo.UserId = userId; userInfo.UserName = "테스트 사용자"; userInfo.UserGrade = "테스트 회원";..

language/blazor 2026.08.07

[데이터베이스실습] 06. 다중행 함수와 그룹화

지금까지의 함수는 한 행을 받아 한 결과를 내는 단일행 함수였다. 이번에 다룬 다중행 함수(집계 함수)는 여러 행을 묶어 하나의 값으로 요약한다. "부서별 평균 급여", "직책별 인원 수" 같은 통계가 모두 여기서 나온다.그리고 이 집계를 "무엇을 기준으로 묶을지" 정하는 것이 GROUP BY, 묶은 결과에 조건을 거는 것이 HAVING이다.1. 다중행 함수 (집계 함수)함수설명SUM합계COUNT개수MAX최댓값MIN최솟값AVG평균SELECT SUM(sal) FROM emp; -- 급여 합계SELECT COUNT(*) FROM emp WHERE deptno=30; -- 30번 부서 인원SELECT MAX(sal), MIN(sal) FROM emp WHERE deptno=..

data/oracle 2026.08.06

[컴퓨터네트워크] 05. 네트워크 계층 (IP)

같은 네트워크 안에서는 MAC 주소만으로 통신할 수 있다. 하지만 다른 네트워크로 데이터를 보내려면 IP 주소와 그 길을 찾는 라우팅이 필요하다. 이 일을 담당하는 것이 네트워크 계층(3계층)이고, 그 핵심 프로토콜이 IP다.1. TCP/IP와 주소 체계인터넷의 표준 통신 규약이 TCP/IP다. 둘은 역할을 나눠 맡는다.IP (Internet Protocol): 패킷을 목적지 호스트까지 전달(전송 담당).TCP (Transmission Control Protocol): 오류 시 재전송, 흐름 제어 등 신뢰성 담당.통신에는 세 종류의 주소가 함께 쓰인다.주소길이식별 대상MAC 주소48비트네트워크 카드(기기)IP 주소32비트(IPv4)호스트(컴퓨터)포트 주소16비트프로세스(서비스)"어느 기기(MAC)의, 어..

[Ubuntu] 08. 홈 서버 운영 - Unit Test와 Integration Test 분리

서버 배포와 백업까지 정리한 뒤에는 테스트가 신경 쓰이기 시작했다.처음에는 로컬에서 dotnet test가 통과하면 괜찮다고 생각했다. 그런데 Codex나 GitHub Actions 같은 환경에서 테스트를 돌리려고 하니 문제가 생겼다.오류는 대략 이런 식이었다.Cannot create an automatic instance.Unknown error처음에는 코드가 깨졌나 싶었는데, 자세히 보니 테스트 코드 자체의 실패가 아니라 LocalDB 자동 인스턴스를 만들지 못해서 생긴 문제였다.문제 상황현재 운영 DB는 Ubuntu 서버의 Docker MSSQL에 있다.Ubuntu Server ↓Docker ↓mssql-db ↓SurvivalGame DB하지만 테스트가 운영 DB에 직접 붙으면 안 ..

study/server 2026.08.04

[C언어] 05. 반복문

같은 작업을 여러 번 해야 할 때, 코드를 여러 번 복사하는 대신 반복문을 쓴다. "1부터 100까지 더하기"를 덧셈 100줄로 쓰지 않고 몇 줄로 끝내는 것이다. C의 반복문에는 while, do~while, for 세 가지가 있다. 종류특징while조건이 참인 동안 반복 (반복 횟수를 모를 때)do ~ while일단 한 번 실행한 뒤 조건 검사 (최소 1회 보장)for정해진 횟수만큼 반복1. while 문조건이 참인 동안 중괄호 안을 반복한다. 조건을 먼저 검사하므로, 처음부터 거짓이면 한 번도 실행되지 않는다(0번 이상).while (조건) { 수행 문장;} 반복 횟수를 미리 알 수 없을 때(예: "0이 입력될 때까지") 적합하다.int n;while (1) { /..

language/c 2026.08.03

[인터넷활용] 02. CSS 스타일링

HTML이 문서의 뼈대라면, CSS는 그 위에 입히는 옷이다. 색·크기·여백·배치 같은 시각적 표현을 모두 CSS가 담당한다. 오늘은 CSS를 적용하는 방법, 어떤 요소를 꾸밀지 고르는 선택자, 그리고 자주 쓰는 속성을 정리했다.1. CSS를 적용하는 세 가지 방법CSS는 HTML에 세 가지 방식으로 연결할 수 있다. 방법작성 위치예인라인태그 안 style 속성내부의 외부별도 .css 파일 연결 기본 문법은 "어떤 요소를(선택자) 어떻게(속성: 값)" 꾸밀지 적는 구조다. 선택자 { 속성: 값; 속성: 값; }body { font-family: Arial; background-color: #f4f4f4; padding: 20px; } 실무에선 외부 CSS를 쓴다인라인은 간편하지만 태그마다 스타일이 흩어져..

language/html 2026.08.02

MaxUCB - Maximum Upper Confidence Bound

AI 모델을 학습시킬 때, 손실(loss)이 큰 데이터를 우선적으로 학습시키는 것은 상식적인 접근이다. 오답 노트처럼 틀린 문제를 다시 풀어보는 원리다. 하지만 오차가 가장 큰 데이터만 탐욕적으로(greedy) 고르면 부작용이 생긴다.첫째, 예전에 학습해둔 쉬운 영역의 데이터를 까먹는 망각 현상이 발생한다.둘째, 데이터 자체에 오류가 있거나 노이즈가 심한 경우, 오차가 영원히 줄어들지 않아 모델이 그 데이터에만 갇혀버린다.이 문제를 해결하려면 '현재 오차가 큰 영역(활용)'과 '최근에 확인하지 않은 영역(탐색)' 사이의 균형이 필요하다. 이를 수학적으로 제어하는 방법이 UCB(Upper Confidence Bound) 알고리즘이다.Max UCB의 개념전체 데이터를 여러 구역으로 나눈 뒤, 각 구역마다 U..

study/memo 2026.08.01

[알고리즘] 04. 선택구조

순차구조만으로는 "조건에 따라 다르게" 행동할 수 없다. 합격/불합격을 가르거나, 짝수/홀수를 판별하려면 갈림길이 필요하다. 이 갈림길이 선택구조다. 수업에서 Raptor로 푼 예제들을 단순 분기 → 중첩 분기 → 다중 분기 순으로 정리했다.1. 선택구조란?선택구조의 세 요소참·거짓을 가르는 조건식조건이 참(Yes)일 때 실행할 명령 블록조건이 거짓(No)일 때 실행할 명령 블록 Raptor에서는 마름모에 조건식을 쓰고, 참이면 왼쪽(Yes), 거짓이면 오른쪽(No) 경로로 분기한다. 짝수/홀수 판별을 순서도로 그리면 이렇다. 조건식에 쓰는 연산자는 두 종류다.종류연산자예관계= !=(/=) > >=3 → Yes논리and or xor not(3 → Yes 여러 조건을 조합할 땐 관계 연산자가 먼저 ..