블로그

김정환

웹이 우리를 기억하는 방법, 쿠키

웹사이트는 생각보다 우리를 잘 기억합니다. 어제 장바구니에 담아둔 상품이 그대로 남아 있거나, 며칠 전 로그인했던 상태가 여전히 유지되는 것을 경험해 보셨을 거에요. 하지만 원래 인터넷을 이루는 HTTP는 이런 기억력이 없습니다. 무상태(stateless), "기억하지 못하는" 특성을 지니고 있기 때문이에요. HTTP의 무상태성클라이언트가 서버에 요청을 보낸 뒤에 다시 요청을 보내도, 서버는 같은 사용자인지 전혀 알 수 없습니다. 요청 메시지 안에 클라이언를 식별할 정보가 없으니까요.무상태성 덕분에 서버는 비교적 단순하게 동작할 수 있고, 여러 대의 서버로 쉽게 확장할 수 있습니다. 요청 하나하나가 독립적이므로 어느 서버가 응답하든 상관없기 때문이죠.하지만 현실의 웹 애플리케이션은 사용자를 기억해야 할 필요가 많습니다."다시 방문한 사용자"를 식별해야 하고,로그인 상태를 유지해야 하며,사용자가 담아둔 장바구니 물건도 알고 있어야합니다. 여기서 탄생한 것이 바로 쿠키(cookie)입니다. 탄생 배경쿠키라는 개념은 1990년대 초반, 온라인 쇼핑 카트 기능을 구현하기 위해 고안되었습니다. 당시 네스케이스 개발자가 제안한 방식이 그 시초입니다. 사이트 재 방문 확인 기능이 이를 활용한 첫 사례라고 합니다.재밌는 점은 유닉스 세계에 이미 비슷한 개념이 있었다는 것입니다. 특정한 값을 건네주고 나중에 돌려받는 방식이었는데, 이를 매직 쿠키(magic cookie)라고 불렀습니다. 마치 놀이공원 입구에서 손목에 도장을 찍어주는 것과 같죠. 기본 동작핵심은 단순합니다. 서버와 브라우져가 상태를 주고 받을 수 있도록 HTTP 헤더를 활용하는 것입니다.서버 응답: 서버는 브라우져에게 특정 값을 기억하라고 응답 헤더를 통해 지시합니다. (일종의 도장)브라우져 저장: 브라우져는 이를 쿠키 저장소에 기록합니다. (도장을 손목에 찍음)브라우져 요청: 이후 자동으로 쿠키를 요청 헤더에 실어 보냅니다. (재입장할 때 도장을 보여줌)서버는 이 값을 확인하고 "다시 방문한 사용자"라고 판단할 수 있습니다. 속성쿠키는 단순한 문자열 이상의 기능을 제공합니다.Domain: 어떤 도메인에 이 쿠키를 보낼지 제한합니다. (예: example.com에 설정된 쿠키를 sub.example.com에서도 쓸 수 있음)Path: 특정 경로에서만 쿠키가 전송되도록 제한합니다. (예: /shop에 설정된 쿠키를 /blog 요청에는 미설정 할 수 있음)Max-Age / Expires: 쿠키의 수명을 정합니다. 세션 쿠키(브라우져 종료 시 삭제)와 영속 쿠키(일정 기간 유지)로 나뉘게 되죠.Secure: HTTPS 요청에만 쿠키를 전송하도록 제한합니다. (암호화되지 않은 HTTP에서 숨기기 위한 안전장치)HttpOnly: 자바스크립트 코드에서 쿠키를 읽지 못하게 합니다. (크로스사이트 스크립트(XSS) 공격으로부터 세션 쿠키를 보호)이러한 속성 덕분에 쿠키는 단순한 "메모장"을 넘어 범위, 유효기간, 보안 등을 정밀하게 제어할 수 있답니다. 활용 사례우리는 웹에서는 쿠키를 매우 다양한 방식으로 사용할 수 있습니다.로그인 세션 유지: 사용자가 아이디와 비밀번호로 로그인하면, 서버는 세션을 만들고 세션 ID를 쿠키로 응답합니다. 이후 요청마다 이 세션 ID가 서버로 함께 전송되어 로그인 상태를 유지할 수 있습니다.개인화된 서비스: 사용자가 선호하는 언어, 최근 본 상품 목록 등을 쿠키에 기록해 두고, 다음 방문 때 동일한 환경을 제공할 수 있습니다.광고 트래킹: 광고 네트워크는 쿠키를 활용해 사용자의 웹 활동을 추적하고 맞춤형 광고를 제공합니다. 한계와 대안물론 단점도 있습니다.용량이 제한적입니다. (보통 하나의 쿠키는 4KB, 도메인별 20개 정도 제한)매 요청마다 자동으로 전송되므로 네트워크 트래픽이 늘어납니다.보안에 민감한 값은 쿠키에 저장하지 않아야 합니다. (예: 개인정보)쿠키 대안으로 세션 스토리지, 로컬 스토리지, 토큰 기반 인증(JWT) 등이 사용됩니다. 하지만 여전히 "서버와 클라이언트 간의 신뢰할 수 있는 연결 고리"로써 쿠키는 가장 클래식하고 널리 쓰이는 방식입니다. 결론쿠키는 단순히 브라우져 저장소 중 하나가 아닙니다. HTTP라는 무상태 프로토콜 위에서 "사용자를 기억하기" 위해 탄생한 역사적 맥락과, 서버와 클라이언트가 헤더를 주고받는 과정 속에서 이해할 때 비로소 제대로 된 그림이 보일 것입니다.이 글은 제가 준비한 강의 「웹 개발의 핵심, HTTP 완벽 가이드」 의 2편을 바탕으로 작성하였습니다. 쿠키에 국한되지 않고, HTTP의 기본 구조부터 브라우저 동작 원리, AJAX, 보안, 성능까지 폭넓게 다루고 있습니다. 조금 더 깊이 있는 내용을 원하신다면 강의와 함께 따라오셔도 좋습니다.이 강의에서 다루는 내용1편. HTTP 기본2편. 브라우져3편. AJAX4편. 추가 프로토콜5편. 보안6편. 성능 

웹 개발HTTP네트워크쿠키

6학년 마지막 프로젝트를 도와주세요!!!

안녕하세요, 저는 초등학교 6학년 여학생입니다.저는 IB PYP 교육과정을 학교에서 배우고 있습니다. 9월 26일, 저희는 친구들(2명)과 함께 저희 스스로 모든 탐구과정을 끝내야 합니다. 그리고 저희는 200명의 교사분들이 보러 와주시는 전시회를 진행합니다.하지만 그 전에 저희는 연극을 해야하고 저희는 마지막 단계를 맡았습니다. 다른 아이들은 벌써 대본을 다 써가는데 저희 팀은 그 단계까지 가지 못해 대본을 쓰지 못했습니다. 저희의 마지막 단계는 action 실행하기 입니다. 앞에서의 모든 탐구과정을 실천하는 단계이죠. 그래서 저희는 최대한 빨리 action을 정했고 이제 실행하는 일만 남았습니다.제가 부탁드릴 일은, 간단한 설문조사입니다.아래 문항을 보고 답을 남겨주신다면 정말 감사하겠습니다.Q. 어떤 반려동물 키우고 그 반려동물의 종은 무엇인가요?(예: 강아지, 말티즈)Q. 반려동물이 요즘 기후위기(날씨등) 때문에 힘들어하거나 아픈 경험이 있으신가요?(예: 날씨가 더워 강아지가 열사병에 걸렸다.)그리고.... 염치없지만 한가지 부탁을 더 드릴 것이 있습니다.저희는 버려지는 반려동물, 기후위기 때문에 힘든 반려동물을 위해 키링을 만들어 팔고 그 돈으로 기부를 하고 싶습니다.저희가 키링을 잘 만들지는 못했지만 기부하는 마음으로 동참해 주신다면 너무나도 감사하겠습니다.키링은 하나에 2000원입니다. 어쩌면, 6학년의 가장 큰 행사이자 마지막 프로젝트인 저희의 전시회를 도와주세요!(키링 사진은 답글로 보내드릴게요!!! 인스타 계정도 알려드릴테니 거기서 구매해주세요! ><)

김정환

새로고침 없는 웹, Fetch(AJAX)

인터넷 초창기 웹페이지는 단순했습니다. 버튼을 클릭하거나 폼을 입력하면, 브라우져는 페이지 전체를 새로 불러와 다음 화면을 보여줍니다. 로그인이나 댓글을 작성 할 때마다 화면이 깜박이던 시절이었죠.오늘날 웹서비스는 다릅니다. 메신저, 지도, 쇼핑몰, 은행 앱까지.화면을 깜박이지 않고도 매끄럽게 데이터가 오고 가는데요. 이런 경험을 가능케 만든 핵심 기술이 바로 AJAX(Asynchronous JavaScript and XML)입니다. 폼 요청폼(form) 태그를 통한 전통적인 데이터 전송 방식을 생각해 볼까요.사용자가 값을 입력하고 제출 버튼을 누르면브라우져는 페이지 전체를 지우고 새로운 요청을 보냅니다.서버가 응답을 보내면 브라우져는 다시 전체 페이지를 그립니다. 이 방식은 단순하지만 그만큼 느립니다. 작은 동작 하나에도 전체 화면을 갈아엎는 구조이기 때문이에요. AJAX의 등장화면은 그대로 두고 데이터만 주고 받을 수 있다면 어떨까요? 필요한 부분만 바꾸어 훨씬 매끄러운 사용감을 제공할 수 있을 겁니다.이런 방식을 가능하게 해주는 것이 바로 AJAX입니다.Asynchronous: 페이지 전체를 동시에 요청하지 않고, 데이터만 비동기로 주고 받습니다.JavaScript: HTML form 대신 자바스크립트 코드로 네트워크 요청을 보냅니다.XML: 초창기에는 데이터를 XML로 주고 받았지만, 지금은 가벼운 JSON이 거의 표준입니다. AJAX를 구현한 첫 인터페이스는 XMLHttpRequest(XHR) 객체였습니다.오래된 방식이지만 여전히 많은 브라우져에서 동작합니다.콜백 기반 인터페이스라 다루기 번거롭지만, 과거에는 이것이 표준이었습니다. 시간이 지나면서 Fetch API가 등장합니다.fetch() 함수 하나로 간단히 네트워크 요청을 만들 수 있습니다.프로미스(Promise) 기반이라 비동기 로직을 깔금하게 작성할 수 있습니다.거의 모든 브라우져가 지원합니다. 특별히 구형 브라우져를 신경 쓰지 않는 다면, fetch 하나만으로도 충분합니다. 데이터 형식AJAX 요청은 단순히 "보냈다, 받았다"에서 그치지 않습니다. 어떤 형식으로 데이터를 주고 받느냐도 중요합니다.폼 데이터(FormData, urlencoded): HTML form과 유사한 방식으로, 로그인이나 간단한 값을 전달할 때  적합합니다.JSON: 구조화된 데이터를 교환할 때 널리 쓰입니다. 읽고 쓰기 쉽고, 자바스크립트 객체와 호환성이 높아 표준처럼 사용합니다.Blob, ArrayBuffer: 이미지, 영상 같은 대용량 바이너리를 전송할 때 사용합니다. 응답(Response) 다루기요청을 받은 서버는 응답(Response)을 보내는데요, fetch는 응답을 프라미스로 감싸서 반환합니다.status, ok:  응답이 성공했는지를 나타내는 숫자 혹은 불리언 값headers:  응답 헤더를 담은 객체text(), json(), blob(): 응답 본문을 다양한 형식으로 읽기 위한 함수 예를 들어, 로그인 API 서버가 JSON을 응답하면, 프론트엔드에서는 json() 함수를 통해 자바스크립트 객체로 변환해 사용할 수 있습니다.const jsonData = await response.json(); jsonData // { authenticated: true }이 과정을 통해 화면 일부만 바꾸거나, 사용자에게 알림을 띄우는 식으로 유연한 인터랙션을 만들 수 있습니다. AJAX가 바꾼 웹생각해보면, 우리가 매일 쓰는 웹 서비스의 매끄러움은 대부분 AJAX 덕분입니다.SNS에서 좋아요를 눌러도 화면이 리프레시되지 않는 것지도를 드래그할 때 매끄럽게 새로운 영역이 나타나는 것쇼핑몰 장바구니가 즉시 업데이트되는 것 모두 AJAX와 Fetch API가 만들어낸 새로고침 없는 웹의 풍경입니다. 결론HTTP는 단순히 "요청과 응답" 으로만 설계된 프로토콜이었습니다. 하지만 AJAX가 등장하면서 웹은 앱(APP)처럼 반응성이 좋아지게 됩니다. 웹이 이렇게 변화한 배경과 더불어 아래 주제들을 먼저 익혀 두신다면, 훨씬 폭 넓은 문제 해결 역량을 갖추실 수 있을 겁니다.폼 요청과 AJAX의 차이Fetch API의 기본 사용법다양한 데이터 형식 (JSON, FormData 등)응답 처리 (Response 객체) 더 깊게 이해하고 싶으시다면 제가 준비한 강의  「웹 개발의 핵심, HTTP 완벽 가이드」  3편을 참고해 보세요. 한 단계 성장한 개발자로 나아가는 좋은 출발점이 될 것입니다.이 강의에서 다루는 내용1편. HTTP 기본2편. 브라우져3편. AJAX4편. 추가 프로토콜5편. 보안6편. 성능

