기본 콘텐츠로 건너뛰기

11월, 2022의 게시물 표시

개발 공부 - OneNote 대신 Google Keep 을 사용하기

 잘 사용하고 있던 OneNote가 갤럭시탭에서 "스티커 메모"를 쓸 수 없다니! 태블릿에서 왜 스티커 메모가 안 되나요 : 원래 안 되는 기능이라고 합니다. 어쨌든 폰으로만 쓰다가 충격적인 사실을 새벽녘 알게 되서 고민하고 있다. - 표류 내역 - 1) 에버노트가 점유율이 높아도 사용하는 것이 싫다. 2) 항상 나의 정보를 없애버린 안정성 낮은 에버노트! 3) 심지어 이제 되던 기능(동기화 등)이 유료화까지 되서 더 싫다. 3) 나는 노션 같은 메모보다는 스티커 메모 같은 휘발성 메모를 좋아한다. 4) 스티커 메모를 폰보다 태블릿에서 많이 쓰고 싶다. * 계속 스티커 메모를 카톡으로 보내는 식으로 사용했는데 너무 불편한 것이다! 5) 삼성 Notes를 사용하기에는 이미 그것은 업무용으로 점철되어 n년간의 정보가 모인 메모가 아닌 사전의 압축판이 되어버린 것이다. 6) 구글 킵이나 써볼까? (구글이니까 안드로이드 호환이 잘 될 것이라는 50%의 믿음) 일단 앱을 받고, 웹도 접속해 보았다. 앱에서 바로바로 동기화 되는 것이 보여서 OneNote와 이별했다. 이제 Google Keep으로 한동안 써 볼 것이다! 확장 프로그램도 있길래 깔아본다. 리뷰를 읽어보니 PC 설치용 프로그램이 있었던 것 같은데 없어졌나 보다. 설치하고 눌러보면 이렇게 뜬다. 이런! 11월 29일에 깔았는데 12월 5일부터 메모 저장 기능이 자동으로 되지 않는다고 한다. (그럼 쓰다가 개편 후 별로면 안써야지 라는 생각이 든다) 아무튼 이렇게 시작 그룹에 낑겨 두었으니 한동안 사용 예정! 색상 사용하는 기능과 고정 기능 확인하고 기존 스티커 메모에 있던 사항들 다 옮김! * 가림용 PINK BOX는 그냥 내가 핑크를 좋아한다.  ffaec9. OneDrive도 태블릿용 앱은 화딱지 났는데, 구글 것은 (상대적으로) 빠릿빠릿하고 좋다! 리뷰에 느리다고 하지만 나는 OneNote가 체감 훨씬 느렸음 ... TO DO LIST 사용 후에는 보관함에 넣으면 될 것 같아서 아주 만

개발 공부 - 선형 검색

* 공부용의 자유로운 글씨😀 『가장 쉬운 독학 알고리즘 첫걸음 - C&자바편』 공부용이다. 선형 검색 : 임의의 배열에서 원하는 데이터를 찾는 것 배열 a 의 요소값 합계를 구해 변수 sum 에 저장하는 알고리즘을 슈도코드로 작성해 보면 아래와 같다. 이걸 자바로 짜면 이렇게 된다. 사실 의사코드 대로 똑같이 안 짠다면 아래와 같다. 이렇게 배열 a 의 값이 변화하지 않고 변수 sum 과 변수 i 만 변하는 것을 확인 할 수 있다. 이 Java 코드에 추적을 위한 코드를 추가할 수 있는데, 디버깅 외에 sysout을 사용해서 찍어보라고 한다. 선형 검색은 '임의의' 배열에서 원하는 데이터를 찾는 알고리즘인데, 정렬되지 않은 배열을 뜻한다. (만약 정렬이 됬으면 이진 검색을 사용하는 것이 효율적이니까) 교재에서 선형 검색의 알고리즘을 의사 코드로 작성하고 있다. 이걸 자바로 짜면 아래와 같다. 이렇게 선형 검색을 효율화하는 기술로, 보초법이라는 것을 쓰는데,  이것은 보초병의 개념을 이용하는 것으로, 대상 데이터를 뜻한다. 배열의 끝에 보초법의 값에 해당하는 데이터를 추가한 후, 검색 횟수를 줄여서 값을 빠르게 찾을 수 있는데, 배열에서 만약 66이라는 값을 찾을 경우에는 보초법 값 자체를 66으로 하면 된다. 그러면 만약에 한 바퀴 돌아서 66이 없을 경우에도 반드시 66이 있기 때문에, 배열 끝 부분을 확인 할 필요가 없다.  (66이 있으면 있는거고, 없으면 끝에 넣은 66이 있으니까) 여기서 추적 코드를 넣어보면, 아래와 같다. 반복 횟수를 세는 변수는 루프 카운터이다. 의사 코드로 ■ i : 0, i<10, 1 이라는 반복을 마지막까지 수행하면, 변수 i 값은 9가 되지 않는다. 변수에 초기값을 대입하는 것을 초기화라고 부른다. 선형 검색에서도 정렬된 배열을 탐색할 수 있다. 의사코드 i<10 and pos = -1 이라는 조건으로 반복 실행을 할 경우, pos가 -1이 아닌 값으로 변경되면 반복이 종료된다. 단원 종료

