diff --git a/README.md b/README.md index a919b470..fc9e0581 100644 --- a/README.md +++ b/README.md @@ -1,365 +1,12 @@ -# github_blog - -깃헙 정적 페이지 블로그 프로젝트 -_ 현재 이 프로젝트는 위니브로 이관되어 관리중입니다. -_ 개인 repo는 위니브 회사 repo로 이관되어 더이상 업데이트 되지 않습니다. - -- 목표 - - - github에서 fork로 바로 blog를 만들 수 있는 정적 페이지 제공 프로젝트 - - 학생에게 프로젝트 양식 샘플 제공(https://github.com/weniv/project_sample_repo), 개인 repo로 연결하여 양식 제공 중 - - 추후 이 README는 프로젝트 양식이 아니라 메뉴얼 양식으로 변경할 수 있음 - - 회사 주피터 노트북 등 지적 재산을 누적하기 위한 블로그 프로젝트 - -- 사용방법 - - 1. github pages를 활성화 해주세요. - 2. 글을 작성하고 싶으면 `blog`에 `[date]_[title]_[category]_[thumnail]_[description].md` 형식(`md`, `ipynb` 호환)으로 글을 작성해주세요. 섬네일을 비우고 싶다면 `[]`와 같이 빈 값으로 주세요. - 3. 추가 메뉴를 만들고 싶으면 `menu` 폴더에 `사용하고싶은 메뉴 이름.html` 형식으로 저장하면 메뉴로 생성됩니다. - -- 서비스 URL 정보 - - - 실행 URL: https://weniv.github.io/weniv_blog/ - - blog github repo: https://github.com/weniv/github_blog - -- 기존 GitHub 블로그와 비교 - - - 기존 지킬 블로그에 비해 사용법이 단순 - - fork 후 pages 설정만 하면 blog 제작 가능 - - 커스터마이징에 난이도 단순 - - config.js 파일 수정으로 커스터마이징 - - style 파일 수정으로 커스터마이징 - - 빌드 시스템으로 되어 있지 않아 JS를 알면 직접 커스터마이징 가능 - - 블로그 글을 컴파일 없이 확인 가능 - - ipynb에 대한 블로깅 가능 - -- 구조 - -```mermaid -graph LR - %% Local Utils - A[Client] -->|Load Utilities| B[JS/utils.js] - A -->|스타일 로드| C[style/globalStyle.js] - - %% CDN - A -->|Load Libraries| D[CDN/marked.min.js] - A -->|Load Libraries| E[CDN/highlight.min.js] - E -->|Highlight Syntax _ 현재 파이썬만 지원| F[CDN/python.min.js] - A -->|Load Libraries| G[CDN/tailwind.css] - - %% Request - A -->|Request| H[JS/config.js] - H --> I[JS/URLparsing.js] - I -->|데이터 초기화 _ 로컬/배포 상태에 따라 호출 다름| J[JS/initData.js] - J --> K[JS/render.js] - K -->|마크다운/노트북 체크| L[style/blogContentsStyle.js] - L -->|노트북일 경우| M[JS/convertIpynbToHtml.js] - - %% Style - K -.->|스타일 적용| C[style/globalStyle.js] - L -.->|스타일 적용| C[style/globalStyle.js] - M -.->|스타일 적용| C[style/globalStyle.js] - - A -->|Toggle Mobile Menu| Q[JS/mobileMenuToggle.js] - -``` - -- 중요 의사결정 - - - 서비스 고도화에 따라 의사결정이 필요한 부분 정리 - - local_blogList.json과 local_blogMenu.json를 사용자에게 작성하게 하면 무제한으로 API를 활용할 수 있음 - -- 폴더 트리 - - | 폴더명 | 파일명 | 함수 | 변수 | 비고 | - | ------ | -------------------- | -------------------------------------- | -------------------------------------------- | ----------------------------- | - | style | globalStyle.js | | | 전역 스타일 설정 | - | style | blogContentsStyle.js | | | 블로그 컨텐츠 스타일 설정 | - | JS | config.js | | siteConfig | 사이트 설정 정보 | - | JS | URLparsing.js | extractFromUrl() | url(url obj), pathParts(쿼리스트링), isLocal | URL 파싱, 스키마 확인 | - | JS | render.js | renderBlogPosts(), renderMenu() | | 데이터를 DOM에 렌더링 | - | JS | initData.js | initDataBlogList(), initDataBlogMenu() | blogList, blogMenu | 초기 데이터 로딩, 스키마 확인 | - -- 코드 컨벤션과 변수 컨벤션 - - - 변수명(함수명): 역할 - - blogList(initDataBlogList): (fetch) repo에서 blog폴더에 있는 파일 명을 정규표현식으로 파싱, 데이터가 이미 있다면 다시 통신하지 않음. - - blogMenu(initDataBlogMenu): (fetch) repo에서 menu폴더에 있는 파일 명을 파싱, 데이터가 이미 있다면 다시 통신하지 않음. - - posts: (fetch) post의 정보를 가져와 데이터 저장, 재접속시 , 데이터가 이미 있다면 다시 통신하지 않음. - - url - - url: 현재 url - - pathParts: split된 url - - origin: href + pathname - - isLocal: 로컬과 배포여부 - -- WBS - -```mermaid -gantt - title 깃헙 정적 블로그 - dateFormat YYYY-MM-DD - section 계획 - 프로젝트 범위 정의 :done, des1, 2024-01-15, 2d - 요구사항 수집 :active, des2, after des1, 5d - section 설계 - 와이어프레임 작성 : des3, after des2, 7d - 데이터베이스 스키마 설계 : des4, after des2, 7d - section 개발 - 기능 개발 : dev2, after des2, 10d - section 테스트 - 테스트 케이스 작성 : tes1, after dev2, 2d - 테스트 : tes2, after dev1, 2d - section 배포 - 배포 준비 : dep1, after tes2, 2d - 출시 : dep2, after dep1, 1d -``` - -- 데이터베이스 스키마 및 중요 변수 - - - localDataUsing: 로컬 데이터 사용 여부 - - isInitData: 데이터 초기화 여부, 데이터가 없을 경우 무한루프 방지를 위해 사용 - - - siteConfig - - - username: GitHub 사용자 이름 - - repositoryName: GitHub 저장소 이름 - - mainColor: 사이트의 주 색상 - - textColor: 기본 텍스트 색상 - - blogTitle: 블로그 제목 - - - users - - - id: 사용자 id - - username: 사용자 이름 - - company: 사용자 회사 - - grade: 사용자 직급 - - img: 사용자 이미지 - - - url(URLparsing) - - | 키 | 설명 | 예시 값 | - | -------- | -------------------------- | ---------------------------------- | - | hash | 해시값 (URL의 # 이후 부분) | "" | - | host | 호스트명과 포트번호 | "127.0.0.1:5500" | - | hostname | 호스트명 (포트번호 제외) | "127.0.0.1" | - | href | 전체 URL | "http://127.0.0.1:5500/index.html" | - | origin | 프로토콜과 호스트 | "http://127.0.0.1:5500" | - | password | 비밀번호 (있을 경우) | "" | - | pathname | 도메인 이후의 경로 | "/index.html" | - | port | 포트 번호 | "5500" | - | protocol | 사용된 프로토콜 | "http:" | - | search | 쿼리 문자열 (있을 경우) | "" | - - - blogList, BlogMenu(GitHub API) - - | Key | 설명 | 예시 값 | - | ------------ | ------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | - | name | 파일 이름 | "about.md", "blog.md" | - | path | 파일 경로 | "menu/about.md", "menu/blog.md" | - | sha | 파일의 SHA 체크섬 | "0953...d5b25", "7f34...f354f" | - | size | 파일 크기 (바이트) | 856, 6 | - | url | 파일의 API URL | "https://api.github.com/repos/paullabkorea/github_blog/contents/menu/about.md?ref=main", "https://api.github.com/repos/paullabkorea/github_blog/contents/menu/blog.md?ref=main" | - | html_url | 파일의 GitHub 페이지 URL | "https://github.com/paullabkorea/github_blog/blob/main/menu/about.md", "https://github.com/paullabkorea/github_blog/blob/main/menu/blog.md" | - | git_url | 파일의 Git 블롭 URL | "https://api.github.com/repos/paullabkorea/github_blog/git/blobs/095349309b14d370ddae691e1e29a753300d5b25", "https://api.github.com/repos/paullabkorea/github_blog/git/blobs/7f347a7d841ac1d1e1cfb1ae12c967e83d1f354f" | - | download_url | 파일을 다운로드할 수 있는 URL | "https://raw.githubusercontent.com/paullabkorea/github_blog/main/menu/about.md", "https://raw.githubusercontent.com/paullabkorea/github_blog/main/menu/blog.md" | - | type | 파일 타입 | "file" | - | \_links | 관련 링크 (자기 자신, Git, HTML 링크 포함) | 내부 링크 객체 | - -- 화면 정의서 - - - - - - - - - -
메인화면설명
- - -
    -
  • 목록 필요
  • -
  • URL 파싱 및 URL 변경 필요
  • -
  • 목록을 6개씩 잘라내어 넘어가게 하거나 무한스크롤 구현
  • -
  • 가장 최신의 게시물을 맨 위에 게시
  • -
-
- - - - - - - - - -
포스트 화면설명
- - -
    -
  • 목록을 불러오는 것이 불필요 하지만 검색 버튼을 눌렀을 경우 목록을 불러올 필요가 있음
  • -
  • URL 파싱 및 URL 변경 필요
  • -
  • posts 변수에 담아 다른 페이지 이동 후 재접속 할 때 다시 통신하지 않게 처리
  • -
-
- - - - - - - - - -
그 외 메뉴 화면설명
- - -
    -
  • 목록을 불러오는 것이 불필요 하지만 검색 버튼을 눌렀을 경우 목록을 불러올 필요가 있음
  • -
  • URL 파싱 및 URL 변경 필요
  • -
-
- -- 과업 - - - 이미지 - - favicon - - ~~default 이미지~~ - - 이미지는 썸네일 이미지와 게시물 이미지를 폴더 분리하는 것이 좋을지 - - 사용자 편의성은 분리하지 않는 것이 좋을 수 있음 - - ~~CDN은 모두 로컬에서 추가 하도록 변경~~ - - 위니브를 알릴 수 있는 몇 가지 장치를 해둘 것 - - ~~위니브 캐릭터 프로필 이미지 5 ~ 6개 (남3, 여3)~~ - - default 이미지를 우리 케릭터 이미지로 => 호불호가 있을 수 있음 - - thumbnail 폴더로 관리하려고 했으나, 파일명에 /가 들어가는 경우 폴더로 처리되어 img에 포함 - - 서비스에서 GitHub API 연동하여 여러 서비스 지원 - - 업데이트 히스토리 볼 수 있도록 할 것인지 논의 필요 - - 잔디를 볼 수 있도록 할 것인지 논의 필요 - - 주요 스택들이나 코드를 짠 횟수 등을 보게 할 것인지 논의 필요 - - 사용자가 config.js 잘못 입력했을 때 작동되게 할지 의사 결정 필요 => 사용자에게 디버깅 능력이 없으므로 - - page navigation을 어떻게 할 것인지 논의 필요(무한 스크롤은 Drop) - - 2000개 정도의 블로그 글은 지연없이 로딩 - - 이미지가 고화질이면 로딩 시간이 길어질 수 있음 - - 이미지가 고화질일 경우 대책 필요 - - localDataUsing에 따른 분기 - - localDataUsing이 true일 경우 - - local_bloghumbList.json과 local_blogMenu.json을 사용 - - localDataUsing이 false일 경우 - - GitHub API를 사용 - - config.js에 있는 username과 repo name이 실제로 필요하지 않음(의사결정 필요) - - URL 파싱하면 됨. 사용자 편의를 위해서는 이렇게 하면 좋지 않을까 생각 - - 뒤에 index.html이 있는 경우 error가 자주 발생됨 => URL 파싱을 통해 해결 필요 - - 블로그 figma style 반영 - - 'blog.md'파일을 어떻게 할지 (의사결정 필요) - - 조회수 - - disqus 댓글 - - 한국어 가이드, 영어 가이드 - - GitHub 스폰서 등록(위니브 계정으로 이관 후) - -- 애러와 애러 해결(트러블슈팅 히스토리) - - - 아래 URL로 바로 접속시 콘텐츠가 보이지 않고, 카테고리를 클릭해도 검색이 되지 않음. 카테고리로 들어갔다가 뒤로가기를 누르면 콘텐츠가 보이지 않음 - - http://127.0.0.1:5500/?post=%5B20240225%5D_%5B%ED%83%80%EC%9D%B4%ED%8B%80%EC%9D%84+%EC%9E%85%EB%A0%A5%ED%95%A9%EB%8B%88%EB%8B%A419%5D_%5BTest%5D_%5B%5D_%5B%ED%85%8C%EC%8A%A4%ED%8A%B8%EC%9A%A9%EC%9E%85%EB%8B%88%EB%8B%A4%5D_%5B%5D.md - - 보이지 않는 것은 실제 존재하는 파일이 아니고 테스트 코드였기 때문. 이것을 해결하기 위해 수백개의 test 데이터를 생성하는 py 파일을 생성 - - 카테고리가 보이지 않는 것은 API 호출 최소화를 위해 바로 접속했을 시 목록을 업데이트 하지 않았기 때문. 이것을 해결하기 위해 클릭시 API 호출을 통해 목록을 업데이트 하는 것으로 수정. - ```js - if (blogList.length === 0) { - initDataBlogList(); - } - ``` - - (해결중) 직접 URL로 접속 후 카테고리를 클릭하고 뒤로가기를 누르면 콘텐츠가 보이지 않음 - - 모바일 메뉴 설계 - - 모바일 메뉴와 데스스탑 메뉴를 2개 만드는 일을 이벤트 위임을 통해 해결해야 했으나 중복코드가 발생하더라도 시간을 절약하는 차원에서 모듈화 하지 않음. - - API 호출 최소화 - - API 호출을 최소화 하여 하루 200번의 호출을 아낄 수 있도록 코드를 짜다보니 많은 부분에서 모듈화가 과하게 들어감. 구조가 다소 복잡해짐. - - 사용자의 사용 복잡도 - - 만약 local_blogList.json을 사용자가 작성할 수 있다면 API 호출이 필요 없음. 이것을 가능하게 하는 코드는 프로젝트 흥행과 더불어 진행. - - 또는 사용자가 이것을 선택할 수 있는 옵션 설정 - - 로컬에서 제대로 작동하지만 배포해서는 작동하지 않는 이슈가 있음. 아직 미해결. - - URLpasing이 잘못되었다는 것을 확인. local에서는 origin에 port 붙이고 뒤에 쿼리스트링을 붙였고 github에서는 `https://paullabkorea.github.io/github_blog/`구조인데 `https://paullabkorea.github.io/`로 파싱되어 `https://paullabkorea.github.io/?menu=about`식으로 저장되고 있었음. - - `new URL(window.location.href)`와 `new URL('https://paullabkorea.github.io/github_blog/?menu=about')`를 테스트하여 서버에서도 동작하도록 수정 - - `https://paullabkorea.github.io/github_blog/?post=%5B20240122%5D_%5BAI%EA%B0%80+IT+%EC%97%85%EA%B3%84%EC%99%80+%EA%B5%90%EC%9C%A1%EC%97%90+%EA%B0%80%EC%A0%B8%EC%98%A8+%EA%B2%83%5D_%5BAI%5D_%5B%EB%B9%8C%EA%B2%8C%EC%9D%B4%EC%B8%A0_%EC%83%98%EC%95%8C%ED%8A%B8%EB%A8%BC.jpg%5D_%5B%EB%B9%8C+%EA%B2%8C%EC%9D%B4%EC%B8%A0%EC%99%80+%EC%83%98+%EC%95%8C%ED%8A%B8%EB%A8%BC%EC%9D%98+%EB%8C%80%ED%99%94+%EC%A4%91+AI%EC%97%90+%EC%97%AD%ED%95%A0%EC%97%90+%EB%8C%80%ED%95%B4%5D.md` 로 접속시 `https://paullabkorea.github.io/github_blog/?post=undefined`로 URL이 변경되는 케이스 발견 - - URL 변경을 origin 기준이 아니라 href에서 host + repo 이름으로 변경 - - 주피터노트북 변환에서 ipynb 파일 안에 code가 `f'

hello