웹 개발HTTP네트워크AJAXFETCH

김정환

HTTP를 이해하기 위한 첫 단추, URL

멀리서 단조로워 보이는 산도 한 걸음 다가가면 수많은 나무와 풀로 어우러져 있습니다. 인터넷 또한 그런 것 같습니다. 겉으로는 단일한 공간처럼 보이지만, 그 안에는 수없이 다양한 프로토콜과 데이터로 얽혀 있습니다.웹은 인터넷이라는 단단한 토양을 기반으로 움직이는데요. 잘만 활용하면 멋진 기능을 금방 만들어 낼 수 있습니다. 만약 원리에 대한 이해를 조금 더 넓히신다면, 훨씬 안정적이고 빠른 제품을 만드실 수 있을겁니다.이 글에서는 인터넷을 이루는 기초 요소 중 'URL'이라 부르는 주소에 대해 소개해 드리겠습니다. URL브라우져가 서버로 요청을 보낼 때 URL을 사용합니다. 검색창에 입력하는 그것이 말이죠. 서버를 찾기 위한 '전화번호'라고 생각해도 좋습니다.URL은 일정한 규칙을 갖고 있는데요. 이제부터 이 규칙을 하나씩 소개해 드릴게요.프로토콜://도메인:포트/경로?쿼리문자열#앵커 프로토콜'프로토콜을 맞춘다'라고 표현할 때는, '대화의 규칙을 정하자'라는 뜻입니다. URL 맨 앞에 있는 이 프로토콜(protocol)이 규칙의 종류를 구분하는 요소입니다.http:: HTML 문서를 가리키는 URL입니다. 브라우져는 HTML 문서를 다운로드하고 이것을 사람이 볼 수 있는 형태로 보여줄 거에요.mailto:: 링크를 클릭했는데 메일 앱이 실행된 적이 있나요? 바로 이 프로토콜로 시작하는 URL입니다.tel:: 전화가 걸린다면 당황하실지도 모릅니다. 브라우져는 이 프로토콜로 시작하는 URL을 전화 앱과 함께 실행합니다. 도메인프로토콜에 이어 도메인(domain)은 서버의 위치를 나타내는 규칙입니다. 브라우져는 이 도메인이 가리키는 IP 주소를 찾기 위해 DNS(Domain Name Server)에 질의하기도 합니다.예를 들면 google.com, naver.com 같은 거에요. 각 각 구글 서버, 네이버 서버 위치를 가리킵니다. 직접 서버를 실행해 개발할 때는 "이 컴퓨터"를 가리키는 localhost라는 도메인도 자주 만나게 되실 거에요.도메인은 인터넷이라는 세상에서 국가를 가리키는 역할을 합니다. 포트도메인에 해당하는 서버를 찾았다면, 그 안에서 실행되고 있는 프로그램에 접속할 차례입니다. 한 국가에 들어가기 위해 항구를 찾듯이, 포트(port)는 서버 안에서 실행 중인 프로그램을 식별하는 규칙입니다.무려 65,536개(2^16)개의 포트를 가지고 있는데요, 클라이언트는 이 중 하나를 골라서 들어 갑니다. 마치 한국에 들어올 때 인천항이나 부산항을 선택하는 것처럼요.잘 알려진 포트: 0~1023 구간으로, 운영제제만 쓸 수 있는 특별한 포트입니다. (80: HTTP, 22: SSH)등록된 포트: 1024~49151 구간으로, 여러 애플리케이션이 관례적으로 사용하는 포트에요. 보통 개발 환경에서 자주 사용합니다. (8000: 웹 개발용)동적 포트: 49152~65535 구간으로, 일시적으로 할당되는 포트입니다. (예를 들어 클라이언트가 서버의 80 포트로 요청을 보내면, 서버는 이 구간에 속하는 임시 포트를 활용해 클라이언트에 응답을 전달합니다.) 경로프로그램은 여러가지 형태의 파일을 제공하는데요, 이 파일을 식별하는 규칙이 경로(path)입니다.브라우져는 이걸 통해 "이 파일을 주세요"라고 서버에게 요청할 수 있어요. 서버가 이 파일을 찾아서 보내주면, 브라우져는 그것을 화면에 표시할 겁니다./index.html → "웹사이트 첫 화면을 주세요"/images/logo.jpg → "로고 이미지를 주세요"/css/styles.css → "스타일시트 파일을 주세요"집을 찾기 위해 나라와 도시(도메인과 포트)를 찾았다면, 경로는 특정 건물을 가리키는 셈이지요. 쿼리 문자열과 앵커때로는 서버에 추가적인 정보를 전달할 필요가 있는데, 쿼리 문자열(querystring)이 이 역할을 합니다.위치: 경로 뒤에 '?' 기호와 함께 작성합니다.형식: "키=값"형태로 데이터를 표현합니다. (예: '?query=검색어' 검색결과 페이지 요청)배가 특정 지점에 머물도록 닻을 내리 듯, 앵커(anchor)는 HTML 문서안의 특정 위치를 가리키는 역할을 합니다.위치: 경로 혹은 쿼리 문자열 뒤에 '#' 기호와 함께 작성합니다.id 값 사용: HTML 문서에서 요소에 부여한 id 값을 참조합니다. (예: #post-title)        정리지금까지 HTTP 핵심 요소인 URL에 대해 살펴보았습니다. 이것은 인터넷 상의 자원을 식별하는 주소이자, 브라우져가 서버와 대화하기 위한 출발점입니다.브라우져는 단순히 URL만 전달하는 것이 아니라, 헤더와 본문을 추가해 하나의 요청(Request)를 만듭니다. 이 요청을 받은 서버는 자원을 찾아낸 뒤, 상태 코드, 헤더, 분문을 추가해 응답(Response)로 돌려줍니다. 이렇게 요청과 응답을 수없이 주고 받으며 우리가 매일 사용하는 웹이 움직이는 것이죠.더 깊이 있는 이해를 원하신다면 제가 준비한 강의, 「웹 개발의 핵심, HTTP 완벽 마스터하기!」 1편을 참고해 보시면 도움이 될 것입니다. 웹을 처음 배우시는 분에게는 든든한 길잡이가, 경험자에게는 기초를 재정립하는 기회가 될 것입니다.이 강의에서 다루는 내용1편. HTTP 기본2편. 브라우져3편. AJAX4편. 추가 프로토콜5편. 보안6편. 성능 

웹 개발HTTP네트워크URL

맷수달

'독립이어야만 통계적으로 유의미하다'는 필요조건의 착각을 명제·술어논리로 반증하기

0. 독립적인 사건들이라야 통계적으로 의미가 있다.많은 사람들이 이렇게 말합니다."자료가 독립적이어야만 통계가 의미가 있다.""독립적이지 않다면 쓸모 없다."결론부터 말하면 이러한 문장들은 거짓입니다. 독립성(independence)은 분석을 쉽게 만들어 주는 편리한 가정일 뿐, 추정·검정·예측의 타당성을 보장하는 필요조건은 아닙니다. 이 글은 그 주장을 명제논리와 술어논리로 형식화해 "필요조건이 아니다"가 정확히 무슨 뜻인지 구체적으로 보여 줍니다. 그리고 그 주장을 뒷받침하는 "증인(witness)" 사례도 제시합니다.1. 논의의 준비: 기호와 뜻원자 명제(참/거짓):I: "데이터(혹은 모형)에서 독립성이 성립한다."E: "선택한 절차가 타당한 추정을 제공한다."T: "선택한 절차가 유효한 검정을 제공한다." (설계된 유의수준 충족)P: "선택한 절차가 유효한 예측을 제공한다."우리가 말하는 "통계적 의미"를M ≡ E ∨ T ∨ P로 묶겠습니다. 즉, 추정·검정·예측 중 하나 이상이 제대로 작동한다는 뜻입니다.2. 명제논리로 본 "필요조건이 아니다""I가 M의 필요조건이다"의 형식은M ⇒ I.즉 M이면 반드시 I여야 한다."필요조건이 아니다"는 위 명제의 부정입니다:¬(M ⇒ I).고전 항등식 ¬(P ⇒ Q)≡P∧¬Q를 쓰면  ¬(M ⇒ I) ≡ M∧¬I라는 결론이 나옵니다.해석: "독립성은 필요조건이 아니다"란 말은,'통계적 의미 M은 성립하지만 독립성 I은 깨지는' 상황이 하나라도 존재함을 뜻합니다.필요조건 논쟁은 거창해 보이지만, 사실상 "반례 하나면 끝"이라는 말과 동치입니다.같은 논리를 각 E,T,P에 적용하면¬(E ⇒ I) ⁣ ⟺ ⁣E∧¬I, ¬(T ⇒ I) ⁣ ⟺ ⁣T∧¬I, ¬(P ⇒ I) ⁣ ⟺ ⁣P∧¬I.즉 추정/검정/예측 각각에 대해 "독립성 없이도 된다"는 반례가 하나라도 있으면, 필요조건 주장은 무너집니다.3. 술어논리(양화)와 집합론으로 본 정밀 해석분석 세팅들의 집합을 S라 두고, 각 세팅 s∈S는데이터 생성 메커니즘 D와 절차 Π의 쌍 s=(D,Π)라고 합시다.술어:I(s): 세팅 s에서 독립성이 성립E(s),T(s),P(s): 각각 s에서 추정/검정/예측의 타당성M(s)≡E(s)∨T(s)∨P(s)M(s)그때"I는 M의 필요조건" ⟺ ∀s∈S, M(s) ⇒ I(s).따라서 “필요조건이 아니다” ⟺ ∃s*∈S: M(s*)∧¬I(s*)입니다. 즉 단 하나의 증인 s* 만으로 결론이 납니다.집합론 표기로는I:={s:I(s)},M:={s:M(s)}.필요조건 ⟺ M⊆I.필요조건 아님 ⟺ M⊈I ⟺ M∖I≠∅.4. 증인(Witness) 제시: M∧¬I의 구체 사례실제 통계에서 자주 등장하는 사례들을 짚어 보겠습니다. 4.1 추정이 유효하지만 독립이 깨진다: 시계열(AR(1))4.2 검정이 유효하지만 독립이 깨진다: HAC(뉴이–웨스트)4.3 예측이 유효하지만 독립이 깨진다: 마르코프 체인4.4 표본추출: 복원 없는 단순무작위추출(SRSWOR)즉, 실제 통계에서 M∧¬I는 드문 예외가 아니라 전혀 아닙니다.5. 흔한 오해와 정리오해1: "독립이 아니면 통계가 다 망가진다."답변: 망가지는 건 대개 독립을 전제한 분산 공식과 유의수준 계산입니다. 해결은 간단합니다. 의존 구조를 모델링하거나(시계열·공간·군집), 강건 분산(HAC, 군집화-강건, 블록부트스트랩 등)으로 교정하면 됩니다.오해2: "그럼 독립은 쓸모없다?"답변: 절대 그렇지 않습니다. 독립은 많은 교과서 공식과 정리를 단순화하는 강력한 충분조건입니다. 단지 필요조건은 아닙니다. 즉, 다른 조건들(혼합, 에르고딕성, 교환가능성, 마팅게일 차분 등)로도 M을 확보할 수 있다는 뜻입니다.6. 논리식 요약명제논리:“I는 M의 필요조건이 아니다” ⟺ ¬(M ⇒ I) ⟺ M∧¬I (반례 하나면 충분)술어논리:∀s [M(s) ⇒ I(s)]가 거짓 ⟺ ∃s* [M(s*)∧¬I(s*)] (증인의 존재)집합론:M⊈I ⟺ M∖I≠∅8. 맺음말독립성은 무적이 아닙니다. 논리의 언어로 말하면, 독립성은 M의 충분조건으로 자주 쓰이지만, 필요조건은 아닙니다. 그리고 그 사실은 M∧¬I인 증인의 존재로 간단하게 증명 할 수 있습니다. 

