fix: 코스 콘텐츠 일괄 검수 반영 — 깨진 내부 링크·Gitea 포트·보안그룹 사실 교정
- 검수 61파일 52건: 깨진 Link(/learn/database, /learn/git, /learn/backend 등) 유효 slug로 교체 - Gitea 주소 포트 누락(:3000) 일괄 보정 - 방화벽 코스의 보안그룹 표를 실제 설정(3000·222 포함)에 맞게 교정 - olist 마크업 패턴 통일 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
ff14183f03
commit
1303d06811
@ -358,7 +358,7 @@ export default function AiToolsPage() {
|
||||
이제 여러분은 AI에게 <strong>맥락·제약·예시로 시키고</strong>, 답을
|
||||
<strong> 4단계로 검증하고</strong>, 고객사의 것은 <strong>절대 넣지 않는</strong>
|
||||
개발자예요. AI가 대신 써 준 코드도 결국 Git으로 관리되고 서버에 배포되니,{' '}
|
||||
<Link to="/learn/git"><strong>Git과 협업</strong></Link> 코스로 코드를 안전하게
|
||||
<Link to="/learn/git-deep"><strong>Git과 협업</strong></Link> 코스로 코드를 안전하게
|
||||
나누는 법을, <Link to="/learn/network"><strong>네트워크의 이해</strong></Link> 코스로
|
||||
그 코드가 달리는 길을 이어서 배워 보세요. 그리고 오늘 배운 프롬프트 3요소로
|
||||
실습 과제 하나를 골라 AI와 함께(하지만 주도권은 내가!) 풀어 보는 것, 그게 진짜 복습입니다.
|
||||
|
||||
@ -350,7 +350,7 @@ export default function AwsIntroPage() {
|
||||
컴퓨터</strong>로, <span className="icode">t3.medium</span>이 암호가 아니라
|
||||
<strong> 읽을 수 있는 사양표</strong>로 보일 거예요. 우리 서비스가 EC2 + 탄력적 IP +
|
||||
보안 그룹 위에서 어떻게 사는지도 그릴 수 있고요. 다음은 그 서버 안에서 앱을
|
||||
포장해 나르는 기술 — <Link to="/learn/docker"><strong>Docker 입문</strong></Link>{' '}
|
||||
포장해 나르는 기술 — <Link to="/learn/docker-intro"><strong>Docker 입문</strong></Link>{' '}
|
||||
코스로 이어 가세요. 데이터가 서버까지 오는 길이 궁금하다면{' '}
|
||||
<Link to="/learn/network"><strong>네트워크의 이해</strong></Link>를 먼저 복습해도
|
||||
좋습니다.
|
||||
|
||||
@ -392,7 +392,7 @@ export default function CacheNosqlPage() {
|
||||
이제 여러분은 <strong>캐시</strong>(가까운 사본으로 속도 벌기, 히트/미스, 무효화의 어려움)와{' '}
|
||||
<strong>NoSQL</strong>(표 대신 문서, Redis와 MongoDB, 역할 분담)을 한 입씩 맛봤어요.
|
||||
핵심은 하나 — <strong>데이터의 성격에 맞는 창고를 고른다</strong>는 것.
|
||||
표의 세계를 더 단단히 다지고 싶다면 <Link to="/learn/database"><strong>데이터베이스 기초</strong></Link> 코스로,
|
||||
표의 세계를 더 단단히 다지고 싶다면 <Link to="/learn/sql"><strong>SQL 첫걸음</strong></Link> 코스로,
|
||||
이 데이터들이 어떤 길로 오가는지 궁금하다면 <Link to="/learn/network"><strong>네트워크의 이해</strong></Link> 코스로
|
||||
이어 가세요. 그리고 과제 — 우리 플랫폼에서 <strong>"캐시하면 좋을 데이터 후보 3개"</strong>를 골라
|
||||
섹션 7의 세 질문으로 검증한 뒤 멘토와 이야기해 보세요.
|
||||
|
||||
@ -334,7 +334,7 @@ export default function CleanCodePage() {
|
||||
모든 페이지가 이 규칙을 따르고 있어요 — 여러분이 코드를 열 때마다 지도를 먼저 받도록요.
|
||||
</p>
|
||||
<div className="tip">
|
||||
<b>직접 확인해 보기</b> Gitea(<span className="icode">edu.awesomedevapp.com</span>)에서
|
||||
<b>직접 확인해 보기</b> Gitea(<span className="icode">edu.awesomedevapp.com:3000</span>)에서
|
||||
이 플랫폼 저장소를 열고 <span className="icode">frontend/src/pages</span> 폴더의 파일을
|
||||
아무거나 3개 골라 맨 위 주석만 읽어 보세요. 코드를 한 줄도 안 읽고도 각 파일의 역할을
|
||||
말할 수 있게 되면 — 그게 바로 "왜" 주석의 힘이에요.
|
||||
@ -435,7 +435,7 @@ export default function CleanCodePage() {
|
||||
그리고 리뷰의 과녁은 언제나 코드라는 것까지. 배운 걸 바로 써먹을 곳도 준비돼
|
||||
있습니다 — <strong>FE-07(중복 카드 컴포넌트 추출)</strong>과
|
||||
<strong> BE-05(매직넘버 상수 추출)</strong> 티켓이 여러분을 기다려요. 코드를
|
||||
올리기 전에 <Link to="/learn/git"><strong>Git과 협업 워크플로</strong></Link> 코스에서
|
||||
올리기 전에 <Link to="/learn/git-deep"><strong>Git과 협업 워크플로</strong></Link> 코스에서
|
||||
브랜치·PR 만드는 법을 먼저 익히면 리뷰 실습까지 한 번에 이어집니다.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@ -379,7 +379,7 @@ export default function CloudNetworkPage() {
|
||||
우리 플랫폼의 네트워크 지도를 통째로 그릴 수 있게 됐습니다. 아직{' '}
|
||||
<Link to="/learn/network"><strong>네트워크의 이해</strong></Link> 코스를 안 들었다면
|
||||
먼저 다녀오고, 다음은 이 지도 위에 서비스를 올리는 방법 —{' '}
|
||||
<Link to="/learn/deploy"><strong>배포 기초</strong></Link> 코스에서 Docker 컨테이너가
|
||||
<Link to="/learn/docker-intro"><strong>Docker 입문</strong></Link> 코스에서 Docker 컨테이너가
|
||||
EC2 위에서 어떻게 굴러가는지 이어서 배워 보세요.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@ -376,8 +376,9 @@ export default function ColorPage() {
|
||||
이제 색을 <strong>감</strong>이 아니라 <strong>세 개의 손잡이(색상·명도·채도)와
|
||||
비율(60-30-10), 대비(4.5:1)</strong>라는 문법으로 다룰 수 있게 됐어요.
|
||||
우리 블루 #2159C5가 버튼 위에 있는 이유도 설명할 수 있고요. 다음은 색이 올라가는
|
||||
뼈대를 배울 차례 — <Link to="/learn/layout"><strong>레이아웃과 타이포그래피
|
||||
기초</strong></Link> 코스에서 여백·정렬·글자 위계를 이어서 배워 보세요.
|
||||
뼈대를 배울 차례 — <Link to="/learn/layout"><strong>레이아웃과
|
||||
그리드</strong></Link> 코스에서 여백·정렬을, <Link to="/learn/typography"><strong>타이포그래피</strong></Link> 코스에서
|
||||
글자 위계를 이어서 배워 보세요.
|
||||
배색 실습 결과물은 멘토 리뷰 과제로 꼭 제출하는 것, 잊지 마세요!
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@ -312,7 +312,7 @@ export default function CpuDeepPage() {
|
||||
<span className="icode">npm run build</span>를 실행해 보세요. 조용하던 코어들이
|
||||
일제히 100%로 치솟는 장관을 볼 수 있어요. 걸린 시간도 기록해 두세요 — 나중에
|
||||
장비가 바뀌면 비교해 보는 재미가 있습니다. (Gitea{' '}
|
||||
<span className="icode">edu.awesomedevapp.com</span>에서 클론할 수 있어요.)
|
||||
<span className="icode">edu.awesomedevapp.com:3000</span>에서 클론할 수 있어요.)
|
||||
</div>
|
||||
<p>
|
||||
하나 더 — 빌드 도중 그래프를 보면 <strong>모든 코어가 다 바쁜 구간</strong>과{' '}
|
||||
@ -333,8 +333,9 @@ export default function CpuDeepPage() {
|
||||
<p className="muted">
|
||||
이제 CPU 스펙표가 암호가 아니라 문장으로 읽혀요 — 명령어 사이클이라는 심장 박동,
|
||||
코어·스레드·클럭·캐시라는 주방의 구조, 스로틀링이라는 자기 보호, 그리고 이름
|
||||
해독법까지. 다음은 CPU가 재료를 가져오는 <strong>냉장고(메모리)와 창고(저장장치)</strong>
|
||||
차례예요 — <Link to="/learn/network"><strong>네트워크의 이해</strong></Link> 코스와
|
||||
해독법까지. 다음은 CPU가 재료를 가져오는{' '}
|
||||
<Link to="/learn/memory-storage"><strong>냉장고(메모리)와 창고(저장장치)</strong></Link>
|
||||
{' '}차례예요 — <Link to="/learn/network"><strong>네트워크의 이해</strong></Link> 코스와
|
||||
함께 들으면 "내 코드가 실행되는 무대" 전체가 그려집니다. 실습 ①·②에서 기록한
|
||||
숫자들은 멘토와의 주간 리뷰 때 가져와서 같이 해석해 보세요.
|
||||
</p>
|
||||
|
||||
@ -421,7 +421,7 @@ export default function DataModelingPage() {
|
||||
실제로 만들고 데이터를 꺼내는 언어가 궁금하다면{' '}
|
||||
<Link to="/learn/sql"><strong>SQL 첫걸음</strong></Link> 코스로,
|
||||
그 테이블을 백엔드 코드와 연결하는 법이 궁금하다면{' '}
|
||||
<Link to="/learn/backend"><strong>Spring Boot 백엔드 입문</strong></Link>으로
|
||||
<Link to="/learn/spring-intro"><strong>Spring Boot 백엔드 입문</strong></Link>으로
|
||||
이어 가세요. 쪽지 기능 ERD는 멘토 리뷰 후 과제 게시판에 제출하는 것도 잊지 말고요!
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@ -409,7 +409,7 @@ export default function DebuggingPage() {
|
||||
</div>
|
||||
<div className="tip">
|
||||
<b>직접 확인해 보기 ③</b> 이번 주에 만난 에러 하나를 골라, 위 템플릿대로
|
||||
<strong> edu.awesomedevapp.com의 Gitea 이슈</strong>로 실제로 작성해 보세요.
|
||||
<strong> Gitea(edu.awesomedevapp.com:3000) 이슈</strong>로 실제로 작성해 보세요.
|
||||
이미 해결한 에러여도 좋아요 — "시도한 것"까지 다 쓴 다음 멘토에게 링크를 보내고,
|
||||
"이 질문 받으면 바로 도와줄 수 있겠어요?"라고 피드백을 받아 보세요.
|
||||
</div>
|
||||
@ -423,7 +423,7 @@ export default function DebuggingPage() {
|
||||
시간을 <strong>멈추고</strong>(브레이크포인트), 용의자를 <strong>반씩 지우고</strong>(이분 탐색),
|
||||
사건을 <strong>재현하고</strong>, 막히면 <strong>답이 오는 질문</strong>을 쓸 수 있는
|
||||
탐정이에요. 디버깅으로 잡은 버그가 다시 돌아오지 못하게 막는 법 —{' '}
|
||||
<Link to="/learn/git"><strong>Git과 협업</strong></Link> 코스에서 커밋으로 수사 기록을
|
||||
<Link to="/learn/git-deep"><strong>Git과 협업</strong></Link> 코스에서 커밋으로 수사 기록을
|
||||
남기는 법을 이어서 배우고, 다음 과제에서 만나는 첫 에러에 오늘 배운 순서를 그대로
|
||||
적용해 보세요.
|
||||
</p>
|
||||
|
||||
@ -333,7 +333,7 @@ export default function DesignSystemPage() {
|
||||
<Code>{CODE_DZ03_TABLE}</Code>
|
||||
<div className="olist">
|
||||
<ol>
|
||||
<li>Gitea(edu.awesomedevapp.com)에서 <strong>티켓 DZ-03</strong>을 열고 본인을 담당자로 지정해요.</li>
|
||||
<li>Gitea(edu.awesomedevapp.com:3000)에서 <strong>티켓 DZ-03</strong>을 열고 본인을 담당자로 지정해요.</li>
|
||||
<li>위 표의 ①번부터 순서대로 채워요 — ①은 <span className="icode">global.css</span>, ②·③은 <span className="kbd">F12</span>가 무기예요.</li>
|
||||
<li>완성한 표를 DZ-03에 댓글로 올리고, "우리 플랫폼에 빠져 있다고 느낀 상태·토큰 1가지"도 함께 적어요.</li>
|
||||
<li>멘토 리뷰를 받으면 실습 완료! 지적받은 부분은 표를 고쳐서 다시 올려요.</li>
|
||||
|
||||
@ -251,7 +251,7 @@ export default function FilesPage() {
|
||||
</p>
|
||||
<Code>{CODE_HIDDEN}</Code>
|
||||
<p>
|
||||
여러분이 Gitea(<span className="icode">edu.awesomedevapp.com</span>)에서 클론한
|
||||
여러분이 Gitea(<span className="icode">edu.awesomedevapp.com:3000</span>)에서 클론한
|
||||
저장소 폴더에도 <span className="icode">.git</span>이라는 숨김 폴더가 있어요.
|
||||
커밋 하나하나의 역사가 전부 그 안에 들어 있죠 — <strong>그 폴더를 지우는 순간
|
||||
평범한 폴더로 돌아가 버립니다.</strong> "저장소를 복사했는데 Git이 안 돼요"의
|
||||
|
||||
@ -30,6 +30,7 @@ const CODE_PORT_DOOR = `포트를 '연다/닫는다'는 것의 진짜 의미
|
||||
서버 x.x.x.x (건물)
|
||||
├── :443 HTTPS [열림] ← 문지기: "443호 손님은 누구든 통과"
|
||||
├── :80 HTTP [열림] ← (들어오면 443으로 안내)
|
||||
├── :3000 Gitea [열림] ← 우리 Git 서버의 웹 창구
|
||||
├── :22 SSH [조건부] ← "사무실 IP에서 온 분만 통과"
|
||||
├── :5432 PostgreSQL [닫힘] ← "5432호요? 그런 방 없습니다" (묵묵부답)
|
||||
└── :8080 백엔드 [닫힘] ← 건물 안(같은 서버)에서만 노크 가능
|
||||
@ -74,6 +75,8 @@ const CODE_SECURITY_GROUP = `AWESOMEDEV 서버(AWS EC2 서울)의 보안그룹
|
||||
포트 대상 허용 범위 이유
|
||||
80 HTTP 전 세계(0.0.0.0/0) → Caddy가 443으로 안내
|
||||
443 HTTPS 전 세계(0.0.0.0/0) 웹 서비스니까 손님은 환영
|
||||
3000 Gitea(웹·clone) 전 세계(0.0.0.0/0) 사내 Git 서버 — 로그인으로 보호
|
||||
222 Gitea SSH 전 세계(0.0.0.0/0) SSH 방식 clone/push용 (키 인증)
|
||||
22 SSH(원격 접속) 지정한 IP만! 관리자 전용 뒷문
|
||||
|
||||
그 외 전부: 닫힘 (규칙에 없으면 = 차단)
|
||||
@ -117,7 +120,7 @@ const CODE_ATTACKS = `서버를 인터넷에 올리는 순간 실제로 벌어
|
||||
|
||||
const CODE_CHECKLIST = `AWESOMEDEV 서버 보안 체크리스트 — 새 서버를 열기 전 셀프 점검
|
||||
|
||||
[ ] 1. 보안그룹: 80/443만 전체 공개, 나머지는 전부 차단했는가?
|
||||
[ ] 1. 보안그룹: 서비스에 꼭 필요한 포트(80/443/3000)만 공개했는가?
|
||||
[ ] 2. SSH(22): 허용 IP를 지정했는가? (0.0.0.0/0 금지!)
|
||||
[ ] 3. SSH: 비밀번호 대신 키 파일 인증을 쓰는가?
|
||||
[ ] 4. DB(PostgreSQL): 외부 포트가 닫혀 있고, 접속 계정 권한이 최소인가?
|
||||
@ -255,7 +258,7 @@ export default function FirewallPage() {
|
||||
</div>
|
||||
</Section>
|
||||
|
||||
<Section n={4} title="우리 AWS 보안그룹 — 실제 규칙표" sub="80/443만 공개, SSH는 IP 제한 — 왜?">
|
||||
<Section n={4} title="우리 AWS 보안그룹 — 실제 규칙표" sub="필요한 문만 열고, SSH는 IP 제한 — 왜?">
|
||||
<p>
|
||||
이제 진짜 우리 이야기를 해볼게요. AWESOMEDEV의 서버는 <strong>AWS EC2(서울)</strong>에서
|
||||
돌고 있고, AWS에서 방화벽 역할을 하는 게 <strong>보안그룹(Security Group)</strong>이에요.
|
||||
@ -360,7 +363,7 @@ export default function FirewallPage() {
|
||||
<h3 style={{ marginBottom: 6 }}>🛡️ 여기까지 왔다면</h3>
|
||||
<p className="muted">
|
||||
이제 방화벽이 무엇을 검사하는지, 포트를 여닫는다는 게 무슨 뜻인지, 그리고
|
||||
우리 AWS 서버가 <strong>왜 80/443만 열고 SSH를 IP로 잠갔는지</strong>까지
|
||||
우리 AWS 서버가 <strong>왜 필요한 포트만 열고 SSH를 IP로 잠갔는지</strong>까지
|
||||
설명할 수 있게 됐어요. 핵심은 한 문장 — <strong>"필요한 문만 열고, 기본은
|
||||
잠금."</strong> 아직 <Link to="/learn/network"><strong>네트워크의 이해</strong></Link> 코스를
|
||||
안 봤다면 IP·포트 개념을 먼저 다지고 오세요. 다음으로는 이 문단속 위에서
|
||||
|
||||
@ -276,7 +276,7 @@ export default function GitDeepPage() {
|
||||
<b>직접 확인해 보기</b> 우리 학습 플랫폼 저장소를 클론받았다면 그 폴더에서{' '}
|
||||
<span className="icode">git log --oneline</span>을 쳐 보세요. 지금까지 찍힌
|
||||
사진(커밋)들의 목록이 최신순으로 나와요. 맨 위 7자리 코드가 바로 그 사진의
|
||||
고유 번호(해시)입니다. Gitea(edu.awesomedevapp.com)에서 같은 저장소의
|
||||
고유 번호(해시)입니다. Gitea(edu.awesomedevapp.com:3000)에서 같은 저장소의
|
||||
커밋 목록을 열어 두 화면이 똑같은지 비교해 보세요.
|
||||
</div>
|
||||
</Section>
|
||||
@ -438,7 +438,7 @@ export default function GitDeepPage() {
|
||||
</div>
|
||||
<Code>{CODE_CONFLICT_LAB}</Code>
|
||||
<div className="tip">
|
||||
<b>한 걸음 더</b> — 같은 실습을 Gitea(edu.awesomedevapp.com)의 개인 연습
|
||||
<b>한 걸음 더</b> — 같은 실습을 Gitea(edu.awesomedevapp.com:3000)의 개인 연습
|
||||
저장소에 push해서, 브랜치 두 개로 PR을 만들어 보세요. 웹 화면에서
|
||||
"충돌이 있어 자동 머지 불가" 표시가 뜨는 것까지 보면, 로컬과 원격의
|
||||
충돌 경험이 하나로 이어집니다.
|
||||
|
||||
@ -315,7 +315,7 @@ export default function IconsImagesPage() {
|
||||
가르는 디테일이에요.
|
||||
</p>
|
||||
<div className="tip">
|
||||
<b>직접 확인해 보기</b> 우리 학습 플랫폼과 Gitea(<span className="icode">edu.awesomedevapp.com</span>)의
|
||||
<b>직접 확인해 보기</b> 우리 학습 플랫폼과 Gitea(<span className="icode">edu.awesomedevapp.com:3000</span>)의
|
||||
탭 아이콘을 비교해 보세요. 그리고 아무 페이지에서 <span className="kbd">F12</span> →
|
||||
<span className="kbd">Elements</span> 탭에서 <span className="icode"><head></span>를
|
||||
펼쳐 <span className="icode">link rel="icon"</span>과
|
||||
@ -358,7 +358,7 @@ export default function IconsImagesPage() {
|
||||
이제 그림 파일의 두 종류(비트맵·벡터), @2x가 필요한 이유, 좋은 아이콘의
|
||||
3조건, <strong>저작권 확인 습관</strong>, 최적화 순서, 파비콘·OG까지 —
|
||||
화면 위의 그림을 다루는 기본기를 갖췄어요. 다음은 이 그림들이 놓일 화면
|
||||
전체의 배치를 배울 차례 — <Link to="/learn/design"><strong>디자인 기초</strong></Link> 코스에서
|
||||
전체의 배치를 배울 차례 — <Link to="/learn/layout"><strong>레이아웃과 그리드</strong></Link> 코스에서
|
||||
여백과 정렬을 이어서 배우고, <Link to="/learn/coding"><strong>코딩 기초</strong></Link>에서
|
||||
SVG를 컴포넌트로 다루는 법까지 연결해 보세요.
|
||||
</p>
|
||||
|
||||
@ -386,7 +386,7 @@ export default function JavaBasicsPage() {
|
||||
</div>
|
||||
<Code>{CODE_HELLO}</Code>
|
||||
<div className="tip">
|
||||
<b>직접 확인해 보기 ②</b> 우리 Gitea(<span className="icode">edu.awesomedevapp.com</span>)에서
|
||||
<b>직접 확인해 보기 ②</b> 우리 Gitea(<span className="icode">edu.awesomedevapp.com:3000</span>)에서
|
||||
백엔드 저장소를 열고, <span className="icode">domain</span> 폴더의 클래스 아무거나
|
||||
하나(예: <span className="icode">User.java</span>)를 골라 아래 체크리스트를 채워 보세요.
|
||||
읽기만 하는 실습이니 마음껏 열어 봐도 됩니다.
|
||||
@ -407,7 +407,7 @@ export default function JavaBasicsPage() {
|
||||
객체 → 메서드 → 생성자</strong>로 이어지는 뼈대, 데이터를 지키는
|
||||
<strong> private</strong>의 이유, <strong>List/Map/try-catch</strong>라는 실무
|
||||
도구까지 손에 넣었어요. 우리 백엔드 코드의 "단어"는 다 배운 셈입니다. 다음은
|
||||
그 단어들로 쓰인 "문장" — <Link to="/learn/spring-boot"><strong>Spring Boot
|
||||
그 단어들로 쓰인 "문장" — <Link to="/learn/spring-intro"><strong>Spring Boot
|
||||
입문</strong></Link> 코스에서 이 클래스들이 어떻게 API가 되는지 이어서 배워 보세요.
|
||||
실습 ②의 한 문장 요약은 멘토 확인 과제로 제출!
|
||||
</p>
|
||||
|
||||
@ -423,7 +423,7 @@ export default function LinuxAdvancedPage() {
|
||||
이제 여러분은 환경변수로 설정을 주입하고, 스크립트와 크론으로 <strong>서버가 스스로
|
||||
일하게</strong> 만들고, 문제가 생기면 <strong>로그부터 여는</strong> 사람이 됐어요.
|
||||
명령어를 아는 것과 운영 감각이 있는 것의 차이가 바로 이것입니다. 다음은 이 서버 위에서
|
||||
돌아가는 데이터의 집 — <Link to="/learn/database"><strong>데이터베이스 기초</strong></Link>
|
||||
돌아가는 데이터의 집 — <Link to="/learn/sql"><strong>데이터베이스 기초</strong></Link>
|
||||
코스로 이어 가거나, 멘토에게 <strong>"배포 스크립트 함께 읽기"</strong> 과제를 요청해
|
||||
오늘 배운 if·for·파이프를 실전 코드에서 찾아보세요.
|
||||
</p>
|
||||
|
||||
@ -299,16 +299,14 @@ export default function MainboardPowerPage() {
|
||||
있어요. 심장이 멈추면 한 장기가 아니라 온몸이 위험해지는 것과 같죠.
|
||||
10만 원 아끼려다 100만 원어치 부품을 태우는, 가성비가 가장 나쁜 절약입니다.
|
||||
</p>
|
||||
<div className="olist">
|
||||
<ol>
|
||||
<li><strong>보호 회로의 유무</strong> — 좋은 파워엔 과전압(OVP)·과전류(OCP)·단락(SCP)
|
||||
보호가 들어 있어 사고가 나도 스스로 꺼지며 다른 부품을 지켜요. 싸구려는 이걸 생략합니다.</li>
|
||||
<li><strong>표기 뻥튀기</strong> — 섹션 5에서 본 '최대 출력' 눈속임. 정격 300W짜리에
|
||||
"600W"라고 크게 적어 파는 제품이 실제로 있어요.</li>
|
||||
<li><strong>조용한 증상</strong> — 죽기 전엔 게임 중 갑자기 꺼짐, 이유 없는 재부팅 같은
|
||||
애매한 증상으로 나타나서 원인 찾기도 어렵습니다.</li>
|
||||
</ol>
|
||||
</div>
|
||||
<ol className="olist">
|
||||
<li><strong>보호 회로의 유무</strong> — 좋은 파워엔 과전압(OVP)·과전류(OCP)·단락(SCP)
|
||||
보호가 들어 있어 사고가 나도 스스로 꺼지며 다른 부품을 지켜요. 싸구려는 이걸 생략합니다.</li>
|
||||
<li><strong>표기 뻥튀기</strong> — 섹션 5에서 본 '최대 출력' 눈속임. 정격 300W짜리에
|
||||
"600W"라고 크게 적어 파는 제품이 실제로 있어요.</li>
|
||||
<li><strong>조용한 증상</strong> — 죽기 전엔 게임 중 갑자기 꺼짐, 이유 없는 재부팅 같은
|
||||
애매한 증상으로 나타나서 원인 찾기도 어렵습니다.</li>
|
||||
</ol>
|
||||
<div className="warn">
|
||||
<b>기억할 한 줄</b> "파워에 쓰는 돈은 성능이 아니라 <strong>보험</strong>이다."
|
||||
견적 전체의 10~15%는 파워에 배정하고, 검증된 제조사의 정격·80PLUS 인증 제품을 고르세요.
|
||||
@ -327,15 +325,13 @@ export default function MainboardPowerPage() {
|
||||
<span className="kbd">Enter</span>. 아래 항목들을 찾아 적어 보세요.
|
||||
</div>
|
||||
<Code>{CODE_MSINFO}</Code>
|
||||
<div className="olist">
|
||||
<ol>
|
||||
<li>찾은 모델명을 검색해서 제조사 공식 페이지를 열어 보세요.</li>
|
||||
<li>스펙 표에서 <strong>폼팩터</strong>(섹션 2), <strong>RAM 슬롯 수</strong>(섹션 1),
|
||||
<strong> 후면 포트 구성</strong>(섹션 3)을 확인 — 오늘 배운 지도가 실제 스펙 표를
|
||||
읽는 안경이 됩니다.</li>
|
||||
<li>"BIOS 모드"가 UEFI로 나오는지도 확인해 보세요(섹션 4).</li>
|
||||
</ol>
|
||||
</div>
|
||||
<ol className="olist">
|
||||
<li>찾은 모델명을 검색해서 제조사 공식 페이지를 열어 보세요.</li>
|
||||
<li>스펙 표에서 <strong>폼팩터</strong>(섹션 2), <strong>RAM 슬롯 수</strong>(섹션 1),
|
||||
<strong> 후면 포트 구성</strong>(섹션 3)을 확인 — 오늘 배운 지도가 실제 스펙 표를
|
||||
읽는 안경이 됩니다.</li>
|
||||
<li>"BIOS 모드"가 UEFI로 나오는지도 확인해 보세요(섹션 4).</li>
|
||||
</ol>
|
||||
</Section>
|
||||
|
||||
<div className="step-card">
|
||||
|
||||
@ -119,7 +119,7 @@ const CODE_MISTAKES = `모바일에서 가장 흔한 실수 2가지 — 우리
|
||||
② 번이 낯익다면 정상입니다 — 우리 플랫폼 FE-06 티켓이 바로
|
||||
"모바일에서 표가 화면을 뚫고 나가는" 가로 스크롤 버그예요.`;
|
||||
|
||||
const CODE_WEB_VS_APP = `모바일 웹 vs 네이티브 앱 — 어썸데브는 둘 다 합니다
|
||||
const CODE_WEB_VS_APP = `모바일 웹 vs 네이티브 앱 — 두 갈래 길 비교
|
||||
|
||||
모바일 웹 (React) 앱 (React Native · Flutter)
|
||||
────────────────────────────────────────────────────────────
|
||||
@ -326,7 +326,7 @@ export default function MobileDesignPage() {
|
||||
</div>
|
||||
</Section>
|
||||
|
||||
<Section n={6} title="웹 vs 앱" sub="React Native·Flutter — 우리 회사가 둘 다 하는 이유">
|
||||
<Section n={6} title="웹 vs 앱" sub="React Native·Flutter — 두 길의 차이 알아보기">
|
||||
<p>
|
||||
같은 서비스라도 <strong>모바일 웹</strong>으로 낼지 <strong>네이티브 앱</strong>으로
|
||||
낼지는 큰 갈림길이에요. 웹은 URL 하나로 바로 열리는 <strong>노점</strong> — 진입은
|
||||
@ -336,8 +336,8 @@ export default function MobileDesignPage() {
|
||||
</p>
|
||||
<Code>{CODE_WEB_VS_APP}</Code>
|
||||
<p>
|
||||
어썸데브는 React로 웹을 만들고, <strong>React Native와 Flutter로 앱도
|
||||
만듭니다</strong> — 남 얘기가 아니라 여러분이 하게 될 수도 있는 업무예요.
|
||||
어썸데브는 React로 웹을 만들어요. 그리고 <strong>React Native는 React 지식을
|
||||
그대로 살릴 수 있는 길</strong>이라, 언젠가 앱 프로젝트를 만나도 낯설지 않을 거예요.
|
||||
좋은 소식: 지금 이 코스에서 배운 원칙들은 도구와 무관하게 전부 그대로 통합니다.
|
||||
화면을 누르는 건 언제나 사람의 엄지니까요.
|
||||
</p>
|
||||
|
||||
@ -426,9 +426,9 @@ export default function OpsBasicsPage() {
|
||||
<p className="muted">
|
||||
이제 여러분은 장애의 세 가지 신호를 구분하고, <strong>서버 → 컨테이너 → 로그 → DB</strong> 순서로
|
||||
원인을 좁히고, 증거를 남기며 재시작하고, 3-2-1 백업과 5줄 보고서까지 아는 사람이 됐어요.
|
||||
서버와 Docker가 아직 낯설다면 <Link to="/learn/server"><strong>서버와 배포 기초</strong></Link> 코스를
|
||||
서버와 Docker가 아직 낯설다면 <Link to="/learn/server-anatomy"><strong>서버 해부</strong></Link> 코스를
|
||||
먼저 복습하고, 로그 속 DB 에러를 더 깊이 이해하고 싶다면{' '}
|
||||
<Link to="/learn/database"><strong>데이터베이스 기초</strong></Link>로 이어 가세요.
|
||||
<Link to="/learn/sql"><strong>SQL 첫걸음</strong></Link>으로 이어 가세요.
|
||||
그리고 다음 <strong>A2 보고</strong>에서 오늘 배운 5줄 골격을 꼭 한번 써 보기!
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@ -144,7 +144,7 @@ const CODE_SERVER_LINUX = `왜 서버는 거의 다 리눅스일까?
|
||||
이유 5) Docker의 고향 컨테이너 기술 자체가 리눅스 커널 기능 기반
|
||||
|
||||
여러분이 매일 쓰는 것들 뒤에도:
|
||||
학습 플랫폼(이 페이지!) · Gitea(edu.awesomedevapp.com) ·
|
||||
학습 플랫폼(이 페이지!) · Gitea(edu.awesomedevapp.com:3000) ·
|
||||
PostgreSQL · Caddy — 전부 리눅스 위의 프로세스(섹션 3!)로 돌고 있어요.`;
|
||||
|
||||
// ── 이 페이지 안에서만 쓰는 작은 부품들 ──
|
||||
|
||||
@ -245,7 +245,7 @@ export default function PortfolioPage() {
|
||||
휘발되거든요 — 특히 "고민(A)" 부분이 제일 먼저 사라져요.
|
||||
</p>
|
||||
<div className="tip">
|
||||
<b>직접 확인해 보기</b> 지금 우리 Gitea(<span className="icode">edu.awesomedevapp.com</span>)에
|
||||
<b>직접 확인해 보기</b> 지금 우리 Gitea(<span className="icode">edu.awesomedevapp.com:3000</span>)에
|
||||
로그인해서 내가 올린 커밋과 닫은 이슈 목록을 열어 보세요. 그중 "이건 좀 고생했는데"
|
||||
싶은 것 1개를 골라, 그 이슈에 <strong>문제/해결 두 줄 코멘트</strong>를 지금 달아 보세요.
|
||||
방금 포트폴리오 한 조각을 저장한 거예요.
|
||||
@ -356,7 +356,7 @@ export default function PortfolioPage() {
|
||||
그 이야기를 <strong>STAR 틀</strong>에 담는 법, 그리고 수습 8주의 산출물이
|
||||
이미 재료라는 걸 알게 됐어요. 오늘 쓴 초안은 종합 프로젝트가 끝날 때마다 한 장씩
|
||||
늘려 가세요. 대표작을 더 단단하게 만들고 싶다면{' '}
|
||||
<Link to="/learn/git"><strong>Git과 협업</strong></Link> 코스에서 커밋 메시지와
|
||||
<Link to="/learn/git-deep"><strong>Git과 협업</strong></Link> 코스에서 커밋 메시지와
|
||||
저장소 관리 습관을, <Link to="/learn/coding"><strong>코딩 기초</strong></Link>{' '}
|
||||
코스에서 트러블슈팅에 쓸 실력을 이어서 다져 보세요.
|
||||
</p>
|
||||
|
||||
@ -185,7 +185,7 @@ const CODE_PRACTICE = `STUDY.md 미니 과제 3종 — 오늘 배운 걸 손으
|
||||
배열 상수를 만들어 .map()으로 <li> 목록 렌더링.
|
||||
key를 일부러 빼고 저장 → 브라우저 콘솔(F12)의 경고를 직접 목격!
|
||||
|
||||
제출: Gitea(edu.awesomedevapp.com)에 브랜치 만들어 커밋 & PR.
|
||||
제출: Gitea(edu.awesomedevapp.com:3000)에 브랜치 만들어 커밋 & PR.
|
||||
멘토가 코드 리뷰로 피드백을 답니다 — 실무 흐름 그대로!`;
|
||||
|
||||
// ── 이 페이지 안에서만 쓰는 작은 부품들 ──
|
||||
|
||||
@ -364,7 +364,7 @@ export default function ServerAnatomyPage() {
|
||||
PostgreSQL)라는 것, 그리고 몰려드는 요청을 <strong>스레드 풀로 버티고 스케일 업/아웃으로
|
||||
키운다</strong>는 것까지 알게 됐어요. 무엇보다, 내 PC로 서버를 직접 켜고 꺼 봤죠.
|
||||
다음은 그 릴레이의 마지막 주자 — 데이터를 보관하는 창고의 속을 여는{' '}
|
||||
<Link to="/learn/database"><strong>데이터베이스 기초</strong></Link> 코스로 이어 가세요.
|
||||
<Link to="/learn/sql"><strong>데이터베이스 기초</strong></Link> 코스로 이어 가세요.
|
||||
멘토 과제: 오늘 배운 3계층 그림을 보지 않고 종이에 그려서 멘토에게 설명해 보기!
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@ -256,7 +256,7 @@ export default function SpringIntroPage() {
|
||||
</p>
|
||||
<Code>{CODE_CONSTRUCTOR_DI}</Code>
|
||||
<div className="tip">
|
||||
<b>직접 확인해 보기</b> 우리 백엔드 저장소(edu.awesomedevapp.com의 Gitea)에서
|
||||
<b>직접 확인해 보기</b> 우리 백엔드 저장소(edu.awesomedevapp.com:3000의 Gitea)에서
|
||||
<span className="icode"> AuthController.java</span>를 열어 보세요. 클래스 위의
|
||||
<span className="icode"> @RestController</span>, 생성자에서 받는
|
||||
<span className="icode"> final</span> 필드들 — 방금 배운 모양 그대로인지 눈으로
|
||||
@ -370,9 +370,9 @@ export default function SpringIntroPage() {
|
||||
이제 스프링이 객체를 조립해 주는 원리(DI), 어노테이션 읽는 법, 요청이 세 층을
|
||||
여행하는 길, 설정과 JPA까지 — 우리 백엔드의 뼈대를 전부 훑었어요. 심지어 API도
|
||||
하나 만들었죠. 다음은 그 데이터가 잠드는 곳 —{' '}
|
||||
<Link to="/learn/database"><strong>데이터베이스 기초</strong></Link> 코스에서
|
||||
<Link to="/learn/sql"><strong>데이터베이스 기초</strong></Link> 코스에서
|
||||
PostgreSQL과 테이블 설계를 이어서 배우고, 실습에서 만든 API는{' '}
|
||||
<Link to="/study"><strong>STUDY 과제</strong></Link>로 제출해 멘토 리뷰를 받아
|
||||
<Link to="/assignments"><strong>STUDY 과제</strong></Link>로 제출해 멘토 리뷰를 받아
|
||||
보세요.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@ -459,7 +459,7 @@ export default function SqlIntermediatePage() {
|
||||
NULL에 속지 않고, 인덱스와 EXPLAIN으로 <strong>왜 느린지 진단</strong>하고,
|
||||
트랜잭션으로 <strong>안전하게 바꾸는</strong> 법까지 알게 됐어요.
|
||||
다음 걸음은 두 갈래 — 여러 테이블을 이어 붙이는 <strong>JOIN</strong>을 파고들거나,{' '}
|
||||
<Link to="/learn/backend"><strong>백엔드 기초</strong></Link> 코스에서
|
||||
<Link to="/learn/spring-intro"><strong>Spring Boot 입문</strong></Link> 코스에서
|
||||
Spring Boot가 이 쿼리들을 어떻게 대신 써 주는지(JPA) 이어서 배워 보세요.
|
||||
완성한 실습 쿼리는 과제 게시판에 제출해 멘토 피드백을 받아 보는 것, 잊지 말고요!
|
||||
</p>
|
||||
|
||||
@ -83,7 +83,8 @@ const CODE_PORTS = `잘 알려진 포트 — 전부 우리 회사(AWESOMEDEV)에
|
||||
────────────────────────────────────────────────────────
|
||||
22 TCP SSH AWS EC2(서울) 서버에 원격 접속할 때
|
||||
80 TCP HTTP Caddy가 받아서 443으로 돌려보냄(리다이렉트)
|
||||
443 TCP HTTPS 학습 플랫폼·Gitea(edu.awesomedevapp.com) 접속
|
||||
443 TCP HTTPS 학습 플랫폼(edu.awesomedevapp.com) 접속
|
||||
3000 TCP HTTP(웹앱) Gitea(edu.awesomedevapp.com:3000) 접속
|
||||
5432 TCP PostgreSQL 백엔드(Spring Boot)가 DB랑 대화하는 문
|
||||
8080 TCP HTTP(대체) Spring Boot 개발 서버의 단골 기본 포트
|
||||
|
||||
|
||||
@ -130,13 +130,13 @@ const CODE_RUN_TESTS = `# 우리 백엔드 테스트 전체 실행 — 두 가
|
||||
# → 아래 실행 창에 초록 체크(✓)들이 주르륵!
|
||||
|
||||
# 방법 2) 터미널에서 (backend 폴더에서)
|
||||
./gradlew test
|
||||
mvn test
|
||||
|
||||
# 이런 결과가 보이면 성공:
|
||||
ProgressServiceTest > 이미_완료한_강의를_다시_완료해도_진도율은_그대로다 PASSED
|
||||
ProgressServiceTest > 모든_강의를_완료하면_진도율은_정확히_100이다 PASSED
|
||||
[INFO] Running dev.awesomedev.mirim.service.ProgressServiceTest
|
||||
[INFO] Tests run: 5, Failures: 0, Errors: 0, Skipped: 0
|
||||
...
|
||||
BUILD SUCCESSFUL`;
|
||||
[INFO] BUILD SUCCESS`;
|
||||
|
||||
const CODE_QA02 = `# 도전: 테스트 케이스 1개 추가하기 (티켓 QA-02)
|
||||
|
||||
@ -409,9 +409,9 @@ export default function TestingPage() {
|
||||
<strong> 3막 구조</strong>, 버그가 사는 <strong>경계값</strong>, 그리고 테스트라는
|
||||
안전그물 위에서만 가능한 <strong>리팩터링</strong>까지 — 직접 ▶를 눌러 초록불과
|
||||
빨간불을 모두 봤다면 이 코스는 통과입니다. 도전 과제(QA-02)를 끝냈다면{' '}
|
||||
<Link to="/learn/git"><strong>Git 협업 기초</strong></Link> 코스에서 방금 만든
|
||||
<Link to="/learn/git-deep"><strong>Git 협업 기초</strong></Link> 코스에서 방금 만든
|
||||
테스트를 커밋·푸시해 리뷰받는 흐름으로 이어 보세요. 백엔드 코드 자체가 궁금해졌다면{' '}
|
||||
<Link to="/learn/backend"><strong>Spring Boot 백엔드 입문</strong></Link>이 다음 정거장입니다.
|
||||
<Link to="/learn/spring-intro"><strong>Spring Boot 백엔드 입문</strong></Link>이 다음 정거장입니다.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -320,7 +320,7 @@ export default function ToolCapturePage() {
|
||||
이제 <strong>찍고(Win+Shift+S) → 담고(스크롤·창 캡처) → 움직이고(GIF·녹화) →
|
||||
가리키고(주석) → 지키는(개인정보 점검)</strong> 다섯 동작이 손에 들어왔어요.
|
||||
이 기술은 앞으로 모든 코스의 과제 제출에서 계속 쓰입니다.
|
||||
다음은 캡처를 첨부할 무대 — <Link to="/learn/git"><strong>Git과 Gitea</strong></Link> 코스에서
|
||||
다음은 캡처를 첨부할 무대 — <Link to="/learn/git-deep"><strong>Git과 Gitea</strong></Link> 코스에서
|
||||
이슈·PR에 리포트를 올리는 협업 흐름을 이어서 배워 보세요.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@ -383,7 +383,7 @@ export default function ToolGiteaPage() {
|
||||
이제 Gitea는 코드 창고가 아니라 <strong>일이 흐르는 본부</strong>로 보일 거예요 —
|
||||
할 일은 이슈로, 작업은 브랜치로, 합류는 PR과 리뷰로, 변화는 diff로 읽는 흐름을
|
||||
전부 손으로 해봤으니까요. 이 흐름의 밑바닥에서 도는 Git 자체가 궁금하다면{' '}
|
||||
<Link to="/learn/git"><strong>Git 기초</strong></Link> 코스로, 방금 만든 이슈처럼
|
||||
<Link to="/learn/git-deep"><strong>Git 기초</strong></Link> 코스로, 방금 만든 이슈처럼
|
||||
실제 과제를 받아 PR까지 완주해 보고 싶다면{' '}
|
||||
<Link to="/assignments"><strong>과제 게시판</strong></Link>에서 첫 티켓을
|
||||
골라 보세요. 여러분의 다음 초록 칸을 기다릴게요.
|
||||
|
||||
@ -62,7 +62,7 @@ const CODE_GIT_PANEL = `IntelliJ 안에서 끝내는 Git 일과
|
||||
|
||||
Alt + 9 Git 도구창 — 커밋 이력(Log)을 그래프로 구경
|
||||
Ctrl + K 커밋 창 — 바뀐 파일 체크하고 메시지 쓰고 커밋
|
||||
Ctrl + Shift + K 푸시 — Gitea(edu.awesomedevapp.com)로 올리기
|
||||
Ctrl + Shift + K 푸시 — Gitea(edu.awesomedevapp.com:3000)로 올리기
|
||||
|
||||
편집기 왼쪽 여백(거터)의 색 막대도 Git 정보예요:
|
||||
초록 = 새로 추가된 줄 파랑 = 수정된 줄 회색 화살표 = 삭제된 줄
|
||||
@ -357,8 +357,8 @@ export default function ToolIntellijPage() {
|
||||
자동 수리(<strong>Alt+Enter</strong>), 코드 여행(<strong>Ctrl+클릭</strong>),
|
||||
시간 정지(<strong>디버거</strong>), 비밀 보험(<strong>로컬 히스토리</strong>)까지
|
||||
장착됐어요. 도구는 결국 쓰면서 늘어요 — 오늘 배운 단축키를{' '}
|
||||
<Link to="/learn/git"><strong>Git 코스</strong></Link>의 커밋 습관,{' '}
|
||||
<Link to="/learn/database"><strong>데이터베이스 코스</strong></Link>의 SQL 연습과
|
||||
<Link to="/learn/git-deep"><strong>Git 코스</strong></Link>의 커밋 습관,{' '}
|
||||
<Link to="/learn/sql"><strong>SQL 입문 코스</strong></Link>의 SQL 연습과
|
||||
묶어서, 다음 백엔드 과제에서 마우스 없이 하루를 버텨 보는 걸 첫 목표로 삼아 보세요.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@ -281,7 +281,7 @@ export default function ToolNotionPage() {
|
||||
"시작 전 → 진행 중 → 완료"로 드래그하며 옮길 수 있어서, 할 일이 눈에 확 들어옵니다.
|
||||
</p>
|
||||
<div className="tip">
|
||||
<b>연결해서 생각하기</b> 나중에 <Link to="/learn/database"><strong>데이터베이스
|
||||
<b>연결해서 생각하기</b> 나중에 <Link to="/learn/sql"><strong>데이터베이스
|
||||
코스</strong></Link>에서 PostgreSQL을 배울 때 "아, 노션 데이터베이스의 필터가
|
||||
SQL의 WHERE고, 정렬이 ORDER BY구나"라고 연결되는 순간이 올 거예요.
|
||||
도구는 달라도 데이터를 다루는 사고방식은 하나입니다.
|
||||
@ -363,7 +363,7 @@ export default function ToolNotionPage() {
|
||||
블록으로 적고, 구조로 정리하고, 검색으로 꺼내 쓰고, 링크로 나눈다 —
|
||||
이 네 가지가 오늘의 전부입니다. 앞으로 모든 코스에서 배우는 내용을
|
||||
오늘 만든 TIL에 쌓아 보세요. 다음 도구가 궁금하다면{' '}
|
||||
<Link to="/learn/git"><strong>Git과 Gitea로 협업하기</strong></Link> 코스에서
|
||||
<Link to="/learn/git-deep"><strong>Git과 Gitea로 협업하기</strong></Link> 코스에서
|
||||
"코드의 기록"을 남기는 법을 이어서 배우고, 각 코스의 과제를
|
||||
오늘 만든 <strong>과제 트래커</strong>에 등록해 관리해 보세요.
|
||||
</p>
|
||||
|
||||
@ -372,7 +372,7 @@ export default function ToolTerminalPage() {
|
||||
Windows Terminal 한 창에서 탭과 분할로 오가며, 포트를 점거한 유령 프로세스도
|
||||
직접 잡을 수 있게 됐어요. 터미널은 <strong>모든 개발 도구의 현관문</strong> —
|
||||
다음은 이 문으로 들어가 쓰는 첫 번째 도구,{' '}
|
||||
<Link to="/learn/git"><strong>Git과 버전 관리</strong></Link> 코스로 이어 가세요.
|
||||
<Link to="/learn/git-deep"><strong>Git과 버전 관리</strong></Link> 코스로 이어 가세요.
|
||||
방금 만든 Git Bash 탭이 바로 그 교실입니다.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@ -283,7 +283,7 @@ export default function ToolVscodePage() {
|
||||
<div className="warn">
|
||||
<b>커밋 전 diff 확인은 습관으로!</b> 실수로 딸려 들어간 <span className="icode">console.log</span>,
|
||||
테스트하려고 바꿔 둔 값 같은 것들이 diff 화면에서 다 걸립니다.
|
||||
우리 Gitea(edu.awesomedevapp.com)에 올라간 커밋은 팀 전체가 보는 기록이에요 —
|
||||
우리 Gitea(edu.awesomedevapp.com:3000)에 올라간 커밋은 팀 전체가 보는 기록이에요 —
|
||||
"무엇을 올리는지 모르고 올리는" 일만은 피해 주세요.
|
||||
</div>
|
||||
</Section>
|
||||
@ -352,7 +352,7 @@ export default function ToolVscodePage() {
|
||||
<p className="muted">
|
||||
이제 에디터가 "코드 치는 메모장"에서 <strong>탐색·편집·실행·커밋을 한 번에 하는
|
||||
작업대</strong>가 됐어요. 섹션 4에서 맛본 Git을 제대로 배우고 싶다면{' '}
|
||||
<Link to="/learn/git"><strong>Git과 협업</strong></Link> 코스로,
|
||||
<Link to="/learn/git-deep"><strong>Git과 협업</strong></Link> 코스로,
|
||||
갈아 둔 칼로 바로 요리를 시작하고 싶다면{' '}
|
||||
<Link to="/learn/coding"><strong>코딩 기초</strong></Link> 코스의 과제를
|
||||
오늘 배운 단축키만으로 해결해 보세요.
|
||||
|
||||
@ -273,7 +273,7 @@ export default function UserResearchPage() {
|
||||
제품이 고쳐져야 할 가장 값진 자리입니다.
|
||||
</p>
|
||||
<div className="tip">
|
||||
<b>관찰 연습</b> 오늘 동료가 플랫폼이나 Gitea(edu.awesomedevapp.com)를 쓰는
|
||||
<b>관찰 연습</b> 오늘 동료가 플랫폼이나 Gitea(edu.awesomedevapp.com:3000)를 쓰는
|
||||
모습을 어깨너머로 1분만 지켜보세요(허락은 받고요!). 마우스가 헤매는 곳,
|
||||
한숨이 나오는 순간, 같은 버튼을 두 번 누르는 장면 — 본인은 불편하다고
|
||||
말한 적 없는 것들이 보이기 시작할 거예요.
|
||||
|
||||
@ -391,7 +391,7 @@ export default function WifiSecurityPage() {
|
||||
무력화하는 방패</strong>입니다. 세상에서 가성비가 가장 좋은 보안 습관이에요.
|
||||
</p>
|
||||
<div className="tip">
|
||||
<b>직접 확인해 보기</b> 우리 Gitea(<span className="icode">edu.awesomedevapp.com</span>)에
|
||||
<b>직접 확인해 보기</b> 우리 Gitea(<span className="icode">edu.awesomedevapp.com:3000</span>)에
|
||||
로그인 → 우상단 프로필 → <span className="kbd">설정</span> →
|
||||
<span className="kbd">보안</span>에서 <strong>2단계 인증(TOTP) 등록</strong>을 켜 보세요.
|
||||
폰에 인증 앱을 설치하고 QR을 찍으면 끝 — 이때 함께 발급되는
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user