본문 바로가기
반응형

Programming307

Python Oracle 연결하여 Insert하기 (cx_Oracle -> oracledb 사용) 최신 오라클  라이브러리가 cx_Oracle에서 oracledb 변경되었다. Insert# Plan MH 일괄 추출from datetime import datetimeimport oracledbimport osos.putenv('NLS_LANG', '.UTF8')now = datetime.today()# DB연결conn = oracledb.connect(user='myuser', password='1234', dsn='abcd.abcde.com:1526/abcd')cursor = conn.cursor() #지시자 생성query_str = "insert into SOME_TABLE values (:1,:2,:3,:4,:5,:6,:7,:8)"data = ('20240125',.. 2024. 4. 24.
Spring boot - Thymeleaf 적용하기 1. template/hello.html 데이터를 받아들일 html템플릿을 만들어둔다. Hello Thymeleaf!! 2.Controller.java 자료를 넘길때는 ModelAndView객체에 담아서 보낸다. ... @GetMapping("/user") public ModelAndView hello(@RequestParam("id") String id) throws Exception { ModelAndView mav = new ModelAndView(); UserDto res = userService.getUserById(id); mav.setViewName("hello"); mav.addObject("user",res.getName()); return mav; } ... 2024. 4. 8.
Spring boot - DB / Mybatis / Mapper 1. Controller: UserProfileController.java package com.example.myba.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.spri.. 2024. 4. 7.
Spring Maven Swagger설치 여기서 최신버전을 복사해서 pom.xml의 디펜던시에 넣어준다. Maven Repository: org.springdoc » springdoc-openapi-starter-webmvc-ui » 2.5.0 (mvnrepository.com) org.springdoc springdoc-openapi-starter-webmvc-ui 2.5.0 localhost:8080/swagger-ui/index.html 2024. 4. 6.
파이썬 turtle 라이브러리 import turtle turtle.title('거북이') turtle.color('black', 'red') turtle.shape('turtle') turtle.penup(); turtle.write("빠른 거북이!!") turtle.forward(80) turtle.pendown(); turtle.backward(100) turtle.exitonclick() 수행해보니 이번엔 속도가 너무 빠르네요. 속도값은 다음과 같습니다. 0: 가장 빠른 1: 가장 느린 3: 느린 6: 보통 (기본값) 10: 빠른 지금 기본값이 보통 이라고? 너무 빠른데요. 1로 변경해보겠습니다. import turtle turtle.title('거북이') turtle.color('black', 'red') turtle.sha.. 2024. 4. 2.
Tkinter 위젯 배치 스터디 - frame Tkinter에서 다른 위젯의 배치를 위한 Frame을 사용할 수 있습니다. 아래는 Frame 예제입니다. import tkinter as tk root = tk.Tk() root.title("GUI Frame") root.geometry("640x480+100+100") root.resizable(True,True) frame1 = tk.Frame(root, relief="solid", bd=1, highlightcolor="red") frame1.pack(side="top", fill="both", expand=True) frame2 = tk.Frame(root, relief="solid", bd=2, bg="blue") frame2.pack(side="bottom", fill="both", expa.. 2024. 4. 2.
Tkinter 위젯 배치 스터디 - grid / pack / place Tkinter에서 위젯을 화면에 배치하는 방법에는 pack / grid / place의 세가지 방식이 있습니다. grid는 엑셀과 같은 이미지를 떠올리면 될 것 같습니다. 행과 열을 기준으로 위치시키는 방식이고, pack은 상/하/좌/우(동/서/남/북)으로 위치시키는 방식, 그리고 place는 절대좌표계를 이용해서 위치시키는 방식입니다. 1. Grid방식 import tkinter as tk root = tk.Tk() root.title("GUI Grid위젯배치") root.geometry("640x480+100+100") root.resizable(True,True) bb1 = tk.Button(root, text="(0,0)") bb1.grid(row=0,column=0) bb2 = tk.Button.. 2024. 3. 29.
Tkinter 기본 활용 예전에 테스트삼아 해봤는데, 오랫만에 하니까 잘 모르는 것도 있고, 좀 바뀐 부분도 있어서 정리도 할겸 올립니다. 아래와 같은 tkinter 화면을 만들겁니다. 1. main.py 우선 main.py에서는 구동만 시켜주고, 화면을 구성하는 파일은 gui.py로 별도 모듈로 만들 예정입니다. import gui if __name__ == '__main__': gui.main_screen() 2. gui.py import tkinter as tk def main_screen(): root = tk.Tk() root.title("GUI Sample") root.geometry("640x480+100+100") root.resizable(True,True) root.configure(background='whi.. 2024. 3. 28.
리눅스 모바일 연동가능 노트 프로그램 추천 - simplenote , notesnook [ 목차 ] 요즘 하도 개발쪽으로는 관심이 뜸해져서 PC쪽은 쳐다보지도 않은지 꽤 돼었습죠. 그러던 와중에 오랫만에 Manjaro Linux로 부팅을 하고나니 갑자기 예쁜 노트툴이 하나 있으면 하고 생각하게 되었습니다. 그래서 이것 저것 찾아봤는데요 이번에 중점을 둔 것은 무료이면서도, 리눅스 - 모바일 - 웹이 연동이 되느냐는 겁니다. AI 나 여타 블로그로부터 기존의 Evernote, Notion 뿐만아니라 Joplin, CherryTree 등 다양한 추천이 있었습니다. 그 중에 제가 고른 것은 오늘 소개해드릴 Simplenote 와 Notesnook입니다. 1. Simplenote (무료 다운로드) 일반적으로 기대하는 깔끔한 디자인의 노트 프로그램입니다. 모바일과 리눅스에서 프로그램을 제공하고 있습.. 2024. 3. 4.
개츠비(Gatsby) Disqus 댓글기능 달기 이번엔 개츠비(Gatsby) 블로그에 Disqus 댓글 기능을 추가해보도록 하겠습니다. [ 목차 ] 1. Disqus.com에 댓글 추가할 사이트정보 입력 Disqus.com에 로그인 후 Site Admin 으로 이동하여 기본 정보들을 입력하여 내 사이트를 추가해줍니다. 그리고 설치방법을 찾아보면 Gatsby에 반영하는 방법이 나옵니다. [ Site Admin > 내 사이트 선택 > Installation > Gatsby 선택 ] Disqus에서는 아래와 같은 형식으로 안내를 합니다. 단 config에서 괄호가 두개 들어가야합니다. 안내와 조금 차이가 있습니다. import { Disqus } from 'gatsby-plugin-disqus'; const Template = () => ( /* Page .. 2023. 8. 4.
개츠비(Gatsby) 구글 서치콘솔 등록 (Google Search Console) [ 목차 ] 구글 서치콘설에 등록하기 위해서는 3단계를 거쳐야 합니다. 1. sitemap.xml 2. robots.txt 3. Google Search Console 등록 1. Sitemap.xml 생성 가장 먼저 sitemap.xml을 생성합니다. 생성 방법은 플러그인 추가로 쉽게 진행할 수 있습니다. gatsby-plugin-sitemap, gatsby-plugin-advanced-sitemap 플러그인을 추가해줍니다. 두번째 플러그인은 '@next'옵션으로 최신 플러그인을 설치합니다. npm i gatsby-plugin-sitemap // gatsby가 버전 5로 올라가면서 아래의 플러그인은 아직 설치가 안되고 있습니다. npm i gatsby-plugin-advanced-sitemap gatsb.. 2023. 8. 4.
개츠비(Gatsby) 마크다운 파일과 이미지 처리하기 사실...여러 예제와 뤼튼 AI를 이용해서 하루 종일 고생하며 방법을 찾아봤는데, 지금도 왜 되었는지 잘 모르겠습니다. 예제를 따라 해도 안되던게 갑자기 됩니다. 우선 코드만 남겨놓습니다. 1. 마크다운 파일 읽어오는 옵션 'gatsby-source-filesystem'은 기본적으로 설치되었을겁니다. 마크다운 파일들을 모아놓는 곳을 아래와 같이 설정해줍니다. // gatsby-config.js module.exports = { siteMetadata: { ... }, plugins: [ ..., { resolve: `gatsby-source-filesystem`, options: { name: `posts`, path: `${__dirname}/content/posts`, }, }, ... ], }; 2.. 2023. 7. 30.
C#(Winform) XML파일 읽기 프로그램 만들기 [ 목차 ] 오랫만에 간단히 PC에서 XML파일의 텍스트를 읽어올 일이 있어서, 간단히 닷넷 winform으로 만들어봤습니다. winform은 정말 오랫만이라, 또 잊어버리기 전에 기록으로 남깁니다. 해당 프로그램은 닷넷6.0, VSCode에서 만들어졌습니다. 1. 닷넷 Winform 시작 적당한 이름의 프로젝트 폴더를 만들고, 아래의 명령어어로 winform 프로젝트를 생성합니다. dotnet new winforms // 끝에 s가 들어감을 확인 2. Form1.Designer.cs 으로 요소 추가하기 우선 필요한 버튼, 파일경로를 나타내는 textbox, 그리고 추출 결과물을 표현할 textbox를 추가합니다. namespace wf01_xml; partial class Form1 { /// /// .. 2023. 7. 27.
개츠비(Gatsby) 마크다운 블로그 만들기 시작하기 정적사이트 생성기(SSG, Static Site Generator)에 대해 공부하다보니 다시 Gatsby에 대한 흥미가 돌기 시작해서 오랫만에 Gatsby로 프로젝트를 만들어봤습니다. 예전에 이걸 공부했던 적이 있었나 싶을 정도로 하나도 기억이 안나더군요. React에 대한 두려움으로 React 계통의 프레임워크들은 무조건 멀리했었던 것 같기도 하고, 사실은 Gatsby, GraphQL에 대해 정확히 공부한적이 없었던 것 같기도 하네요. 그래서 오늘은 설치하고 마크다운 문서 표기하기까지 알게된 내용을 정리해볼까 합니다. [ 목차 ] 1. Gatsby란? Gatsby는 서두에 말했듯이 React에 기반한 정적사이트 생성기(SSG, Static Site Generator)입니다. 예전부터 Ruby on Ra.. 2023. 7. 26.
파이썬 정적 사이트 생성기(SSG) 펠리칸 (Pelican) 시작하기 파이썬하면 요즘 ML/DL, 데이터분석 등으로 엄청난 인기를 끌고 있는데요. 웹프로그래밍에서도 매우 많은 인기가 있습니다. 우리나라에서는 점유율이 많이 못미치지만, 해외에서 Django, FastAPI등은 매우 좋은 반응을 보이고 있습니다. 오늘 소개할 도구는 Django나 FastAPI와 같은 서버도구는 아닌, 파이썬으로 만들어진 정적사이트 생성기 펠리칸(Pelican)입니다. 1. 설치 우선 일반적인 파이썬 프로젝트 시작방법과 마찬가지로 가상환경을 만들어줍니다. (pycharm을 활용하면 쉽게 가상환경이 만들어집니다. VSCode로 진행하면 조금 까다로우니, 다른 포스팅을 참고하세요). 가상환경이 만들어지면 아래의 pip install ~ 로 pelican을 설치합니다. pip install peli.. 2023. 7. 25.
자바스크립트 정적사이트 생성기 11ty (eleventy 일레븐티) 시작하기2 이번 포스팅에서는 지난 포스팅에 이어 11ty를 좀더 활용해서 layout을 구성하고, CSS를 적용하는 방법을 알아보도록 하겠습니다. 1. .eleventy.js파일 생성 프로젝트 루트에 .eleventy.js 파일을 생성합니다. 여기서 Input / Output 폴더와 CSS 파일의 경로를 지정해줍니다. module.exports = function(eleventyConfig) { eleventyConfig.addPassthroughCopy("./src/style.css"); return { dir: { input: "src", includes: "_includes", data: "_data", output: "_site" } }; }; 2. 폴더 구성 폴더구성은 아래와 같이 /src/폴더 하위에 작.. 2023. 7. 24.
자바스크립트 정적사이트 생성기 11ty (eleventy 일레븐티) 시작하기 정적사이트 생성기가 여러개다보니 이것저것 시도해봅니다. 그중에 이번엔 11ty라는 정적사이트 생성기에 대해 알아보겠습니다. 사용법이 매우 쉽습니다. [ 목차 ] 1. 설치 프로젝트로 쓸 폴더를 생성 후 11ty를 깔아줍니다. (기본적으로 Node는 깔려있어야 합니다.) npm init -y npm install @11ty/eleventy --save-dev 2. 샘플 파일 생성 2가지 파일을 생성해야합니다. 리눅스라면 아래의 명령어로 생성이 가능한데, 윈도우 환경이면 직접 두 파일을 만듭니다. # index.html echo 'Page titleHi' > index.html #README.md echo '# Page header' > README.md 3. 서버 실행 npx @11ty/eleventy -.. 2023. 7. 23.
정적 사이트 생성기 (SSG, Static Site Generator) 로 나만의 블로그를 만들어보자 [ 목차 ] 오늘은 정적사이트 생성기 (SSG, Static Site Generator)에 대해 알아보겠습니다. 1. 정적사이트(SSG) 생성기란? 정적사이트 생성기는 말 그대로 정적 사이트를 생성하는 도구를 말하는데요, 정적 사이트란 항상 동일한 내용을 보여주는 사전에 빌드된 HTML, Javascript 및 CSS 코드로 구성된 사이트를 일컫는 말입니다. 이러한 웹페이지는 이미 서버 측에서 미리 렌더링된 후 브라우저에 제공되기 때문에 페이지를 더 빠르게 로드할 수 있습니다. 그래서 개인 블로그 등 컨텐츠 변화가 자주 일어나지 않는 소규모 웹사이트 제작시 많이 이용되고 있습니다. 대표적인 도구로는 Jekyll, Gatsby, Hugo 등이 있습니다. 이것만 알면 뭔가 부족한거 같아서 몇가지 개념을 좀 .. 2023. 7. 20.
파이썬 데이터분석 1 openpyxl로 엑셀 다루기 파이썬으로 엑셀 파일을 불러오고 데이터 다루는 가장 기본적인 라이브러리인 openpyxl에 대해 알아보도록 하겠습니다. [ 목차 ] 1. Openpyxl 설치 $ pip install openpyxl 2. 파일 생성 import openpyxl # 새로운 엑셀 파일 생성 wb = openpyxl.Workbook() # 새로운 시트 추가 sheet = wb.active # 셀에 데이터 쓰기 sheet['A1'] = '가나다' sheet['B1'] = '라마바사아' # 엑셀 파일로 저장 wb.save('example.xlsx') 3. 파일 열기 import openpyxl # 기존 파일 열기 wb=openpyxl.load_workbook('example.xlsx') #파일명 혹은 패스+파일명 입력 # she.. 2023. 7. 14.
파이썬보다 35,000배 빠른 언어 모조 (Mojo) 오랫만에 Python 관련 포스팅을 하나 할까 합니다. 최근에 Python보다 35,000배 빠른 언어가 나타났다는 기사를 봤습니다. 잉? 뭐지? 인터프리터 언어가 아닌건가? 속도로만 치면 빠른 언어는 많은데...무슨 소리지? 하는 궁금증이 들더군요. 오늘은 Python의 새로운 대안언어라는 타이틀을 들고 나온 "Mojo언어"에 대해 알아보도록 하겠습니다. Mojo � Mojo 🔥: Programming language for all of AI Mojo combines the usability of Python with the performance of C, unlocking unparalleled programmability of AI hardware and extensibility of AI mode.. 2023. 7. 13.
vuepress 구글 서치 콘솔 등록하기 - 구글검색 최적화(SEO) [ 목차 ] 내 사이트가 Netlify에 배포된 이후에도 아직 검색이 안되고 있습니다. 주소가 아니면 아직 접근할 방법이 없네요. 구글에 노출시키는 작업이 필요합니다. 이걸 설정해주는게 구글 서치 콘솔(Google Search Console)입니다. 여기에 등록해주면 구글에서 검색도 되고, 그 외에 모니터링도 가능해집니다. 오늘은 서치 콘솔에 등록하고, sitemap.xml, robots.txt 파일을 적용하는 방법에 대해 알아보겠습니다. 1.구글 서치콘솔 등록 구글 서치콘솔에 로그인한 후 속성 추가를 해 줍니다. [ 속성 유형 선택 ] 다음으로 속성 유형에서 "URL 접두어" 부분으로 가서 추가하고자 하는 URL을 적어주고 "계속" 을 클릭해줍니다. [ 소유권 확인 ] 다음으로 소유권 확인창이 뜹니다... 2023. 7. 12.
vuepress 1.9.9 버전 시작하기 (태그 기능 달기) Node 18버전에서 vuepress 1.9.9 버전 설치에 오류가 있어서 포기했다가, 다시 Node 16버전으로 낮춰서 설치했습니다. 아직 Beta버전인 2.0.0 보다 오류가 적은 것 같습니다. 설치하니 기본적으로 검색 툴이 활성화되고, Vue 컴포넌트 추가도 components 폴더에 만드니 별다른 설정없이 인식이 됩니다. 그리고 무엇보다도 태그 요소 추가가 너무 쉽게 진행됩니다. Vuepress2로 하려고 시도하며 공부해서인지 금방금방 작성이 되네요. 다시 Vuepress 1으로 재작성해야겠습니다...ㅠㅠ 1. 설치 npm init npm i -D vuepress@next 2. ./docs/README.md 파일 생성 ### Hello Vuepress 3. ./gitignore 파일 생성 node.. 2023. 7. 12.
Vuepress2에서 vue 컴포넌트 만들어서 등록/사용하기 1. 플러그인 추가 npm i -D @vuepress/plugin-register-components@next 2. .vuepress/config.js파일에 플러그인 추가 import { registerComponentsPlugin } from '@vuepress/plugin-register-components' import { getDirname, path } from '@vuepress/utils' // const __dirname = getDirname(import.meta.url) // 인식 오류시 사용 export default { title:"Hello, Vuepress", plugins: [ registerComponentsPlugin({ componentsDir: path.resolve(_.. 2023. 7. 6.
Vuepress2 정적 사이트 생성기 시작하기 [ 목차 ] 블로그 같은걸 만들다보니 순수 Vue.js보다는 SSR 또는 정적 사이트 생성기 SSG가 필요하게 되었습니다. React에는 유명한 Gatsby가, 그 이전에 Ruby에는 Jekyll 이라는 정적 사이트가 있었는데, Vue에는 마땅한게 없나 살펴보던 중 Vuepress 라는 걸 알게되었습니다. 오늘은 Vuepress를 이용하여 간단한 블로그를 생성해보겠습니다. Vuepress2 Home | VuePress v2.vuepress.vuejs.org 1. 설치 설치는 npm으로 간단히 아래와 같이 진행하면 됩니다. npm init npm install -D vuepress@next 2. 구성 처음 라이브러리를 설치하면 위 이미지처럼 아무것도 나타나지 않습니다. 여기에 몇가지 수동으로 폴더 및 파일.. 2023. 7. 4.
자바스크립트 slice, splice ,split의 활용과 차이점 오늘은 자바스크립트에서 자르고 나누는 함수지만 헷갈리는 세가지 함수, slice, splice, split 에대해 알아보도록 하겠습니다. [ 목차 ] 1. slice() slice는 원하는 부분을 복사하여 새로운 배열로 리턴합니다. 원본을 변경시키지 않습니다. //slice(시작점, 끝점) ...0부터 시작 let my_array=['test1', 'test2','test3','test4']; second_array=my_array.slice(2,3) // output:['test3','test4'] 2. splice() splice는 원본이 수정됩니다. //splice(시작점, 잘라낼 갯수, 추가할 요소,,,n개) // 요소 제거 let my_array=['test1', 'test2','test3','.. 2023. 6. 29.
Nuxt 프로젝트 Netlify에 배포하기 / 외부 도메인 적용하기 오늘은 Nuxt 프로젝트를 Netlify에 배포해보도록 하겠습니다. 동시에, 도메인 하나를 구매해서 적용해보겠습니다. [ 목차 ] 1. 도메인 구매 (hosting.kr) 저는 Hosting.KR이란 곳에서 도메인을 구매했습니다. 아래와 같이 이벤트중인 도메인 종류들도 있는데, 중간 즈음에 "도메인 가격안내"를 클릭하면 이벤트중인 싸고 좋은 것들도 찾으실 수 있습니다. 저는 likeapianist.blog라는 이름으로 블로그를 하나 만들어보겠습니다. 2. Netlify-Gitlap 연동 배포 사전에 Nuxt 프로젝트를 gitlap(또는 github)에 배포를 해 놓습니다. 어느정도 배포가 가능한 모양새는 갖추고 있어야겠죠? 본인의 깃 저장소를 고르고... Vue 프로젝트의 빌드는 "npm run buil.. 2023. 6. 23.
자바스크립트 전개 연산자 (...) 전개연산자는 ES6에서 추가된 기능으로 배열이나 객체를 분해된 값으로 전달하는 기능입니다. 배열 등 모든 순환 가능한 것들은 펼쳐서 가져올 수 있습니다. 1. 배열 예 const arr1 = ['a', 'b', 'b']; const arr2 = ['d', 'e', 'f']; const arr3 = ['g', 'h', 'i']; const sum_array = [...arr1, ...arr2, ...arr3]; console.log(sum_array); // ['a', 'b', 'b', 'd', 'e', 'f', 'g', 'h', 'i'] 2. 객체배열 예 const obj_array=[ { name: "one", age: 1, }, { name: "two", age: 2, }, { name: "three.. 2023. 6. 22.
자바스크립트 화살표 함수 (=>) 오늘은 자바스크립트 ES6에서 추가된 주요 기능 중 화살표함수( => )에 대해 알아보겠습니다. [ 목차 ] 1. 화살표 함수 기존의 function으로 함수를 표현하는 방식을 좀 더 간결하게 표현하기 위해 화살표( => ) 함수가 도입되었습니다. 아래의 두 함수는 모두 동일한 역할을 하는 함수입니다. const test1 = function(a,b){ return a+b; } const test2 = (a,b) => { return a+b; }; const test3 = (a,b) => a+b; 2. 화살표 함수 주의점(this) 일반적인 자바스크립트 함수에서의 this는 - 전역 객체 - 메소드 호출시 호출한 해당 객체 를 나타냅니다. // 일반 함수 const obj1 = { name: '홍길동',.. 2023. 6. 22.
자바스크립트 filter 사용법 자바스크립트 filter 메소드에 대해 알아보겠습니다. Filter 메소드는 배열 내부를 순환하면서 특정 조건에 부합하는 요소들을 새로운 배열에 담아 반환합니다. 1. 기본사용법 result = my_array.filter (a => { return [조건]; }); const my_array = [1,2,3,4,5,6,7,8,9,10] const result = my_array.filter(a => { return a % 2 == 0; // a중 2로 나눈 나머지가 0(즉, 짝수)인 요소 }); console.log(result); // [ 2, 4, 6, 8, 10 ] 2. 객체 다루기 const my_array = [ {name:'홍길동', age:28}, {name:'이순신', age:37}, {.. 2023. 6. 20.
자바스크립트 Reduce사용법 reduce 함수는 자바스크립트에서 배열 또는 리스트 안의 요소들을 정렬하거나 특정 조건에 부합하면 합계나 평균 등을 계산하는데 사용되는 함수입니다. 개인적으로 자주 쓰지는 않지만 잘 알고있으면 많이 유용하게 쓸 수 있을것 같아서 정리해놓겠습니다. 1. 기본사용법 result = my_array.reduce((acc, cur, i) => { return (acc~연산~cur); }, acc초기값); - acc: accumulate(누적값) - cur: current(현재값) - acc초기값: 누적하기 전에 시작값을 지정 const my_array = [1,2,3,4,5] const result = my_array.reduce((acc, cur, i) => { console.log(acc, i); retu.. 2023. 6. 17.
반응형