수학수학통계학논리학증인독립성명제논리술어논리데이터과학맷수달송주은

양성빈(Robert)

코틀린 상속 간 주의점

코틀린 넌 왜 나에게 이런 시련을 주는건가.. 연휴기간 동안 코틀린 상속 관련 공부를 진행하다가 재미난 이슈가 있어서 한번 공유드릴려구요!아래의 2개의 클래스가 있습니다. 보시는 바와 같이 Child class가 Parent 클래스를 상속받고 있지요.package me.sungbin.troubleshooting open class Parent( open val number: String = "100" ) { init { println("Parent Call") println(number) } }package me.sungbin.troubleshooting class Child( override val number: String, ): Parent() { init { println("Child Call") } }그리고 아래와 같이 main 함수에서 Child class 생성자를 호출합니다.package me.sungbin.troubleshooting fun main() { Child("300") } 그러면 결과는 어떻게 찍힐까요?저는 처음에 아래와 같이 생각했습니다. 부모 클래스의 생성자가 호출되면서 number값을 출력할 때 오버라이딩 되었으니 자식 클래스의 number값을 호출하지 않을까? 그래서 아래와 같이 생각했었습니다.Parent Class 300 Child Class그런데 실제 결과는 달랐습니다.Parent Class null Child Class오잉? 이상하지 않은가요? 그래서 자바코드로 디컴파일 해보고 공식문서를 찾아본 결과 정답에 대한 솔루션을 알 수 있었습니다.공식문서: 공식 문서 링크왜 그런가 싶더니 코틀린 공식 문서에서 아래와 같이 이야기 하더라구요!파생 클래스의 새 인스턴스를 생성하는 동안 기본 클래스 초기화는 첫 번째 단계로 수행됩니다(기본 클래스 생성자의 인수 평가에 의해서만 선행됨). 즉, 파생 클래스의 초기화 논리가 실행되기 전에 수행됩니다.코틀린의 공식문서의 해당 내용을 번역해보았습니다.즉, 기본 클래스 생성자가 실행될 때 파생 클래스에서 선언되거나 재정의된 속성은 아직 초기화되지 않은 상태입니다. 기본 클래스 초기화 로직에서 이러한 속성을 사용하면 (직접적으로든 다른 재정의된 멤버 구현을 통해 간접적으로든 ) 잘못된 동작이나 런타임 오류가 발생할 수 있습니다. 따라서 기본 클래스를 설계할 때는 생성자, 속성 초기화자 또는 블록에 멤버를 open사용하지 않는 것이 좋습니다.즉, 요약 하자면 아래와 같을 것입니다.자식 생성자를 호출한다 -> 그 전에 부모 생성자를 호출하려고 할 때 먼저 init block을 호출한다. number 값을 출력하려고 보니 재정의되어서 자식 클래스에 접근한다. -> 그런데 자식 클래스 생성자 전이니 해당 값은 알 수 없다 -> 따라서 null로 출력한다. 그런데 저는 여기서 또 의문이 들었습니다. 분명 선언된 것은 non-nullable 타입인데 어떻게 null이 나오는거야? 또한, 신기한 것은 타입을 String -> Int로 변경 시에는 기본 값 0이 나오더라구요! 그래서 또 한번 30분간 연구를 해보았습니다. 그 덕에 조금 답을 얻을 수 있었는데요.초기화 순서를 먼저 보면 좋을 것 같아요.Child("300") 호출 → Parent() 생성자 호출(슈퍼 생성자 호출이 먼저).Parent의 init가 실행되며 println(number) 수행.number는 open 프로퍼티라서 가상 디스패치로 Child.number getter를 타게 됩니다.하지만 이 시점에는 Child.number의 백킹 필드가 아직 할당 전이므로, 원시 타입 Int → JVM 기본값 0, 레퍼런스 타입(예: String) → JVM 기본값 null이 반환된다고 하더라구요.Kotlin의 Non-null 보장도 생성 중(super 생성자 실행 중)에는 예외적으로 깨질 수 있습니다.그래서 값이 다르게 나왔다고 하더라구요!후기해당 과정은 정말 1시간 동안 연구하면서 공식문서를 뒤져보고 gpt한테도 물어보면서 얻은 답변들이였습니다. 그래서 뭔가 재미나면서도 다른 분들께 공유를 드리면 좋을 것 같아서 해당 포스팅을 진행하게 되었습니다. 이렇게 연구하게 된것도 어찌보면 인프런에서 진행하는 '향로' 와 함께하는 추석 완강 챌린지 덕도 큰 것 같습니다. 연휴가 이제 거의 절반을 지난 것 같은데 남은 연휴기간도 화이팅입니다!

백엔드kotlin

Masocampus

[마소캠퍼스 GEN AI 인사이트] 이 바나나, 그냥 바나나 아님. AI임.

디자인 툴의 판도를 바꿀 AI가 등장했어요! 이름도 귀여운 ‘나노 바나나’🍌 정체가 공개되기 전부터 AI 커뮤니티를 술렁이게 한 이 모델은,사실 구글의 Gemini 2.5 Flash Image였답니다.이제는 포토샵 없이도 고퀄 이미지 제작이 가능한 시대예요!2025년 8월, 나노 바나나는 혜성처럼 등장해 엄청난 주목을 받았죠.모두가 궁금해했던 이 모델은 구글의 비밀 병기, Gemini 2.5 Flash Image!AI 이미지 기술의 다음 세대를 열었답니다✨🔹 2025년 8월 LMArena에 첫 등장🔹 압도적인 이미지 품질과 사물 이해력🔹 구글이 직접 8월 25일 정체를 공식 발표출시 전부터 전문가들 사이에서 입소문이 자자했던 이유, 충분하죠?Gemini 2.5는 기존 AI들이 못 해내던 ‘일관성 유지’가 강점이에요. ✔ 캐릭터의 외형이 계속 유지되고✔ “배경 흐리게”, “팔 지워줘” 같은 말로 바로 편집✔ 여러 이미지 융합도 OK✔ 같은 스타일 템플릿도 자동 적용! 이제는 정말 자연스러운 이미지 제작이 가능해졌어요😊성능 면에서도 타 AI들을 압도했어요! 🌟 LMArena 벤치마크 최고 점수🌟 이미지 편집 & Text-to-Image 모두 리더보드 1위🌟 빠르게 이미지 생성까지! 퀄리티와 속도를 모두 잡은 모델이라니, 이건 혁신이죠👏누구나 쉽게 사용할 수 있어요! 👨‍💻 개발자: Gemini API, Google AI Studio에서 사용 가능🏢 기업: Vertex AI를 통해 제공🆓 무료 사용자: 하루 100회 사용 가능💰 유료 사용자: 월 단위로 1000회 이상 사용 가능(1이미지 = 1290 토큰 / 100만 토큰 = $30) 가격도 꽤 현실적이죠?✔ 모든 이미지에 디지털 워터마크(SynthID) 삽입✔ 데이터셋 필터링과 라벨링으로 유해 콘텐츠 최소화✔레드팀 테스트를 통해 콘텐츠 안전성 철저 확인신뢰할 수 있는 AI 이미지 생성 도구로 진화 중이에요!아직은 몇 가지 한계도 있어요:😅 작은 얼굴 표현이나 철자 인식은 미흡🤖 캐릭터 일관성도 간혹 깨짐 하지만 구글은 장문 텍스트 처리, 사실적 묘사 등 꾸준히 개선 중이에요.점점 더 똑똑해지는 ‘나노 바나나’ 기대돼요!활용도도 무궁무진해요!📢 광고 이미지📚 교재용 캐릭터 삽화🎮 게임용 캐릭터 시트🛒 전자상거래용 제품 이미지이미 기업들도 본격적으로 활용을 시작했답니다🔥외형 유지되는 AI? 일관성도 걱정 없어요!마케터에겐 시간 절약 꿀템!실무에 바로 적용 가능한 기술이라니, 이건 안 쓸 수 없겠죠?새로운 시도와 성장은 언제나 도전에서 시작돼요.마소캠퍼스는 여러분이 똑똑하게 일할 수 있도록 도와주는 성장 파트너예요 💡지금 이 순간에도 더 나은 내일을 준비하고 있다면, 마소와 함께 해보세요 😊 📌 관련 강의 <AI 에이전트 입문 치트키, Claude MCP로 끝내는 업무 자동화>AI를 내 업무에 자유자재로 써먹는똑똑한 직장인이 되고 싶다면?>> 강의 바로 가기 

AI 크리에이티브나노바나나GeminiFlashImage구글AI생성형AI이미지AIAI디자인툴디지털콘텐츠AI편집AI툴추천AI캐릭터

맷수달

한국 데이터 산업계에서 IML이 덜 언급되는 이유와 그 함의