개발 공부 - 갤럭시탭을 모니터로 사용하기 (세컨드 스크린), Samsung Flow 이용해서 화면 사용하기

목적: 윈도우에 연결해서 필기용으로 사용하고 공부용으로 게시할 것 사용법:  0) 같은 wifi 망에 태블릿과 윈도우 PC를 연결한다. 1) 세컨드 스크린 기능을 활성화한다. 2) 윈도우에서 windows 키  + k 를 누른다. 이렇게 뜬다. 체크를 허용하면 태블릿으로 사용 가능하다.  3) 디스플레이 정렬을 원하는 방식으로 변경한다. 이렇게 설정해서 쓸 것이다. ---------------------------------------------------------------------------------------------- 그러나 좀 delay 가 있는 경우를 대비하여(거의 다 끊기긴 한다...★ 애플과는 다르다!)  삼성 flow도 써본다. 이건 사실 설정만 하면 쉬워서 설명은 생략한다. 이렇게 폰과 주고받기가 가능하지만 나는 맨 위 상단의 Smart view를 사용할 예정 노트로 끼적끼적 적어서 복사 붙여넣기가 가능하고 세컨드 스크린보다 덜 끊긴다! * 그러니 세컨드 스크린을 어떻게 더 잘 만들어 주세요. 총평 : 나는 flow를 쓸 것이다.

개발 공부 - GC (추가)

* 공부하기 위해 크롤링 후 공부 GC의 동작 방식 1. 힙 메모리 영역에서 다음 메모리 할당을 위한 포인터가 존재한다. 2. 힙에 무언가를 할당하면 그 크기만큼 포인터가 이동한다. 3. GC의 특정 조건이 만족되면 모든 스레드를 중단하고, GC 쓰레드를 활성화한다. 4. 레퍼런스가 존재하지 않는 메모리들을 삭제하고, 사용 중인 메모리들의 위치를 재조정한다. 장점  - 자동으로 메모리가 관리되기 때문에 프로그래머가  관리할 필요가 없다 .  -  메모리 누수 가 없어진다.  - 유효하지 않은 포인터에 접근하지 않는다.  - 이중해제 문제에서 자유롭다. (이미 해제된 메모리를 다시 해제하는 오류) 단점  - 해제할 메모리를 조사하는데  비용 이 든다.  - 할당된 메모리가  해제되는 시점을 알 수 없다 .  - 실시간 시스템에서 프로그램 동작 중 GC가 원하지 않는 순간 발생하면 프로그램 동작에 문제가 생길 수 있다.  세대별 GC GC를 최적화하는 기법은  세대별 GC 라는 것이 존재한다.   3가지 세대(0세대, 1세대, 2세대)로 구분되어 최초 GC를 실행한 뒤, 살아남은 객체는 1세대로 옮겨진다. 이후 새롭게 할당된 메모리들에 대해서만 레퍼런스를 검사하고 GC를 수행하다가 0세대가 용량 한계가 되면, 1세대에 대해서도 레퍼런스 검사를 하고 살아남은 1세대는 2세대로 옮긴다.   메모리에 남아있었던 객체의 메모리들은 2세대에 계속 남아있게 되며, 모든 메모리의 레퍼런스를 검사하는 것보다는  없어질 가능성이 높은 메모리들에 대해서만 먼저 검사 를 하는 것. 잠깐 쓰고 사라져도 되는 객체를 상대적으로 크기가 작은 New 영역에 할당하고, New 영역에서 기준 시간 이상으로 오래 살아남은 객체가 있다면 Old 영역으로 이동시켜 "세대" 구분을 하는 방법이 사용되고 있다. 0세대 : GC가 아직 적용되지 않은 것 1세대 : 0세대와 2세대 사이           * 1세대는 GC 후 남은 것을 옮긴 객체임 2세대 : GC를 2번 이상 겪고도 힙에