'`으로 되어 있으면 h1으로 해석되는 경우가 생김 - - map이나 filter 변환에도 같은 이슈가 있어서 코드블록은 엔티티 코드로 변환 - - (해결중) 이렇게 해결하니 pandas의 dateframe은 테이블로 표시되지 않는 사이드 이펙트 발생 - - ipynb에서 ul과 li 아래 p태그가 생겨 개행 - - `\n`을 별도로 처리 - - 검색창 이벤트 버블링 - - 아래 코드로 이벤트 버블링 해결 - ```javascript - searchInput.onclick = (event) => { - event.stopPropagation(); - }; - ``` - - 검색기능 구현 후 UI가 깨지는 문제 발생 - - figma style이 나왔기 때문에 기존에 tailwind style만 유지 - - 계산했던 모든 style 제거 - - code 블록 style 변경 건 - - 아래와 같은 코드를 테스트한 결과 a11y 테마가 가장 적합하다고 판단 - ```html - - - - - - - - ``` - - GitHub에서 마크다운 블록에스 ul > li가 2개 이상 들어가 있는 경우 개행이 되는 이슈 발견, 애스터리스크 뒤에 텍스트가 나오지 않고 한칸 개행되어 p태그로 텍스트가 들어오게 됨. - - 일단 아래 코드로 임시 해결 - ```css - .markdown-cell > ul > li > p { - display: inline-block; - } - ``` - - p 태그가 생성되는 이유를 찾아 해결하는 것이 근본적인 해결책이 될 것으로 보임 - -- 참고 - - - https://github.blog/category/engineering/ 스타일을 참고 - - - - - - - -
레퍼런스 이미지 메인
- - - - - - - -
레퍼런스 이미지 블로그
- -- 회사 프로젝트로 이관 후 figma 최종 시안 - - https://www.figma.com/file/bSWDeccRzm173J1VjvsiUu/위니브-(깃헙)블로그?type=design&node-id=1%3A22&mode=design&t=T258gDIJwM1T3iMW-1 - - - - - - - -
이미지 메인
- - - - - - - -
블로그
+- 👋 Hey there! I’m @nathanLYJ I'm an aspiring junior backend developer with a real passion for tackling challenges. I'm eager to gain experience through diverse projects and always open to positive learning opportunities. Feel free to reach out anytime! +- 👀 I’m interested in ... +- 🌱 I’m currently learning ... +- 💞️ I’m looking to collaborate on ... +- 📫 Email: nathanlyj@gmail.com +- 😄 Pronouns: ... +- ⚡ Fun fact: ... + + diff --git a/blog/README.md b/blog/README.md new file mode 100644 index 00000000..501e7ba2 --- /dev/null +++ b/blog/README.md @@ -0,0 +1,60 @@ +# WENIVLOG + +## 프로젝트 소개 +- GitHub Pages를 활용하여 블로그를 손쉽게 제작할 수 있는 서비스입니다. +- fork를 이용하여 자신의 레포지토리로 이동하여 나만의 블로그를 제작할 수 있습니다. + +## 개발 정보 +- 개발사: 주식회사 위니브 +- 버전: v1.0.0 + +- 서비스 URL 정보 + - 매뉴얼 페이지: https://blog.weniv.co.kr/ + - 블로그 페이지(예시): https://weniv.github.io/weniv_blog/ + + +## 스폰서 +- 커피 한 잔 값으로 위니브의 활동을 지원하고 기여자로 참여하세요! + +[후원하기](https://github.com/sponsors/weniv?o=esb) + + +## 사용 가이드 +### 블로그 개설 +1. 해당 레포지토리를 fork 합니다. +2. 본인의 레포지토리로 이동하여, 설정에서 GitHub Pages를 활성화합니다. +3. 본인의 레포지토리를 clone하여 블로그를 관리할 수 있습니다. + +## 블로그 관리 +1. clone한 프로젝트 폴더의 config.js 파일을 수정합니다. +2. siteConfig에 GitHub 정보를 입력합니다. +3. users에 자신의 정보를 입력합니다. 여러명이서 블로그를 함께 관리하는 경우, 사용자 정보를 추가할 수 있습니다. + +## 블로그 작성 +1. 글은 blog 폴더에 작성하며, `[date]_[title]_[category]_[thumnail]_[description].md` 형식으로 작성합니다. +2. 썸네일을 사용하지 않는 경우, `[date]_[title]_[category]_[].md` 형식으로 작성합니다. +3. 썸네일의 경로는 img 폴더에서 관리하거나 퍼블리싱 된 이미지 링크를 사용할 수 있습니다. +4. `data/localBlogList.json`을 수정하여 화면에 출력할 글을 관리합니다. + +## 메뉴 관리 +우측 상단의 메뉴를 관리하는 방법은 다음과 같습니다. +1. menu 폴더에 `사용하고싶은 메뉴 이름.md` 형식으로 저장하면 메뉴로 생성됩니다. +2. `data/local_blogMenu.json`을 관리하여 화면에 출력할 메뉴를 관리합니다. + + +## 디자인 수정 +- `style/globalStyle.js` 파일을 수정하여 전체적인 스타일을 수정할 수 있습니다. +- Tailwind CSS를 이용하여 손쉽게 나만의 스타일을 적용할 수 있습니다. +- 프로필로 사용할 수 있는 위니브 프렌즈의 이미지와 썸네일 일러스트를 제공합니다. + + +## 폴더 트리 + + | 폴더명 | 파일명 | 함수 | 변수 | 비고 | + | ------ | -------------------- | -------------------------------------- | -------------------------------------------- | ----------------------------- | + | style | globalStyle.js | | | 전역 스타일 설정 | + | style | blogContentsStyle.js | | | 블로그 컨텐츠 스타일 설정 | + | JS | config.js | | siteConfig | 사이트 설정 정보 | + | JS | URLparsing.js | extractFromUrl() | url(url obj), pathParts(쿼리스트링), isLocal | URL 파싱, 스키마 확인 | + | JS | render.js | renderBlogPosts(), renderMenu() | | 데이터를 DOM에 렌더링 | + | JS | initData.js | initDataBlogList(), initDataBlogMenu() | blogList, blogMenu | 초기 데이터 로딩, 스키마 확인 | diff --git "a/blog/[20240118]_[title_test]_[python]_[]_[\355\214\214\354\235\264\354\215\254\354\235\200 \353\206\200\353\235\274\354\232\264 \354\226\270\354\226\264\354\236\205\353\213\210\353\213\244.]_[].md" "b/blog/[20240118]_[title_test]_[python]_[]_[\355\214\214\354\235\264\354\215\254\354\235\200 \353\206\200\353\235\274\354\232\264 \354\226\270\354\226\264\354\236\205\353\213\210\353\213\244.]_[].md" deleted file mode 100644 index 81f55589..00000000 --- "a/blog/[20240118]_[title_test]_[python]_[]_[\355\214\214\354\235\264\354\215\254\354\235\200 \353\206\200\353\235\274\354\232\264 \354\226\270\354\226\264\354\236\205\353\213\210\353\213\244.]_[].md" +++ /dev/null @@ -1,7 +0,0 @@ -# test1 제목입니다. 테스트 파일입니다. - -* hello world 1 - -법관이 중대한 심신상의 장해로 직무를 수행할 수 없을 때에는 법률이 정하는 바에 의하여 퇴직하게 할 수 있다. 타인의 범죄행위로 인하여 생명·신체에 대한 피해를 받은 국민은 법률이 정하는 바에 의하여 국가로부터 구조를 받을 수 있다. - -행정권은 대통령을 수반으로 하는 정부에 속한다. 국가의 세입·세출의 결산, 국가 및 법률이 정한 단체의 회계검사와 행정기관 및 공무원의 직무에 관한 감찰을 하기 위하여 대통령 소속하에 감사원을 둔다. \ No newline at end of file diff --git "a/blog/[20240119]_[title_test2]_[django]_[test.png]_[\355\214\214\354\235\264\354\215\254\354\235\200 \354\240\225\353\247\220 \354\236\254\353\257\270\354\236\210\354\212\265\353\213\210\353\213\244.]_[].md" "b/blog/[20240119]_[title_test2]_[django]_[test.png]_[\355\214\214\354\235\264\354\215\254\354\235\200 \354\240\225\353\247\220 \354\236\254\353\257\270\354\236\210\354\212\265\353\213\210\353\213\244.]_[].md" deleted file mode 100644 index 977c1532..00000000 --- "a/blog/[20240119]_[title_test2]_[django]_[test.png]_[\355\214\214\354\235\264\354\215\254\354\235\200 \354\240\225\353\247\220 \354\236\254\353\257\270\354\236\210\354\212\265\353\213\210\353\213\244.]_[].md" +++ /dev/null @@ -1,42 +0,0 @@ -# test2 제목입니다. 테스트 파일입니다. - -* hello world 2 -* hello world 2 -* hello world 2 - -1. hello world -2. hello world -3. hello world - -법관이 중대한 심신상의 장해로 직무를 수행할 수 없을 때에는 법률이 정하는 바에 의하여 퇴직하게 할 수 있다. 타인의 범죄행위로 인하여 생명·신체에 대한 피해를 받은 국민은 법률이 정하는 바에 의하여 국가로부터 구조를 받을 수 있다. - -행정권은 대통령을 수반으로 하는 정부에 속한다. 국가의 세입·세출의 결산, 국가 및 법률이 정한 단체의 회계검사와 행정기관 및 공무원의 직무에 관한 감찰을 하기 위하여 대통령 소속하에 감사원을 둔다. - -```python -for i in range(10): - print('hello world') -``` - -``` -for i in range(10): - print('hello world') -``` - -`print('hello world')` - -법관이 중대한 심신상의 장해로 직무를 수행할 수 없을 때에는 법률이 정하는 바에 의하여 퇴직하게 할 수 있다. 타인의 범죄행위로 인하여 생명·신체에 대한 피해를 받은 국민은 법률이 정하는 바에 의하여 국가로부터 구조를 받을 수 있다. - -행정권은 대통령을 수반으로 하는 정부에 속한다. 국가의 세입·세출의 결산, 국가 및 법률이 정한 단체의 회계검사와 행정기관 및 공무원의 직무에 관한 감찰을 하기 위하여 대통령 소속하에 감사원을 둔다. - -| Header 1 | Header 2 | Header 3 | -|----------|----------|----------| -| Row 1 Col 1 | Row 1 Col 2 | Row 1 Col 3 | -| Row 2 Col 1 | Row 2 Col 2 | Row 2 Col 3 | -| Row 3 Col 1 | Row 3 Col 2 | Row 3 Col 3 | - - -## test2 제목입니다. 테스트 파일입니다. -### test2 제목입니다. 테스트 파일입니다. -#### test2 제목입니다. 테스트 파일입니다. -##### test2 제목입니다. 테스트 파일입니다. -###### test2 제목입니다. 테스트 파일입니다. \ No newline at end of file diff --git "a/blog/[20240122]_[AI\352\260\200 IT \354\227\205\352\263\204\354\231\200 \352\265\220\354\234\241\354\227\220 \352\260\200\354\240\270\354\230\250 \352\262\203]_[AI]_[\353\271\214\352\262\214\354\235\264\354\270\240_\354\203\230\354\225\214\355\212\270\353\250\274.jpg]_[\353\271\214 \352\262\214\354\235\264\354\270\240\354\231\200 \354\203\230 \354\225\214\355\212\270\353\250\274\354\235\230 .md" "b/blog/[20240122]_[AI\352\260\200 IT \354\227\205\352\263\204\354\231\200 \352\265\220\354\234\241\354\227\220 \352\260\200\354\240\270\354\230\250 \352\262\203]_[AI]_[\353\271\214\352\262\214\354\235\264\354\270\240_\354\203\230\354\225\214\355\212\270\353\250\274.jpg]_[\353\271\214 \352\262\214\354\235\264\354\270\240\354\231\200 \354\203\230 \354\225\214\355\212\270\353\250\274\354\235\230 .md" deleted file mode 100644 index a4efa310..00000000 --- "a/blog/[20240122]_[AI\352\260\200 IT \354\227\205\352\263\204\354\231\200 \352\265\220\354\234\241\354\227\220 \352\260\200\354\240\270\354\230\250 \352\262\203]_[AI]_[\353\271\214\352\262\214\354\235\264\354\270\240_\354\203\230\354\225\214\355\212\270\353\250\274.jpg]_[\353\271\214 \352\262\214\354\235\264\354\270\240\354\231\200 \354\203\230 \354\225\214\355\212\270\353\250\274\354\235\230 .md" +++ /dev/null @@ -1,41 +0,0 @@ -# AI가 가장 크게 기여할 수 있는 분야 - -빌 게이츠와 샘 알트먼의 대담 영상에서(링크는 댓글에 있습니다.) 샘 알트먼은 코딩을 오늘날 가장 기대하는 생산성 향상 분야로 꼽았습니다. - -## ICT 회사에서 활용하는 AI -저희 회사, 위니브는 AI를 필수로 사용하고 있습니다. ChatGPT를 경험한 다수의 소프트웨어 회사처럼, 저희 역시 AI의 지원을 단순한 '도움'이 아닌, 본질적인 작업에 집중할 수 있게 해주는 '혁신'으로 인식합니다. 이러한 AI 도움은 개인에게는 작업과 직업에 대한 만족도 향상으로, 회사에는 이전에 없던 큰 생산성 향상으로 다가옵니다. - -저희는 ChatGPT, Copilot, Copilot chat을 사용하고 있습니다. 분명한 목적, 요구 사항, 아키텍처, 프레임워크 등을 상세하게 입력하면, ChatGPT는 입력된 프롬프트의 품질에 따라 상세한 기획을 작성해 줍니다. Visual Studio Code(VSC)에서 몇 줄의 주석이나 코드를 입력하면, Copilot은 작성자의 의도를 파악하여 코드를 실시간으로 제안합니다. 이러한 제안은 작성 과정 중에도 잠시 타이핑을 멈추면 지속됩니다. Copilot Chat은 브라우저를 사용하지 않고도 VSC 내에서 다양한 질문에 대한 해결책을 제시해 줍니다. 흐름이 끊기지 않죠. - -## 개발 문화의 변화 -최근에 하고 있는 개인 프로젝트를 예를 들어보겠습니다. 지킬 기반 GitHub 블로그의 불편함을 느껴 GitHub pages 기반 정적 페이지 블로그 오픈소스를 만들고 있습니다. 이 블로그는 그 페이지에 첫번째로 게시될 게시물입니다. SNS와 네이버 블로그에는 초안을 미리 업로드 하겠습니다. - -이 프로젝트에서 저는 프로젝트의 목적, 원하는 결과물, ChatGPT의 역할, 기존 블로그와 비교, 서비스 구조, 함수 간 관계, 함수의 입력값과 반환값, 생성되는 변수, 폴더 구조, 데이터베이스 스키마 등을 개략적으로 입력했고, 출력 형식을 MD, JSON, HTML, CSS, JS, Python 등으로 '분명히' 하였습니다. 빼먹지 못하도록 순서를 지정했습니다. 한 번에 마음이 드는 결과물이 나오진 않지만, 10번 이내에는 어느정도 마음에 드는 결과물을 얻을 수 있었습니다. 특히 마크다운 테이블이나 Mermaid를 사용한 시각화, WBS 작성은 문서가 잘 구성되어 있으면 쉽게 생성할 수 있었습니다. 작성된 내용은 블로그가 오픈되면 README.md에 정리하여 올리고 링크도 여기 첨부하겠습니다. - -저는 그래프를 그리느라 피그마를 켜거나, 표를 그리느라 다른 도구를 이용하거나, 무언가를 클릭해서 옮기거나, 손으로 함수 구조를 짜느라 고생하지 않았습니다. 습관이 있어 손으로 전체적인 파일 구조와 함수 구조를 짜긴 했으나 이전보다 상세하게 작성하지 않고 ChatGPT에게 보강 업무와 시각화를 요청했습니다. 저는 좀 더 '생각하는 것'에 집중할 수 있었습니다. 좀 더 '창조적인 것'에 집중할 수 있었습니다. 아니, 실제로는 창조적 업무가 아니라 그렇게 느끼는 것일 수 있으나 이러한 느낌도 소중하다는 생각을 했습니다. - -코드를 짜는 부분도 그렇습니다. 함수의 파라미터가 명확하고 반환값이 어디로 흘러가는지 알려주면 대략적인 코드를 제안받을 수 있습니다. 이것만으로도 큰 도움이 됩니다. 이렇게 완성된 파일을 하나로 모아보면 대부분은 동작하지 않습니다. 다만 코드 리뷰하듯 몇 가지 작업만 하면 동작하는 코드가 됩니다. 실시간으로 코파일럿이 도와줍니다. 샘플 데이터(Mock Data)나 보일러플레이트(반복적인 코드)도 빠르게 완성해주고 API 호출도 원하는 값을 완성해주니 대부분은 공식문서나 이전 워크스페이스를 뒤져보며 코딩할 필요가 없습니다. - -## 앞으로 더 기술이 발전하더라도. -그렇다 하여 소프트웨어를 배울 필요가 없다는 생각을 가지고 있진 않습니다. 오히려 우리는 더 고도화된 소프트웨어 개발 능력을 갖춰야 할 것입니다. 간단한 반복문, 간단한 조건문은 이제 주석만으로 생성할 수 있습니다. 하지만 대부분은 결과물에 이르기에 턱없이 부족하며 '수정이 필요한 코드'입니다. - -요구사항의 정확한 반영, 테스트의 통과 여부, 테스트의 강도, 코드의 비즈니스 가치, 회사와 팀에 적합한 디자인 패턴, 서비스 목적에 맞는 프레임워크 선택, 그리고 프롬프트 엔지니어링에 어느정도 리소스를 투입할지, 적절한 결과물을 어느 선에서 리뷰를 통해 원하는 코드로 변환할지 등은 우리의 몫으로 남아있고 이것을 위해 더 깊은 수준의 소프트웨어 이해가 필요한 시대가 되었다고 생각합니다. - -기술이 더 발전하여 답변이 더 고도화 된다고 하더라도 이 점은 변하지 않을 것이라 생각합니다. 왜냐면 이것은 '의사 결정'의 부분이니까요. - -이러한 급격한 변화가 걱정이나 부담이라기 보다는 오히려 즐겁고 더 높은 수준의 기술 발전이 기다려지는(특히 GPT5) 나날입니다. 도와줄 AI가 밀착 멘토처럼 옆에 있으니까요. 이제 어떤 소프트웨어 지식에 접근하는 것도 부담스럽거나 두렵지 않습니다. - -## 소프트웨어 교육도 변해야 하지 않을까? -AI, 특히 LLM이 가져온 개발 문화의 변화는 혁신에 가깝습니다. 그렇다면 교육도 변해야 하지 않을까요? 기존에 기본 문법부터 학습하여 통신과 프레임워크, 데이터베이스 등을 배워 서비스를 만드는 학습 방식(하향식, Down -> Up) 대신, 서비스의 목적부터 시작하여 설계를 내려가는 상향식 접근(Up -> Down)이 효과적일 수 있다고 봅니다. 이러한 접근은 필요한 문법의 학습을 자연스럽게 동반하게 합니다. 물론, 깊은 학습은 이후에 꼭 필요합니다. - -최근에 인공지능 회사를 운영하는 한 대표님으로부터 전화를 받았습니다. ChatGPT의 도움을 받아 직접 서비스를 개발하셨고, 개발 중 발생한 오류에 대한 문의 전화였습니다. 이 대표님은 이전에 백엔드 개발 경험이 없으셨지만, 프로그래밍 언어에 대한 지식과 경험은 갖추고 계셨습니다. 이런 사례는 소프트웨어 교육에서도 시사하는 바가 큽니다. 이제는 백엔드 개발 경험이 전혀 없는 사람도 AI 도구의 도움을 받아 개발에 참여할 수 있는 시대, 더 많은 사람들이 기술 개발에 접근할 수 있는 시대가 되었다고 생각합니다. - -상향식 접근을 채택하면 서비스를 만드는 패턴을 체화 할 수 있습니다. 질문이 비슷하기 때문입니다. 다만 멘토로 개발 경험이 있으신 분들이 들어오면 좋습니다. 그렇지 않으면 프롬프트 제안의 시작이 잘못될 수 있습니다. 그리고 한 번 잘못된 아키텍처(구조)를 잡으면 서비스를 다 개발하고 난 후에는 되돌리기 힘듭니다. 예를 들어 Django같은 경우 대부분의 학습 자료가 모놀리식이며 ChatGPT의 대답도 모놀리식입니다. 그런데 실무에서는 마이크로 패턴을 좀 더 선호하는 편입니다. 그리고 함수 기반이냐, 클래스 기반이냐 따라서 개발 방식이 달라집니다. 처음 질문을 할 때 회사의 규모, 투입 가능한 인력, 인력의 전문 분야, 사용할 스택, 투입 가능한 기간, 비즈니스 목적에 따른 디자인 패턴이나 개발 방식에 대한 고려가 필요한데 이러한 시야를 공유하는 학습 방식이 되면 더 풍성한 교육이 될 것입니다. - -하향식이든 상향식이든, 교육 과정에서 프롬프트를 공유하며 진행한다면 더욱 풍부한 학습 경험이 될 것입니다. 어떤 교육 방식을 택하든, 깊이 있는 학습에 직면할 순간은 반드시 있을 것입니다. - -## 마무리 하며 -마무리 하는 글은 나중에 쓰겠습니다. :) 블로그 완성되면 놀러와주세요. 오픈소스로 곧 풀겠습니다. :) - - -`https://youtu.be/PkXELH6Y2lM` \ No newline at end of file diff --git "a/blog/[20240128]_[\355\214\214\354\235\264\354\215\254_\353\266\200\355\212\270\354\272\240\355\224\204]_[python]_[]_[\354\234\204\353\213\210\353\270\214 \355\214\214\354\235\264\354\215\254 \353\266\200\355\212\270\354\272\240\355\224\204.]_[].ipynb" "b/blog/[20240128]_[\355\214\214\354\235\264\354\215\254_\353\266\200\355\212\270\354\272\240\355\224\204]_[python]_[test_2.jpg]_[\354\234\204\353\213\210\353\270\214 \355\214\214\354\235\264\354\215\254 \353\266\200\355\212\270\354\272\240\355\224\204 \352\260\225\354\235\230\354\236\220\353\243\214\354\236\205\353\213\210\353\213\244. \354\235\264 \355\214\214\354\235\274\354\235\200 ipynb \355\214\214\354\235\274\354\236\205\353\213\210\353\213\244.]_[].ipynb" similarity index 99% rename from "blog/[20240128]_[\355\214\214\354\235\264\354\215\254_\353\266\200\355\212\270\354\272\240\355\224\204]_[python]_[]_[\354\234\204\353\213\210\353\270\214 \355\214\214\354\235\264\354\215\254 \353\266\200\355\212\270\354\272\240\355\224\204.]_[].ipynb" rename to "blog/[20240128]_[\355\214\214\354\235\264\354\215\254_\353\266\200\355\212\270\354\272\240\355\224\204]_[python]_[test_2.jpg]_[\354\234\204\353\213\210\353\270\214 \355\214\214\354\235\264\354\215\254 \353\266\200\355\212\270\354\272\240\355\224\204 \352\260\225\354\235\230\354\236\220\353\243\214\354\236\205\353\213\210\353\213\244. \354\235\264 \355\214\214\354\235\274\354\235\200 ipynb \355\214\214\354\235\274\354\236\205\353\213\210\353\213\244.]_[].ipynb" index b30fa101..5c3aacc7 100644 --- "a/blog/[20240128]_[\355\214\214\354\235\264\354\215\254_\353\266\200\355\212\270\354\272\240\355\224\204]_[python]_[]_[\354\234\204\353\213\210\353\270\214 \355\214\214\354\235\264\354\215\254 \353\266\200\355\212\270\354\272\240\355\224\204.]_[].ipynb" +++ "b/blog/[20240128]_[\355\214\214\354\235\264\354\215\254_\353\266\200\355\212\270\354\272\240\355\224\204]_[python]_[test_2.jpg]_[\354\234\204\353\213\210\353\270\214 \355\214\214\354\235\264\354\215\254 \353\266\200\355\212\270\354\272\240\355\224\204 \352\260\225\354\235\230\354\236\220\353\243\214\354\236\205\353\213\210\353\213\244. \354\235\264 \355\214\214\354\235\274\354\235\200 ipynb \355\214\214\354\235\274\354\236\205\353\213\210\353\213\244.]_[].ipynb" @@ -38,18 +38,7 @@ "id": "iug8scGAzBFu", "outputId": "d09d9cf2-7538-4f6e-ecb9-5888cc97fa06" }, - "outputs": [ - { - "data": { - "text/plain": [ - "30" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "a = 10\n", "b = 20\n", @@ -67,21 +56,7 @@ "id": "suLI6xJ92GfG", "outputId": "55d144a0-18e9-45b6-e330-46c3122a7f46" }, - "outputs": [ - { - "data": { - "application/vnd.google.colaboratory.intrinsic+json": { - "type": "string" - }, - "text/plain": [ - "'\\n작은 따옴표 3개를 사용했습니다.\\n여러줄의 주석을 작성할 때에 사용합니다.\\n'" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# 주석은 코드를 설명할 때 사용합니다.\n", "\n", @@ -120,18 +95,7 @@ "id": "zUgV4nHv6jZS", "outputId": "d9bb5a23-a627-47d3-f8a7-c057196ec376" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "안녕하세요.\n", - "저는 위니브 이호준입니다.\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "a = '''\n", "안녕하세요.\n", @@ -150,16 +114,7 @@ "id": "8bUUiOSc7NJA", "outputId": "6d21d3ac-23c5-4812-d153-f4edbdc07c3d" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "안녕하세요.\n", - "저는 위니브 이호준입니다.\n" - ] - } - ], + "outputs": [], "source": [ "a = '''안녕하세요.\n", "저는 위니브 이호준입니다.'''\n", @@ -196,16 +151,7 @@ "id": "u1ImbNuQ7sG9", "outputId": "ac92351f-a954-4e36-b228-e5b27ea7ec5c" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "10\n", - "10\n" - ] - } - ], + "outputs": [], "source": [ "a = 10\n", "b = a\n", diff --git "a/blog/[20240401]_[title0401]_[django]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200]_[].md" "b/blog/[20240401]_[title0401]_[django]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200]_[].md" deleted file mode 100644 index 4403c701..00000000 --- "a/blog/[20240401]_[title0401]_[django]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240401_[20240401]_[title0401]_[django]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240402]_[title0402]_[django]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200]_[].md" "b/blog/[20240402]_[title0402]_[django]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200]_[].md" deleted file mode 100644 index cdbba603..00000000 --- "a/blog/[20240402]_[title0402]_[django]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240402_[20240402]_[title0402]_[django]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240403]_[title0403]_[django]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200]_[].md" "b/blog/[20240403]_[title0403]_[django]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200]_[].md" deleted file mode 100644 index b74e2529..00000000 --- "a/blog/[20240403]_[title0403]_[django]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240403_[20240403]_[title0403]_[django]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240404]_[title0404]_[ai]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250]_[].md" "b/blog/[20240404]_[title0404]_[ai]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250]_[].md" deleted file mode 100644 index 959bfacb..00000000 --- "a/blog/[20240404]_[title0404]_[ai]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240404_[20240404]_[title0404]_[ai]_[default.png]_[테스트용 로렘입숨]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240405]_[title0405]_[AWS]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200 \352\261\260.md" "b/blog/[20240405]_[title0405]_[AWS]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200 \352\261\260.md" deleted file mode 100644 index 5c8c17b1..00000000 --- "a/blog/[20240405]_[title0405]_[AWS]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200 \352\261\260.md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240405_[20240405]_[title0405]_[AWS]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은 것까지 ]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240406]_[title0406]_[python]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200]_[].md" "b/blog/[20240406]_[title0406]_[python]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200]_[].md" deleted file mode 100644 index 2880ac3b..00000000 --- "a/blog/[20240406]_[title0406]_[python]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240406_[20240406]_[title0406]_[python]_[test_2.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240407]_[title0407]_[AWS]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 ]_[].md" "b/blog/[20240407]_[title0407]_[AWS]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 ]_[].md" deleted file mode 100644 index 973adbbd..00000000 --- "a/blog/[20240407]_[title0407]_[AWS]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 ]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240407_[20240407]_[title0407]_[AWS]_[test_3.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 ]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240408]_[title0408]_[c++]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205]_[].md" "b/blog/[20240408]_[title0408]_[c++]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205]_[].md" deleted file mode 100644 index 92f4963f..00000000 --- "a/blog/[20240408]_[title0408]_[c++]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240408_[20240408]_[title0408]_[c++]_[test_3.jpg]_[테스트용 로렘입]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240409]_[title0409]_[SQL]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200 \352\262\203.md" "b/blog/[20240409]_[title0409]_[SQL]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200 \352\262\203.md" deleted file mode 100644 index afe38223..00000000 --- "a/blog/[20240409]_[title0409]_[SQL]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200 \352\262\203.md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240409_[20240409]_[title0409]_[SQL]_[test_1.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은 것]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240410]_[title0410]_[AWS]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200]_[].md" "b/blog/[20240410]_[title0410]_[AWS]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200]_[].md" deleted file mode 100644 index 29ee1f12..00000000 --- "a/blog/[20240410]_[title0410]_[AWS]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240410_[20240410]_[title0410]_[AWS]_[test_2.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240411]_[title0411]_[SQL]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200]_[].md" "b/blog/[20240411]_[title0411]_[SQL]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200]_[].md" deleted file mode 100644 index a1a33102..00000000 --- "a/blog/[20240411]_[title0411]_[SQL]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240411_[20240411]_[title0411]_[SQL]_[test_2.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240412]_[title0412]_[django]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200]_[].md" "b/blog/[20240412]_[title0412]_[django]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200]_[].md" deleted file mode 100644 index 29238468..00000000 --- "a/blog/[20240412]_[title0412]_[django]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240412_[20240412]_[title0412]_[django]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240413]_[title0413]_[ai]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 ]_[].md" "b/blog/[20240413]_[title0413]_[ai]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 ]_[].md" deleted file mode 100644 index e4fbd030..00000000 --- "a/blog/[20240413]_[title0413]_[ai]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 ]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240413_[20240413]_[title0413]_[ai]_[test_1.jpg]_[테스트용 ]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240414]_[title0414]_[javascript]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 ]_[].md" "b/blog/[20240414]_[title0414]_[javascript]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 ]_[].md" deleted file mode 100644 index 1b132219..00000000 --- "a/blog/[20240414]_[title0414]_[javascript]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 ]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240414_[20240414]_[title0414]_[javascript]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 ]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240415]_[title0415]_[django]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200 \352\261\260.md" "b/blog/[20240415]_[title0415]_[django]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200 \352\261\260.md" deleted file mode 100644 index 303c6510..00000000 --- "a/blog/[20240415]_[title0415]_[django]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200 \352\261\260.md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240415_[20240415]_[title0415]_[django]_[test_1.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은 것]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240416]_[title0416]_[django]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200 \352\261\260.md" "b/blog/[20240416]_[title0416]_[django]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200 \352\261\260.md" deleted file mode 100644 index fbb5bca1..00000000 --- "a/blog/[20240416]_[title0416]_[django]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200 \352\261\260.md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240416_[20240416]_[title0416]_[django]_[test_3.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은 것까지 테스]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240417]_[title0417]_[c++]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205]_[].md" "b/blog/[20240417]_[title0417]_[c++]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205]_[].md" deleted file mode 100644 index 87b19d4b..00000000 --- "a/blog/[20240417]_[title0417]_[c++]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240417_[20240417]_[title0417]_[c++]_[test_3.jpg]_[테스트용 로렘입숨입]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240418]_[title0418]_[python]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200 \341\204\200.md" "b/blog/[20240418]_[title0418]_[python]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200 \341\204\200.md" deleted file mode 100644 index d4b2cbb1..00000000 --- "a/blog/[20240418]_[title0418]_[python]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200 \341\204\200.md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240418_[20240418]_[title0418]_[python]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은 것까지 테스]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240419]_[title0419]_[c]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203]_[].md" "b/blog/[20240419]_[title0419]_[c]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203]_[].md" deleted file mode 100644 index 5f80d36a..00000000 --- "a/blog/[20240419]_[title0419]_[c]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240419_[20240419]_[title0419]_[c]_[test_3.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240420]_[title0420]_[react]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250]_[].md" "b/blog/[20240420]_[title0420]_[react]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250]_[].md" deleted file mode 100644 index 9e82358a..00000000 --- "a/blog/[20240420]_[title0420]_[react]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240420_[20240420]_[title0420]_[react]_[test_1.jpg]_[테스트용 로렘입숨]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240421]_[title0421]_[django]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200]_[].md" "b/blog/[20240421]_[title0421]_[django]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200]_[].md" deleted file mode 100644 index 193e7691..00000000 --- "a/blog/[20240421]_[title0421]_[django]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240421_[20240421]_[title0421]_[django]_[test_1.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240422]_[title0422]_[javascript]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210]_[].md" "b/blog/[20240422]_[title0422]_[javascript]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210]_[].md" deleted file mode 100644 index 2eeaab17..00000000 --- "a/blog/[20240422]_[title0422]_[javascript]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240422_[20240422]_[title0422]_[javascript]_[test_3.jpg]_[테스트용 로렘입숨입니]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240423]_[title0423]_[react]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200]_[].md" "b/blog/[20240423]_[title0423]_[react]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200]_[].md" deleted file mode 100644 index 80bb5ca9..00000000 --- "a/blog/[20240423]_[title0423]_[react]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240423_[20240423]_[title0423]_[react]_[test_1.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240424]_[title0424]_[SQL]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200 \352\261\260.md" "b/blog/[20240424]_[title0424]_[SQL]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200 \352\261\260.md" deleted file mode 100644 index 5903c617..00000000 --- "a/blog/[20240424]_[title0424]_[SQL]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200 \352\261\260.md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240424_[20240424]_[title0424]_[SQL]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은 것까지 테스]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240425]_[title0425]_[ai]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200]_[].md" "b/blog/[20240425]_[title0425]_[ai]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200]_[].md" deleted file mode 100644 index 66177f1b..00000000 --- "a/blog/[20240425]_[title0425]_[ai]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240425_[20240425]_[title0425]_[ai]_[test_3.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240426]_[title0426]_[django]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200]_[].md" "b/blog/[20240426]_[title0426]_[django]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200]_[].md" deleted file mode 100644 index 1517620b..00000000 --- "a/blog/[20240426]_[title0426]_[django]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240426_[20240426]_[title0426]_[django]_[test_2.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240427]_[title0427]_[AWS]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 ]_[].md" "b/blog/[20240427]_[title0427]_[AWS]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 ]_[].md" deleted file mode 100644 index 92117bdb..00000000 --- "a/blog/[20240427]_[title0427]_[AWS]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 ]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240427_[20240427]_[title0427]_[AWS]_[test_2.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 ]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240428]_[title0428]_[javascript]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200 .md" "b/blog/[20240428]_[title0428]_[javascript]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200 .md" deleted file mode 100644 index 211e25b4..00000000 --- "a/blog/[20240428]_[title0428]_[javascript]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200 .md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240428_[20240428]_[title0428]_[javascript]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은 것까지]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240429]_[title0429]_[react]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230]_[].md" "b/blog/[20240429]_[title0429]_[react]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230]_[].md" deleted file mode 100644 index 2e6598ec..00000000 --- "a/blog/[20240429]_[title0429]_[react]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240429_[20240429]_[title0429]_[react]_[test_3.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240430]_[title0430]_[python]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234]_[].md" "b/blog/[20240430]_[title0430]_[python]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234]_[].md" deleted file mode 100644 index 7ff9473c..00000000 --- "a/blog/[20240430]_[title0430]_[python]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240430_[20240430]_[title0430]_[python]_[test_3.jpg]_[테스트용 로]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240501]_[title0501]_[unity]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234]_[].md" "b/blog/[20240501]_[title0501]_[unity]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234]_[].md" deleted file mode 100644 index 57af201d..00000000 --- "a/blog/[20240501]_[title0501]_[unity]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240501_[20240501]_[title0501]_[unity]_[test_2.jpg]_[테스트용 로]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240502]_[title0502]_[javascript]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 ]_[].md" "b/blog/[20240502]_[title0502]_[javascript]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 ]_[].md" deleted file mode 100644 index 14a2faf6..00000000 --- "a/blog/[20240502]_[title0502]_[javascript]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 ]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240502_[20240502]_[title0502]_[javascript]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은 ]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240503]_[title0503]_[react]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201]_[].md" "b/blog/[20240503]_[title0503]_[react]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201]_[].md" deleted file mode 100644 index 5de01b34..00000000 --- "a/blog/[20240503]_[title0503]_[react]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240503_[20240503]_[title0503]_[react]_[test_3.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240504]_[title0504]_[AWS]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200]_[].md" "b/blog/[20240504]_[title0504]_[AWS]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200]_[].md" deleted file mode 100644 index 9686c8b2..00000000 --- "a/blog/[20240504]_[title0504]_[AWS]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240504_[20240504]_[title0504]_[AWS]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240505]_[title0505]_[python]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 ]_[].md" "b/blog/[20240505]_[title0505]_[python]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 ]_[].md" deleted file mode 100644 index 8ceda483..00000000 --- "a/blog/[20240505]_[title0505]_[python]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 ]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240505_[20240505]_[title0505]_[python]_[test_2.jpg]_[테스트용 ]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240207]_[\355\203\200\354\235\264\355\213\200\354\235\204 \354\236\205\353\240\245\355\225\251\353\213\210\353\213\244]_[Test]_[]_[\355\205\214\354\212\244\355\212\270\354\232\251\354\236\205\353\213\210\353\213\244]_[].md" "b/blog/[20240505]_[\353\270\224\353\241\234\352\267\270 \352\270\200 \354\226\221\354\213\235]_[markdown]_[test_1.jpg]_[\353\247\210\355\201\254\353\213\244\354\232\264 \354\226\221\354\213\235\354\236\205\353\213\210\353\213\244. \354\260\270\352\263\240\355\225\230\354\227\254 \353\270\224\353\241\234\352\267\270 \352\270\200\354\235\204 \354\236\221\354\204\261\355\225\264\354\243\274\354\204\270\354\232\224. \352\260\201 \354\226\270\354\226\264\353\263\204 \355\225\230\354\235\264\353\235\274\354\235\264\355\214\205\353\217\204 \354\247\200\354\233\220\355\225\251\353\213\210\353\213\244.]_[].md" similarity index 100% rename from "blog/[20240207]_[\355\203\200\354\235\264\355\213\200\354\235\204 \354\236\205\353\240\245\355\225\251\353\213\210\353\213\244]_[Test]_[]_[\355\205\214\354\212\244\355\212\270\354\232\251\354\236\205\353\213\210\353\213\244]_[].md" rename to "blog/[20240505]_[\353\270\224\353\241\234\352\267\270 \352\270\200 \354\226\221\354\213\235]_[markdown]_[test_1.jpg]_[\353\247\210\355\201\254\353\213\244\354\232\264 \354\226\221\354\213\235\354\236\205\353\213\210\353\213\244. \354\260\270\352\263\240\355\225\230\354\227\254 \353\270\224\353\241\234\352\267\270 \352\270\200\354\235\204 \354\236\221\354\204\261\355\225\264\354\243\274\354\204\270\354\232\224. \352\260\201 \354\226\270\354\226\264\353\263\204 \355\225\230\354\235\264\353\235\274\354\235\264\355\214\205\353\217\204 \354\247\200\354\233\220\355\225\251\353\213\210\353\213\244.]_[].md" diff --git "a/blog/[20240506]_[title0506]_[AWS]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230]_[].md" "b/blog/[20240506]_[title0506]_[AWS]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230]_[].md" deleted file mode 100644 index 3b54500c..00000000 --- "a/blog/[20240506]_[title0506]_[AWS]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240506_[20240506]_[title0506]_[AWS]_[test_3.jpg]_[테스트용 로렘]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240507]_[title0507]_[ai]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200]_[].md" "b/blog/[20240507]_[title0507]_[ai]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200]_[].md" deleted file mode 100644 index d1042dd8..00000000 --- "a/blog/[20240507]_[title0507]_[ai]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240507_[20240507]_[title0507]_[ai]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240508]_[title0508]_[react]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210]_[].md" "b/blog/[20240508]_[title0508]_[react]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210]_[].md" deleted file mode 100644 index 38195ca2..00000000 --- "a/blog/[20240508]_[title0508]_[react]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240508_[20240508]_[title0508]_[react]_[test_3.jpg]_[테스트용 로렘입숨입니]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240509]_[title0509]_[ai]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205]_[].md" "b/blog/[20240509]_[title0509]_[ai]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205]_[].md" deleted file mode 100644 index 868fde4e..00000000 --- "a/blog/[20240509]_[title0509]_[ai]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240509_[20240509]_[title0509]_[ai]_[test_3.jpg]_[테스트용 로렘입숨입]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240510]_[title0510]_[SQL]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200]_[].md" "b/blog/[20240510]_[title0510]_[SQL]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200]_[].md" deleted file mode 100644 index abafd478..00000000 --- "a/blog/[20240510]_[title0510]_[SQL]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240510_[20240510]_[title0510]_[SQL]_[test_2.jpg]_[테스트용 로렘입숨입니다. 글자수가]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240511]_[title0511]_[django]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220]_[].md" "b/blog/[20240511]_[title0511]_[django]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220]_[].md" deleted file mode 100644 index 30550a18..00000000 --- "a/blog/[20240511]_[title0511]_[django]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240511_[20240511]_[title0511]_[django]_[test_1.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240512]_[title0512]_[ai]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210]_[].md" "b/blog/[20240512]_[title0512]_[ai]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210]_[].md" deleted file mode 100644 index fd8f9afc..00000000 --- "a/blog/[20240512]_[title0512]_[ai]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240512_[20240512]_[title0512]_[ai]_[test_3.jpg]_[테스트용 로렘입숨입니]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240513]_[title0513]_[python]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205]_[].md" "b/blog/[20240513]_[title0513]_[python]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205]_[].md" deleted file mode 100644 index 43b006d1..00000000 --- "a/blog/[20240513]_[title0513]_[python]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240513_[20240513]_[title0513]_[python]_[test_2.jpg]_[테스트용 로렘입숨입]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240514]_[title0514]_[react]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200]_[].md" "b/blog/[20240514]_[title0514]_[react]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200]_[].md" deleted file mode 100644 index ce55e00c..00000000 --- "a/blog/[20240514]_[title0514]_[react]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240514_[20240514]_[title0514]_[react]_[test_1.jpg]_[테스트용 로렘입숨입니다. 글자수가]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240515]_[title0515]_[javascript]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 ]_[].md" "b/blog/[20240515]_[title0515]_[javascript]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 ]_[].md" deleted file mode 100644 index b58d00eb..00000000 --- "a/blog/[20240515]_[title0515]_[javascript]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 ]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240515_[20240515]_[title0515]_[javascript]_[test_2.jpg]_[테스트용 ]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240516]_[title0516]_[django]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244]_[].md" "b/blog/[20240516]_[title0516]_[django]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244]_[].md" deleted file mode 100644 index 0a50e2d6..00000000 --- "a/blog/[20240516]_[title0516]_[django]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240516_[20240516]_[title0516]_[django]_[default.png]_[테스트용 로렘입숨입니다]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240517]_[title0517]_[AWS]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 ]_[].md" "b/blog/[20240517]_[title0517]_[AWS]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 ]_[].md" deleted file mode 100644 index 4ff8b486..00000000 --- "a/blog/[20240517]_[title0517]_[AWS]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 ]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240517_[20240517]_[title0517]_[AWS]_[test_1.jpg]_[테스트용 로렘입숨입니다. 글자수가 ]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240518]_[title0518]_[SQL]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 ]_[].md" "b/blog/[20240518]_[title0518]_[SQL]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 ]_[].md" deleted file mode 100644 index c3f67f2c..00000000 --- "a/blog/[20240518]_[title0518]_[SQL]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 ]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240518_[20240518]_[title0518]_[SQL]_[test_1.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 ]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240519]_[title0519]_[python]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 ]_[].md" "b/blog/[20240519]_[title0519]_[python]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 ]_[].md" deleted file mode 100644 index b9daec15..00000000 --- "a/blog/[20240519]_[title0519]_[python]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 ]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240519_[20240519]_[title0519]_[python]_[test_2.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 ]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240520]_[title0520]_[django]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230]_[].md" "b/blog/[20240520]_[title0520]_[django]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230]_[].md" deleted file mode 100644 index 0324e498..00000000 --- "a/blog/[20240520]_[title0520]_[django]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240520_[20240520]_[title0520]_[django]_[test_3.jpg]_[테스트용 로렘]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240521]_[title0521]_[AWS]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216]_[].md" "b/blog/[20240521]_[title0521]_[AWS]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216]_[].md" deleted file mode 100644 index 5b29c580..00000000 --- "a/blog/[20240521]_[title0521]_[AWS]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240521_[20240521]_[title0521]_[AWS]_[test_2.jpg]_[테스트용 로렘입숨입니다. 글자수가 많]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240522]_[title0522]_[react]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200]_[].md" "b/blog/[20240522]_[title0522]_[react]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200]_[].md" deleted file mode 100644 index d8d6cf5b..00000000 --- "a/blog/[20240522]_[title0522]_[react]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240522_[20240522]_[title0522]_[react]_[test_1.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240523]_[title0523]_[unity]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200 ]_[].md" "b/blog/[20240523]_[title0523]_[unity]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200 ]_[].md" deleted file mode 100644 index 37c3ebac..00000000 --- "a/blog/[20240523]_[title0523]_[unity]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200 ]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240523_[20240523]_[title0523]_[unity]_[test_1.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은 ]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240524]_[title0524]_[AWS]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244.]_[].md" "b/blog/[20240524]_[title0524]_[AWS]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244.]_[].md" deleted file mode 100644 index d9ccc181..00000000 --- "a/blog/[20240524]_[title0524]_[AWS]_[test_1.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244.]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240524_[20240524]_[title0524]_[AWS]_[test_1.jpg]_[테스트용 로렘입숨입니다.]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240525]_[title0525]_[AWS]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200]_[].md" "b/blog/[20240525]_[title0525]_[AWS]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200]_[].md" deleted file mode 100644 index cc577018..00000000 --- "a/blog/[20240525]_[title0525]_[AWS]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240525_[20240525]_[title0525]_[AWS]_[test_2.jpg]_[테스트용 로렘입숨입니다. 글자수가]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240526]_[title0526]_[SQL]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200]_[].md" "b/blog/[20240526]_[title0526]_[SQL]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200]_[].md" deleted file mode 100644 index 7d18f08e..00000000 --- "a/blog/[20240526]_[title0526]_[SQL]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240526_[20240526]_[title0526]_[SQL]_[test_3.jpg]_[테스트용 로렘입숨입니다. 글자수가]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240527]_[title0527]_[unity]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200 ]_[].md" "b/blog/[20240527]_[title0527]_[unity]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200 ]_[].md" deleted file mode 100644 index d213f2fb..00000000 --- "a/blog/[20240527]_[title0527]_[unity]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216\354\235\200 \352\262\203\353\266\200\355\204\260 \352\270\200\354\236\220\354\210\230\352\260\200 \354\240\201\354\235\200 ]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240527_[20240527]_[title0527]_[unity]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은 ]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240528]_[title0528]_[c]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244]_[].md" "b/blog/[20240528]_[title0528]_[c]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244]_[].md" deleted file mode 100644 index 2e6083db..00000000 --- "a/blog/[20240528]_[title0528]_[c]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240528_[20240528]_[title0528]_[c]_[default.png]_[테스트용 로렘입숨입니다]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240529]_[title0529]_[javascript]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244.]_[].md" "b/blog/[20240529]_[title0529]_[javascript]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244.]_[].md" deleted file mode 100644 index 1352866c..00000000 --- "a/blog/[20240529]_[title0529]_[javascript]_[test_2.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244.]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240529_[20240529]_[title0529]_[javascript]_[test_2.jpg]_[테스트용 로렘입숨입니다.]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240530]_[title0530]_[django]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216]_[].md" "b/blog/[20240530]_[title0530]_[django]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216]_[].md" deleted file mode 100644 index 2b7b540b..00000000 --- "a/blog/[20240530]_[title0530]_[django]_[test_3.jpg]_[\355\205\214\354\212\244\355\212\270\354\232\251 \353\241\234\353\240\230\354\236\205\354\210\250\354\236\205\353\213\210\353\213\244. \352\270\200\354\236\220\354\210\230\352\260\200 \353\247\216]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240530_[20240530]_[title0530]_[django]_[test_3.jpg]_[테스트용 로렘입숨입니다. 글자수가 많]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240531]_[title0531]_[SQL]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251]_[].md" "b/blog/[20240531]_[title0531]_[SQL]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251]_[].md" deleted file mode 100644 index b4c9c361..00000000 --- "a/blog/[20240531]_[title0531]_[SQL]_[default.png]_[\355\205\214\354\212\244\355\212\270\354\232\251]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240531_[20240531]_[title0531]_[SQL]_[default.png]_[테스트용 ]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240531]_[title0531test]_[JS]_[]_[\355\205\214\354\212\244\355\212\270\354\232\251 ]_[].md" "b/blog/[20240531]_[title0531test]_[JS]_[]_[\355\205\214\354\212\244\355\212\270\354\232\251 ]_[].md" deleted file mode 100644 index b4c9c361..00000000 --- "a/blog/[20240531]_[title0531test]_[JS]_[]_[\355\205\214\354\212\244\355\212\270\354\232\251 ]_[].md" +++ /dev/null @@ -1,15 +0,0 @@ - -# 테스트용입니다. - -* `20240531_[20240531]_[title0531]_[SQL]_[default.png]_[테스트용 ]_[].md` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() { - console.log('하이라이팅 테스트입니다.'); -} -``` diff --git "a/blog/[20240620]_[\354\230\244\353\246\204\354\272\240\355\224\204Python\354\210\230\354\227\205]_[python]_[]_[\352\260\225\354\235\230 \355\225\204\352\270\260 \353\263\265\354\212\265\354\232\251]_[].ipynb" "b/blog/[20240620]_[\354\230\244\353\246\204\354\272\240\355\224\204Python\354\210\230\354\227\205]_[python]_[]_[\352\260\225\354\235\230 \355\225\204\352\270\260 \353\263\265\354\212\265\354\232\251]_[].ipynb" new file mode 100644 index 00000000..3289a8d2 --- /dev/null +++ "b/blog/[20240620]_[\354\230\244\353\246\204\354\272\240\355\224\204Python\354\210\230\354\227\205]_[python]_[]_[\352\260\225\354\235\230 \355\225\204\352\270\260 \353\263\265\354\212\265\354\232\251]_[].ipynb" @@ -0,0 +1,3672 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Day-2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 커맨드\n", + "1. **실행 단축키 (3번씩 실습)**\n", + " 1. (필수) `Ctrl(Command)` + `Enter` : 해당 셀 실행\n", + " 2. `Shift` + `Enter` : 해당 셀 실행 + 커서를 다음 셀로 이동\n", + " 3. (필수) `Alt(Option)` + `Enter` : 해당 셀 실행 + 코드 불록 하단 추가\n", + "2. **셀 삽입/삭제 관련 단축키(3번씩 실습)**\n", + " 1. `Ctrl(Command)` + M A : 코드 셀 위에 삽입\n", + " 2. `Ctrl(Command)` + M B : 코드 셀 아래 삽입\n", + " 3. `Ctrl(Command)` + M D : 셀 지우기\n", + " 4. `Ctrl(Command)` + M Y : 코드 셀로 변경\n", + " 5. `Ctrl(Command)` + M M : 마크다운 셀로 변경\n", + " 6. `Ctrl(Command)` + M Z : 실행 취소\n", + "3. **자주 쓰는**\n", + " 1. `Ctrl(Command)` + `Alt(Option)` + 화살표위아래 : 동시 수정\n", + " 2. (자주) `Ctrl(Command)` + D : 같은 단어 찾아 동시 수정\n", + " 3. `Ctrl(Command)` + `Shift` + L : 동일 단어를 전체로 찾아 동시 수정\n", + " 4. `Alt(Option)` + `Shift` + 화살표위아래 : 해당내용을 위나 아래 복사해서 붙여넣기\n", + " 5. `Alt(Option)` + 화살표위아래 : 해당 내용을 위나 아래로 보내기\n", + " 6. (자주) `Ctrl(Command)` + `Alt(Option)` + 화살표위아래 : 위아래 동시 수정\n", + " 7. (자주) Home, End : 문장의 양 끝\n", + " 8. (필수) `Ctrl(Command)` + `/` : 주석\n", + " 9. (필수) `Shift`(`Command`) + `Del` : 한 줄 지우기\n", + " 10. (필수) `Tab`, `Ctrl` + `]` : 들여쓰기\n", + " 11. (필수) `Shift` + `Tab`, `Ctrl` + `[` : 내어쓰기" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 마크다운 \n", + "#### 1. # 수 만큼 글자 크기\n", + "#### 2. 강조 * _\n", + "예)\n", + "*강조* **강조**
\n", + "_강조_ __강조__\n", + "#### 3. 목록\n", + "예)\n", + "1.\t\t\n", + "2.\t\t\t\n", + "3.\t\n", + "*\t\n", + "*\t\n", + "*\t\n", + "#### 4. 링크 [표시이름](링크 주소),![표시이름](링크 주소)\n", + "예)\n", + "[Google](http://www.google.com)
\n", + "![모연](./img/zoom_BG1.png)\n", + "#### 5. 기타\n", + "취소선 : ~~취소선~~\n", + "\n", + "---\n", + "\n", + "> 인용문\n", + ">> 중첩된 인용문" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 주석 코드" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# 이것은 주석이입다.\n", + "print(\"hello,word1!\")\n", + "# print('hello,world2!') # 출력 안됨" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 입력과 출력" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "age = input('나이를 입력해주세요.')\n", + "print(age + age) # 입력받은 문자는 '문자열'로 처리되어 이어붙입니다.\n", + "print(\"Hello\", \"World\", \"!\") # 출력은 , 로 구분함 > 출력에는 띄어쓰기로 연결됨\n", + "print(\"010\", \"0000\", \"0000\", sep=\"-\",end='???') # sep 로 연결기호 변경 가능 end 로 다음 문장 연결)\n", + "print(\"010\", \"0000\", \"0000\", sep=\"@\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## f-string" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "name = 'licat'\n", + "age = 10\n", + "print('제 이름은',name,end=\", \")\n", + "print('제 나이는',age)\n", + "print(f'제 이름은 {name}, 제 나이는 {age} 입니다.') # 변수를 쉽게 추가하는 방법" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 변수\n", + "1. **변수 이름 짓기**\n", + "\t* 변수 이름은 알파벳(대문자와 소문자), 숫자, 언더스코어(_)로 구성됩니다.\n", + "\t* 변수 이름은 숫자로 시작할 수 없습니다. 예를 들어 1ten / 100_test / 0은 변수 이름으로 사용할 수 없습니다.\n", + "\t* 파이썬의 키워드(예: if, else, while 등)는 변수 이름으로 사용할 수 없습니다.\n", + "\t* 변수는 대소문자 구분\n", + "2. **관습**\n", + "\t* 일반 변수는 주로 첫 문자를 소문자로 사용합니다.\n", + "\t* 사용하지 않는 변수는 언더스코어(_)로 명명합니다.
\n", + "\t\t`예: 반복문에서 i, j, k와 같은 변수가 사용되지 않는다면 이러한 변수명을 언더스코어로 대체합니다.`\n", + "\t* 클래스는 첫문자를 대문자로 하고 띄어쓰기가 일어날 때마다 대문자로 표시하는 파스칼표기법을 주로 사용합니다.
\n", + "\t\t`예: class UserProfile: , daily_user_count = 100`\n", + "3. **변수의 타입 변수 정의 후, type(변수) 사용**\n", + "\t* `int` : 양의 정수, 0, 음의 정수를 표현합니다. `예: 1, 5, 100, 0, -30, -45`\n", + "\t* `float` : 소수점을 포함한 실수를 표현합니다. `예: 1.5, 5.6, 100.23, 0.0, -30.53245`\n", + "\t* `complex` : 실수부와 허수부로 구성된 복소수를 표현합니다. `예: 1+2j, 3-4j`\n", + "\t* `Boolean Type` : 논리 자료형 True, False을 표현합니다.\n", + "\t* `Sequence Types` : 순서가 있으면서 순서에 해당하는 값을 읽어올 수 있는 인덱싱이나 일부 순서에 그룹을 잘라낼 수 있는 슬라이싱이 가능한 자료형입니다.\n", + "\t* `str` : 문자의 나열로 이루어진 문자열을 표현합니다. `예: \"Hello\", 'Python'`\n", + "\t* `list`: 순서가 있는 변경 가능(mutable)한 객체의 집합입니다. `예: [1, 2, 3], ['a', 'b', 'c']`\n", + "\t* `tuple`: 순서가 있는 변경 불가능(immutable)한 객체의 집합입니다. `예: (1, 2, 3), ('a', 'b', 'c')`\n", + "\t* `Collection Types` 혹은 컨테이너 타입(Container Types): 다른 자료형을 담을 수 있는 자료형입니다.\n", + "\t* `list`: 순서가 있는 변경 가능(mutable)한 객체의 집합입니다. `예: [1, 2, 3], ['a', 'b', 'c']`\n", + "\t* `tuple`: 순서가 있는 변경 불가능(immutable)한 객체의 집합입니다. `예: (1, 2, 3), ('a', 'b', 'c')`\n", + "\t* `set`: 순서가 없고 중복을 허용하지 않는 변경 가능(mutable)한 객체의 집합입니다. `예: {1, 2, 3}, {'a', 'b', 'c'}`\n", + "\t* `dict`: 키(key)와 값(value)의 쌍으로 이루어진 변경 가능(mutable)한 객체의 집합입니다. `예: {'a': 1, 'b': 2, 'c': 3}`\n", + "\t* `None`: None, 값이 없음을 나타내는 특별한 타입입니다.\n", + "\t* 이 외에도 파이썬에서는 함수`(function)`, 클래스`(class)`, 모듈`(module)` 등의 타입도 존재합니다. 각 타입의 변수를 선언하고 사용하는 예시를 살펴보겠습니다.\n", + "4. **dir활용**\n", + "\t* 출력 예)
\n", + "\t # int라는 이름을 가지고 있군요!
\n", + "\t'__abs__', # 매직 메서드: 절대값이 되는군요!
\n", + "\t'__add__', # 매직 메서드: 더하기가 되는군요!
\n", + "\t'__and__', # 매직 메서드: 논리 연산이 되는군요!
\n", + "\t'__mul__', # 매직 메서드: 곱하기가 되는군요!
\n", + "\t'real', # 메서드: 실수부를 출력하는 메서드
\n", + "\t'to_bytes' # 메서드: 바이트로 변환하는 메서드\n", + "5. **변수 삭제 del**\n", + "\n", + " \n", + "\t" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "사용 불가 키워드" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import keyword\n", + "\n", + "print(keyword.kwlist)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "변수 정의" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "name = 'Jun1'\n", + "Name = 'Jun2'\n", + "NAME = 'Jun3'\n", + "print(name, Name, NAME)\n", + "name = 'jun4' # 같은 변수 정의시 덮어쓰기 됨\n", + "print(name)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "타입 확인" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "age = 10\n", + "print(type(age)) # 출력: \n", + "\n", + "name = \"licat\"\n", + "print(type(name)) # 출력: \n", + "\n", + "x = 10\n", + "print(type(x))\n", + "print(dir(x))\n", + "del x\n", + "print(x) # NameError: name 'x' is not defined" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "a = 10 # int, 정수형\n", + "b = -1 # int, 정수형\n", + "c = 0b110 # int, 2진수 정수형\n", + "d = 0o56 # int, 8진수 정수형\n", + "e = 0xAC # int, 16진수 정수형\n", + " \n", + "f = 10.1 # float, 실수형\n", + " \n", + "g = 10 + 2j # complex, 복소수형\n", + " \n", + "h = 'Hello' # str, 문자열\n", + "i = \"10\" # str, 문자열\n", + " \n", + "j = True # bool, 불리언\n", + " \n", + "k = None # NoneType\n", + " \n", + "l = [1, 2, 3, 4] # list, 리스트\n", + "m = ['one', 'two'] # list, 리스트\n", + "n = (1, 2, 3, 4) # tuple, 튜플\n", + "o = ('one', 'two') # tuple, 튜플\n", + "p = {'one': 1, 'two': 2} # dict, 딕셔너리\n", + "q = {1, 2, 3, 4} # set, 집합\n", + " \n", + "def r(): # function, 함수\n", + " pass\n", + " \n", + "s = print # built-in function, 내장 함수\n", + "t = lambda x: x ** 2 # function, 람다 함수\n", + "u = int # type, 타입\n", + " \n", + "class Character: # class, 클래스\n", + " pass\n", + " \n", + "hero = Character() # instance, 인스턴스\n", + "villain = Character() # instance, 인스턴스" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Python에서는 `bin(), oct(), hex()` 함수를 사용하여 10진수를 각각 `2진수, 8진수, 16진수`로 변환할 수 있습니다." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "x = 26\n", + "print(bin(x))\n", + "print(oct(x))\n", + "print(hex(x))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`id` 범위 `-5 ~ 256`, 그외 값을 변함" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# -5 ~ 256\n", + "x = 1000\n", + "y = 1000\n", + "a = 256\n", + "b = 256\n", + "print(id(x), id(y))\n", + "print(id(a), id(b))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "실수의 특수 값 `inf_무한`, `e,E` 10에 승수" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "x = float(\"-inf\")\n", + "y = float(\"inf\")\n", + "float(\"inf\") > 10" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(2e3) # 지수표현, float형\n", + "print(2E3)\n", + "\n", + "print(2 * (10 ** 3)) # int 형" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Day-3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 문자열(`str`)\n", + "1. `변수명[start(인덱스) : stop(인덱스) : step(인덱스)]` 슬라이싱\n", + "2. `변수명.메서드()`\n", + "\t* `lower`( ) 전체 *`소`*문자\n", + "\t* `upper`( ) 전체 *`대`*문자\n", + "\t* `find` ( ) index ( ) 문자열을 *`찾아주는`* method *`찾을 수 없는 문자열일 경우 find는 -1을 반환하는 반면, index는 error를 반환합니다.`*\n", + "\t* `count`( ) 문자열이나 숫자를 *`셀`* 때 사용\n", + "\t* `strip`( ) 양쪽 `공백 + @`을 *`제거`*하는 method\n", + "\t* `replace`( ) `원하는 문자열`을 다른 문자열로 *`대체`*할 때 사용하는 *`method 대소문자 구분`*\n", + "\t* `split`( ) `()` 내용을 기준으로 문자열 *`나누기`*\n", + "\t* `.join` ( ) 리스트 [] 내용을 .join 앞에의 내용으로 하나의 문자열로 합치기 *`예문 확인`*\n", + "\t* `format`( ) 메서드는 문자열 내에서 변수의 값을 대입할 때 사용하는 메서드입니 *`예문 확인`*\n", + "\t* `isalnum`( ) `al`는 *`알파벳`*, `num`은 *`숫자`*, **특수문자가 들어가 있으면 `False`, 한글이나 영어, 일본어, 중국어, 숫자 등이 들어가 있으면 `True`.**\n", + "\t* `isdigit`( ) `문자열 숫자 만` 인지 확인.\n", + "\t* `isalpha`( ) `문자열 문자 만` 인지 확인.\n", + "\t* `isascii`( ) `아스키 코드표` 안에 있는비 확인.\n", + "\t* `rjust`( **지정 길이 `:` 지정 문자** ) 문자열을 지정한 길이로 맞추고, 왼쪽을 지정한 문자로 채우는 메서드 *`예문 확인`*\n", + "\t* `ljust`( **지정 길이 `:` 지정 문자** ) 문자열을 지정한 길이로 맞추고, 오른쪽을 지정한 문자로 채우는 메서드\n", + "\t* `center`( **지정 길이 `:` 지정 문자** ) 문자열을 지정한 길이로 맞추고, 양쪽 지정한 문자로 채우는 메서드\n", + "\t* `zfill`( **지정 길이** ) 문자열을 지정한 길이로 맞추고, 왼쪽을 0로 채우는 메서드, type 문자열로 변경\n", + "\t* `maketrans + translate`() `여러개 문자열`을 다른 문자열로 *`대체`* 혹은 삭제 *`예문 학인`* **연습 필요**\n", + "\t" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "슬라이싱 테스트" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "j = \"\"\"안녕하세요.\n", + "저는 위니브의 대표 이호준입니다.\n", + "파이썬 참 좋아요.\n", + "여러분 정말 잘 선택하셨어요.\n", + "\"\"\"\n", + "print(i)\n", + "s = 'weniv CEO licat' # S[]<문자열의 순번 0부터 시작 \n", + "print(s[0]) # 출력 : '위'\n", + "print(s[-1]) # 출력 : '!'\n", + "print(s[0:5]) # 출력 : weniv # 첫번째 예제\n", + "print(s[6:]) # 출력 : CEO licat # 두번째 예제\n", + "print(s[:]) # 출력 : weniv CEO licat # 세번째 예제\n", + "print(s[::-1]) # 출력 : tacil OEC vinew # 네번째 예제\n", + "print(s[::2]) # 출력 : wnvCOlct # 다섯번째 예제\n", + "c = 'zoom_BG1.png'\n", + "print(c[-3:])\n", + "print(c[-1:-4:-1])\n", + "print(c[-4::1])\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "메서드 strip() 테스트" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "' ,!! hello world '.strip(' ,!')\n", + "#양쪽의 공백과 ',!'을 제거해주는 method" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "join() 테스트" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s = ['weniv', 'CEO', 'licat']\n", + "print('-'.join(s)) #리스트를 하나의 문자열로 합치기\n", + "c = '010 1000 1000'\n", + "'-'.join(c.split()) #공백을 기준으로 문자열을 나눈 후 '-'로 합치기" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "format() 테스트 > f-string 로 대체" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "name = 'licat'\n", + "age = 29\n", + "print('제 이름은 {}이고, 나이는 {}살입니다.'.format(name, age))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "licat( : ) 테스트" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s = 'licat'\n", + "s.rjust(10, '-')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`maketrans + translate` 테스트" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# 두 개의 인수를 사용하는 예제\n", + "intab = \"aeiou\"\n", + "outtab = \"12345\"\n", + "translation_table = str.maketrans(intab, outtab)\n", + "translated_string = \"hello world\".translate(translation_table)\n", + "print(translated_string) # h2ll4 w4rld\n", + "\n", + "# 세 개의 인수를 사용하는 예제\n", + "intab = \"aeiou\"\n", + "outtab = \"12345\"\n", + "removetab = \"xyz\"\n", + "translation_table = str.maketrans(intab, outtab, removetab)\n", + "translated_string = \"hello xyz world\".translate(translation_table)\n", + "print(translated_string) # h2ll4 w4rld (xyz 문자가 제거됨)\n", + "# 사전을 사용하는 예제\n", + "translation_table = str.maketrans({\n", + " 'a': '1',\n", + " 'e': '2',\n", + " 'i': '3',\n", + " 'o': '4',\n", + " 'u': '5',\n", + " 'y': None # 제거할 문자\n", + "})\n", + "translated_string = \"hello world\".translate(translation_table)\n", + "print(translated_string) # h2ll4 w4rld" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 이스케이프 문자\n", + "\n", + "* \\\": 큰따옴표를 나타냅니다.\n", + "* \\': 작은따옴표를 나타냅니다.\n", + "* \\\\: 백슬래시를 나타냅니다.\n", + "\n", + "* \\n: 새로운 줄바꿈\n", + "* \\t: 탭 간격\n", + "* \\r: 커서를 현재 줄의 처음으로 이동합니다" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# ChatGPT에서 가져옴 \n", + "import time\n", + "import sys\n", + "\n", + "def progress_bar(iteration, total, length=50):\n", + " percent = (\"{0:.1f}\").format(100 * (iteration / float(total)))\n", + " filled_length = int(length * iteration // total)\n", + " bar = '█' * filled_length + '-' * (length - filled_length)\n", + " sys.stdout.write(f'\\r|{bar}| {percent}%')\n", + " sys.stdout.flush()\n", + " if iteration == total:\n", + " print()\n", + "\n", + "# 사용 예시\n", + "total_iterations = 100\n", + "for i in range(total_iterations + 1):\n", + " progress_bar(i, total_iterations)\n", + " time.sleep(0.1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 실습" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. **사용자 정보 입력받기**\n", + " - 사용자의 이름, 나이, 그리고 좋아하는 색깔을 차례로 입력받아서, 입력받은 정보를 출력하는 간단한 프로그램을 만들어보세요.\n", + " - 이 프로그램은 `input()` 함수를 사용하여 사용자의 이름, 나이, 좋아하는 색깔을 입력받습니다.\n", + " - 입력받은 각 정보는 변수에 저장된 후 `print()` 함수로 출력됩니다.\n", + " - 추가적으로 입력된 나이를 숫자로 변환하여 연산에 사용할 수 있습니다 (예: 나이를 더하거나 빼기 등)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "name = input(\"이름을 입력하세요\")\n", + "age = input(\"나이를 입력하세요\")\n", + "color = input(\"좋아하는 색깔 입력하세요\")\n", + "print(f\"이름:{name}나이:{age}좋아하는 색깔:{color}\" )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 사용자로부터 좋아하는 음식, 영화, 취미 세 가지를 입력받아 요약해 출력하는 프로그램을 만들어보세요.\n", + "- 좋아하는 음식, 영화, 취미에 대한 정보를 입력받아 이를 요약하여 출력합니다.\n", + "- `input()` 함수로 각 정보를 받고, 입력받은 정보를 바탕으로 요약 문장을 출력합니다." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "movie = input(\"좋아하는 영화 입력하세요\")\n", + "food = input(\"좋아하는 음식 입력하세요\")\n", + "hobby = input(\"좋아하는 취미 입력하세요\")\n", + "print(f\"영화:{movie}음식:{food}취미:{hobby}\" )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 실습 2: 문자열 슬라이싱과 데이터 처리\n", + "\n", + "전화번호를 입력받아 지역번호만 추출하는 프로그램을 작성해보세요.\n", + "\n", + "- `input()` 함수로 전화번호를 입력받습니다.\n", + "- `split()` 메서드를 사용하여 '-'를 구분자로 하여 문자열을 나눕니다.\n", + "- 리스트 인덱싱을 통해 첫 번째 요소(지역번호)를 추출합니다.\n", + "- 입력받은 전화번호 형식이 올바른지 검사하는 간단한 검증 로직을 추가할 수 있습니다." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "PN = input(\"전화번호를 입력하세요\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "(강사) 김진환 — 오늘 오전 11:09\n", + "### 실습 4: 특정 단어 치환\n", + "\n", + "사용자로부터 문장을 입력받아, 특정 단어를 다른 단어로 치환해 출력해보세요.\n", + "\n", + "- 사용자로부터 문장과 치환하고 싶은 단어, 그리고 새로운 단어를 입력받습니다.\n", + "- `replace()` 메서드를 사용하여 문장 내의 특정 단어를 새로운 단어로 치환합니다.\n", + "- `replace()` 함수는 원본 문자열을 변경하지 않고 새로운 문자열을 반환함을 유의하세요.\n", + "- 대소문자 구분 없이 치환하려면 입력받은 문장과 치환 대상 단어를 모두 소문자 또는 대문자로 변환한 후 처리할 수 있습니다." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "user_input = input(\"수정하고 싶은 문장을 입력하세요\")\n", + "user_replace = input(\"수정해야 할 단어 입력하세요\")\n", + "user_new = input(\"수정 내용 입력하세요\")\n", + "\n", + "print(user_input.replace(user_replace,user_new))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 논리 자료형 bool\n", + "* `True`: 참을 나타냅니다. `1`과 같은 값으로 취급됩니다.\n", + "* `False`: 거짓을 나타냅니다. `0`과 같은 값으로 취급됩니다.\n", + "* `비교 연산`에 사용\n", + "### None 자료형\n", + "[None]\n", + " `비어 있다`, `아무것도 없다`, `정보가 없다`를 표현하고 싶을 때 사용하는 것이 `None`입니다." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "x = None\n", + "\n", + "\n", + "print(x == None) # True, 하지만 이 방식은 권장되지 않습니다.\n", + "print(x is None) # True, 이 방식을 사용하여 None을 확인하는 것이 좋습니다." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 문자열의 메서드 체이닝\n", + "* 메서드를 `.` 으로 연결하는것\n", + "* `한줄`로 코딩하는 것을 권장함 -`2개 혹은 3개 연속`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sentence = ' Hello, World! '\n", + "result = sentence.strip().lower().replace('world', 'python')\n", + "# 1번 스탭 : sentence.strip() == 'Hello, World!'\n", + "# 2번 스탭 : 'Hello, World!'.lower() == 'hello, world!'\n", + "# 3번 스탭 : 'hello, world!'.replace('world', 'python')\n", + "print(result) # 'hello, python!'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 형변환\n", + "\n", + "* int()\t정수로 변환\n", + "* str()\t문자열로 변환\n", + "* float()\t실수로 변환\n", + "* list()\t리스트로 변환\n", + "* tuple()\t튜플로 변환\n", + "* dict()\t딕셔너리로 변환\n", + "* set()\t셋으로 변환" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "data = [('name','licat'),('age',10)]\n", + "d = dict(data)\n", + "d" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 연습문제\n", + "\n", + "* 문제1 : x = 100 <-\n", + "* 문제2 : 3번,5번,#6번\n", + "* 문제3 : user_input = input('종복 출력 문장을 입력하세요')
\n", + "print(user_input*2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 연산자\n", + "* 연산자는 프로그래밍에서 데이터를 처리하고 분석하는 데 쓰이는 기호나 키워드입니다.\n", + "* 종류에는 \n", + "\t1. 산술연산자`(+,-,*,/,%,**) 타입 동일, dict()딕셔너리 사용 불가, -- = + 마이너스 2개는 플러스 이다, / 소수, // 정수`\n", + "\t2. 대입연산자(할당연산자 = ) \n", + "\t\t* 할당 연산자의 우선순위는 대부분의 다른 연산자들보다 낮음\n", + "\t3. 비교연산자`(==,!=,<,<=,>,>=,math.isclose())`\n", + "\t4. 논리연산자`(and곱셈으로 간주,or덧셈으로 간주,not주어진 조건의 반대 값)` 단락평가 중요..\n", + "\t\t* 단락 평가: 자원 절약, and 앞 false 뒤 생략, or 앞 true 뒤 생략\n", + "\t\t* not, and, or는 순서대로 우선순위를 가지고 있습니다. not이 가장 먼저 실행되며 그 다음으로는 and, or 순\n", + "\t5. 비트연산자\n", + "\t6. 멤버연산자 `(in, not in)`\n", + "\t\t* 어떤 값이 목록 안에 있는지 확인해주는 기능입니다\n", + "\t7. 식별연산자 `(is,is not)`\n", + "\t\t* 주소를 비교하는 연산자\n", + "\t\t* id(data) 로 주소 확인\n", + "\t8. ![우선순위](./img/우선순위표.PNG)\n", + "\t\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Day-4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* 240621 News\n", + " 1. `앤트로픽`,'클로드 3.5 소네트' 출시\n", + " 2. 영국서 `AI각본` 영화 상영 취소\n", + "* 지난 강의 이해도 조사 -> 70%\n", + " 1. 추천 자료 - [초보자를 위한 파이썬 300제](https://wikidocs.net/book/922) - 링크
\n", + " 2. `ChatGPT` 활용, 연습문제 생성\n", + "* 금일 강의\n", + " 1. 리스트(list)\n", + " 2. 튜플(tuple)\n", + " 3. 딕셔너리(dict)\n", + " 4. 셋(set)\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### list\n", + "\n", + "**리스트(list)**\n", + " * 가변적(mutable)이며 순서가 있는 시퀀스 자료형입니다.\n", + " * 대괄호([]) 안에 쉼표(,)로 데이터를 구분하여 저장합니다.\n", + " * 메서드로는 append(), clear(), copy(), count(), extend(), index(), insert(), pop(), remove(), reverse(), sort(), sorted() 등이 있습니다.\n", + "\n", + "**추가 설명**\n", + " * 공백을 포함한 리스트 예시: `[1, '', 3]`\n", + " * 다차원 리스트 예시: `[[1, 2], [3, 4]]`\n", + " * 리스트는 하드웨어 자원이 허용하는 한 저장 공간에 데이터를 넣어주고, 순서를 정수(0부터 시작)로 표현합니다. 리스트의 각 요소는 메모리 주소(ID)를 가지고 있습니다.\n", + "\n", + "**리스트 메서드 설명**\n", + " * **append()**: 리스트의 끝에 값을 추가합니다.\n", + " * **clear()**: 리스트의 모든 항목을 삭제합니다.\n", + " * **copy()**: 리스트의 얕은 복사를 생성합니다. 이는 원본 리스트의 참조를 공유하지만, 새로운 객체를 생성합니다.\n", + " * **count()**: 특정 값이 리스트에 몇 번 포함되어 있는지 카운트합니다.\n", + " * **extend()**: 리스트에 다른 리스트나 순회 가능한(iterable) 항목들을 추가합니다.\n", + " * **index()**: 주어진 값을 찾아 해당 값의 위치(인덱스)를 반환합니다. 값이 없으면 ValueError가 발생합니다.\n", + " * **insert()**: 주어진 위치에 값을 삽입합니다.\n", + " * **pop()**: 리스트의 특정 위치에 있는 값을 반환하고 해당 값을 리스트에서 삭제합니다. 위치를 지정하지 않으면 마지막 항목을 반환하고 삭제합니다.\n", + " * **remove()**: 리스트에서 첫 번째로 발견되는 주어진 값을 삭제합니다. 값이 없으면 ValueError가 발생합니다.\n", + " * **reverse()**: 리스트의 항목들의 순서를 뒤집습니다. 원래의 리스트를 변경하고, 반환 값은 None입니다.\n", + " * **reversed()**: 역순으로 새로운 이터러블 객체를 반환하는 함수입니다. 원래의 리스트는 변경되지 않습니다.\n", + " * **sort()**: 리스트 자체를 정렬합니다. 원래의 리스트를 변경하고, 반환 값은 None입니다.\n", + " * **sorted()**: 새로운 리스트를 반환하는 내장 함수입니다. 원래의 리스트는 변경되지 않습니다.\n", + "\n", + "### tuple\n", + " \n", + "**튜플(tuple)**\n", + " * 한 번 생성된 튜플은 내부의 값 변경이 불가능(immutable)합니다. 이는 튜플의 요소를 수정, 추가, 삭제할 수 없음을 의미합니다.\n", + " * 튜플은 소괄호()를 사용하여 생성하며, 그 안에 쉼표(,)로 구분된 데이터들을 넣어 저장합니다.\n", + " * 공백이 포함된 튜플 예시: `('a', '', 'c')`\n", + " * 데이터 뒤에 쉼표가 필수적인 이유는 하나의 요소로 구성된 튜플을 명확히 구분하기 위해서입니다. 예를 들어, `('a')`는 문자열 `'a'`로 인식되지만, `('a',)`는 요소가 하나인 튜플로 인식됩니다.\n", + " * 데이터 보호 측면에서 튜플은 한 번 생성된 후 내부 요소를 변경할 수 없기 때문에 데이터의 불변성을 보장합니다. 이는 데이터의 신뢰성을 유지하는 데 도움이 됩니다.\n", + " * 리스트에 비해 처리 속도가 빠른 경우가 있으나, 이는 사용하는 컨텍스트에 따라 달라질 수 있습니다.\n", + "\n", + "**튜플 메서드**\n", + "\n", + " * **count()**: 튜플 내에서 특정 값이 나타나는 횟수를 반환합니다. 만약 해당 값이 없으면 0을 반환합니다.\n", + " * **index()**: 특정 값이 튜플 내에서 처음으로 나타나는 위치의 인덱스를 반환합니다. 만약 해당 값이 없으면 ValueError가 발생합니다.\n", + "\n", + "### dictionary\n", + "\n", + "**딕셔너리(dict)**\n", + " * 딕셔너리는 키(key)와 그에 해당하는 값(value)의 쌍으로 구성됩니다.\n", + " * 중괄호({})를 사용하여 생성하며, 각 키와 값 사이에는 콜론(:)으로 구분하고, 각 쌍은 쉼표(,)로 구분합니다.`{'key1': value1, 'key2': value2}`\n", + " * 빈 딕셔너리는 중괄호 {} 또는 `dict()` 함수를 사용하여 생성할 수 있습니다.\n", + " * 딕셔너리는 키를 기준으로 데이터를 저장하고 검색하기 때문에 키는 유일해야 합니다. 만약 중복된 키를 사용하면 나중에 추가된 값이 이전 값을 대체합니다.\n", + "\n", + "**추가 설명**\n", + " * 딕셔너리는 키(key)의 집합과 값(value)의 집합으로 이루어진 자료구조입니다. 각 키는 해당하는 값을 가리키며, 이는 상자(값)를 가리키는 키링(keyring) 개념으로 이해할 수 있습니다.\n", + " * 딕셔너리는 해시 테이블을 기반으로 하여 효율적인 데이터 검색과 수정을 지원합니다.\n", + " * 딕셔너리는 순서가 없는 자료형이므로 특정 순서로 데이터를 저장하지 않습니다. 이는 키-값 쌍이 삽입된 순서와는 무관하게 검색할 수 있다는 의미입니다.\n", + "\n", + "**딕셔너리 메서드**\n", + "\n", + " * **clear()**: 딕셔너리의 모든 항목을 제거합니다. 딕셔너리는 빈 상태가 됩니다.\n", + " * **copy()**: 딕셔너리의 얕은 복사를 생성합니다. 이는 원본 딕셔너리의 참조를 공유하지 않고 새로운 객체를 생성합니다.\n", + " * **fromkeys(seq[, value])**: 주어진 seq(시퀀스)의 각 요소를 키로 사용하여 딕셔너리를 생성합니다. value를 지정하면 각 키에 해당하는 초기값으로 설정됩니다. 주의할 점으로, zip 함수를 사용해 여러 시퀀스를 동시에 딕셔너리로 변환할 수 있습니다.\n", + " * **get(key[, default])**: 딕셔너리에서 특정 key의 값을 반환합니다. key가 없으면 default 값을 반환합니다. default를 지정하지 않으면 None을 반환하며, 딕셔너리에 없는 키에 접근해도 KeyError가 발생하지 않습니다.\n", + " * **items()**: 딕셔너리의 모든 키-값 쌍을 (키, 값) 형태의 튜플로 묶어서 반환합니다.\n", + " * **keys()**: 딕셔너리의 모든 키들을 반환합니다.\n", + " * **pop(key[, default])**: 주어진 key에 해당하는 값을 삭제하고 반환합니다. key가 없으면 default를 반환하며, default를 지정하지 않으면 KeyError가 발생합니다.\n", + " * **popitem()**: 딕셔너리에서 마지막 키-값 쌍을 제거하고 해당 키-값 쌍을 튜플로 반환합니다. 딕셔너리가 비어있으면 KeyError가 발생할 수 있습니다.\n", + " * **setdefault(key[, default])**: 주어진 key가 딕셔너리에 있으면 해당 값을 반환하고, 없으면 default를 값으로 설정하고 추가합니다.\n", + " * **update([other])**: 다른 딕셔너리 또는 (키, 값) 쌍을 사용하여 기존 딕셔너리를 업데이트합니다. 주어진 딕셔너리 또는 반복 가능한 객체의 키-값 쌍을 추가하거나 업데이트합니다.\n", + " * **values()**: 딕셔너리의 모든 값들을 반환합니다. 이 메서드의 반환값은 dict_values 객체입니다. 이 객체는 순회 가능하며, 딕셔너리의 값들에 접근할 수 있습니다. 그러나 리스트처럼 모든 리스트 메서드를 지원하지는 않습니다.\n", + "\n", + "### set\n", + "\n", + "**셋(set)**\n", + " * 셋은 집합을 나타내며, 중복되지 않는 항목들의 모음입니다.\n", + " * 중괄호({})를 사용하여 생성하며, 각 요소는 쉼표(,)로 구분됩니다.`{1, 2, 3, 4}`\n", + "\n", + "**특징**\n", + " * **중복 안됨**: 셋은 동일한 요소가 중복되지 않습니다. 이미 있는 요소를 여러 번 추가하더라도 하나의 요소만 유지됩니다.\n", + " * **순서 없음**: 셋은 요소들이 순서대로 저장되지 않습니다. 따라서 인덱스로 요소에 접근할 수 없습니다.\n", + " \n", + "**셋의 연산**\n", + " * **합집합(|)**: 두 셋의 모든 요소를 합친 새로운 셋을 생성합니다.\n", + " * **교집합(&)**: 두 셋에 모두 있는 요소들로 새로운 셋을 생성합니다.\n", + " * **차집합(-)**: 첫 번째 셋에서 두 번째 셋의 요소를 제거한 새로운 셋을 생성합니다.\n", + "\n", + "**셋 메서드**\n", + "\n", + " * **add(element)**: 셋에 새로운 요소를 추가합니다. 이미 존재하는 요소를 추가하면 아무런 변화가 없습니다.\n", + " * **remove(element)**: 셋에서 주어진 요소를 제거합니다. 요소가 셋에 없으면 KeyError가 발생합니다.\n", + " * **discard(element)**: 셋에서 주어진 요소를 제거합니다. 요소가 셋에 없어도 에러가 발생하지 않습니다.\n", + " * **pop()**: 셋에서 임의의 요소를 제거하고 반환합니다. 셋이 비어있으면 KeyError가 발생할 수 있습니다.\n", + " * **clear()**: 셋의 모든 요소를 제거합니다.\n", + " * **copy()**: 셋의 얕은 복사를 생성합니다.\n", + " * **union(other_set)** 또는 **|**: 셋과 다른 셋의 합집합을 반환합니다.\n", + " * **intersection(other_set)** 또는 **&**: 셋과 다른 셋의 교집합을 반환합니다.\n", + " * **difference(other_set)** 또는 **-**: 셋에서 다른 셋의 요소를 제외한 차집합을 반환합니다.\n", + " * **symmetric_difference(other_set)** 또는 **^**: 셋과 다른 셋의 대칭 차집합을 반환합니다.\n", + " * **issubset(other_set)**: 셋이 다른 셋의 부분집합인지 여부를 반환합니다.\n", + " * **issuperset(other_set)**: 셋이 다른 셋을 포함하는지 여부를 반환합니다.\n", + "\n", + "### 함수\n", + "\n", + "**함수**\n", + "\n", + " * 함수는 코드를 모듈화하여 재사용성을 높이는데 사용\n", + " * `def` 키워드를 이용하여 정의합니다\n", + " * 함수는 매개변수를 받아들이고, 스페이스 4개로 들여쓴 코드 블록으로 구성됩니다.\n", + " * 출력은 `print`로 하며, 반환 값이 필요한 경우 `return`을 사용합니다. \n", + "`이러한 규칙은 파이썬의 스타일 가이드인 PEP-8에서 권장하고 있습니다." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 리스트 양식" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "x = [1, 2, 3] #CSV 파일과 비슷 ,\n", + "y = ['apple', 'banana', 'cherry']\n", + "z = [1, [2], 3] in [2]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 리스트 데이터 수정" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = [1, 2, 3, 4, 5]\n", + "a[0] = 10000\n", + "print(a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 리스트 행열 구분" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "b = [[10, 20, 30], [1, 2, 3]]\n", + "print(b[1][2]) # 출력: 3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 리스트 인덱싱" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "l = [1, 2, 3, 4, 5]\n", + "print(l[0]) # 출력: 1\n", + "print(l[3]) # 출력: 4\n", + "print(l[-1]) # 출력: 5\n", + "print(l[-3]) # 출력: 3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 리스트 슬라이싱" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "l = [1, 2, 3, 4, 5]\n", + "print(l[1:4]) # 출력: [2, 3, 4]\n", + "print(l[:]) # 출력: [1, 2, 3, 4, 5]\n", + "print(l[::-1]) # 출력: [5, 4, 3, 2, 1]\n", + "print(l[::2]) # 출력: [1, 3, 5]\n", + "print(l[0:4][::-1]) # 출력: [3, 2, 1] 체인처럼 처리 가능" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 1. 리스트 append" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = [1, 2, 3]\n", + "a.append(10)\n", + "print(a) # 출력: [1, 2, 3, 10]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 2. 리스트 clear" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = [1, 2, 3]\n", + "a.clear()\n", + "print(a) # 출력: []" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 3. 리스트 copy " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = [1, 2, 3]\n", + "b = a.copy()\n", + "b[0] = 10000\n", + "print(a) # 출력: [1, 2, 3]\n", + "print(b) # 출력: [10000, 2, 3]\n", + "l = [10, 20, 30]\n", + "e = l\n", + "ll = l[:] # 슬라이싱 커피랑 비슷한 효과\n", + "# ll = l.copy() 슬라이싱 + 커피 할때 id까지 전체 복사됨\n", + "print(id(e),id(l))\n", + "print(id(ll), id(l))\n", + "l[0] = 1000\n", + "print(l, ll) # 출력: [1000, 20, 30] [10, 20, 30]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 4. 리스트 count" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = [1, 1, 2, 3, 1]\n", + "print(a.count(1)) # 출력: 3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 5. 리스트 extend" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = [1, 2, 3]\n", + "a.extend([4, 5, 6])\n", + "a.append([4, 5, 6])# 차이\n", + "print(a) # 출력: [1, 2, 3, 4, 5, 6]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 6. 리스트 index" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = [10, 20, 30, 40]\n", + "print(a.index(30)) # 출력: 2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 7. 리스트 insert" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = [10, 20, 30, 40]\n", + "a.insert(2, 25)\n", + "print(a) # 출력: [10, 20, 25, 30, 40]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 8. 리스트 pop" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = [1, 2, 3]\n", + "print(a.pop(2)) # 출력: 25\n", + "print(a) # 출력: [10, 20, 30, 40]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 9. 리스트 remove" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = [1, 2, 3, 1, 2]\n", + "a.remove(2)\n", + "print(a) # 출력: [1, 3, 1, 2]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 10. 리스트 reverse" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = [1, 2, 3, 1, 2]\n", + "a.reverse()\n", + "print(a) # 출력: [2, 1, 3, 2, 1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 11. 리스트 reversed" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 튜플 양식" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "t1 = () # tuple\n", + "t2 = (0,) # tuple 단일 값의 튜플을 사용할때 꼭 콤마를 넣어주세요!\n", + "t3 = (0) # int\n", + "t4 = (0.1) # float\n", + "print(t1)\n", + "print(t2)\n", + "print(type(t3))\n", + "print(type(t4))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 딕셔너리 양식" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "d1 = {}\n", + "d2 = dict()\n", + "\n", + "print(type(d1)) # 출력: \n", + "print(type(d2)) # 출력: \n", + "\n", + "d = {'one' : '하나', 'one' : '하나2', 'one' : '하나3'}\n", + "print(d) # 출력: {'one' : '하나3'} 같은 키는 이전키 삭제\n", + "\n", + "d = dict([('one' , '하나'), ('two', '둘')])\n", + "print(d) # 출력: {'one' : '하나', 'two' : '둘'}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### zip 함수와 dict" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "keys = [\"name\", \"city\", \"job\"]\n", + "values = [\"licat\", \"Jeju\", \"Developer\"]\n", + "\n", + "\n", + "new_dict = dict(zip(keys, values))\n", + "print(new_dict)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 딕셔너리 fromkeys" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "keys = ['name', 'city', 'job']\n", + "value = None\n", + "print(dict.fromkeys(keys, value))\n", + "\n", + "keys = ['name', 'city', 'job']\n", + "value = ['licat', 'Jeju', 'Developer']\n", + "print(dict.fromkeys(keys, value))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 딕셔너리 get" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "numbers = {'one': '하나', 'two': '둘', 'three': '셋'}\n", + "print(numbers.get('four'))\n", + "print(numbers.get('three', '없음'))\n", + "print(numbers.get('four', '없음'))\n", + "print(numbers['four'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 딕셔너리 items" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "person = {'name': 'licat', 'city': 'Jeju', 'job': 'Developer'}\n", + "print(person.items())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 딕셔너리 keys" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "person = {'name': 'licat', 'city': 'Jeju', 'job': 'Developer'}\n", + "print(person.keys())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 딕셔너리 popitem" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "numbers = {'one': '하나', 'two': '둘', 'three': '셋'}\n", + "item = numbers.popitem()\n", + "print(item)\n", + "print(numbers)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 딕셔너리 setdefault" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "셋\n", + "{'one': '하나', 'two': '둘', 'three': '셋', 'four': '넷'}\n" + ] + } + ], + "source": [ + "numbers = {'one': '하나', 'two': '둘', 'three': '셋'}\n", + "four_value = numbers.setdefault(\"four\", \"넷\")\n", + "four_value = numbers.setdefault(\"three\", 3) \n", + "print(four_value)\n", + "print(numbers)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 셋 양식" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "z = set([1, 2, 3, 3, 3])\n", + "print(z) # 출력: {1, 2, 3}\n", + "string_set = set('apple coffee')\n", + "print(string_set)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 셋 합집합 |, 교집합 &, 차집합 -. " + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{1, 2, 3, 4, 5}\n", + "{3}\n", + "{1, 2}\n" + ] + } + ], + "source": [ + "set1 = {1, 2, 3}\n", + "set2 = {3, 4, 5}\n", + "union_set = set1 | set2\n", + "print(union_set) # 출력: {1, 2, 3, 4, 5}\n", + "\n", + "set1 = {1, 2, 3}\n", + "set2 = {3, 4, 5}\n", + "intersection_set = set1 & set2\n", + "print(intersection_set) # 출력: {3}\n", + "\n", + "set1 = {1, 2, 3}\n", + "set2 = {3, 4, 5}\n", + "difference_set = set1 - set2\n", + "print(difference_set) # 출력: {1, 2}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "student_score = {\n", + "\t\t'홍의': 97,\n", + "\t\t'원희': 60,\n", + "\t\t'동해': 77,\n", + "\t\t'변수': 79,\n", + "\t\t'창현': 89,\n", + "}\n", + "# 총점수\n", + "print(sum(student_score.values())) \n", + "# 평균 점수\n", + "print(sum(student_score.values())/len(student_score))\n", + "# 학생 추가후 평균 점수\n", + "student_score.setdefault(\"호준\",98)\n", + "print(sum(student_score.values())/len(student_score))\n", + "# 점수2씩 증가\n", + "for key in student_score:\n", + "\tstudent_score[key] += 2\n", + "print(student_score)\n", + "# 가장 높은 학생의 이름과 그 점수\n", + "print(f\"우수상:{max(student_score, key=student_score.get)}\\n점수:{max(student_score.values())}\")\n", + "print(f\"노력상:{min(student_score, key=student_score.get)}\\n점수:{min(student_score.values())}\")\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 함수 들여쓰기" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def my_function():\n", + "\tprint('1')\n", + "\tprint('2')\n", + "\tprint('3')\n", + "my_function()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 함수 실습" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def message(문자열):\n", + "\tprint(문자열)\n", + "message(\"안녕\")\n", + "message(\"Hi\")\n", + "\n", + "user_input = input(\"합을 구할 숫자를 입력하세요\").split()\n", + "user_number = map(int,user_input)\n", + "def sum(user_number):\n", + "\ttotal = 0\n", + "\tfor a in user_number:\n", + "\t\ttotal += a\n", + "\treturn total\n", + "\n", + "print(sum(user_number))\t" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Day-5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 함수" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* 함수는 특정 작업을 수행하는 코드 블록을 하나의 이름 아래로 모은 것\n", + "* 정의: 함수를 만들때는 def 키워드를 사용, 그리고 함수의 이름을 적고, 괄호를 적고, 콜론(:) 을 붙입니다. 예) def my_function():\n", + "* 함수는 들여쓰기 중요하다\n", + "* [함수 이해도](./img/함수.png)\n", + "* 함수의 파라미터는 기본값을 없으면 먼저 써야 한다\n", + " 1. 예) def f(a, b=10, c=200): 가능\n", + " 2. def f(a=10, b=100, c): 오류\n", + "* 함수 내부 변수는, 외부 변수와 공유하지않습니다\n", + "* locals()로 변수내부 내용 확인 가능\n", + "* global 함수 내부에서 외부 함수를 변경 가능\n", + "* pass 가 있는 위치에 어떠한 연산도 수행되지 않습니다, 협업할 때 사용된다\n", + "* 빌트인 함수(built-in)\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### built-in 함수 종류\n", + "\n", + "[built-in Functions](https://docs.python.org/3/library/functions.html)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# 요소 전체의 True, False 판별\n", + "all\n", + "any\n", + "\n", + "# 숫자를 문자로 바꾸거나 문자를 숫자로 바꾸는 함수\n", + "chr\n", + "ord\n", + "\n", + "# 함수와 순회할 수 있는 객체의 연산\n", + "map\n", + "filter\n", + "\n", + "# 순회할 수 있는 객체의 묶음\n", + "zip\n", + "\n", + "# 형식 변환\n", + "format\n", + "\n", + "# 길이 반환\n", + "len\n", + "\n", + "# 큰 값, 작은 값, 다 더한 값\n", + "max\n", + "min\n", + "sum\n", + "\n", + "# 문자열, 대표 문자열, 문자열 출력\n", + "str\n", + "repr\n", + "print\n", + "\n", + "# 순회할 수 있는 객체\n", + "enumerate\n", + "range\n", + "\n", + "# 역순과 정렬\n", + "reversed\n", + "sorted" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Thinter 사용법" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "1. 레이블(Label): 텍스트나 이미지를 사용자 인터페이스에 표시합니다.\n", + "2. 버튼(Button): 사용자가 클릭할 수 있는 버튼을 제공하여 특정 동작을 실행하게 합니다." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 함수" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def f(a, b, c):\n", + " print(a, b, c)\n", + "\n", + "\n", + "f(100,200,300)\n", + "f(a=100, b=200, c=300) # 출력: 100 200 300\n", + "f(c=300, a=100, b=200) # 출력: 100 200 300" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "def append_to_list(value, lst=[]):\n", + " lst.append(value)\n", + " return lst # 예상치 못한 결과가 발생할 수 있습니다.\n", + "\n", + "append_to_list(1) # 출력: [1]\n", + "append_to_list(2) # 출력: [1, 2], 그러나 결과가 [2]가 나올것으로 예상할수 도 있습니다." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def append_to_list(value, lst=None):\n", + " if lst is None:\n", + " lst = []\n", + " lst.append(value)\n", + " return lst\n", + "\n", + "append_to_list(1) # 결과: [1]\n", + "append_to_list(2) # 결과: [2]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### locals() 사용" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def f():\n", + " a = 1\n", + " b = 'hello'\n", + " def ff():\n", + " pass\n", + " print(locals()) # 출력: {'a': 1, 'b': 'hello', 'ff': .ff at 0x7a46e99d2c20>}\n", + "\n", + "\n", + "f()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### global 사용" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = 100\n", + "\n", + "\n", + "def f():\n", + " global a\n", + " a = a + 1\n", + "\n", + "\n", + "f()\n", + "print(a) # 출력: 101, 함수 f 내에서 전역 변수 a가 수정되었습니다." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. 사용자로부터 이름을 입력받아 \"안녕하세요, [이름]님!\"을 출력하는 함수를 작성하세요.\n", + "- 접근 방법:\n", + " 1. 함수를 정의하고 이름을 매개변수로 받습니다.\n", + " 2. 인사말 문자열을 생성할 때, 이름을 문자열에 포함시킵니다.\n", + " 3. 생성된 인사말 문자열을 출력합니다." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "name = input('당신의 이름이 뭐예요?')\n", + "def my(name):\n", + "\tprint(f'안녕하세요,{name}님!')\n", + "my(name)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "3. 사용자로부터 전화번호를 입력받아 뒤에서 4자리만 출력하는 함수를 작성하세요.\n", + "\n", + "접근 방법:\n", + "\n", + "1. 함수를 정의하고 전화번호를 매개변수로 받습니다.\n", + "2. 전화번호에서 뒤에서 4자리를 추출합니다. (문자열 슬라이싱 사용)\n", + "3. 추출된 뒤 4자리를 출력합니다." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "hp = input('당신의 전화번호 뭐예요?')\n", + "def my(hp):\n", + "\tz = hp[-4:]\n", + "\tprint(f'뒷번호가{z}이신가요?')\n", + "my(hp)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "4. 사용자로부터 주소를 입력받아 \"시/도\"와 \"구/군\"을 분리하여 출력하는 함수를 작성하세요. \n", + "(예: \"서울특별시 강남구\" -> \"시/도: 서울특별시\", \"구/군: 강남구\")\n", + "- 접근 방법:\n", + " 1. 함수를 정의하고 주소를 매개변수로 받습니다.\n", + " 2. 주소를 공백을 기준으로 분리합니다. (문자열의 `split()` 메서드 사용)\n", + " 3. 분리된 부분에서 시/도와 구/군을 추출하여 출력합니다." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "home = input('당신의 집주소가 뭐예요?')\n", + "def my(home):\n", + "\tz = home.split()\n", + "\tprint(f'{z[0]}시 {z[1]}구')\n", + "my(home)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### map 사용" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def 제곱(x):\n", + " return x ** 2\n", + "list(map(제곱, [1, 2, 3, 4])) # 출력: [1, 4, 9, 16]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### lambda 함수 활용" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# 두번째 방법\n", + "list(map(lambda x : x ** 2, [1, 2, 3, 4])) # 출력: [1, 4, 9, 16]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### filter 함수" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "list(filter(lambda x : x > 50, range(100)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### format 함수" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(format(10000, ','))\n", + "print(format(123.4567, '.2f')) # 출력: 123.46\n", + "print(format('Hello', '^9')) # 출력: ' Hello '" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### range 함수" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(range(1, 10, 2)) # 출력: range(1, 10, 2)\n", + "list(range(1, 10, 2)) # 출력: [1, 3, 5, 7, 9]\n", + "range(10)[3]\n", + "range(10)[3:7]\n", + "len(range(10))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### enumerate 함수" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "values = ['A', 'B', 'C', 'D']\n", + "print(list(enumerate(values)))\n", + "print(list(enumerate(values, 1)))\n", + "print(list(enumerate(values, 100)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### sorted, reversed 합수" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(sorted([1, 2, 100, 200, 3, 4, 10, 20]))\n", + "print(sorted([1, 2, 100, 200, 3, 4, 10, 20]))\n", + "print(list(reversed('hello world')))\n", + "print(list(reversed([1, 2, 3, 10, 5, 4]))) # 역 정렬 아닙니다! 역순입니다.\n", + "print(list(reversed(sorted([1, 2, 3, 10, 5, 4]))))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# range(start, stop, step) # 슬라이싱과 비슷한 형태를 지니고 있습니다.\n", + "print(range(10)) # 값을 가지고 있지 않습니다.\n", + "print(list(range(10)))\n", + "x = range(10)\n", + "print(type(x))\n", + "print(list(range(0, 10, 2)))\n", + "print(list(range(10, 0, -2)))\n", + "# print(list(range(10, 0, 2.1))) # error, numpy 모듈 사용하면 가능합니다.\n", + "# print(list(range(10.1, 2.0, 2))) # error, numpy 모듈 사용하면 가능합니다.\n", + "print(list(range(0, 10, -2)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### replit\n", + "[replit 링크](https://replit.com/)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Day-6" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* 240625 News\n", + " 1. 중국서 '플라잉 카' 첫 도심 비행 성공\n", + " 2. AI의 정중한 사과, AI에게 같은 문장 반복했더니 AI가 감정적으로 나는 힘들다고 답변\n", + " 3. [문제 해결을 위한 3단계 프레임워크 가이드](https://eopla.net/magazines/17715#) - 링크\n", + " 4. [발리에서 23개 제품을 런칭하여 월 1억 5천을 버는 1인 개발자](https://eopla.net/magazines/17351#) - 링크\n", + "\n", + "* 지난 강의 이해도 조사 -> 보통\n", + "* 금일 강의\n", + " 1. 조건문\n", + " 2. if\n", + " 3. if,elif,else와 중첩 조건문\n", + " 4. match" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 조건문" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* 조건문 주어진 조건이 참(true)인지 거짓(false)인지를 평가하여, 해당 조건이 참인 경우 특정 코드 블록을 실행하는 구조\n", + "* 주로 if 문을 사용하고 3.10 버전 이후부터는 match 문으로도 작성\n", + "* [if문의 기본 구조](./img/if%20조건문%20구조.PNG)\n", + " 1. 비교 연산자: ==, !=, <, <=, >, >=\n", + " 2. 논리 연산자: and, or, not\n", + " 3. 멤버십(in) 연산자: in, not in\n", + " 4. 식별 연산자: is, is not\n", + " 5. 다른 함수의 반환 값이나 변수의 값 (이 값들이 결국 불리언으로 평가됨)\n", + "* 삼항 연산자는 if-else 구문을 한 줄로 간단하게 표현할 수 있는 방법을 제공합니다. 이 연산자는 X if 조건 else Y와 같은 형태로 사용됩니다. 여기서 ‘조건’이 참이면 X가 평가되고, 거짓이면 Y가\n", + "* 조건문 람다 함수\n", + " 1. 구조: `함수이름` = lambda `이름`: `'True일때 결과'` if `조건` else `'false일때 결과'`\n", + "* else: if나 elif문 뒤가 참이면 코드를 수행하고, 모두 거짓일 경우 else문을 출력합니다.\n", + "* if문 종첩 가능하다" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 조건문" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "x = 2\n", + "if x > 1:\n", + " print('True') # 출력: True\n", + "if True:\n", + " print('True') # 출력: True\n", + "if 1:\n", + " print('hello')# 출력: True = 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 조건문 실습" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# 입구 입장 안내 도우미\n", + "user_count = 0\n", + "def nop():\n", + " global user_count\n", + " user_count += 1\n", + "while True:\t\n", + " x = input('참여하겠습니까?(y/n): ') \n", + " if x == 'y':\n", + " print('환영합니다')\n", + " nop()\n", + " elif x == 'n':\n", + " print('다음에 또 오세요!')\n", + " elif x == '' : #TODO시간초과시 자동 총인원 안내 및 종료\n", + " if user_count <= 4 :\n", + " print(f'총 {user_count}명이 입장하셨습니다.')\n", + " else:\n", + " print(f'단체 손님 {user_count}명이 입장하셨습니다, 단체석에 안내해드리겠습니다')\n", + " break\n", + " else:\n", + " print('잘못된 입력입니다. y 또는 n을 입력하세요.')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 삼항 연산자" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "x = 5\n", + "y = 10\n", + "result = 'x가 더 큽니다' if x > y else 'y와 같거나 y가 더 큽니다.'\n", + "print(result) # 출력: 'y와 같거나 y가 더 큽니다.'" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "def f(x, y):\n", + " return x if x > y else y" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "[i for i in range(10) if i % 2 == 0] # [0, 2, 4, 6, 8]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "[i if i % 2 == 0 else None for i in range(10)] # [0, None, 2, None, 4, None, 6, None, 8, None]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "age = int(input('나이를 입력해주세요: '))\n", + "\n", + "result = '성인입니다' if age >= 19 else '미성년자입니다'\n", + "print(result)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 람다 함수" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "my_function = lambda x: 'Even' if x % 2 == 0 else 'Odd'\n", + "print(my_function(1)) # Odd\n", + "print(my_function(2)) # Even" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "participant_count = 0\n", + "increment_participants = lambda: globals().__setitem__('participant_count', participant_count + 1)\n", + "handle_input = lambda x: (\n", + " increment_participants() if x == 'y' else\n", + " print('다음에 또 오세요!') if x == 'n' else\n", + " print(f'총 {participant_count}명이 참여했습니다.') if x == '' else\n", + " print('잘못된 입력입니다. y 또는 n을 입력하세요.')\n", + ")\n", + "while True:\n", + " x = input('참여하겠습니까?(y/n): ') \n", + " handle_input(x)\n", + " if x == 'n' or x == '':\n", + " break\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 기본" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def check_even_or_odd(number):\n", + " if number % 2 == 0:\n", + " return \"짝수\"\n", + " else:\n", + " return \"홀수\"\n", + "\n", + "# 예시 사용\n", + "print(check_even_or_odd(4)) # 출력: 짝수\n", + "print(check_even_or_odd(7)) # 출력: 홀수\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 람다 응용" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "check_even_or_odd = lambda number: \"짝수\" if number % 2 == 0 else \"홀수\"\n", + "\n", + "# 예시 사용\n", + "print(check_even_or_odd(4)) # 출력: 짝수\n", + "print(check_even_or_odd(7)) # 출력: 홀수\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* 설명\n", + "- 기본적인 조건문 사용: check_even_or_odd 함수는 입력된 숫자가 짝수인 경우 \"짝수\"를, 그렇지 않은 경우 \"홀수\"를 반환합니다. if 조건문을 사용하여 숫자가 2로 나누어 떨어지는지 (number % 2 == 0) 확인합니다.\n", + "\n", + "- 람다 함수와 조건문 사용: 동일한 로직을 람다 함수로 구현한 check_even_or_odd는 람다 함수 내에서 if 조건식을 사용합니다. 조건식은 number % 2 == 0 조건이 참이면 \"짝수\"를, 그렇지 않으면 \"홀수\"를 반환합니다." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 조건문과 딕셔너리" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "my_dict = {x: 'Even' if x % 2 == 0 else 'Odd' for x in range(10)}\n", + "print(my_dict)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 기본 학점 계산" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "score = int(input(\"성적을 입력하세요 (0-100): \"))\n", + "\n", + "\n", + "if score >= 90:\n", + " print(\"A\")\n", + "elif 90 > score >= 80:\n", + " print(\"B\")\n", + "elif 80 > score >= 70:\n", + " print(\"C\")\n", + "elif 70 > score >= 60:\n", + " print(\"D\")\n", + "else:\n", + " print(\"F\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 람다 학점 계산" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# 람다 함수로 성적 평가 함수 정의\n", + "grade = lambda score: (\n", + " \"A\" if score >= 90 else\n", + " \"B\" if score >= 80 else\n", + " \"C\" if score >= 70 else\n", + " \"D\" if score >= 60 else\n", + " \"F\"\n", + ")\n", + "\n", + "# 사용자 입력 받기\n", + "score = int(input(\"성적을 입력하세요 (0-100): \"))\n", + "\n", + "# 람다 함수 사용하여 성적 평가 및 출력\n", + "print(grade(score))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 조건문 종첩" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# if를 중첩해서 사용하기\n", + "movie = {\n", + " '영화': '레미제라블',\n", + " '장르': '드라마',\n", + " '서비스': '디즈니',\n", + " '비용': 15000,\n", + " '평점': 4.9\n", + "}\n", + "\n", + "\n", + "if movie['장르'] == '드라마':\n", + " if movie['서비스'] == '디즈니' or movie['서비스'] == '넷플릭스':\n", + " if movie['평점'] >= 4.5:\n", + " if movie['비용'] <= 20000:\n", + " print('영화시청') # 출력: 영화시청" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# if를 중첩해서 사용하기\n", + "# 간략해진 것 맞나요?\n", + "movie = {\n", + " '영화': '레미제라블',\n", + " '장르': '드라마',\n", + " '서비스': '디즈니',\n", + " '비용': 15000,\n", + " '평점': 4.9\n", + "}\n", + "\n", + "\n", + "if movie['장르'] == '드라마' and (movie['서비스'] == '디즈니' or movie['서비스'] == '넷플릭스') and movie['평점'] >= 4.5 and movie['비용'] <= 20000:\n", + " print('영화시청') # 출력: 영화시청" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "movie = {\n", + " '영화': '레미제라블',\n", + " '장르': '드라마',\n", + " '서비스': '왓챠',\n", + " '비용': 15000,\n", + " '평점': 4.9\n", + "}\n", + "\n", + "\n", + "if movie['장르'] == '드라마':\n", + " if movie['서비스'] == '디즈니' or movie['서비스'] == '넷플릭스':\n", + " if movie['평점'] >= 4.5 and movie['비용'] <= 20000:\n", + " print('영화시청')\n", + " else:\n", + " print(movie['서비스'] + ' 구독하기!') # 출력: 왓챠 구독하기!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "movie = {\n", + " '영화': '레미제라블',\n", + " '장르': '드라마',\n", + " '서비스': '왓챠',\n", + " '비용': 15000,\n", + " '평점': 4.9\n", + "}\n", + "\n", + "if all([\n", + " movie['장르'] == '드라마',\n", + " movie['서비스'] in ['디즈니', '넷플릭스', '왓챠'],\n", + " movie['평점'] >= 4.5,\n", + " movie['비용'] <= 20000\n", + "]):\n", + " print(movie['서비스'] + ' 구독하기!') # 출력: 왓챠 구독하기!\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# else 다음에 괄호를 쳐서 또다른 삼항연산자를 적으면 elif쓰는것과 동일한 효과를 볼 수 있습니다.\n", + "age = 39\n", + "print(\"미성년자\") if age < 20 else (print(\"청년\") if age < 40 else print(\"성인\"))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "if 4 =='4':\n", + "\tprint(True)\n", + "else:\n", + "\tprint(False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 거스름돈 계산기" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# 2시 12분 까지!!\n", + "# 카페 소개 print(\"\") \n", + "print(\"안녕하세요~~ 카페 입니다.\")\n", + "# 입력값 1. 현재 가지고 있는 돈 입력\n", + "\n", + "user_money = int(input('현재 얼마 있나요?'))\n", + "# 입력값 2. 커피 선택 \n", + "user_selection = input('어떤 커피를 원해요?(600원,1000원,1500원)')\n", + "if user_selection == '600원':\n", + "\tif user_money < 600:\n", + "\t\tprint(f'최소한{600-user_money}원 더 넣셔야 커피를 살수있어요')\n", + "\telse:\n", + "\t\tprint(f'거스름돈 {user_money - 600} 입니다')\n", + "elif user_selection == '1000원':\n", + "\tif user_money < 1000 :\n", + "\t\tprint(f'최소한{1000-user_money}원 더 넣셔야 커피를 살수있어요')\n", + "\t\n", + "\t\tprint(f'거스름돈 {user_money - 1000} 입니다')\n", + "elif user_selection == '1500원':\n", + "\tif user_money < 1500 :\n", + "\t\tprint(f'최소한{1500-user_money}원 더 넣셔야 커피를 살수있어요')\n", + "\telse:\n", + "\t\tprint(f'거스름돈 {user_money - 1500} 입니다')\n", + "else:\n", + "\tprint('당신이 선택한 메뉴는 우리 가게에서 취급하지 않습니다')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ID 생성, 계정 수집, 로그인, 비번 확인" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import re\n", + "import os\n", + "import json\n", + "\n", + "def check_password_strength(password):\n", + " strength = 0\n", + " suggestions = []\n", + "\n", + " # 길이 검사\n", + " if len(password) >= 12:\n", + " strength += 2\n", + " elif len(password) >= 8:\n", + " strength += 1\n", + " else:\n", + " suggestions.append(\"길이를 확인하세요. 비밀번호는 최소 8자 이상입니다.\")\n", + "\n", + " # 대문자 검사\n", + " if re.search(r'[A-Z]', password):\n", + " strength += 1\n", + " else:\n", + " suggestions.append(\"대문자를 포함하세요.\")\n", + "\n", + " # 숫자 검사\n", + " if any(char.isdigit() for char in password):\n", + " strength += 1\n", + " else:\n", + " suggestions.append(\"숫자를 포함하세요.\")\n", + "\n", + " # 소문자 검사\n", + " if re.search(r'[a-z]', password):\n", + " strength += 1\n", + " else:\n", + " suggestions.append(\"소문자를 포함하세요.\")\n", + "\n", + " # 특수문자 검사\n", + " if re.search(r\"[!@#$%^&*(),.?\\\":{}|<>]\", password):\n", + " strength += 1\n", + " else:\n", + " suggestions.append(\"특수문자를 포함하세요.\")\n", + "\n", + " # 강도 평가\n", + " if strength == 6:\n", + " return \"매우 강함\", suggestions\n", + " elif strength == 5:\n", + " return \"강함\", suggestions\n", + " elif strength == 4:\n", + " return \"보통\", suggestions\n", + " elif strength == 3:\n", + " return \"약함\", suggestions\n", + " else:\n", + " return \"매우 약함\", suggestions\n", + "\n", + "def create_account(accounts):\n", + " # 사용자로부터 입력 받기\n", + " username = input('ID를 입력해주세요: ')\n", + " password = input('PASSWORD를 입력해주세요: ')\n", + " password2 = input('PASSWORD 확인을 위해 다시 입력해주세요: ')\n", + "\n", + " # 비밀번호 일치 여부 확인\n", + " if password != password2:\n", + " print('비밀번호가 일치하지 않습니다. 다시 확인해주세요.')\n", + " return\n", + "\n", + " # 비밀번호 강도 검사\n", + " strength, suggestions = check_password_strength(password)\n", + " print(f\"비밀번호 강도: {strength}\")\n", + " if suggestions:\n", + " print(\"개선 제안:\", \", \".join(suggestions))\n", + "\n", + " if strength in [\"약함\", \"매우 약함\"]:\n", + " print(\"비밀번호가 너무 약합니다. 강도를 높여주세요.\")\n", + " return\n", + "\n", + " # 계정 사전에 사용자 정보 저장\n", + " accounts[username] = password\n", + " print(f'계정이 성공적으로 생성되었습니다! 사용자명: {username}')\n", + "\n", + " # 계정 데이터를 파일에 저장\n", + " save_accounts(accounts)\n", + "\n", + "def login(accounts):\n", + " # 사용자로부터 입력 받기\n", + " username = input('ID를 입력해주세요: ')\n", + " password = input('PASSWORD를 입력해주세요: ')\n", + "\n", + " # 로그인 로직\n", + " if username in accounts and accounts[username] == password:\n", + " return \"로그인 성공\"\n", + " elif username not in accounts:\n", + " return \"ID를 확인해주십시오.\"\n", + " else:\n", + " return \"비밀번호가 틀립니다.\"\n", + "\n", + "def save_accounts(accounts):\n", + " # 계정 데이터를 accounts.json 파일에 저장\n", + " with open('accounts.json', 'w') as f:\n", + " json.dump(accounts, f)\n", + "\n", + "def load_accounts():\n", + " # 파일에서 계정 데이터를 불러와 반환\n", + " if os.path.exists('accounts.json'):\n", + " with open('accounts.json', 'r') as f:\n", + " return json.load(f)\n", + " else:\n", + " return {}\n", + "\n", + "def main():\n", + " # 초기에 파일에서 계정 데이터 불러오기\n", + " accounts = load_accounts()\n", + "\n", + " while True:\n", + " choice = input(\"1. 계정 생성\\n2. 로그인\\n3. 종료\\n선택: \")\n", + " if choice == '1':\n", + " create_account(accounts)\n", + " elif choice == '2':\n", + " login_result = login(accounts)\n", + " print(login_result)\n", + " elif choice == '3':\n", + " # 프로그램 종료 전에 계정 데이터를 파일에 저장\n", + " save_accounts(accounts)\n", + " break\n", + " else:\n", + " print(\"올바른 선택을 해주세요.\")\n", + "\n", + "if __name__ == \"__main__\":\n", + " main()\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import re\n", + "\n", + "def check_password_strength(password):\n", + " strength = 0\n", + " suggestions = []\n", + "\n", + "# 길이 검사\n", + " if len(password) >= 12:\n", + " strength += 2\n", + " elif len(password) >= 8:\n", + " strength += 1\n", + " else:\n", + " suggestions.append(\"길이를 확인하세요. 비밀번호는 최소 8자 이상입니다.\")\n", + "\n", + "# 대문자 검사\n", + " if re.search(r'[A-Z]', password):\n", + " strength += 1\n", + " else:\n", + " suggestions.append(\"대문자를 포함하세요.\")\n", + "\n", + "\n", + "# 숫자 검사\n", + " if any(char.isdigit() for char in password):\n", + " strength += 1\n", + " else:\n", + " suggestions.append(\"숫자를 포함하세요.\")\n", + "\n", + "# 소문자 검사\n", + " if re.search(r'[a-z]', password):\n", + " strength += 1\n", + " else:\n", + " suggestions.append(\"소문자를 포함하세요.\")\n", + "\n", + "# 특수문자 검사\n", + " if re.search(r\"[!@#$%^&*(),.?\\\":{}|<>]\", password):\n", + " strength += 1\n", + " else:\n", + " suggestions.append(\"특수문자를 포함하세요.\")\n", + "\n", + "# 강도 평가\n", + " if strength == 6:\n", + " return \"매우 강함\", suggestions\n", + " elif strength == 5:\n", + " return \"강함\", suggestions\n", + " elif strength == 4:\n", + " return \"보통\", suggestions\n", + " elif strength == 3:\n", + " return \"약함\", suggestions\n", + " else:\n", + " return \"매우 약함\", suggestions\n", + " \n", + "# 메인 프로그램\n", + "password = input(\"비밀번호를 입력하세요: \")\n", + "strength, suggestions = check_password_strength(password)\n", + "print(f\"비밀번호 강도: {strength}\")\n", + "print(\"개선 제안:\", \", \".join(suggestions) if suggestions else \"없음\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Day-7" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* 240626 News\n", + " 1. Claude 추천\n", + " 2. 코파일럿 클럽 컨퍼런스\n", + "\n", + "* 지난 강의 이해도 조사 -> 보통\n", + "* 금일 강의\n", + " 1. for 문\n", + " 2. while 문\n", + " 3. break, continue, pass 비교\n", + " 4. 반복문 else\n", + " 5. 연습문제\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 반복문\n", + "**for문**\n", + " * 반복되는 작업을 효율적으로 처리할 수 있는 강력한 도구\n", + " * 반복문 앞에 선언한 변수명을 반복문의 변수로 선언하면 안됩니다.\n", + " * 순회가능 자료형 -> 문자열, 리스트, dict, range\n", + " * 구조
\n", + " ![for 구조2](./img/for%20문%20구조%202.PNG)\n", + " * dict 자료형은 특수해서, key 와 value 따로 지정해줘야 반복 출력 가능하다\n", + " * range(`시작, 종료, 연속하는 두 값의 차`)\n", + " * 컴프리헨션(comprehension) python에서 처리속도 가장 빠름\n", + " 1. 리스트 컴프리헨션\n", + " * 구조 [추가할_변수_또는_표현식 for 변수명 in 순회_할_수_있는_객체]\n", + " * for 3개 이하로 사용 권장\n", + " 2. 딕셔너리 컴프리헨션\n", + " * 구조 {추가할_변수_또는_표현식 for 변수명 in 순회_할_수_있는_객체}\n", + " 3. else가 있으면 if els for\n", + " 4. else가 없으면 for if\n", + " \n", + " * enumerate \n", + "**while문**\n", + " * while: ~ 하는 동안, ~ 반복 실행\n", + " * while: 조건에 만족하면, 특정 코드를 반복해서 수행합니다\n", + " * while 구조 끝부분에 \":\" 그리고 다음 줄은 4칸 띄우고 시작\n", + " * 왈러스 연산자\n", + "**break,continue,pass**\n", + " * break 구문은 바로 위의 반복문(for나 while)만 탈출\n", + " * continue문은 반복문이 실행하는 코드 블록의 나머지 부분을 실행하지 않고 다음 반복으로 건너가게 흐름을 조정\n", + " * pass문은 단순히 실행할 코드가 없다는 것을 의미하며 아무런 동작을 하지 않고 다음 코드를 실행\n", + "**반복문 else**\n", + " * else 반복문이 break 등에 의해 중단 없이 정상적으로 반복이 종료된 후 특정 코드를 실행하게 해야 할 때 while~else, for~else를 사용할 수 있습니다.\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 실습" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### if문 복습" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# 어떤 상점에서는 상품을 한꺼번에 많이 구매하면 다음과 같이 상품 가격을 할인해준다\n", + "# 10개 미만: 상품 하나에 100원\n", + "# 10개 이상 30개 미만: 상품 하나에 95원\n", + "# 30개 이상 100개 미만: 상품 하나에 90\n", + "# 100개 이상; 상품 하나에 85원\n", + "# 이 쇼핑몰에서 구매할 상품 개수를 입력받아, 춫 지불해야 할 가격을 계산하는 함수 Price() 를 정의 하라.\n", + "\n", + "def price(quantity):\n", + "\tif quantity < 10:\n", + "\t\treturn 100\n", + "\telif quantity < 30:\n", + "\t\treturn 95\n", + "\telif quantity < 100:\n", + "\t\treturn 90\n", + "\telse:\n", + "\t\treturn 85\n", + "\n", + "\n", + "quantity = int(input('몇개 구입 하실건가요?'))\n", + "discount = price(quantity)\n", + "\n", + "print(f'{quantity}의 총가격은{quantity*discount}입니다')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### class 활용" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# TestPriceFunction 클래스는 unittest.TestCase를 상속받아 단위 테스트 기능을 제공 받습니다.\n", + "import unittest\n", + "\n", + "def price(quantity):\n", + " if quantity < 10:\n", + " return 100\n", + " elif quantity < 30:\n", + " return 95\n", + " elif quantity < 100:\n", + " return 90\n", + " else:\n", + " return 85\n", + "class TestPriceFunction(unittest.TestCase):\n", + " # 1개를 구매할때 100원이 맞는지 확인합니다.\n", + " def test_price_1(self):\n", + " self.assertEqual(price(1), 100)\n", + " self.assertEqual(price(2), 200)\n", + " self.assertEqual(price(3), 100)\n", + "\n", + "if __name__ == '__main__':\n", + " unittest.main(argv=['first-arg-is-ignored'], exit=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### for 문 range 테스트" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for i in range(1, 11, 2) : \n", + " print(f'{i}-1')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### for 문 홀수 출력" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for i in (1,2,3,4,5,6,7,8,9):\n", + "\tif i % 2 == 0:\n", + "\t\tprint(i)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 출력 시간 계산 프로그램" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from time import process_time\n", + "\n", + "start = process_time()\n", + "\n", + "for i in [1,3,5,7,9]:\n", + " print(f\"홀수를 출력합니다. {i}\")\n", + "\n", + "end = process_time()\n", + "print(f\"프로그램이 실행되는데 {end-start:.20f} 초가 걸렸습니다.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### for 문 문자열" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s = '123'\n", + "result = 0\n", + "for i in s:\n", + " result += int(i)\n", + " print(i)\n", + " print('----------')\n", + "print(result)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s = '010-1000?2000' \n", + "result = ''\n", + "for i in s:\n", + " if i.isdigit():\n", + " result += i\n", + "print(result)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### for 문 리스트" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "l = ['one', 'two', 'three']\n", + "for i in l:\n", + " print(i)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for i in [[1, 2], [10, 20], [100, 200]]:\n", + " print(i)\n", + " print(i[0] + i[1])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for i, j in [[1, 2], [10, 20], [100, 200]]:\n", + " print(i)\n", + " print(j)\n", + " print(i, j)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "program1 = ['python','pandas','numpy']\n", + "program2 = [['python',1] , ['pandas',2] , ['numpy',3]]\n", + "\n", + "for i in program1:\n", + "\tprint(f'프로그램은{i}입니다.')\n", + "\n", + "for i,j in program2:\n", + "\tprint(f'프로그램은 {i} 입니다. 순위는 {j}위 입니다.')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### for문 dict" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "단어_사전 = {\n", + " '하나' : 'one',\n", + " '둘' : 'two',\n", + " '셋' : 'three',\n", + "}\n", + "# 방법 1\n", + "for key, value in 단어_사전.items():\n", + " print(f'{key} : {value}')\n", + "# 방법 2\n", + "for i in 단어_사전:\n", + " print(i, ':', 단어_사전[i])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### for문 range" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fruits = [\"apple\", \"banana\", \"cherry\"]\n", + "for i in range(len(fruits)):\n", + " print(f\"{i}: {fruits[i]}\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "result = 0\n", + "for i in range(0, 11, 2):\n", + " result += i\n", + " print(i)\n", + "print(result)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from time import process_time\n", + "start = process_time()\n", + "result = 0\n", + "for i in range(10000):\n", + " if i % 2 == 0:\n", + " result += i\n", + "print(result)\n", + "end = process_time()\n", + "print(f\"{end-start:.20f}\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# 구구단 만들기\n", + "for i in range(2, 10): # 1\n", + " print(f'---{i}단---')\n", + " for j in range(1, 10): # 2\n", + " print(f'{i} X {j} = {i * j}')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 리스트컴프리헨션" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "x = []\n", + "for i in range(1, 10):\n", + " x.append(i)\n", + "print(x)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# step1 list안에 for문을 가져옵니다.\n", + "# [for i in range(1, 10)]\n", + "# step2 append 항목을 맨 앞으로 가져옵니다.\n", + "a = [i for i in range(1, 10)] # 출력: [1, 2, 3, 4, 5, 6, 7, 8, 9]\n", + "print(a)\n", + "b = [i*2 for i in range(1, 10)] # 출력: [1, 2, 3, 4, 5, 6, 7, 8, 9]\n", + "print(b)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "l = [i for i in range(1, 100) if i % 3 == 0 or i % 5 == 0]\n", + "print(l)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "nums = [1, 2, 3, 4, 5]\n", + "result = [f'{x}는 3보다 큰 짝수' if x % 2 == 0 else f'{x}는 3보다 큰 홀수' for x in nums if x > 3]\n", + "print(result) # 출력: ['4는 3보다 큰 짝수', '5는 3보다 큰 홀수']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 실습" + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "15\n" + ] + } + ], + "source": [ + "def my_sum(numbers):\n", + "\ttotal = 0\n", + "\tfor number in numbers:\n", + "\t\ttotal += number\n", + "\treturn total\n", + "\t\n", + "print(my_sum([1,2,3,4,5]))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def my_sum(numbers):\n", + "\treturn sum([i for i in numbers])\n", + "print(my_sum([1,2,3,4,5]))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def my_sum(numbers):\n", + "\treturn sum([i for i in numbers if i%2 == 1])\n", + "print(my_sum([1,2,3,4,5]))" + ] + }, + { + "cell_type": "code", + "execution_count": 112, + "metadata": {}, + "outputs": [], + "source": [ + "# 일반적인 사용 방법 \n", + "c_list = []\n", + "for i in range(2, 10): # 1\n", + " for j in range(1, 10): # 2\n", + " c_list.append(f'{i} × {j} = {i*j}') # 3" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "[f\"{i}×{j}={i*j}\" for i in range(2, 10) for j in range(1, 10)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 딕셔너리 컴프리헨션" + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "metadata": {}, + "outputs": [], + "source": [ + "# 전통적인 방법\n", + "d = {}\n", + "for i in range(5):\n", + " d[i] = i**2" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "{for i in range(5)}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "even_squares = {x: x**2 for x in range(10) if x % 2 == 0}\n", + "even_squares" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "original_list = ['abc', 'def', 'ghi']\n", + "packed_list = []\n", + "\n", + "for i, j, k in original_list:\n", + " print(i, j, k)\n", + " packed_list.extend([i, j, k])\n", + "\n", + "print(packed_list)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "original_list = ['abc', 'def', 'ghi']\n", + "\n", + "# 원래 리스트의 내용을 출력\n", + "print(\"Original list:\", original_list)\n", + "\n", + "# 리스트 컴프리헨션을 사용하여 문자들을 풀어서 새 리스트 만들기\n", + "original_list = [char for word in original_list for char in word]\n", + "\n", + "# 수정된 리스트 출력\n", + "print(\"Modified list:\", original_list)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "영화누적관객수 = ['레미제라블', '뷰티인사이트', '매트릭스', '인셉션', '어거스트 러쉬']\n", + "for i in enumerate(영화누적관객수):\n", + " print(i)\n", + "\n", + "\n", + "for i, j in enumerate(영화누적관객수, 1):\n", + " print(f'누적관객수 {i}위! {j}!')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for a in range (8):\n", + "\ta *= 1\n", + "print(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 125, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6\n" + ] + } + ], + "source": [ + "list_data_a = [1,2]\n", + "list_data_b = [3,4]\n", + "\n", + "for i in list_data_a:\n", + "\tfor j in list_data_b:\n", + "\t\tresult = i + j\n", + "\n", + "print(result)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### while 문" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = 1\n", + "while a < 10:\n", + "\tprint(a)\n", + "\ta += 1\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "list_1 = [1,2,3,4,5,6,7,8,9]\n", + "\n", + "while len(list_1) > 1:\n", + "\tprint(list_1.pop())\n", + "print(list_1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 로또 번호 추출기" + ] + }, + { + "cell_type": "code", + "execution_count": 137, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[44, 35, 27, 5, 34, 29]\n" + ] + } + ], + "source": [ + "import random\n", + "\n", + "list_Lotto = []\n", + "\n", + "while len(list_Lotto) < 6:\n", + "\tLotto_number = random.choice(range(1,46))\n", + "\tif Lotto_number not in list_Lotto:\n", + "\t\tlist_Lotto.append(Lotto_number)\n", + "print(list_Lotto)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 야구 게임" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import random\n", + "\n", + "anwer = random.sample(range(1,10),3)\n", + "print(anwer)\n", + "\n", + "user = input('야구게임 시작 숫자 3개 입력하세요')\n", + "\n", + "for i in user[i] == anwer[i] :\n", + "\tprint('{i}스트라이크')\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import random\n", + " \n", + "answer = random.randint(1, 100)\n", + "while True:\n", + " userinput = int(input('숫자를 입력해주세요.'))\n", + " if userinput > answer:\n", + " print('Down')\n", + " \n", + " elif userinput < answer:\n", + " print('Up')\n", + " else:\n", + " print(f'축하합니다! {answer}맞추셨어요!')\n", + " break" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "x = 0\n", + "while x < 10:\n", + "\tprint(x)\n", + "\tif x == 5:\n", + "\t\tbreak\n", + "\tx += 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### break, continue, pass 비교" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "x = 0\n", + "while x < 5:\n", + " x += 1\n", + " if x == 3:\n", + " continue # pass와 continue는 다름\n", + " print(x)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "x = 0\n", + "while x < 5:\n", + " x += 1\n", + " if x == 3:\n", + " pass # pass와 continue는 다름\n", + " print(x)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "for i in range(4):\n", + " print(f'{i} 물고기를 잡았습니다.')\n", + " if i == 5:\n", + " print('만선입니다. 물고기를 다 잡았습니다.')\n", + " break\n", + "else:\n", + " print('아직 여유가 좀 있지만, 물고기가 더 없는 것 같으니 이정도로 만족하고 돌아갑시다.')\n", + "\n", + "print('수고하셨습니다.')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "n = 0\n", + "while n < 5:\n", + " print(f'현재 숫자는 {n}입니다.')\n", + " n += 1\n", + "else:\n", + " print('반복문을 종료합니다.')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 복습" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### AI 시대에 주니어 백엔드 공부\n", + "\n", + "* Python, Pandas, Numpy, SQL 이런 공부들이 얼마나 의미있을까요?\n", + " * 기본 문법은 말 그대로 이제 기본만 알면되는 시대가 되었습니다.\n", + " * 문학적 소질이 있는 분들, 그 분야에 지식이 있는 분들, 커뮤니케이션을 잘하는 분들이 경쟁력 있다 => 이제는 자연어로 대부분 검증까지 됩니다.\n", + " * 요구사항을 매우 상세하게 프롬프트로 작성할 수 있다면 거의 완벽에 가까운 코드가 나오는 시대입니다. 특히 24년 6월 이후에요. (claude sonnet 출시 이후, claude project 출시 이후)\n", + " * 결론: 이 코드를 짤 수 있느냐 없느냐가 아니라 그 프로덕트를 만드는 프로세를 익히는 것이 중요한 시대가 되었습니다.\n", + "\n", + "* 그러면 백엔드 개발자로서 어떤 역량을 갖춰야 할까요? 또 어떤 것을 배워야 할까요?\n", + " * 프로세스, 설계, 갖춰야 하는 문서 양식과 방향성, 선임의 경험을 체화할 수 있는 여러 프로젝트를 해보는 것\n", + " * 이제는 노하우, 경험 등도 사실 GPT, Sonnet 코드 안에 녹아 있습니다.\n", + "\n", + "* 채용공고에 10년차 이상 개발자는 뽑지 않는다라는 공고를 내셨습니다.\n", + " * 이제 주니어든 조금 연차가 있는 시니어든 10년차 개발 리드급에 퍼포먼스가 나옵니다.\n", + " * 오히려 AI를 활용해서 빠르게 프로덕트를 생산하는 것은 AI를 많이 활용해본사람이 유리해요.\n", + " * Sonnet이 나오고 나서 시니어 개발자들이 '앞으로 어떻게 살아가야 할지 모르겠다'라는 글을 많이 올리셨어요.\n", + "\n", + "* 프롬프트 시스템을 구축할 때 어떤 것을 중점적으로 구축해야 할까요?\n", + " * 회사에 들어가서 업무를 빠르게 하고 싶다면 각 업무에 프롬프트 시스템을 구축하는 것을 권합니다.\n", + " * 이때 가장 중요한 것은 질문 -> 답변의 구조가 아니라 질문 -> 라이브러리를 포함한 답변 -> 구현\n", + " * 예를 들어서 '인스타그램 클론을 작성해줘' 제대로된 UI를 뽑아내지 못합니다. 자세하게 작성하라는 얘기는 아닙니다. 그런데 '인스타그램을 tailwind로 클론을 작성해줘'라는 식으로 라이브러리를 껴 넣으면 좀 더 디테일한 코드를 받을 수 있습니다.\n", + " * 회사 내 디자인 시스템이나 회사 내 프론트엔드 코드 등을 믹싱해 넣으면 더욱 잘 나옵니다.\n", + " * 백엔드도 마찬가지입니다.\n", + "\n", + "\n", + "* 실제 Play를 해야 합니다.\n", + " * 음표 보는 법을 아무리 잘 배워도, 아무리 잘 질문해도 음표가 연주를 해주진 않습니다. 실제로 구동이되는 프로덕트를 많이 만들어볼 필요가 있습니다. 여기서 배우는 프로세스가 진짜 입니다." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 주석\n", + "\n", + "* 교안 링크: https://www.books.weniv.co.kr/python/chapter02/02-2\n", + "* 주석 언제 작성하죠?\n", + " * 이제 주석은 인공지능이 학습할 수 있도록 작성해야 합니다. 프롬프트 엔지니어링을 염두해두고 주석을 작성해야 합니다.\n", + " * 코드를 설명하는 주석은 작성하지 않습니다. 코드를 리뷰하는 사람들은 이미 알고리즘이나 코드에 대한 베이스지식이 충분하다고 가정합니다.\n", + " * 파이썬 주석은 그럼 어떤 주석을 작성할까요? 인풋, 아웃풋, 파라미터, 리턴값, 이 소스코드에 대한 요약 등 Docstring을 작성합니다.\n", + " * Docstring은 함수나 클래스 내부에 아래와 같은 형식으로 작성이 됩니다.\n", + "```py\n", + "def fetch_smalltable_rows(table_handle: smalltable.Table) -> Mapping[bytes, tuple[str, ...]]:\n", + " \"\"\"Fetches rows from a Smalltable.\n", + "\n", + " Retrieves rows pertaining to the given keys from the Table instance\n", + " represented by table_handle. String keys will be UTF-8 encoded.\n", + "\n", + " Args:\n", + " table_handle: An open smalltable.Table instance.\n", + " keys: A sequence of strings representing the key of each table\n", + " row to fetch. String keys will be UTF-8 encoded.\n", + " require_all_keys: If True only rows with values set for all keys will be\n", + " returned.\n", + "\n", + " Returns:\n", + " A dict mapping keys to the corresponding table row data\n", + " fetched. Each row is represented as a tuple of strings. For\n", + " example:\n", + "\n", + " {b'Serak': ('Rigel VII', 'Preparer'),\n", + " b'Zim': ('Irk', 'Invader'),\n", + " b'Lrrr': ('Omicron Persei 8', 'Emperor')}\n", + "\n", + " Returned keys are always bytes. If a key from the keys argument is\n", + " missing from the dictionary, then that row was not found in the\n", + " table (and require_all_keys must have been False).\n", + "\n", + " Raises:\n", + " IOError: An error occurred accessing the smalltable.\n", + " \"\"\"\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 문자열\n", + "\n", + "* 인덱싱, 슬라이싱, 메서드\n", + "* 문자열은 백엔드 개발자에게 가장 중요한 데이터 구조입니다.\n", + " * 각각의 분야마다 중요하게 다루는 자료형이 조금씩 다릅니다. 예를 들어 백엔드 개발자에게는 클래스의 원리를 파악하는 것이 매우 중요합니다. 그러나 데이터분석가에게는 그리 중요하지 않습니다.\n", + "\n", + "* 데이터분석가에게 가장 중요한 데이터구조는 정수, 실수 입니다.\n", + " * 인공지능은 행렬의 연산이다.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Python 동작 원리\n", + "\n", + "* Cpython을 공부하면 좋은가? 성능에 영향이 크게 끼치는 대규 시스템 구축이라던지 시간에 민감한 SW를 개발한다면 Cpython을 공부해야 할 수도 있습니다. 필요성이 확고하게 인지되기 전까지는 공부를 미루시는 것을 권합니다. 이유는 공부할게 이것 말고도 많습니다. 그리고 이걸 공부한다고 Python실력이 느는 것은 아닙니다.\n", + "\n", + "* https://github.com/python/cpython 가 Python 공식홈페이지에서 다운로드 받는 파이썬입니다.\n", + "\n", + "* jython은 JAVA로 구현된 파이썬입니다. 파이썬이 꼭 하나의 언어로만 개발이 된 것은 아닙니다.\n", + "\n", + "* Python은 라인라인 별로 실행합니다. 그런데 C는 전체 파일을 컴파일해서 애러가 있으면 애초에 실행이 안되요. 그런데 Python 어떻게 라인라인 별로 실행이 되다가 중간에 애러가 날까요? Python도 C로 실행이 되는건데요?\n", + "\n", + "* 동작방식\n", + " 1. Python 양식으로 만들어진 텍스트를 파싱합니다.\n", + " 2. 추상 구문 트리(AST)를 그립니다.\n", + " 3. 바이트코드로 변경을 합니다.\n", + " 4. 바이트 코드를 컴파일합니다.\n", + " 5. 파이썬 가상머신에서 컴파일 한 것을 한 줄씩 실행합니다." + ] +<<<<<<< HEAD + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] +======= +>>>>>>> 841c2a66b49e1cc7299c42e3c7768b0d6a945aaa + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git "a/blog/img/for \353\254\270 \352\265\254\354\241\260 2.PNG" "b/blog/img/for \353\254\270 \352\265\254\354\241\260 2.PNG" new file mode 100644 index 00000000..8a0746cd Binary files /dev/null and "b/blog/img/for \353\254\270 \352\265\254\354\241\260 2.PNG" differ diff --git "a/blog/img/for \353\254\270 \352\265\254\354\241\260.PNG" "b/blog/img/for \353\254\270 \352\265\254\354\241\260.PNG" new file mode 100644 index 00000000..df3dc325 Binary files /dev/null and "b/blog/img/for \353\254\270 \352\265\254\354\241\260.PNG" differ diff --git "a/blog/img/if \354\241\260\352\261\264\353\254\270 \352\265\254\354\241\260.PNG" "b/blog/img/if \354\241\260\352\261\264\353\254\270 \352\265\254\354\241\260.PNG" new file mode 100644 index 00000000..7543826f Binary files /dev/null and "b/blog/img/if \354\241\260\352\261\264\353\254\270 \352\265\254\354\241\260.PNG" differ diff --git a/blog/img/none.png b/blog/img/none.png new file mode 100644 index 00000000..ec1e5663 Binary files /dev/null and b/blog/img/none.png differ diff --git a/blog/img/zoom_BG1.png b/blog/img/zoom_BG1.png new file mode 100644 index 00000000..17b82291 Binary files /dev/null and b/blog/img/zoom_BG1.png differ diff --git "a/blog/img/\354\232\260\354\204\240\354\210\234\354\234\204\355\221\234.PNG" "b/blog/img/\354\232\260\354\204\240\354\210\234\354\234\204\355\221\234.PNG" new file mode 100644 index 00000000..59b4f839 Binary files /dev/null and "b/blog/img/\354\232\260\354\204\240\354\210\234\354\234\204\355\221\234.PNG" differ diff --git "a/blog/img/\355\225\250\354\210\230.png" "b/blog/img/\355\225\250\354\210\230.png" new file mode 100644 index 00000000..cb5ecfdb Binary files /dev/null and "b/blog/img/\355\225\250\354\210\230.png" differ diff --git a/config.js b/config.js index f9678e73..4aba084b 100644 --- a/config.js +++ b/config.js @@ -13,9 +13,9 @@ const siteConfig = { const users = [ { id: 0, // default author - username: "licat", + username: "woongi", company: "weniv", - position: "CEO", + position: "TeamLeader", img: "img/user/profile-licat.png", }, ]; @@ -25,4 +25,4 @@ const localDataUsing = false; // 로컬 데이터 사용 여부 localDataUsing는 아직 사용하는 데이터가 아닙니다. 1. false일 경우에도 로컬에서 live server(127.0.0.1)를 사용하면 local 데이터를 사용합니다. 2. true일 경우 local 데이터를 사용합니다 접속자가 많을 경우 true 변경하고 local 데이터를 작성하고 사용하시길 권합니다. -*/ +*/ \ No newline at end of file diff --git a/data/datagen.py b/data/datagen.py deleted file mode 100644 index 88311fc1..00000000 --- a/data/datagen.py +++ /dev/null @@ -1,83 +0,0 @@ -# 해당 파일은 테스트용도이며 실제 서비스에는 포함되지 않습니다. -# blog 폴더에 [20240101]_[title0101]_[test]_[]_[테스트용입니다]_[].md 파일부터 [20241230]_[title1230]_[test]_[]_[테스트용입니다]_[].md까지 원하는 월을 선택해 생성해주는 파일입니다. -# 동시에 data 폴더에 local_blogList.json 파일을 생성해주는 파일입니다. -# 원하는 월은 python 파일에서 input 함수로 입력받습니다. - -""" -# 테스트용입니다. - ---- - -* `20240101_[title0101]_[test]_[]_[테스트용입니다]_[]`.md 파일입니다. -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` -""" - -import os -import json -import datetime -import random - -# 날짜 생성 -start_date = datetime.date(2024, 1, 1) -end_date = datetime.date(2024, 12, 30) -delta = datetime.timedelta(days=1) -category = [ - "python", - "ai", - "javascript", - "react", - "django", - "unity", - "c", - "c++", - "SQL", - "AWS", -] -lorem = "테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은 것까지 테스트하고 있습니다. 위니브 블로그는 베타이며 정식 런칭은 3월 즈음에 할 수 있을 것으로 보입니다." -test_img = ["","thumb1.jpg", "thumb2.jpg", "thumb3.jpg", "default.png"] -date_list = [] -input_month = int(input("몇 월을 생성하시겠습니까? ")) - -while start_date <= end_date: - date_list.append(start_date) - start_date += delta - -# 파일 생성 -for date in date_list: - if date.month == input_month: - # f-string 사용 - file_name = f'[{date.strftime("%Y%m%d")}]_[title{date.strftime("%m%d")}]_[{random.choice(category)}]_[{random.choice(test_img)}]_[{lorem[0:random.randint(5, 40)]}]_[].md' - file_text = f""" -# 테스트용입니다. - -* `{date.strftime("%Y%m%d")}_{file_name}` 파일입니다. - -```python -def hello(): - print('하이라이팅 테스트입니다.') -``` - -```javascript -function hello() {{ - console.log('하이라이팅 테스트입니다.'); -}} -``` -""" - # 경로를 ../blog로 설정하여 파일 생성 - with open(f"../blog/{file_name}", "w", encoding="utf-8") as f: - f.write(file_text) - -# 파일 목록 읽기 -blog_list = os.listdir("../blog") - -# json 파일 생성 -with open("local_blogList.json", "w", encoding="utf-8") as f: - json.dump( - [{"name": file, "download_url": f"/blog/{file}"} for file in blog_list], - f, - ensure_ascii=False, - indent=4, - ) diff --git a/data/local_blogList.json b/data/local_blogList.json index 5f74e5f0..cf717332 100644 --- a/data/local_blogList.json +++ b/data/local_blogList.json @@ -1,271 +1,23 @@ [ { - "name": "[20240118]_[title_test]_[python]_[]_[파이썬은 놀라운 언어입니다.]_[].md", - "download_url": "/blog/[20240118]_[title_test]_[python]_[]_[파이썬은 놀라운 언어입니다.]_[].md" + "name": "[20240121]_[썸네일이 없는 테스트 파일]_[django]_[]_[이 파일은 테스트 파일입니다.]_[].md", + "download_url": "/blog/[20240121]_[썸네일이 없는 테스트 파일]_[django]_[]_[이 파일은 테스트 파일입니다.]_[].md" }, { - "name": "[20240119]_[title_test2]_[django]_[test.png]_[파이썬은 정말 재미있습니다.]_[].md", - "download_url": "/blog/[20240119]_[title_test2]_[django]_[test.png]_[파이썬은 정말 재미있습니다.]_[].md" + "name": "[20240120]_[썸네일이 없는 테스트 파일]_[django]_[]_[이 파일은 테스트 파일입니다.]_[].md", + "download_url": "/blog/[20240120]_[썸네일이 없는 테스트 파일]_[django]_[]_[이 파일은 테스트 파일입니다.]_[].md" }, { - "name": "[20240122]_[AI가 IT 업계와 교육에 가져온 것]_[AI]_[빌게이츠_샘알트먼.jpg]_[빌 게이츠와 샘 알트먼의 대화 중 AI에 역할에 대해]_[].md", - "download_url": "/blog/[20240122]_[AI가 IT 업계와 교육에 가져온 것]_[AI]_[빌게이츠_샘알트먼.jpg]_[빌 게이츠와 샘 알트먼의 대화 중 AI에 역할에 대해]_[].md" + "name": "[20240119]_[썸네일이 없는 테스트 파일]_[django]_[]_[이 파일은 테스트 파일입니다.]_[].md", + "download_url": "/blog/[20240119]_[썸네일이 없는 테스트 파일]_[django]_[]_[이 파일은 테스트 파일입니다.]_[].md" }, { - "name": "[20240128]_[파이썬_부트캠프]_[python]_[]_[위니브 파이썬 부트캠프.]_[].ipynb", - "download_url": "/blog/[20240128]_[파이썬_부트캠프]_[python]_[]_[위니브 파이썬 부트캠프.]_[].ipynb" + "name": "[20240128]_[파이썬_부트캠프]_[python]_[test_2.jpg]_[위니브 파이썬 부트캠프 강의자료입니다. 이 파일은 ipynb 파일입니다.]_[].ipynb", + "download_url": "/blog/[20240128]_[파이썬_부트캠프]_[python]_[test_2.jpg]_[위니브 파이썬 부트캠프 강의자료입니다. 이 파일은 ipynb 파일입니다.]_[].ipynb" }, { - "name": "[20240207]_[타이틀을 입력합니다]_[Test]_[]_[테스트용입니다]_[].md", - "download_url": "/blog/[20240207]_[타이틀을 입력합니다]_[Test]_[]_[테스트용입니다]_[].md" - }, - { - "name": "[20240401]_[title0401]_[django]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은]_[].md", - "download_url": "/blog/[20240401]_[title0401]_[django]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은]_[].md" - }, - { - "name": "[20240402]_[title0402]_[django]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은]_[].md", - "download_url": "/blog/[20240402]_[title0402]_[django]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은]_[].md" - }, - { - "name": "[20240403]_[title0403]_[django]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은]_[].md", - "download_url": "/blog/[20240403]_[title0403]_[django]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은]_[].md" - }, - { - "name": "[20240404]_[title0404]_[ai]_[default.png]_[테스트용 로렘입숨]_[].md", - "download_url": "/blog/[20240404]_[title0404]_[ai]_[default.png]_[테스트용 로렘입숨]_[].md" - }, - { - "name": "[20240405]_[title0405]_[AWS]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은 것까지 ]_[].md", - "download_url": "/blog/[20240405]_[title0405]_[AWS]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은 것까지 ]_[].md" - }, - { - "name": "[20240406]_[title0406]_[python]_[test_2.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은]_[].md", - "download_url": "/blog/[20240406]_[title0406]_[python]_[test_2.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은]_[].md" - }, - { - "name": "[20240407]_[title0407]_[AWS]_[test_3.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 ]_[].md", - "download_url": "/blog/[20240407]_[title0407]_[AWS]_[test_3.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 ]_[].md" - }, - { - "name": "[20240408]_[title0408]_[c++]_[test_3.jpg]_[테스트용 로렘입]_[].md", - "download_url": "/blog/[20240408]_[title0408]_[c++]_[test_3.jpg]_[테스트용 로렘입]_[].md" - }, - { - "name": "[20240409]_[title0409]_[SQL]_[test_1.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은 것]_[].md", - "download_url": "/blog/[20240409]_[title0409]_[SQL]_[test_1.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은 것]_[].md" - }, - { - "name": "[20240410]_[title0410]_[AWS]_[test_2.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부]_[].md", - "download_url": "/blog/[20240410]_[title0410]_[AWS]_[test_2.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부]_[].md" - }, - { - "name": "[20240411]_[title0411]_[SQL]_[test_2.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은]_[].md", - "download_url": "/blog/[20240411]_[title0411]_[SQL]_[test_2.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은]_[].md" - }, - { - "name": "[20240412]_[title0412]_[django]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은]_[].md", - "download_url": "/blog/[20240412]_[title0412]_[django]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은]_[].md" - }, - { - "name": "[20240413]_[title0413]_[ai]_[test_1.jpg]_[테스트용 ]_[].md", - "download_url": "/blog/[20240413]_[title0413]_[ai]_[test_1.jpg]_[테스트용 ]_[].md" - }, - { - "name": "[20240414]_[title0414]_[javascript]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 ]_[].md", - "download_url": "/blog/[20240414]_[title0414]_[javascript]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 ]_[].md" - }, - { - "name": "[20240415]_[title0415]_[django]_[test_1.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은 것]_[].md", - "download_url": "/blog/[20240415]_[title0415]_[django]_[test_1.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은 것]_[].md" - }, - { - "name": "[20240416]_[title0416]_[django]_[test_3.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은 것까지 테스]_[].md", - "download_url": "/blog/[20240416]_[title0416]_[django]_[test_3.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은 것까지 테스]_[].md" - }, - { - "name": "[20240417]_[title0417]_[c++]_[test_3.jpg]_[테스트용 로렘입숨입]_[].md", - "download_url": "/blog/[20240417]_[title0417]_[c++]_[test_3.jpg]_[테스트용 로렘입숨입]_[].md" - }, - { - "name": "[20240418]_[title0418]_[python]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은 것까지 테스]_[].md", - "download_url": "/blog/[20240418]_[title0418]_[python]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은 것까지 테스]_[].md" - }, - { - "name": "[20240419]_[title0419]_[c]_[test_3.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것]_[].md", - "download_url": "/blog/[20240419]_[title0419]_[c]_[test_3.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것]_[].md" - }, - { - "name": "[20240420]_[title0420]_[react]_[test_1.jpg]_[테스트용 로렘입숨]_[].md", - "download_url": "/blog/[20240420]_[title0420]_[react]_[test_1.jpg]_[테스트용 로렘입숨]_[].md" - }, - { - "name": "[20240421]_[title0421]_[django]_[test_1.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가]_[].md", - "download_url": "/blog/[20240421]_[title0421]_[django]_[test_1.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가]_[].md" - }, - { - "name": "[20240422]_[title0422]_[javascript]_[test_3.jpg]_[테스트용 로렘입숨입니]_[].md", - "download_url": "/blog/[20240422]_[title0422]_[javascript]_[test_3.jpg]_[테스트용 로렘입숨입니]_[].md" - }, - { - "name": "[20240423]_[title0423]_[react]_[test_1.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은]_[].md", - "download_url": "/blog/[20240423]_[title0423]_[react]_[test_1.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은]_[].md" - }, - { - "name": "[20240424]_[title0424]_[SQL]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은 것까지 테스]_[].md", - "download_url": "/blog/[20240424]_[title0424]_[SQL]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은 것까지 테스]_[].md" - }, - { - "name": "[20240425]_[title0425]_[ai]_[test_3.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은]_[].md", - "download_url": "/blog/[20240425]_[title0425]_[ai]_[test_3.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은]_[].md" - }, - { - "name": "[20240426]_[title0426]_[django]_[test_2.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은]_[].md", - "download_url": "/blog/[20240426]_[title0426]_[django]_[test_2.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은]_[].md" - }, - { - "name": "[20240427]_[title0427]_[AWS]_[test_2.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 ]_[].md", - "download_url": "/blog/[20240427]_[title0427]_[AWS]_[test_2.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 ]_[].md" - }, - { - "name": "[20240428]_[title0428]_[javascript]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은 것까지]_[].md", - "download_url": "/blog/[20240428]_[title0428]_[javascript]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은 것까지]_[].md" - }, - { - "name": "[20240429]_[title0429]_[react]_[test_3.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수]_[].md", - "download_url": "/blog/[20240429]_[title0429]_[react]_[test_3.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수]_[].md" - }, - { - "name": "[20240430]_[title0430]_[python]_[test_3.jpg]_[테스트용 로]_[].md", - "download_url": "/blog/[20240430]_[title0430]_[python]_[test_3.jpg]_[테스트용 로]_[].md" - }, - { - "name": "[20240501]_[title0501]_[unity]_[test_2.jpg]_[테스트용 로]_[].md", - "download_url": "/blog/[20240501]_[title0501]_[unity]_[test_2.jpg]_[테스트용 로]_[].md" - }, - { - "name": "[20240502]_[title0502]_[javascript]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은 ]_[].md", - "download_url": "/blog/[20240502]_[title0502]_[javascript]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은 ]_[].md" - }, - { - "name": "[20240503]_[title0503]_[react]_[test_3.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적]_[].md", - "download_url": "/blog/[20240503]_[title0503]_[react]_[test_3.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적]_[].md" - }, - { - "name": "[20240504]_[title0504]_[AWS]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은]_[].md", - "download_url": "/blog/[20240504]_[title0504]_[AWS]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은]_[].md" - }, - { - "name": "[20240505]_[title0505]_[python]_[test_2.jpg]_[테스트용 ]_[].md", - "download_url": "/blog/[20240505]_[title0505]_[python]_[test_2.jpg]_[테스트용 ]_[].md" - }, - { - "name": "[20240506]_[title0506]_[AWS]_[test_3.jpg]_[테스트용 로렘]_[].md", - "download_url": "/blog/[20240506]_[title0506]_[AWS]_[test_3.jpg]_[테스트용 로렘]_[].md" - }, - { - "name": "[20240507]_[title0507]_[ai]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은]_[].md", - "download_url": "/blog/[20240507]_[title0507]_[ai]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은]_[].md" - }, - { - "name": "[20240508]_[title0508]_[react]_[test_3.jpg]_[테스트용 로렘입숨입니]_[].md", - "download_url": "/blog/[20240508]_[title0508]_[react]_[test_3.jpg]_[테스트용 로렘입숨입니]_[].md" - }, - { - "name": "[20240509]_[title0509]_[ai]_[test_3.jpg]_[테스트용 로렘입숨입]_[].md", - "download_url": "/blog/[20240509]_[title0509]_[ai]_[test_3.jpg]_[테스트용 로렘입숨입]_[].md" - }, - { - "name": "[20240510]_[title0510]_[SQL]_[test_2.jpg]_[테스트용 로렘입숨입니다. 글자수가]_[].md", - "download_url": "/blog/[20240510]_[title0510]_[SQL]_[test_2.jpg]_[테스트용 로렘입숨입니다. 글자수가]_[].md" - }, - { - "name": "[20240511]_[title0511]_[django]_[test_1.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자]_[].md", - "download_url": "/blog/[20240511]_[title0511]_[django]_[test_1.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자]_[].md" - }, - { - "name": "[20240512]_[title0512]_[ai]_[test_3.jpg]_[테스트용 로렘입숨입니]_[].md", - "download_url": "/blog/[20240512]_[title0512]_[ai]_[test_3.jpg]_[테스트용 로렘입숨입니]_[].md" - }, - { - "name": "[20240513]_[title0513]_[python]_[test_2.jpg]_[테스트용 로렘입숨입]_[].md", - "download_url": "/blog/[20240513]_[title0513]_[python]_[test_2.jpg]_[테스트용 로렘입숨입]_[].md" - }, - { - "name": "[20240514]_[title0514]_[react]_[test_1.jpg]_[테스트용 로렘입숨입니다. 글자수가]_[].md", - "download_url": "/blog/[20240514]_[title0514]_[react]_[test_1.jpg]_[테스트용 로렘입숨입니다. 글자수가]_[].md" - }, - { - "name": "[20240515]_[title0515]_[javascript]_[test_2.jpg]_[테스트용 ]_[].md", - "download_url": "/blog/[20240515]_[title0515]_[javascript]_[test_2.jpg]_[테스트용 ]_[].md" - }, - { - "name": "[20240516]_[title0516]_[django]_[default.png]_[테스트용 로렘입숨입니다]_[].md", - "download_url": "/blog/[20240516]_[title0516]_[django]_[default.png]_[테스트용 로렘입숨입니다]_[].md" - }, - { - "name": "[20240517]_[title0517]_[AWS]_[test_1.jpg]_[테스트용 로렘입숨입니다. 글자수가 ]_[].md", - "download_url": "/blog/[20240517]_[title0517]_[AWS]_[test_1.jpg]_[테스트용 로렘입숨입니다. 글자수가 ]_[].md" - }, - { - "name": "[20240518]_[title0518]_[SQL]_[test_1.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 ]_[].md", - "download_url": "/blog/[20240518]_[title0518]_[SQL]_[test_1.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 ]_[].md" - }, - { - "name": "[20240519]_[title0519]_[python]_[test_2.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 ]_[].md", - "download_url": "/blog/[20240519]_[title0519]_[python]_[test_2.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 ]_[].md" - }, - { - "name": "[20240520]_[title0520]_[django]_[test_3.jpg]_[테스트용 로렘]_[].md", - "download_url": "/blog/[20240520]_[title0520]_[django]_[test_3.jpg]_[테스트용 로렘]_[].md" - }, - { - "name": "[20240521]_[title0521]_[AWS]_[test_2.jpg]_[테스트용 로렘입숨입니다. 글자수가 많]_[].md", - "download_url": "/blog/[20240521]_[title0521]_[AWS]_[test_2.jpg]_[테스트용 로렘입숨입니다. 글자수가 많]_[].md" - }, - { - "name": "[20240522]_[title0522]_[react]_[test_1.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가]_[].md", - "download_url": "/blog/[20240522]_[title0522]_[react]_[test_1.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가]_[].md" - }, - { - "name": "[20240523]_[title0523]_[unity]_[test_1.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은 ]_[].md", - "download_url": "/blog/[20240523]_[title0523]_[unity]_[test_1.jpg]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은 ]_[].md" - }, - { - "name": "[20240524]_[title0524]_[AWS]_[test_1.jpg]_[테스트용 로렘입숨입니다.]_[].md", - "download_url": "/blog/[20240524]_[title0524]_[AWS]_[test_1.jpg]_[테스트용 로렘입숨입니다.]_[].md" - }, - { - "name": "[20240525]_[title0525]_[AWS]_[test_2.jpg]_[테스트용 로렘입숨입니다. 글자수가]_[].md", - "download_url": "/blog/[20240525]_[title0525]_[AWS]_[test_2.jpg]_[테스트용 로렘입숨입니다. 글자수가]_[].md" - }, - { - "name": "[20240526]_[title0526]_[SQL]_[test_3.jpg]_[테스트용 로렘입숨입니다. 글자수가]_[].md", - "download_url": "/blog/[20240526]_[title0526]_[SQL]_[test_3.jpg]_[테스트용 로렘입숨입니다. 글자수가]_[].md" - }, - { - "name": "[20240527]_[title0527]_[unity]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은 ]_[].md", - "download_url": "/blog/[20240527]_[title0527]_[unity]_[default.png]_[테스트용 로렘입숨입니다. 글자수가 많은 것부터 글자수가 적은 ]_[].md" - }, - { - "name": "[20240528]_[title0528]_[c]_[default.png]_[테스트용 로렘입숨입니다]_[].md", - "download_url": "/blog/[20240528]_[title0528]_[c]_[default.png]_[테스트용 로렘입숨입니다]_[].md" - }, - { - "name": "[20240529]_[title0529]_[javascript]_[test_2.jpg]_[테스트용 로렘입숨입니다.]_[].md", - "download_url": "/blog/[20240529]_[title0529]_[javascript]_[test_2.jpg]_[테스트용 로렘입숨입니다.]_[].md" - }, - { - "name": "[20240530]_[title0530]_[django]_[test_3.jpg]_[테스트용 로렘입숨입니다. 글자수가 많]_[].md", - "download_url": "/blog/[20240530]_[title0530]_[django]_[test_3.jpg]_[테스트용 로렘입숨입니다. 글자수가 많]_[].md" - }, - { - "name": "[20240531]_[title0531]_[SQL]_[default.png]_[테스트용 ]_[].md", - "download_url": "/blog/[20240531]_[title0531]_[SQL]_[default.png]_[테스트용 ]_[].md" - }, - { - "name": "[20240531]_[title0531test]_[JS]_[]_[테스트용 ]_[].md", - "download_url": "/blog/[20240531]_[title0531test]_[JS]_[]_[테스트용 ]_[].md" + "name": "[20240505]_[블로그 글 양식]_[markdown]_[test_1.jpg]_[마크다운 양식입니다. 참고하여 블로그 글을 작성해주세요. 각 언어별 하이라이팅도 지원합니다.]_[].md", + "download_url": "/blog/[20240505]_[블로그 글 양식]_[markdown]_[test_1.jpg]_[마크다운 양식입니다. 참고하여 블로그 글을 작성해주세요. 각 언어별 하이라이팅도 지원합니다.]_[].md" }, { "name": "[date]_[title]_[category]_[thumnail]_[description]_[author].md", diff --git a/img/icon/favicon.svg b/img/icon/favicon.svg new file mode 100644 index 00000000..91c59bb1 --- /dev/null +++ b/img/icon/favicon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/img/icon/icon-X.svg b/img/icon/icon-X.svg new file mode 100644 index 00000000..48a4f367 --- /dev/null +++ b/img/icon/icon-X.svg @@ -0,0 +1,3 @@ + + + diff --git a/img/icon/icon-next.svg b/img/icon/icon-next.svg new file mode 100644 index 00000000..122bd8f5 --- /dev/null +++ b/img/icon/icon-next.svg @@ -0,0 +1,3 @@ + + + diff --git a/img/icon/icon-prev.svg b/img/icon/icon-prev.svg new file mode 100644 index 00000000..47f18470 --- /dev/null +++ b/img/icon/icon-prev.svg @@ -0,0 +1,3 @@ + + + diff --git a/img/test.png b/img/test.png deleted file mode 100644 index 769d1a07..00000000 Binary files a/img/test.png and /dev/null differ diff --git a/img/thumb1-1.png b/img/thumb1-1.png deleted file mode 100644 index dddad8cd..00000000 Binary files a/img/thumb1-1.png and /dev/null differ diff --git a/img/thumb1.png b/img/thumb1.png deleted file mode 100644 index bf870a1a..00000000 Binary files a/img/thumb1.png and /dev/null differ diff --git a/img/thumb1.webp b/img/thumb1.webp new file mode 100644 index 00000000..543871eb Binary files /dev/null and b/img/thumb1.webp differ diff --git a/img/thumb10-1.png b/img/thumb10-1.png deleted file mode 100644 index d680cb64..00000000 Binary files a/img/thumb10-1.png and /dev/null differ diff --git a/img/thumb10.png b/img/thumb10.png deleted file mode 100644 index be4caf40..00000000 Binary files a/img/thumb10.png and /dev/null differ diff --git a/img/thumb10.webp b/img/thumb10.webp new file mode 100644 index 00000000..d3f8f617 Binary files /dev/null and b/img/thumb10.webp differ diff --git a/img/thumb2-1.png b/img/thumb2-1.png deleted file mode 100644 index 8dbc758d..00000000 Binary files a/img/thumb2-1.png and /dev/null differ diff --git a/img/thumb2.png b/img/thumb2.png deleted file mode 100644 index 86606e9e..00000000 Binary files a/img/thumb2.png and /dev/null differ diff --git a/img/thumb2.webp b/img/thumb2.webp new file mode 100644 index 00000000..c4f1c86a Binary files /dev/null and b/img/thumb2.webp differ diff --git a/img/thumb3-1.png b/img/thumb3-1.png deleted file mode 100644 index 6de54a93..00000000 Binary files a/img/thumb3-1.png and /dev/null differ diff --git a/img/thumb3.png b/img/thumb3.png deleted file mode 100644 index d8a4f0cd..00000000 Binary files a/img/thumb3.png and /dev/null differ diff --git a/img/thumb3.webp b/img/thumb3.webp new file mode 100644 index 00000000..99523a85 Binary files /dev/null and b/img/thumb3.webp differ diff --git a/img/thumb4-1.png b/img/thumb4-1.png deleted file mode 100644 index 3c94fdf2..00000000 Binary files a/img/thumb4-1.png and /dev/null differ diff --git a/img/thumb4.png b/img/thumb4.png deleted file mode 100644 index d9d4fd4b..00000000 Binary files a/img/thumb4.png and /dev/null differ diff --git a/img/thumb4.webp b/img/thumb4.webp new file mode 100644 index 00000000..b3857a5c Binary files /dev/null and b/img/thumb4.webp differ diff --git a/img/thumb5-1.png b/img/thumb5-1.png deleted file mode 100644 index 72965a79..00000000 Binary files a/img/thumb5-1.png and /dev/null differ diff --git a/img/thumb5.png b/img/thumb5.png deleted file mode 100644 index 7b2f5164..00000000 Binary files a/img/thumb5.png and /dev/null differ diff --git a/img/thumb5.webp b/img/thumb5.webp new file mode 100644 index 00000000..8a39bc84 Binary files /dev/null and b/img/thumb5.webp differ diff --git a/img/thumb6-1.png b/img/thumb6-1.png deleted file mode 100644 index 60bdcdd4..00000000 Binary files a/img/thumb6-1.png and /dev/null differ diff --git a/img/thumb6.png b/img/thumb6.png deleted file mode 100644 index b3eb344a..00000000 Binary files a/img/thumb6.png and /dev/null differ diff --git a/img/thumb6.webp b/img/thumb6.webp new file mode 100644 index 00000000..84f657a7 Binary files /dev/null and b/img/thumb6.webp differ diff --git a/img/thumb7-1.png b/img/thumb7-1.png deleted file mode 100644 index b50b98a2..00000000 Binary files a/img/thumb7-1.png and /dev/null differ diff --git a/img/thumb7.png b/img/thumb7.png deleted file mode 100644 index 0ae213fb..00000000 Binary files a/img/thumb7.png and /dev/null differ diff --git a/img/thumb7.webp b/img/thumb7.webp new file mode 100644 index 00000000..d0064207 Binary files /dev/null and b/img/thumb7.webp differ diff --git a/img/thumb8-1.png b/img/thumb8-1.png deleted file mode 100644 index acacb551..00000000 Binary files a/img/thumb8-1.png and /dev/null differ diff --git a/img/thumb8.png b/img/thumb8.png deleted file mode 100644 index 83c4268b..00000000 Binary files a/img/thumb8.png and /dev/null differ diff --git a/img/thumb8.webp b/img/thumb8.webp new file mode 100644 index 00000000..8308f542 Binary files /dev/null and b/img/thumb8.webp differ diff --git a/img/thumb9-1.png b/img/thumb9-1.png deleted file mode 100644 index f46b9afa..00000000 Binary files a/img/thumb9-1.png and /dev/null differ diff --git a/img/thumb9.png b/img/thumb9.png deleted file mode 100644 index e560ccbb..00000000 Binary files a/img/thumb9.png and /dev/null differ diff --git a/img/thumb9.webp b/img/thumb9.webp new file mode 100644 index 00000000..b48f8d90 Binary files /dev/null and b/img/thumb9.webp differ diff --git "a/img/\353\271\214\352\262\214\354\235\264\354\270\240_\354\203\230\354\225\214\355\212\270\353\250\274.jpg" "b/img/\353\271\214\352\262\214\354\235\264\354\270\240_\354\203\230\354\225\214\355\212\270\353\250\274.jpg" deleted file mode 100644 index ab4a517c..00000000 Binary files "a/img/\353\271\214\352\262\214\354\235\264\354\270\240_\354\203\230\354\225\214\355\212\270\353\250\274.jpg" and /dev/null differ diff --git a/index.html b/index.html index 1e937cae..fd923381 100644 --- a/index.html +++ b/index.html @@ -3,19 +3,21 @@ + Weniv Blog - - + + - + + - +