미국에서는 널리 회자되지만, 한국 데이터 산업계에서는 이상할 만큼 언급 빈도가 낮은 책이 있다. Christoph Molnar의 'Interpretable Machine Learning'(이하 IML)이다. 굳이 "산업계"라고 한 이유는, 학계에서는 비교적 널리 읽히는 것으로 보이기 때문이다.흔히 드는 설명은 이렇다. 책 속 수식과 개념의 밀도가 데이터 분석가에게는 다소 높게 느껴진다는 것. 그러나 IML이 요구하는 수학은 대체로 이공계 학부 1–3학년 수준의 선형대수·확률·기초 최적화이며, 체계적으로 접근하면 충분히 소화 가능하다. 그렇다면 "모든 분석가가 이공계 출신은 아닌데, 여전히 장벽이 높지 않은가?"라는 반론이 따라온다. 핵심은 분명하다. 공짜 점심은 없다.여기서 말하는 ‘공짜 점심’은 학습 비용 없이 실무 역량을 얻을 수 없다는 상식적 주장이지, 최적화 이론의 No Free Lunch 정리 그 자체를 말하는 것은 아니다.한국 산업계에서 IML이 덜 언급되는 배경에는 여러 요인이 겹쳐 있다.1.도구 의존성: 라이브러리가 기본 제공하는 SHAP/Feature Importance 등을 코드 몇 줄로 호출하면 결과는 손쉽게 얻는다. 그러나 그 과정에서 가정(독립성·배경 데이터 선택), 한계(불안정성·상관 편향), 반례(비현실적 조합·오프매니폴드 설명)를 판단하는 역량이 뒤로 밀린다.예: PD(Partial Dependence)는 피처 상관이 클 때 존재하지 않는 조합을 평균할 수 있고, ALE가 이를 완화한다. LIME은 지역 근사 특성상 샘플링·시드에 민감하며, SHAP은 배경 분포 선택과 피처 상관 구조에 따라 귀속값이 크게 달라질 수 있다.    2.교육 경로의 공백: 비이공계 전공자가 분석가가 되는 경로는 많지만, 그 사이 수학적 기초를 보강하는 체계는 상대적으로 약하다. “모형을 돌리는 법”은 빠르게 배우지만, “왜 그런 결과가 나왔는지”를 규명하는 해석·검증의 언어가 부족해진다.    3.직무 정의와 우선순위의 차이: 미국은 채용 단계에서부터 통계·ML·수학적 문해력을 전제하는 포지션이 많다. 반면 한국은 리포팅·BI 중심 분석의 비중이 높은 팀도 적지 않아, IML의 필요성이 조직 구조상 낮게 관찰될 수 있다. 반대로 금융·의료·공공처럼 규제와 책임이 강한 도메인에선 IML의 실익이 크다. 4.제품화 압력: 빠른 배포·AB 테스트·지표 운영이 1차 목표인 팀에서는, 사후 설명기법의 신뢰성·재현성 검증에 시간 투입이 어렵다. 그 결과 "설명"이 전달물로만 소비되고, 품질 보증 도구로 기능하지 못한다.이 지점에서 개념을 분리해 두면 좋다.해석가능성(interpretability): 모델이 구조적으로 사람이 이해 가능한가(선형 모형, GAM, 단조 제약 모델, 규칙 기반 등).설명가능성(explainability): 사후(post‑hoc) 기법으로 블랙박스의 의사결정을 해석 가능한 형태로 근사·요약하는가(LIME, SHAP, PD/ICE, ALE, counterfactual(반사실) 등).IML이 요구하는 수학은 실제로 다음과 대응된다.LIME: 지역(linear) 근사, 가중 최소제곱 → 선형대수학·회귀분석 기초.SHAP: 협력게임 이론의 공정 분배, 조건부 기댓값 → 확률론·조합론 기초.PD/ICE/ALE: 기댓값·적분, 상호작용 해석 → 확률론·미적분학 기초.Counterfactual: 제약하 최적화, 거리 측도, 실현가능성 → 최적화 기초.개인적 경험으로도, 현업 분석 경험이 전무했을 때조차 IML을 정독한 덕에 해석과 검증의 공용어로 소통할 수 있었고, 팀의 분석과 결정을 한 단계 전진시키는 데 기여할 수 있었다.한국 시장 역시 해석가능성·설명가능성의 기본 소양을 전제하는 방향으로 수렴할 가능성이 크다. 선택은 각자의 몫이다. 다만 그 선택이 학습 비용을 뒤로 미루는 선택이라면, 결국 품질·신뢰·책임의 요구 앞에서 더 큰 비용으로 돌아온다. 그런 의미에서 IML은 비용 대비 효율이 뛰어난 입문서이자 실무서다.마지막으로, 공학용 계산기가 미적분을 해결해준 지는 오래고, 요즘은 LLM도 상당량의 수식을 다룬다. 그러나 결과를 선택·검증·해석하는 사람은 결국 개념을 이해한 사람이다. 도구는 계산을 대신할 수 있어도, 판단은 대체되지 않는다.결론IML을 미루게 만드는 장벽은 "수식의 양"이 아니라 "가정·한계·반례를 판별하는 개념적 근육"의 부재다. 그 근육을 키우는 비용은 피할 수 없고, IML은 그 비용을 가장 싸게 치르는 길 중 하나다.

데이터 분석데이터과학데이터분석해석가능성설명가능성수학산업계이공계비전공맷수달송주은

제어쟁이

MCU 데이터시트 읽는 5가지 방법 – 신입 임베디드 개발자 필독

안녕하세요 인사이드 임베디드의 제어쟁이입니다.​“데이터시트? 스펙 적어놓은 두꺼운 PDF 아닌가요?”취준생·대학생분들에게 가장 많이 듣는 질문입니다. 결론부터 말씀드리면, MCU 데이터시트는 펌웨어와 회로, 디버깅까지 아우르는 ‘개발의 근거 문서’입니다.같은 칩을 써도 누군가는 하루만에 기능 구현을 하고, 누군가는 며칠을 헤매는 차이는 결국 문서를 어떻게 해석하느냐에서 갈립니다. 오늘은 신입이 데이터를 빠르게 골라 읽고 바로 실무에 꽂아 넣는 방법을 단계별로 안내드리겠습니다. 중간중간 AI를 공부 파트너로 붙여 효율을 2배로 끌어올리는 요령도 함께 담았습니다.첫째, 목차를 파악하는 습관부터 들이세요.데이터시트를 처음부터 정독하려 들면 500페이지에서 지칩니다. 신입에게 필요한 건 “어디에 무엇이 있는지”를 3분 안에 잡아내는 지도 그리기입니다. 저는 먼저 목차를 스캔하며 표시를 합니다. 핀 설명과 전기적 특성, 클록/타이밍, 플래시 대기(Flash Latency), 그리고 제가 사용할 주변장치(ADC, 타이머, USART, SPI, I2C, CAN) 챕터의 페이지 번호를 노트에 적어둡니다. 이후 검색(CTRL+F)은 키워드와 함께 페이지 범위를 지정해 들어가면 속도가 훨씬 빨라집니다.STM32 레퍼런스 메뉴얼​둘째, 핀맵(Pinout)과 대체기능(Alternate Function)을 회로 전에 확정해야 합니다.UART를 두 개 쓰고 SPI도 써야 하는데 모두 같은 포트로 겹치면 곧바로 막힙니다. 데이터시트의 핀 기능 표에서 각 핀의 기본 모드, 대체기능, 아날로그/디지털 겸용 여부를 보고, 필요한 기능 조합이 실제 핀 배치로 가능한지 먼저 검토하세요. 이때 포트 스피드, 풀업/풀다운, 오픈드레인 가능 여부도 같이 확인하면 좋습니다.툴이 제공하는 핀 설정 툴만 믿지 말고, 최종 근거는 데이터시트라는 원칙을 잊지 마세요. 핀 충돌을 한 번 사전에 제거하면, 일정 지연을 방지할 수 있습니다.핀맵 확인​셋째, 전기적 특성(Electrical Characteristics)을 반드시 확인해야합니다..VDD 동작 범위, I/O 허용 전압, 입력 임계치(VOH/VOL, VIH/VIL), 단일 핀과 포트 그룹의 최대 소싱/싱킹 전류, 누설 전류, ESD 등급, 온도 범위… 이 표들을 무시하면 디버깅은 끝없는 미궁이 됩니다. LED를 여러 개 물렸는데 한 포트에 합산 전류 제한이 걸려 밝기가 들쭉날쭉하거나, 5V 레벨 신호를 3.3V MCU에 직결해 미세하게 망가뜨리는 일은 너무 흔합니다. 또한 저전력 모드를 쓸 계획이라면 각 모드의 소비전류, 웨이크업 소스의 제약사항, LDO/SMPS 사용 시 안정성 조건을 꼭 체크하세요. 경계를 알수록 설계의 자유도가 커집니다.핀 절대정격​넷째, 클록 트리와 타이밍을 이해하면 펌웨어의 절반은 먹고 들어갑니다.HSI/HSE, PLL 설정을 통해 시스템 클록이 어떻게 분배되고, 그 분주가 타이머, ADC 샘플링, 통신 보트레이트에 어떤 상관을 가지는지 그림으로 연결해 보세요. 예를 들어 PWM 해상도를 올리려면 타이머 클록과 ARR, PSC의 조합을 수치로 계산해야 하고, ADC는 샘플링 시간과 변환 시간이 클록에 묶여 있습니다. 데이터시트와 레퍼런스 매뉴얼의 클록-주변장치-타이밍 이해하면, “왜 여기서 이 속도가 안 나오는지”를 수식으로 설명하고 바로 해결할 수 있습니다.​다섯째, 레지스터 이해는 필수적입니다.각 레지스터의 주소, 초기값(reset value), R/W 속성, W1C(Write 1 to Clear) 같은 특수 동작, Reserved 비트는 반드시 0으로 유지해야 한다는 경고까지 꼼꼼히 봐야 합니다. 초보가 가장 많이 하는 실수는 데이터시트에서 한 비트만 보고 나머지 상호의존 비트를 놓치는 것, 그리고 Enable을 먼저 올려놓고 설정을 바꿔 글리치를 만드는 것입니다. 저는 초기화 루틴을 작성할 때, 데이터시트의 표를 그대로 주석으로 옮겨 코드 옆에 두고, 설정-검증-활성화 순서로 검토합니다. HAL이든 LL이든, 결국 레지스터 레벨 이해가 빠르면 원인 지점으로 곧장 들어가 시간을 압축할 수 있습니다.여기까지가 문서를 ‘빠르게, 정확히’ 읽기 위한 구조이고, 이제 AI로 학습 효율을 끌어올리는 방법을 말씀드릴게요.​첫째, 데이터시트 PDF를 바탕으로 개인 요약본을 만듭니다. LLM에게 “핀 기능 표에서 UART/SPI/I2C 가능한 핀만 추출해 표를 만들어줘”라고 프롬프트하면 초안을 즉시 얻을 수 있습니다. 다만 AI는 환각이 있을 수 있으니, 반드시 페이지 번호와 원문 문구를 근거로 다시 대조 하세요. (그래야 실력도 상승합니다.)​둘째, 디버깅에 적극 활용하세요. 오실로스코프 캡처와 에러 현상을 텍스트로 설명해 “가능한 원인 5가지와 확인 절차”를 받아 체크리스트로 쓰면, 사고가 구조화됩니다. 이 모든 과정에서 최종 판단은 항상 데이터시트·레퍼런스 매뉴얼이 하며, AI는 속도를 올려주는 보조라는 점을 잊지 않는 것이 중요합니다.​아직 초보자 분들에게는 사실 오늘 제가 작성한 글에 너무나도 많은 기술 용어들이 혼재하여, 이해하기 쉽지 않으실 수도 있습니다. 하지만 걱정하지 않으셔도 됩니다. 처음엔 모든 내용을 완벽히 이해하는 것이 아니라, 용어를 익히고 흐름을 잡는 것만으로도 충분합니다. 몇 번이고 데이터시트를 펼쳐보고, 하나씩 찾아가며 읽다 보면 어느 순간 익숙해져 있는 자신을 발견하게 될 겁니다.