개발 공부 - Visual Studio Code (VS Code) 로 GitHub에 있는 프로젝트 열기, workspace 저장하기

https://www.bubblecat.co.kr/2022/11/github-githubio.html  ↑ 이 것 할 때 사용해 보았으나, 정리를 위해서 블로그에 남겨보기로 함. https://www.bubblecat.co.kr/2022/11/git-clone-git-fork.html ↑ 여기서 Fork 해 온 Repository를 연동하려고 한다. 1) F1을 누르고 git clone을 한다. 2) Clone 할 URL을 입력하고 폴더를 지정한다. Add to Workspace 를 해서 기존에 열어 놓은 것과 같은 작업 영역에 추가했다. 작업 영역을 저장해서 workspace 별로 관리가 당연히 가능한데, STUDY로 저장하면 이렇게 나온다. 끝!

개발 공부 - Git Clone 과 Git Fork 의 차이

 일단 Fork 는 Github에서 할 수 있는 기능인데, 리파지토리 자체를 통으로 복사하는 기능이다. Fork를 하면 원본이랑 연결이 되서, 기존 원본 리파지토리에 변경 사항이 발생 시에 반영할 수 있다. Clone은 Fork 같은 것 없이 그냥 Git을 사용해서 로컬 저장소에 복사하는 기능이다. 변경 사항이 있어도 보지 못한다. 요즘은 공부용 github 리파지토리도 사후 지원을 해 주기에 Fork 해서 공부하기로 했다. https://github.com/dybooksIT/ESS-algorithm-C-Java 이걸 Fork 해서 https://github.com/bowies/ESS-algorithm-C-Java 이렇게 했으나, Clone이나 Fork 하지 않을 사람을 위해 제공하는 zip 파일도 있는 스윗한 개발자

개발 공부 - VSCode에서 Java Project 생성

 사실 집 데스크탑에 IDE가 웬만한 것은 다 깔려 있으나, 공부용은 VS Code로 통합해보려고 추가한다. Ctrl + Shift + X를 누르고 Extension Pack For Java를 설치한다. Publisher를 Microsoft로 놓고 검색을 해도 사용 가능한 것이 많이 나온다! 공식 지원! Ctrl + Shift + P 를 누르거나 View > Command Palette 를 한 뒤, Java Project 를 타이핑한다. 그러면 Create Java Project 가 뜨고, 선택을 하면 이렇게 나온다.   테스트 용이니까 No Build tools로 선택하겠다. 폴더를 선택하고, 프로젝트 명을 입력한다. 강제되는 신뢰! Java는 최신을 하는 편이 명석해 보이니까 19로 올렸다! (8 쓰다가 엄청난 발전) https://www.oracle.com/java/technologies/downloads/#jdk19-windows   (2022-11-29 의 다운로드 경로!) 일단 기본으로 Hello World 콘솔에 찍어주는 메인 클래스는 제공한다. ctrl + f5를 하면 이렇게 나온다. * 가끔 잊는데 Blogger는 스크린샷 Copy & Paste가 되어서 그냥 쓰면 되는 것을 자꾸 폴더를 만든다. 또한 전환 설명, 가운데 정렬을 안 하면 내 블로그에서는 라인스킵이 안 되는 이슈가 있어서, 기본으로 사용할 것 (복사 붙여넣기 시 기본이 가운데 정렬) 참조 : https://kim-oriental.tistory.com/22