임베디드 · IoT임베디드MCU데이터시트임베디드개발자

인공지능과 추천 시스템 강의 노트 - 2025. 9. 13. (2/16)

들어가며타이트해진 출석 체크와 작년 대비 추가된 중간과제와 기말과제 조건들 덕인지 꽤 많은 학생들이 다른 선택들을 하였고, 인원은 58명으로 정해졌다. 이제 조금 기대치가 조절되고 있는 셈이니 내년에도 이 과목을 내가 하고 있을 지는 모르지만, 학과를 위해서는 강의 평가도 좋은 점수가 나와야 할텐데 하는 걱정도 적지 않게 든다.공개된 데이터를 가지고, EDA 를 자유 형식으로 하라는 중간 과제가 서로 낯설어서 질문들이 많다. Kaggle , Dacon 등에서 보이는 ‘내가 봐도 문제 없는 데이터’를 가지고 직장 상사에게 보고하는 형태의 보고서를 쓴다는 생각으로 과제를 정의하고 있다. 데이터의 형식, 문제 정의 등에 대해 피드백을 주고 받을 생각으로, 각자 도메인에서 의미있는 해석들이 있으리라 기대가 된다.구름이 잔뜩 낀, 하지만 매력적인 서울 하늘 준비한 내용들2주) 강의 updateAI 강의 - 1강추천시스템 - 1Google(Playstore)에서 과제 런칭하기 - 1 이번 주에 있었던 일들로는 굵직굵직한 OpenAI 의 한국 행보와 구글 검색의 AI 모드 전면 배치 등이 있었다. 사상 최고를 경신하고 있는 코스피 자체도 관심 있게 챙겨야 하겠다. 나눈 이야기들약간의 역사적인 이야기가 들어 있는 인공지능 이야기와 추천 시스템의 입문에 대해 다루었다. 추천 시스템이라는 단어들도 오해가 많은 영역이라, 이 강의에서는 완성된 사용자 위주의 제품의 시각에서 접근과 그걸 가능하게 하는 방법론에 대해 이야기를 많이 하게 된다. 다음 시간부터는 각 내용들에 대해 요즘 시각에서 익숙한 이야기들을 담게 되겠다.유사 쇼핑몰의 개념으로 구글 플레이스토어 이야기를, 완제품의 시각에서 구글 검색 이야기를 내부자의 관점에서 많이 하게 될 것이라 ice-breaking 으로 구글 플레이스토어 이야기를 꽤 일찍부터 시간을 많이 할애하기로 했다. 지표들에 대해서까지 대략적으로 이야기를 하였는데, 아무래도 바깥에서 이야기하기에 한계들이 있는 영역이라 여러 번 감정 이입을 해 가며 정리를 해야 하겠다. ps.인프런에 올라가 있는 유료 강의들을 원하는 학생들에게는 무료로 제공하자 싶어 본의 아니게 인프런 광고를 조금 하게 되었다. 도움이 필요한 분들께 조금이라도 도움이 되면 하는 바램이다.

대학 교육 기타인공지능금융추천

Depth

인프런 워밍업 클럽 스터디 4기 - CS 전공지식 > 1주차 발자국

 ◼만들면서 쉽게 배우는 컴퓨터 구조Section1) 컴퓨터 구조 개요컴퓨터는 트랜지스터라는 반도체 소자로 만들어지고, 여러 트랜지스터로 NAND 게이트를 만들며, 이로부터 컴퓨터가 구성된다. 프로그램의 동작방식 (2가지)컴파일러전체 코드를 미리 번역해 실행 속도가 빠름컴파일 시 문법 오류 사전 발견 가능인터프리터한 줄씩 번역하며 실행, 실행 중 문법 오류 가능실행 속도는 컴파일러보다 느림 Section2) 컴퓨터 구성 요소CPU컴퓨터의 두뇌 역할을 하는 장치로, 산술연산장치(ALU), 제어장치 등으로 구성된다. 메모리RAM, ROM, 캐시 메모리 등이 있다. 주변 장치입력 장치 (키보드, 마우스 등), 출력 장치 (모니터, 프린터 등) 등이 있다. 8비트, 32비트, 64비트 컴퓨터가 표현할수 있는 데이터 차이8비트: 2^8 = 256개32비트: 약 42억개 (RAM 4GB 한계)64비트: 약 18경개 (RAM 한계없음, 거의 무한대)  Section3) 불 대수불 대수의 등장클로드 섀넌이 0과 1 (false, true)만으로 모든 논리 연산과 계이 가능함을 발견 주요 불 연산NOT: 입력의 반대값 출력AND: 둘 다 1일 때만 1 출력OR: 둘 중 하나 이상 1이면 1 출력NAND: AND의 결과를 반전NOR: OR의 결과를 반전XOR: 입력이 서로 다를 때 1 출력 (입력개수 2개일때), 1의 개수가 홀수이면 1, 아니면 0 (입력개수가 3개이상일때) 불 연산 우선순위 : NOT -> AND -> OR 불 대수의 성질과 법칙항등원 법칙, 교환법칙, 분배법칙, 동일법칙, 이중부정법칙, 흡수법칙, 드모르간 법칙 등이 있다 불 연산을 바탕으로 진리표 작성 가능방정식 -> 진리표 -> 논리회로로 변환 Section4) 비트10진법, 2진법, 16진법10진법은 0~9까지 10개의 숫자 사용2진법은 0과 1 두 가지 숫자만 사용16진법은 0~9, A~F(10~15)를 사용 바이트 저장 순서 방식리틀 엔디안: LSB(Least Significant Byte, 가장 낮은 자리 바이트)를 낮은 주소에 저장빅 엔디안: MSB(Most Significant Byte, 가장 높은 자리 바이트)를 낮은 주소에 저장  오버플로우표현할 수 있는 비트 수를 초과하는 계산 결과 발생 시 결과가 제대로 저장되지 못하는 현상 음수 표현MSB(Most Significant Bit, 최상위 비트)가 0이면 양수, 1이면 음수로 해석 2의 보수법음수를 표현하는 방법음수 = 1의 보수(모든 비트를 반전) + 1  Section5) 컴퓨터의 기초가 되는 하드웨어 만들기 Logisim-evolution 같은 시뮬레이터를 사용해 논리 회로를 직접 설계·실험 가능,설치하려면 JDK 필요, GitHub에서 최신 버전 다운로드 가 기본 논리 게이트NAND 게이트, NOT 게이트, AND 게이트, OR 게이트, XOR 게이트  Mission1)https://inf.run/wLEBH  ◼그림으로 쉽개 배우는 자료구조와 알고리즘Section1) 개요선형 자료구조 : 배열, 연결 리스트, 스택, 큐비선형 자료구조: 트리, 그래프, 힙 P-NP 문제 개념 이해빅오 표기법 (시간 복잡도)결정 문제와 최적화 문제P 문제 (Polynomial time 문제)NP 문제 (Nondeterministic Polynomial time 문제)NP-hard 문제P vs NP 문제   Section2) 트리와 이진트리트리노드(Node)와 간선(Edge)으로 구성된 계층적 자료구조 트리의 구성요소노드, 간선, 루트 노드, 자식 노드, 형제 노드, 리프 노드, 레벨, 높이 이진트리각 노드가 최대 2개의 자식 노드를 갖는 트리포화이진트리와 완전이진트리도 존  Section3) 이진 탐색트리각 노드가 값의 기준점 역할을 하며, 찾고자 하는 값이 현재 노드의 값보다 크면 오른쪽 서브트리를, 작으면 왼쪽 서브트리를 탐색하는 구조  Section4) AVL 트리높이 균형을 유지하는 이진 탐색 트리로, 각 노드의 왼쪽과 오른쪽 서브트리 높이 차이(균형 인수)가 최대 1 이내여야 한다.이 균형 조건을 벗어나면 회전 연산을 통해 트리의 균형을 맞춰 탐색, 삽입, 삭제 수행  🗒회고컴퓨터 구조와 자료구조(알고리즘) 강의를 동시에 완벽히 이해하기엔 시간적으로 무리가 있을 것 같아 컴퓨터 구조 심화 학습에 좀 더 집중해볼 예정이다.강의에서 Logisim-evolution을 활용해 AND, OR, NOT, XOR 등의 게이트를 직접 만들어보는 과정이 인상 깊었다. 회로를 하나하나를 쌓아가며 구조를 이해하는게 재미가 있어 몰입이 잘 되었다.강의를 완강할 즈음에는, 정말 작은 컴퓨터 하나쯤은 스스로 만들어 낼 수 있을 것 같은 기대감이 든다 🏷출처https://inf.run/y1hhdhttps://inf.run/7mNZ2https://inf.run/uHJ1a  

cs발자국4기

Masocampus

[마소캠퍼스 GEN AI 인사이트] 업무 자동화 끝판왕 ✨ 노션 3.0 Agent 총정리

노션이 드디어 3.0으로 업그레이드되었어요! 🚀 이번 업데이트의 핵심은 바로 Agent 기능인데요,어떤 점이 달라졌는지 더 자세히 알아볼까요?2025년 9월, 노션은 완전히 달라졌어요.“내가 일을 시키면 Agent가 대신 처리해준다”는 개념이 핵심이에요. 단순한 입력 보조가 아니라,실제 사람처럼 태스크를 이해하고 진행하는‘AI 동료’가 생긴 셈이죠 🙂그렇다면 Agent에는 어떤 기능이 있을까요? ✔ 최대 20분 동안 스스로 일하기✔ 수백 개 페이지 업무 처리✔ PDF·CSV 파일 이해하고 요약하기✔ 팀별 자동화 가능한 ‘Custom Agent’까지! 업무 효율성이 몇 배는 높아진 셈이죠.이번 Agent는 진짜 똑똑해졌어요 ✨ 구글 드라이브, 슬랙 같은 툴과 연결해 정보 검색도 가능하고,DB 속성 설정이나 뷰 수정,심지어 앱과 웹을 넘어선 인사이트까지 뽑아낼 수 있답니다.아직은 못하는 일도 있어요. 예를 들어, 댓글 읽기·작성, 리마인더 설정,고급 템플릿 생성, AI 회의 노트 시작 같은 건 아직 준비 중이에요. 그래도 지금 모습만으로도 충분히 놀랍죠!보안은 걱정하지 않으셔도 돼요 🔒 삭제한 정보는 완전 삭제,기업 보존 기간 설정 가능,AI 커넥터 데이터도 안전하게 저장!엔터프라이즈에는 Zero Data Retention 정책까지 적용돼서 안심할 수 있어요.Agent는 우리가 자주 쓰는 다양한 툴과 연동돼요. Gmail, Slack, Teams, Google Drive 등 연결만 해두면자동 인덱싱되어 원하는 정보를 금방 찾을 수 있답니다 🙂Agent 시작하기도 간단해요. 1. Agent 버튼 클릭2. 액션 선택 또는 직접 프롬프트 입력3. 결과 확인 후 Undo 가능4. 이름/지시 페이지로 설정까지 완료! 생각보다 훨씬 직관적이라 초보자도 쉽게 쓸 수 있어요.앞으로는 팀 중심의 Custom Agents가 도입될 예정이에요.개인 업무 보조를 넘어서,팀 전체가 Agent를 공유하고 자동화할 수 있는 시대가 곧 찾아온답니다.자주 사용하는 툴들과 연계되어 너무 편해요!반복 업무는 Agent에게, 난 중요한 일만 집중!노션 3.0, 이제는 ‘진짜 업무 파트너’로 거듭났습니다 🙂새로운 시도와 성장은 언제나 도전에서 시작돼요.마소캠퍼스는 여러분이 똑똑하게 일할 수 있도록 도와주는 성장 파트너예요 💡지금 이 순간에도 더 나은 내일을 준비하고 있다면, 마소와 함께 해보세요 😊 📌 관련 영상 <퇴근하고 싶냐? Notion AI로 칼퇴 루틴 완성!>Notion, 기초부터 배워보고 싶다면?딱 1시간으로 끝내는 Notion AI!>> 영상 바로 가기

AI 업무 활용노션3Notion3.0업무자동화NotionAgentAI비서AI생산성향상협업툴추천에이전트기능스마트워크

MontyCoder

[네트워크] 서브넷 마스크란?

일단 IP 주소 구조부터IP 주소 (IPV4) 기준으로 이야기하면, 8비트 4개로 이루어져있다. 각 비트는 점('.')으로 분리되어 표시된다.예를 들어 172.16.34.57 이런식으로 말이다.클래스별 IP 주소 형태IP 주소를 관리하기 위해 클래스라는 개념으로 구분한다. 각 클라스에 따라 네트워크와 호스트의 구성 비트 범위가 달라지게 되어 필요에 맞게 네트워크가 많이 필요하면 특정 클래스, 호스트가 많이 필요하면 다른 클래스를 할당하는 등으로 처리하기로 생각했던 것이다. 클래스 A우선 클래스 A로 이야기하자면, 첫 8비트가 네트워크 구성 비트고, 첫 비트는 0으로 고정된다. 뒤에 24비트는 호스트 구성 비트다. 그래서 클래스 A에 소속된 IP 주소는 0~127으로 알 수 있다. 주소 끝에는 첫 8비트가 네트워크 구성 비트라는걸 알려주기 위해 /8을 뒤에 기재한다. (예시: 10.25.3.7/8) 클래스 B클래스 B로 이야기하자면, 첫 16비트가 네트워크 구성 비트고, 앞 두개의 비트는 10으로 고정된다. 뒤에 16비트는 호스트 구성 비트다. 그래서 클래스 B에 소속된 IP 주소는 128~191으로 알 수 있다. 주소 끝에는 첫 16비트가 네트워크 구성 비트라는걸 알려주기 위해 /16을 뒤에 기재한다. (예시: 172.25.3.7/16)클래스 C클래스 C로 이야기하자면, 첫 24비트가 네트워크 구성 비트고, 앞 세개의 비트는 110으로 고정된다. 뒤에 8비트는 호스트 구성 비트다. 그래서 클래스 C에 소속된 IP 주소는 192~223으로 알 수 있다. 주소 끝에는 첫 24비트가 네트워크 구성 비트라는걸 알려주기 위해 /24을 뒤에 기재한다. (예시: 194.25.3.7/24)클래스 D클래스 D로 이야기하자면, 전체 32비트가 네트워크 구성 비트고, 앞 세개의 비트는 1110으로 고정된다. 그래서 클래스 C에 소속된 IP 주소는 224~239으로 알 수 있다. 주소 끝에는 첫 32비트가 네트워크 구성 비트라는걸 알려주기 위해 /32을 뒤에 기재한다. (예시: 233.25.3.7/32). 호스트 구성 비트가 없기 때문에 멀티캐스트용이다.그래서 서브넷 마스크는?서브넷 마스크는 단순하게 설명하면 어디부터 어디까지 네트워크 구성 비트고, 어디까지 호스트 구성 비트인지 알려주는 형태다. 1을 연달해서 작성하는 곳까지 네트워크 구성 비트고, 뒤에 따라오는 0은 호스트 구성 비트를 뜻한다. 클래스 A의 기본 서브넷 마스크는 255.255.0.0 인것. (1111 1111.1111 1111.0000 0000.000 00000) 서브넷 마스크는 말대로 net의 sub을 해주는 mask, 즉 네트워크를 분리해주는 마스크(가림)인 것이다. 이게 무슨 의미냐면, 현재 주소를 보면 네트워크 구성 비트가 너무 적은 경우가 있는데, 네트워크가 더 필요한 경우 확보를 목적으로 마스크(가림) 처리를 하는것이다. 클래스 A 같은 경우 호스트에 쓰일 수 있는 비트는 2^24 나 있지만 네트워크에 쓰일 수 있는 비트는 고작 2^8 -1개인 것이다 (첫 비트 0은 고정이므로 1개를 뺌). 이런 경우 네트워크를 적절하게 분리해서 쓰는게 효율적인 것이다. 서브넷 마스크와 IP 주소를 AND 연산을 해서 그 결과값을 사용하면 적절한 네트워크 확보가 가능하다. 클래스 B의 한 주소가 있다고 하자. 172.16.34.57/16(1010 1100.0001 0000.0010 0010. 0011 1001). 여기에 이제 네트워크를 더 확보하고 싶어 앞 20비트까지 네트워크 분으로 하고 싶다. 그래서 서브넷 마스크 255.255.240.0(1111 1111.1111 1111.1111 0000.0000 0000)으로 마스킹(가림) 한다. AND 연산을 한 결과는 172.16.32.0/20 (1010 1100.0001 0000.0010 0000. 0000 0000)이게 되어, 2^4만큼 네트워크 구성 비트를 더 확보하게 되는 것이다.  참고 강의그림으로 쉽게 배우는 네트워크https://inf.run/JN7mz

네트워크네트워크CS

sim2

[스터디 모집] AI로 학습 효율 극대화하는 노션 템플릿, 함께 사용하실 분 모집해요!!

안녕하세요! 정해진 시간이나 과제 없이, 각자 편한 시간에 최고의 효율을 내는 '자율 학습' 스터디를 모집합니다.이 스터디는 정해진 시간에 모여 진행하는 방식이 아닙니다. 제가 2년간 직접 사용하며 학점을 2점대에서 4점대로 올렸던 'AI 강의 정리법' 노션 페이지를 개인의 학습 베이스캠프로 삼아, 자신만의 속도와 방식으로 공부를 진행하는 자율 학습 커뮤니티입니다.함께 같은 목표(A+)를 향해 나아가되, 서로를 강제하지 않고 각자의 성장을 응원하는 것을 목표로 합니다! ⭐ 스터디 멤버가 되시면 아래 '자율 학습' 자료를 모두 이용하실 수 있어요!학습의 핵심, 제가 1년간 완성한 'AI 프롬프트 원본'과 상세 가이드개인의 학습 계획에 맞춰 평생 사용 가능한 노션 템플릿추후 추가되는 모든 업데이트 자료 평생 무료 제공스터디 참여비: 5,000원 (초기 참여비이며, 자율 학습에 필요한 템플릿과 모든 업데이트 자료 이용권이 포함된 가격입니다.)관심 있는 분들은 아래 오픈채팅방으로 들어오셔서 간단한 인사 남겨주시면, 제가 스터디 페이지로 직접 초대해 드리겠습니다.[스터디 참여 링크] https://open.kakao.com/o/sflDShSh   

AI 업무 활용학습AI프롬프트대학교강의학점컴퓨터

애완로트와일러개

[K-DEVCON] 9월엔 치맥! (네트워킹 데이)

🍺 K-DEVCON 9월엔 치맥 🍗 퇴근길, 시원한 맥주 한 잔만큼 완벽한 힐링이 있을까요?이번 9월 K-DEVCON 네트워킹은 치맥의 밤으로 강남에서 개최합니다.  맥주 한 모금에 하루의 피로는 잊고, 치킨 한 입에 대화가 술술 풀리는 시간.서로의 아이디어와 경험을 가볍게 나누며, 새로운 인연을 만드는 자리에 여러분을 초대합니다. 📅일시: 9월 18일(목) 19:30 ~ 22:00 (2시간 30분)📍장소: 송송카레 (서울 강남구 역삼로 207, 역삼역 1번 출구에서 도보 약 593m)📌 참여신청 : https://event-us.kr/kdevcon/event/110980 편하게 오셔서 맥주잔 부딪히며 이야기꽃 피워보세요!이번 9월, K-DEVCON과 함께 치맥만큼 즐거운 네트워킹을 경험해보세요 🍻 주최 : K-DEVCONK-DEVCON은 IT 전문가 커뮤니티 그룹으로 다양한 IT 기술을 연구하며 회원간의 소통을 공유하는 모임 입니다. 현재 IT업계에 종사하고 있거나, 종사할 예정이거나, IT를 공부하는 학생 그리고 IT에 관심이 있다면 누구나 함께할 수 있습니다. 기술 세미나, 스터디, 토론 등 다양한 활동을 하고 있으며, 주요 소통 및 이벤트 공유는 오픈챗 및 홈페이지 등을 통해서 공유하고 있습니다.소프트웨어 엔지니어, 데이터 엔지니어, 머신러닝 엔지니어, 시스템 엔지니어, 시큐리티 엔지니어, 데브옵스, SRE, PM, Educator, UI/UX, 스타트업, 대학생 등 다양한 구성원이 활동 중입니다. K-DEVCON에 대한 자세한 소개는 K-DEVCON 홈페이지 (https://k-devcon.com) 에서 확인 가능합니다.K-DEVCON 커뮤니티는 슬랙을 이용하여 소통하고 있습니다. 행사 참여 참고사항1. 건강한 공동체를 위해 구성원들은 K-DEVCON 행동강령을 준수하고, 주의 받은 구성원은 즉시 행동강령을 준수할 것을 요구합니다.2. 행사 당일 행사장 내부에서 사진과 영상 촬영이 진행될 수 있습니다. 촬영된 사진과 영상은 데브콘 행사 마케팅 용도로 사용될 수 있는 점 미리 양해 부탁드립니다.3. 이번 행사는 미성년자는 참여 불가능 합니다.4. 개별 주문은 불가능합니다. 음주사고를 막기 위해 1인 제공 주량을 제한합니다. 기타후원 및 기타 문의: info@k-devcon.com

커리어 · 자기계발 기타K-DEVCON네트워킹IT

Masocampus

[마소캠퍼스 GEN AI 인사이트] AI 국대팀 출범! 누가 뽑혔을까? 👀