개발 공부 - git 명령어 (추가)

* 사실 리눅스 외에서 git 사용시에는 툴이 잘 되있어서 2020년 공유용으로 작성했던 txt 파일이었는데, 문서를 정리하다가 다시 한번 읽어보는 목적으로 올린다. 막상 2021년부터는 VS Code가 정말 좋아져서, 웹 버전도 있다. (https://vscode.dev/) github도 연동 가능해서 사용하기 쉽다!  git status 파일 상태 확인 git commit -m "Commit Test"           변경 사항 커밋 (커밋 테스트 라는 메시지도 같이 보냄) git pull origin feature/HOM-556 git pull origin <branch name>  위의 명령을 사용하면 origin 에 연동된 원격저장소에서 특정 branch 만 pull 해오게 한다. git log     전체 로그가 나온다.      git push     저장소에 커밋 사항 반영 git pull     커밋한 것 저장소에서 가져오기 * 임시 저장 목적으로 stash를 쓸 때     git stash         git은 잠깐 Stash 했다가 다시 돌아오기 가능!          git stash list          git stash 된 것 조회     git stash pop         stash 한 것들 작업하는 곳에 추가해줌     git stash drop          stash한 사항 제거 개발용 계정은 init / reverse 권한이 없으니, 권한 있는 계정에서 사용 시 주의 할 것  /* 실 서버에서 절대 테스트 하지 말 것 */

개발 공부 - 닷홈 FTP 연결 방법

 * 토이 프로젝트용 무료 도메인 사용 중, 처음부터 세팅하기 귀찮아서 내가 보려고 만드는 문서. 닷홈에서 로그인하고 마이닷홈에 가서 [상세보기] 웹서버 / FTP 정보에서 필요한 것을 사용한다. 1) 웹서버 아이피 2) FTP 아이디 MobaXterm을 사용해서 FTP 연결을 하였다. 메뉴바의 [Session]을 누르고 [FTP]를 선택한다. Remote Host 란에는 1) 웹서버 아이피를 입력하고, Username 옆의 사람 모양 아이콘을 누른다. [New]를 누르고 2) FTP 아이디 를 입력하고, FTP 암호도 입력한다. Name은 Username이랑 같아도 상관없다. 정상적인 연결이 된 것을 확인할 수 있다. 내 토이 프로젝트들은 html만 사용하는 경우에는 경로가 여기기 때문에 테스트 용으로 확인해 보았다. 정상 동작한다. 그러나 가끔 FileZilla나 Moba를 삭제하고 비밀번호 때문에 골머리를 썩히는 나의 모습...★ 자체 참조 : https://www.bubblecat.co.kr/2021/02/blog-post_10.html https://www.bubblecat.co.kr/2021/06/blog-post.html

개발 공부 - 유클리드 호제법을 이용한 최대공약수