한국형 AI 시대가 열리기 시작했어요!K-팝, K-푸드, K-뷰티에 이어 이제는 K-AI까지✨국가 주도의 AI 프로젝트, 과연 어떤 내용일까요? 함께 살펴봐요 :)정부가 AI 주권 확보를 위해 본격적으로 나섰어요.무려 2,000억 원의 예산을 들여, 국내 대표 AI 기업 5곳이 한 팀으로 뭉쳤답니다!이제 AI도 'Made in Korea' 시대가 열리는 걸까요? 😲이 프로젝트의 최종 목표는 두 가지예요.1⃣ 글로벌 AI 모델 성능의 95% 이상 달성2⃣ 누구나 자유롭게 활용할 수 있는 공공 AI 실현모두를 위한 AI, 들어본 적 있으신가요? 이제 현실이 됩니다!총 15개 팀이 치열한 경쟁을 벌였고, 그중 5팀이 최종 선정되었어요.- 네이버 클라우드- SK텔레콤- 업스테이지- NC AI- LG AI연구원이들은 각각 컨소시엄을 구성해 독자적인 AI 모델 개발에 착수했답니다💪각 기업은 자신만의 전략과 목표를 가지고 움직이고 있어요. 네이버는 AI 마켓을, 업스테이지는 산업별 AI 확대를,SK텔레콤은 B2B 서비스 발굴을, NC AI는 200B급 초거대 모델을,LG AI연구원은 K-EXAONE이라는 모델을 개발 중이에요! 같은 AI도 이렇게 다양할 수 있다니, 너무 흥미롭죠? 😊정부는 총 2,378억 원이라는 큰 규모의 예산을 지원합니다!- GPU: 1,500억 원- 데이터: 628억 원- 인재 유치: 250억 원 다만, GPU 지원은 일부 기업에만 해당되는데요,네이버와 SK텔레콤은 이 지원 대상에서 제외되었답니다.KT와 카카오 등 일부 대기업은 이번 AI 국가대표팀에서 제외되었어요.각 기업의 전략, 기술력, 독자 모델 여부 등을 기준으로 평가가 이루어졌기 때문이에요.선정되지 못한 곳도 있지만, 향후 다른 방식으로 참여할 수도 있겠죠? 🙂12월 말에는 1차 평가를 통해 5팀 중 4팀만 살아남게 됩니다.이후에도 6개월마다 성과 평가가 이어지고,전문가와 국민이 참여하는 ‘AI 콘테스트’도 예정되어 있어요. 긴 여정의 시작, 함께 지켜봐 주세요!- 기술 주권 확보- 경제 자립- 한국형 AI 생태계 구축- 모두가 활용 가능한 공공 AI 실현우리가 주도하는 AI, 우리 손으로 만들어가는 미래!‘모두의 AI’는 지금 시작됐어요! 🚀드디어 우리만의 AI가 탄생할 날이 머지 않았어요!이제는 남 따라가지 않고, 우리 기술로 선도할 수 있는 시대가 도래할 거예요~새로운 시도와 성장은 언제나 도전에서 시작돼요.마소캠퍼스는 여러분이 똑똑하게 일할 수 있도록 도와주는 성장 파트너예요 💡지금 이 순간에도 더 나은 내일을 준비하고 있다면, 마소와 함께 해보세요 😊 📌 관련 강의 <AI 에이전트 입문 치트키, Claude MCP로 끝내는 업무 자동화>AI를 내 업무에 자유자재로 써먹는똑똑한 직장인이 되고 싶다면?>> 강의 바로 가기 

AI 업무 활용인공지능AI국가대표AI프로젝트AI산업네이버클라우드SK텔레콤업스테이지LGAI연구원NCAIAI정책

제어쟁이

컴퓨터공학 전공자, 임베디드 개발 진입이 쉬운 5가지 이유

안녕하세요 인사이드 임베디드의 제어쟁이입니다.​“임베디드 개발은 전자공학 전공자만 가능한 거 아닌가요?”많은 취준생과 대학생이 이렇게 묻습니다.하지만 결론부터 말씀드리면, 컴퓨터공학 전공자도 임베디드 개발 분야에서 충분히 경쟁력을 가질 수 있습니다.오히려 소프트웨어 중심의 배경 지식 덕분에, 초기 적응과 프로젝트 수행 속도가 더 빠를 수 있습니다.이 글에서는 컴퓨터공학 임베디드 개발이 유리한 이유 5가지를 구체적으로 살펴보겠습니다.​1. 임베디드 개발의 핵심은 ‘코드’다​임베디드 시스템은 하드웨어와 소프트웨어가 긴밀하게 결합된 분야입니다.하지만 실제 제품의 동작을 제어하고 최적화하는 핵심 요소는 펌웨어, 제어 로직, 통신 프로토콜 같은 소프트웨어입니다.컴퓨터공학 전공자는 이미 학부 시절부터 C언어, 자료구조, 알고리즘, 운영체제를 다루기 때문에, MCU 프로그래밍 같은 임베디드 펌웨어 개발에 빠르게 적응할 수 있습니다.예를 들어, 단순히 LED를 켜는 코드도 하드웨어 입출력 포트 제어와 메모리 매핑 개념을 이해해야 하는데, 이런 로직 구조를 익히는 데 컴퓨터공학 전공자는 강점을 갖습니다.​​2. 알고리즘 설계 능력이 경쟁력​임베디드 개발은 제한된 자원(메모리, CPU 속도, 전력) 환경에서 최적화된 동작을 구현하는 것이 핵심입니다.예를 들어, 모터 제어 알고리즘을 작성할 때 속도 변화와 전류 사용량을 동시에 최소화해야 할 수 있습니다.또한 센서 데이터 처리 과정에서는 잡음을 제거하고 정확한 값을 산출하는 필터링 알고리즘이 필요합니다.컴퓨터공학 전공자는 시간 복잡도와 공간 복잡도 개념을 활용해, 처리 속도와 메모리 사용량 모두 효율적인 코드를 설계할 수 있습니다.이는 실시간 운영체제(RTOS) 환경이나 멀티태스킹 구조에서 특히 중요한 능력입니다.​​3. 문제 해결과 디버깅 속도가 빠르다​임베디드 시스템에서는 비동기 통신 오류, 인터럽트 충돌, 메모리 누수, 타이밍 지연과 같은 문제가 빈번하게 발생합니다.이때 필요한 것은 단순한 코딩 스킬이 아니라, 문제의 원인을 체계적으로 분석하고 재현하는 능력입니다. 컴퓨터공학 전공자는 소프트웨어 개발 과정에서 이미 다양한 버그와 오류를 해결해 본 경험이 많습니다.JTAG, 시리얼 모니터링, 로직 애널라이저 같은 디버깅 도구를 사용해 문제를 추적하고, 코드와 하드웨어 동작의 연관성을 분석하는 데 능숙합니다.이러한 역량은 개발 일정 단축과 품질 개선에 큰 기여를 합니다.​​4. 하드웨어 기초는 노력으로 극복 가능하다​많은 컴퓨터공학 전공자가 임베디드 개발 진입 시 가장 크게 걱정하는 부분이 하드웨어 지식 부족입니다.실제로 전원 설계, 입출력 회로, 센서 연결, 노이즈 대책 등은 임베디드 개발에서 필수적으로 다뤄야 할 부분입니다.​하지만 중요한 것은 “쉽게 배운다”가 아니라, 꾸준히 학습하고 반복 실습해야 한다는 점입니다.하드웨어는 소프트웨어처럼 코드만으로 결과가 바로 보이지 않고, 전압·전류·신호 파형 등 물리적 특성을 이해해야 합니다.예를 들어, I2C 통신에서 데이터가 불안정하게 들어오는 경우, 회로 납땜 상태나 풀업 저항 값을 직접 측정하고 수정해야 할 수 있습니다.​따라서 컴퓨터공학 전공자가 임베디드 개발자가 되려면, 이론과 실습을 병행하면서 전자 기초를 차근차근 쌓는 노력이 필수입니다.이 과정을 거치면 하드웨어 제약을 이해하는 진정한 ‘풀스택’ 임베디드 개발자로 성장할 수 있습니다.⸻​5. 기업이 선호하는 융합형 인재로 성장​기업들은 하드웨어 이해도를 갖춘 임베디드 개발자를 강하게 선호합니다.제품 개발 과정에서 하드웨어 엔지니어와의 원활한 협업이 가능하고, 하드웨어 제약을 고려한 최적화된 펌웨어를 작성할 수 있기 때문입니다.​컴퓨터공학 전공자가 임베디드 기술을 익히면, 프로젝트 초기에 회로 설계 검토 단계부터 참여해 문제를 예방하고, 개발 속도를 높이는 핵심 인재가 될 수 있습니다.특히 스타트업이나 소규모 개발팀에서는 이러한 융합형 인재가 프로젝트 성패를 좌우할 정도로 중요한 역할을 합니다.

임베디드 · IoT임베디드컴퓨터공학과전기전자

Masocampus

[마소캠퍼스 GEN AI 인사이트] 똑똑한 비서, "ChatGPT Agent" 출시! 🚀

AI 세상에 새로운 바람이 불고 있어요! 🌬바로 GPT-5의 등장 덕분이죠. 이전보다 훨씬 똑똑해지고, 안전하고, 다재다능해진 AI가여러분의 일상과 업무를 어떻게 바꿔줄지 함께 살펴봐요.2025년 8월 7일, 전 세계가 주목한 GPT-5가 드디어 공개됐어요!더 강력한 성능과 새로운 가능성으로,이미 수많은 분야에서 관심을 받고 있답니다.AI의 미래가 눈앞에 와있어요.GPT-5는 단순히 빠른 AI가 아니에요.상황에 따라 빠른 답변과 깊은 분석을 골라내는 ‘똑똑한 판단력’을 가졌죠.게다가 텍스트, 이미지, 음성을 모두 이해하는 멀티모달 능력까지!이제는 진짜 다 할 수 있는 AI예요.수학, 코딩, 멀티모달 이해, 헬스케어까지—GPT-5의 성능 지표는 놀라울 정도로 높아요.예를 들어 미국 수학 경시대회 수준 문제도 94.6% 정답률로 해결하고,복잡한 코드 디버깅도 척척 해내죠.복잡한 프론트엔드 생성부터 대규모 저장소 디버깅,그리고 새롭게 도입된 ‘Vibe Coding’까지!GPT-5는 개발자에게 든든한 파트너가 되어줄 거예요.이제 코딩도 AI와 함께하는 시대예요.최고 성능의 GPT-5,균형 잡힌 GPT-5-mini,가벼운 작업에 최적화된 GPT-5-nano! 여러분의 필요와 상황에 맞는 버전을 선택할 수 있어요.적은 리소스로 더 나은 결과를 내고,한계가 있을 땐 솔직하게 알려주는 명확성,위험 질문에도 안전한 답변 제공! GPT-5는 효율성과 안전성을 동시에 갖춘 AI예요.개인정보와 기업 데이터를 지키는 것도 철저해졌어요.AES-256 저장, TLS 1.2+ 암호화,그리고 학습 데이터에서 비즈니스·API 데이터를 제외해 더 안심할 수 있답니다.AI 전문가, 데이터 보안, 생산성, 멀티모달—GPT-5에 대한 마소 마케터들의 평가도 긍정 그 자체!앞으로의 변화가 기대되죠?마소캠퍼스는 GPT-5와 함께, 똑똑하고 안전하게 성장할 수 있는 길을 안내해드릴 거예요.스마트한 AI 활용 비법이 궁금하다면, 지금 마소캠퍼스를 만나보세요! 🚀 📌 관련 강의 <처음이지만 AI로 전문가처럼–ChatGPT만 있으면 나도 데이터 분석가>똑똑해진 ChatGPT와 함께라면데이터 분석 걱정 끝! 

AI 업무 활용GPT5인공지능AI기술AI혁신멀티모달AI코딩AI데이터보안업무자동화생산성향상마소캠퍼스

Depth

인프런 워밍업 클럽 스터디 2기 - 백엔드 클린코드, 테스트코드 4주차 발자국

 Section7) Mock을 마주하는 자세Test Double의 종류1) Dummy : 아무것도 하지 않는 깡통 객체2) Fake : 단순한 형태로 동일한 기능은 수행하나, 프로덕션에서 쓰기에는 부족한 객체 (ex, FakeRepository)3) Stub : 테스트에서 요청한 것에 대해 미리 준비한 결과를 제공하는 객체, 그 외에는 응답하지 않는다. //상태 검증 (State Verification)4) Spy : Stub이면서 호출된 내용을 기록하여 보여줄 수 있는 객체, 일부는 실제 객체처럼 동작시키고 일부만 Stubbing할 수 있다,5) Mock : 행위에 대한 기대를 명세하고, 그에 따라 동작하도록 만들어진 객체 //행위 검증 (Behavior Verification).BDDMockitoBDDMockito는 Mockito에서 BDD 스타일에 맞추어 모든것의 이름만 바꾼 것이다.일례로 given 구역에 .when()을 쓰면 이질감이 들기 떄문에 BDDMockito가 생긴 것이다..Classicist VS Mockist1) Classicist- 꼭 필요한 경우에만 mocking을 쓰고 왠만하면 진짜 객체로 테스트 하자는 주의이다.2) Mockist- 모든 것을 Mocking 위주로 하여 테스트 하자는 주의이다..Section8) 더 나은 테스트를 작성하기 위한 구체적 조언1) 한 문단에 한 주제!- DisplayName을 한 문장으로 구성할 수 있어야 한다~!2) 완벽하게 제어하기3) 테스트 환경의 독립성을 보장하자- 테스트에서는 팩토리 메서드를 지양하고 Buider나 생성자를 통해 최대한 독립성을 보장해서 given절을 구성하는게 좋다.4) 테스트 간 독립성을 보장하자- 테스트간의 공유자원 사용하지 않기.- 테스트간의 독립성 보장하기~!5) 한 눈에 들어오는 Test Fixture 구성하기- Fixture : 고정룰, 고정되어 있는 물체- Test Fixture : 테스트를 위해 원하는 상태로 고정시킨 일련의 객체6) Test Fixture 클렌징- @Transactional, @rollback 방식과 deleteAllInBatch(), deleteAll() 등을 잘 알고 사용해야 한다.7) @ParameterizedTest8) @DynamicTest9) 테스트 수행도 비용이다. 환경 통합하기- @DataJPATest 보다 @SpringbootTest 사용을 권장한다.- 컨트롤러(통합) 테스트시 @WebMvcTest의 Controllers 옵션을 통해 특정 컨트롤러들만 지정하여 테스트해줌으로써 테스트 수행 비용을 줄여준다.10) private 메서드는 테스트할 필요가 없다.11) 테스트에서만 필요한 메서드 중 생성자 등은 프로덕션 코드에 생성해도 좋다..Section9) AppendIx1) 학습 테스트- 잘 모르는 기능, 라이브러리, 프레임워크를 학습하기 위해 작성하는 테스트- 여러 테스트 케이스를 스스로 정의하고 검증하는 과정을 통해 보다 구체적인 동작과 기능을 학습할 수 있다.- 관련 문서만 읽는 것보다 훨씬 재미있게 학습할 수 있다.2) Spring Rest Docs- 테스트 코드를 통한 API 문서 자동화 도구- API 명세를 문서로 만들고 외부에 제공함으로써 협업을 원활하게 한다.- 장점→ 테스트를 통과해야 문서가 만들어진다 (신뢰도가 높다)→ 프로덕션 코드에 비침투적이다.- 단점→ 코드 양이 많다.→ 설정이 어렵다..Day-15 Mission) 레이어드 아키텍처에서의 테스트 코드 작성강의로 배운 레이어드 아키텍처 관련 내용을 확장시켜 정리할 수 있어 좋았다.과제 Link.Day-18 Mission) Test Double 어노테이션 이해 및 테스트 항목 배치@Mock, @MockBean, @Spy, @SpyBean, @InjectMocks의 차이점을 정리하고 given-when-then 전략으로 테스트 코드 배치 방법을 고민해 볼 수 있어 좋았다.과제 Link..회고오늘로써 인프런 워밍업 클럽 스터디 2기 대장정이 마무리 되었다.클린코드와 테스트코드는 누구나 중요성을 알지만, 혼자서 공부하기 쉽지 않은 부분이다.강의를 완벽하게 이해하지는 못했지만, 강의를 통해 Clean Code와 Test Code에 한 발자국 더 다가갈 수 있었고, 실무에도 점차적으로 적용 해보면서 뜻 깊은 경험을 할 수 있었다.다음에 인프런 스터디 3기가 열린다면 재참여를 고려해 봐야겠다마지막으로 강의와 스터디를 만들어주신 박우빈님과 스터디 관리에 힘써주신 셰리 매니저님께 감사의 마음을 전합니다..출처https://inf.run/jsvaAhttps://inf.run/kHiWM   

백엔드워밍업클럽테스트코드2기depthmy

Docker Compose를 활용해 2개 이상의 컨테이너 관리하기

[실습] MySQL, Redis 컨테이너 동시에 띄워보기Docker Compose로 MySQL, Redis 실행시키기compose.ymlservices: my-db: image: mysql environment: MYSQL_ROOT_PASSWORD: pwd1234 volumes: - ./mysql_data:/var/lib/mysql ports: - 3306:3306 my-cache-server: image: redis ports: - 6379:6379 compose 파일 실행 및 삭제docker compose up -d docker compose ps docker compose down [실습] Spring Boot, MySQL 컨테이너 동시에 띄워보기application.ymlspring: datasource: url: jdbc:mysql://localhost:3306/mydb username: root password: pwd1234 driver-class-name: com.mysql.cj.jdbc.DriverDockerfileFROM openjdk:17-jdk COPY build/libs/*SNAPSHOT.jar /app.jar ENTRYPOINT ["java", "-jar", "/app.jar"]compose.ymlservices: my-server: build: . ports: - 8080:8080 # my-db의 컨테이너가 생성되고 healthy 하다고 판단 될 때, 해당 컨테이너를 생성한다. depends_on: my-db: condition: service_healthy my-db: image: mysql environment: MYSQL_ROOT_PASSWORD: pwd1234 MYSQL_DATABASE: mydb # MySQL 최초 실행 시 mydb라는 데이터베이스를 생성해준다. volumes: - ./mysql_data:/var/lib/mysql ports: - 3306:3306 healthcheck: test: [ "CMD", "mysqladmin", "ping" ] # MySQL이 healthy 한 지 판단할 수 있는 명령어 interval: 5s # 5초 간격으로 체크 retries: 10 # 10번까지 재시도Spring Boot 프로젝트 빌드 및 compose 파일 실행./gradlew clean build docker compose up -d --buildcompose 실행 현황 보기docker compose ps docker logs [Container ID]Spring Boot 컨테이너의 로그를 열어보면 아래와 같이 에러 메시지가 떠있다. 아래 에러 메시지는 DB와 연결이 제대로 이루어지지 않았을 때 발생하는 에러이다.MySQL이 정상적으로 실행이 안 되고 있는 건지 확인하기 위해 DB GUI 툴(ex. Workbench, Datagrip, DBeaver 등)을 활용해 DB 연결을 해보자. MySQL에 연결을 시도해보면 정상적으로 연결이 잘 되는 걸 확인할 수 있다. 컨테이너로 실행시킨 Spring Boot가 MySQL에 연결이 안 되는 이유각각의 컨테이너는 자신만의 네트워크망과 IP 주소를 가지고 있다. 호스트 컴퓨터 입장에서 localhost는 호스트 컴퓨터를 가리키지만, Spring Boot 컨테이너 입장에서 localhost는 Spring Boot 컨테이너를 가리킨다. 그런데 Spring Boot의 코드를 작성할 때 DB 정보를 아래와 같이 입력했었다. Spring Boot가 실행되는 환경인 컨테이너 입장에서 localhost:3306라는 주소는, Spring Boot 컨테이너 내부에 있는 3306번 포트와 연결을 시도하게 된다. 하지만 Spirng Boot가 실행되는 컨테이너 내부의 3306번 포트에는 아무것도 실행되고 있지 않다. 이러한 구조상의 문제 때문에 Spring Boot가 MySQL에 연결이 안 되고 있었던 것이다. application.ymlspring: datasource: url: jdbc:mysql://localhost:3306/mydb username: root password: pwd1234 driver-class-name: com.mysql.cj.jdbc.Driver-- compose.yml에서 정의한 Service 이름으로 서로 통신할 수 있다. 바로 예시로 알아보자. Spring Boot의 DB 정보를 아래와 같이 수정한 뒤 시도해보기application.ymlspring: datasource: url: jdbc:mysql://my-db:3306/mydb username: root password: pwd1234 driver-class-name: com.mysql.cj.jdbc.Driver 이전에 작성했던 compose.yml을 보면 각 컨테이너에 service 이름(my-server, my-db)을 작성했었다. compose.ymlservices: my-server: build: . ports: - 8080:8080 depends_on: my-db: condition: service_healthy my-db: image: mysql environment: MYSQL_ROOT_PASSWORD: pwd1234 MYSQL_DATABASE: mydb volumes: - ./mysql_data:/var/lib/mysql ports: - 3306:3306 healthcheck: test: [ "CMD", "mysqladmin", "ping" ] interval: 5s retries: 10이 service 이름이 컨테이너의 주소를 뜻한다. 해당 컨테이너의 IP 주소와 같은 역할을 한다. 위와 같이 코드를 수정한 뒤에 다시 한 번 컨테이너를 실행시켜보자. ./gradlew clean build docker compose down docker compose up --build -d docker ps # 정상적으로 Spring Boot, MySQL이 실행된 걸 확인할 수 있다.  [실습] Spring Boot, MySQL, Redis 컨테이너 동시에 띄워보기Spring Boot 프로젝트에 Redis 연결 코드 추가하기build.gradle... dependencies { ... implementation 'org.springframework.boot:spring-boot-starter-data-redis' } application.ymlspring: datasource: url: jdbc:mysql://my-db:3306/mydb username: root password: pwd1234 driver-class-name: com.mysql.cj.jdbc.Driver data: redis: host: localhost port: 6379RedisConfig@Configuration public class RedisConfig { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(connectionFactory); template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); return template; } }AppController@RestController public class AppController { @Autowired private RedisTemplate<String, Object> redisTemplate; @GetMapping("/") public String home() { redisTemplate.opsForValue().set("abc", "def"); return "Hello, World!"; } }compose.ymlservices: my-server: build: . ports: - 8080:8080 depends_on: my-db: condition: service_healthy my-cache-server: condition: service_healthy my-db: image: mysql environment: MYSQL_ROOT_PASSWORD: pwd1234 MYSQL_DATABASE: mydb volumes: - ./mysql_data:/var/lib/mysql ports: - 3306:3306 healthcheck: test: [ "CMD", "mysqladmin", "ping" ] interval: 5s retries: 10 my-cache-server: image: redis ports: - 6379:6379 healthcheck: test: [ "CMD", "redis-cli", "ping" ] interval: 5s retries: 10Docker 컨테이너로 띄워보기 ./gradlew clean build docker compose down docker compose up --build -d위 명령어를 통해 컨테이너를 띄운 뒤에 localhost:8080으로 요청을 해보면 아래와 같은 에러가 발생한다.connection refused에러가 발생한 이유는 Redis와 연결이 잘 안 됐기 때문이다. 왜 안됐는 지application.yml파일을 확인 application.ymlspring: datasource: url: jdbc:mysql://my-db:3306/mydb username: root password: pwd1234 driver-class-name: com.mysql.cj.jdbc.Driver data: redis: host: my-cache-server port: 6379각 컨테이너는 각자의 네트워크를 가지고 있기 때문에, localhost가 아니라 Redis가 실행되고 있는 컨테이너로 통신을 해야 한다. Redis가 실행되고 있는 컨테이너의 주소는 service 이름으로 표현한다고 했다. compose.yml에서 Redis가 실행되고 있는 컨테이너의 service 이름을 my-cache-server라고 이름 붙였다. 다시 실행 ./gradlew clean build docker compose down docker compose up --build -d 

채널톡 아이콘