큰 쪽에서 작은 쪽을 계속 빼는 형태의 최대공약수 /* Online Java Compiler and Editor */ public class HelloWorld{     //      public static void main(String []args){         System.out.println("Hello, World!");         int i = 50;         int j = 30;         int cnt = 0;         while(i!=j){             cnt++;             if(i > j){                 System.out.println(cnt + "!   "+i+"  "+j);                 i -= j;             }else{                 System.out.println(cnt + "    "+i+"  "+j);                 j -= i;             }         }                  System.out.println(i);               } } 큰 쪽에서 작은 쪽을 나눈 나머지를 계속 구하는 최대공약수 (더 효율적인 유클리드 호제법) /* Online Java Compiler and Editor */ public class HelloWorld{     //      public static void main(String []args){         System.out.println("Hello, World!");         int i = 15;         int j = 50;         int cnt = 0;         while(i!= 0 && j!=0){             cnt++;             if(i > j){    

개발 공부 - 파일 경로 참조 JAVA 예제 코드

/* File path = new File("../workspace/bubblecat/WebContent/WEB-INF/lib"); String realFilePath = path + "/alpha.properties"; Properties props = new Properties(); FileInputStream fis = new FileInputStream(realFilePath); props.load(new java.io.BufferedInputStream(fis)); String dbSequence = props.getProperty("DB_SEQ"); */      String realFilePath = (this.getClass().getResource("/").getPath() +  "/resource/property/alpha .properties").substring(1); Properties props = new Properties(); FileInputStream fis = new FileInputStream(realFilePath); props.load(new java.io.BufferedInputStream(fis)); String dbSequence = props.getProperty("sequence_branch");     전에 테스트 하느라고 짜 놓은 코드 임시 저장 해 놓아서 추후 사용하려고 업로드. 절대경로 / 상대경로 코드 짜다가 복잡해서 세이브 해 놨던 것으로 추정한다.

개발 공부 - 인강 사이트 추천 크롤링 (추가)

* 예전에 공부하려고 적어 놓은 것이라 추가 수정 용으로 업로드. 정리 안 된 상태에서 크롤링 한 것 https://marlinbar.tistory.com/38 프로그래밍 강의 1. 생활코딩 (무료) ★★★★★ : https://opentutorials.org/course/1 너무나도 유명한 사이트. 프로그래밍의 프자도 모를 때 많은 도움을 받은 사이트이다. 아직도 다 보지못한 강의가 많다. 강의해주시는 이고잉님의 꿀떨어지는 목소리에 잠에 빠져들 수 있으니 조심..! 2. 인프런 (유/무료) ★★★★ : https://www.inflearn.com/ 여러 인터넷 강의들을 한데 모아놓은 사이트. 기초적인 것부터 심화과정까지 무료, 유료인 강의들이 많다. 3. edwith (무료) ★★★★★ : https://www.edwith.org/ MOOC를 위한 플랫폼과 양질의 강좌를 제공한다. 나도 여기서 풀스택 웹개발자 부스트코스 강좌를 듣고 있다. 대학강의부터 프로그래밍 강의까지 다양한 강좌가 준비되어 있다. 4. 칸 아카데미 (무료) ★★★★ : https://ko.khanacademy.org/ 미국의 무료 교육사이트. 한글로도 볼 수 있다. 5. 프로그래머스 (무료/유료) ★★★ : https://programmers.co.kr/learn 오프라인/온라인강의가 함께 있다. 언어 기초, 웹, JavaScript, Java, Python, 모바일, 블록체인등의 강좌가 있다. 6. 구름에듀 (무료/유료) ★★★ : https://edu.goorm.io/  인터넷강의 플랫폼. 쓸만한 강의들이 많다.  7. 프리코드캠프 (무료/영어) ★★ : https://learn.freecodecamp.org/ 영어로 된 무료 강의 사이트. 동영상 강의가 아닌, 실습위주의 수업으로 되어있다.  유튜브 프로그래밍 동영상 강의 1. 김왼손의 왼손코딩 ★★★ : https://www.youtube.com/channel/UC0h8NzL2vllvp3PjdoYSK4g : 파이썬을 주로 강의하신다

코딩 테스트 - 종이 자르기

머쓱이는 큰 종이를 1 x 1 크기로 자르려고 합니다. 예를 들어 2 x 2 크기의 종이를 1 x 1 크기로 자르려면 최소 가위질 세 번이 필요합니다. class Solution { public int solution ( int M , int N ) { // M x N 크기의 종이 // 최소 가위질 횟수 // 모든 종이를 1x 1 로 자른다고 함 // 2 x 2 = 3번 // 3 x 2 = 아 가로는 그냥 싹둑 싹둑을 기준으로 하나 봄 (접어서 자르는것 안침) int answer = 0 ; answer = ( M * N )- 1 ; return answer ; } } 임시 저장에 게시해 놨었어서 저장용으로 업로드

개발 공부 - Spring / Spring boot / 질문 / 공부할 점 (추가)

Spring Framework : JAVA 애플리케이션 개발을 위한 포괄적인 인프라를 지원해주는 Framework Spring JDBC / MVC / Security / AOP / ORP / TEST 등 JDBC 설정 대신 JDBC 템플릿을 사용하면 빠르다! Spring Boot : Spring Framework의 더 나은 버전(?) 임 Starter Kit 가 있어서 "잘 하는 사람이 한다면" 개발 속도가 빠름  ㄴ (설정은 생각보다 할 게 많다고 생각함.) Maven 설정 같은 경우에도 Boot는 Starter Dependency 만들면 끝이라고 함! ㄴ (하지만 실무에서는 뭐 설정하는 요상한게 많아서 그렇지 않았음...) MVC 설정은 확실히 편했다. Security 설정도 (그 당시에도 웹 보면서 하긴 했는데) 편했음! 배포는 음... 실제로는 tomcat server랑 묶어서 배포하지 않고 다른 식으로 제공하는 회사에 다녀서 편한지 몰랐으나, tomcat이 내장된 jar로 배포할 수 있어서 편하다고 한다. 참조: https://incomeplus.tistory.com/344 - 질문 모음 -  1) Spring AutoWired 쓰는 이유 : 스프링 DI 에서 사용하는 어노테이션인데, 필요한 의존 객체의 타입에 해당하는 빈을 찾아 주입하기 위해 사용.  Bean을 자동으로 매핑해주는 개념이다. 근데 사실 이거 대신 생성자 주입을 권장함!  (의존성 주입으로부터 분리하기 위해서 사용) 참조 : https://life-with-coding.tistory.com/433 https://madplay.github.io/post/why-constructor-injection-is-better-than-field-injection 2) Spring Chunk : Chunk는 각 커밋 사이에 처리되는 row 수 따라서 한 번에 하나씩 데이터를 읽어서 Chunk라는 덩어리를 만든 뒤, Chunk 단위로 트랜잭션을 다룸. 참조 : https://joj

개발 공부 - 윈도우 함수

0.1. 윈도우 함수(Window Function)란? 우선 윈도우 함수가 무엇인지 아주 간단하게 설명하고 넘어가도록 하겠습니다. 윈도우 함수의 정의를 찾아보면 다음과 같습니다. 윈도우 함수(Window Function) = 행과 행간의 관계를 쉽게 정의 하기 위해 만든 함수를 이름 기존의 SQL 언어는 컬럼과 컬럼간의 연산, 비교, 집계에 특화되어있는 언어였습니다. 반면  행과 행간의 관계를 정의하거나 비교, 연산하는 것은 하나의 SQL 문으로 처리하기 어려웠죠. 이러한 부분을 쉽게 처리하기 위해 생겨난 것이 윈도우 함수입니다. 윈도우 함수의 생김새를 살펴보면 아래와 같습니다. *  함수 (컬럼)  OVER  ( Partition by  컬럼  Order by  컬럼) 함수  : Min, Max, Sum, Count, Rank 등과 같은 기존의 함수 or 윈도우 함수용으로 추가된 함수 (Row_number 등) OVER  : over 은 윈도우 함수에서 꼭 들어가야 하며 Over 내부에 Partition By 절과 Order by 절이 들어갑니다. partition by  : 전체 집합을 어떤 기준(컬럼)에 따라 나눌지를 결정하는 부분. order by  : 어떤 항목(컬럼)을 기준으로 순위를 정할 지 결정하는 부분 적용할 함수와 Over 절은 윈도우 함수에서 필수적으로 사용되며, 어떤 결과를 만들어낼지에 따라 partition by 와 order by 절을 사용하게 됩니다. group by 와 윈도우 함수의 가장 큰 차이는  '집약'의 과정이 존재하는가?  입니다. 예시를 활용해 이해를 해봅시다. < group by 를 사용한 경우> select address, count ( * ) from address group by 1 ; group by 의 경우 < 윈도우 함수를 이용한 경우 > select address , count ( * ) over ( partition by address) from addre