기본 콘텐츠로 건너뛰기

개발 공부 - MVC 단점

MVC 단점 : View 와 Model 사이 의존성이 높아짐 MVC와 MVVM의 차이는 컨트롤러의 역할을 나눈 것에 있음 MVC 장점 : 간단하게 구조파악과 확장을 할 수 있음 MVC 단점 : 뷰 모델 사이 의존성이 있어서 분리가 어렵고, 컨트롤러 코드량이 커지면 유지보수 시 힘들 수 있다. MVVM 장점 : 뷰와 모델 사이 의존성이 없어서 테스트 하기가 좋다 MVVM 단점 : 간단한 처리를 할 때에도 데이터 바인딩 추가 코딩이 필요하다. (XAML 같은 것에서 설정 했던 것 같음) MVC란? Model View Controller의 약자로, 코드를 구성할 때 각각의 역할에 따라 코딩하는 디자인 패턴입니다.   Model  응용 프로그램에 특정한 데이터를 캡슐화하고 해당 데이터를 조작하고 처리하는 논리와 계산을 정의 View 콘텐츠를 보여주는 화면 Controller 뷰 객체와 하나 이상의 모델 객체 사이에서 중개자 역할 사용자의 이벤트에 따라 모델 객체 또는 뷰를 변화시킴   MVVM이란? Model View ViewModel의 약자로, 코드를 구성할 때 각각의 역할에 따라 코딩하는 디자인 패턴입니다.  Model 응용 프로그램에 특정한 데이터를 캡슐화하고 해당 데이터를 조작하고 처리하는 논리와 계산을 정의 View 사용자에게 콘텐츠를 보여주는 화면 ViewModel 뷰모델은 모델의 데이터를 뷰에서 필요한 형태로 가공 후 컨트롤러에게 제공 컨트롤러에서 모델객체를 초기화해서 사용하던 것을 뷰모델로 분리  참조 : https://hongz-developer.tistory.com/132 https://learn.microsoft.com/ko-kr/dotnet/maui/xaml/fundamentals/mvvm?view=net-maui-7.0

개발 공부 - DFS , BFS

 코딩 테스트 시에 열심히 나오는 DFS랑 BFS를 개념상 알아야 정확하게 짤 것 같아서  코드 외 개념을 공부해 보았다. 1) DFS  깊이 우선 탐색인데, 스택이나 재귀함수를 이용해서 짠다. 이거는 모든 노드를 방문해야 할 경우 사용한다. (프로그래머스 코딩 테스트 할 때 자주 쓰면 코드 라인 수를 줄일 수 있다.) 제한이 있으면 가지치기, 백트래킹으로 경우를 줄일 수 있다. 만약에 재귀함수를 쓰면 종료조건 명시 안 하면 끝나지 않아서 오류난다.    1  2  3 45 같은 경우에는 1 -> 2 -> 4 - > 5 - > 3과 같이 간다. 근데 이거는 조건이 너무 많은 경우에는 그냥 생짜로 짜는게 복잡도가 덜 한 것 같다. 그치만 만약에 찾는 것이 깊숙히 있는 노드일 경우에는 유용하다. (맨 밑을 들어가서 보고 올라오니까...) DFS로 짜놓고, 종료 되기 전에 조건문을 걸어서 반복문으로 넣어주는 부분이 가지치기라고 부르는 것인가 보다. ㄴ 스택용 :  2) BFS 너비 우선 탐색인데, 계층별로 탐색을 한다.      1       2  3   45 6  7 같은 경우에는 1 -> 2 -> 3 -> 4 -> 5 -> 6 - > 7 같이 깊이 별로 탐색을 한다. 이거는 최단 경로 찾기, 인접한 노드 찾기 등에 사용된다고 한다. 이건 노드가 많고, 트리가 넓을 때 쓰면 아주 비효율적이라고 한다.  (깊이 들어가면 메모리 입장에서는 별로임) 참조 : https://velog.io/@leobit/DFS-BFS-%EB%B0%B1%ED%8A%B8%EB%9E%98%ED%82%B9Backtracking https://europani.github.io/algorithm/2021/08/19/008-DFS-BFS.html https://velog.io/@j...

개발 공부 - Java Static

 정적 멤버로 선언을 하려면 static을 사용하는데, 변수와 메소드를 만들 수 있다. 전역적으로 재사용하는 멤버, 잘 변하지 않는 변수 (상수는 아님!), 메소드를 사용할 때 사용한다. 단점은 메모리 차지가 많아서 프로그램이 무거워진다. 참조 : https://taewooblog.tistory.com/162

개발 공부 - List, Map, Set

JAVA Collection Framework의 상속 기본 구조 JAVA Collection Framework의 상속 기본 구조 맨날 ArrayList, STack, HashSet, HashMap 만 썼는데, 다른 것도 다양하게 써보고자 한다. List 순서가 있고 중복을 허용합니다. 인덱스로 원소에 접근이 가능합니다. 크기가 가변적입니다. List의 종류와 특징 LinkedList 양방향 포인터 구조로 데이터 삽입, 삭제가 빠르다. ArrayList보다 검색이 느리다.  ArrayList 단반향 포인터 구조로 데이터 순차적 접근에 강점을 가진다. 배열을 기반으로 데이터를 저장한다. 데이터 삽입, 삭제가 느리다. 데이터 검색이 빠르다. Map Key와 Value의 한쌍으로 이루어지는 데이터의 집합. Key에 대한 중복이 없으며 순서를 보장하지 않습니다. 뛰어난 검색 속도를 가집니다. 인덱스가 따로 존재하지 않기 때문에 iterator를 사용합니다. Map의 종류와 특징 HashMap Key에 대한 중복이 없으며 순서를 보장하지 않는다. Key와 Value 값으로 NULL을 허용한다. 동기화가 보장되지 않는다. 검색에 가장 뛰어난 성능을 가진다. HashTable 동기화가 보장되어 병렬 프로그래밍이 가능하고 HashMap 보다 처리속도가 느리다. Key와 Value 값으로 NULL을 허용하지 않는다. LinkedHashMap 입력된 순서를 보장한다. TreeMap 이진 탐색 트리(Red-Black Tree)를 기반으로 키와 값을 저장한다. Key 값을 기준으로 오름차순 정렬되고 빠른 검색이 가능하다. 저장 시 정렬을 하기 때문에 시간이 다소 오래 걸린다. Set 데이터의 집합이며 순서가 없고 중복된 데이터를 허용하지 않습니다. 중복되지 않은 데이터를 구할 때 유용합니다. 빠른 검색 속도를 가집니다. 인덱스가 따로 존재하지 않기 때문에 iterator를 사용합니다. Set의 종류와 특징 HashSet 인스턴스의 해시값을 기준으로 저장하기 때문에 순서를 보장...

개발 공부 - 웹 크롤러

웹 크롤러 ( web crawler )는 조직적, 자동화된 방법으로  월드 와이드 웹 을 탐색하는 컴퓨터 프로그램이다. 웹 크롤러가 하는 작업을 '웹 크롤링'(web crawling) 혹은 '스파이더링'(spidering)이라 부른다. 검색 엔진과 같은 여러 사이트에서는 데이터의 최신 상태 유지를 위해 웹 크롤링한다. 웹 크롤러는 대체로 방문한 사이트의 모든 페이지의 복사본을 생성하는 데 사용되며, 검색 엔진은 이렇게 생성된 페이지를 보다 빠른 검색을 위해 인덱싱한다. 또한 크롤러는 링크 체크나 HTML 코드 검증과 같은 웹 사이트의 자동 유지 관리 작업을 위해 사용되기도 하며, 자동 이메일 수집과 같은 웹 페이지의 특정 형태의 정보를 수집하는 데도 사용된다. 웹 크롤러는 봇이나 소프트웨어 에이전트의 한 형태이다. 웹 크롤러는 대개 시드(seeds)라고 불리는 URL 리스트에서부터 시작하는데, 페이지의 모든 하이퍼링크를 인식하여 URL 리스트를 갱신한다. 갱신된 URL 리스트는 재귀적으로 다시 방문한다. 웹 크롤러는 검색엔진 등에서 쓰이며, 웹 페이지나 정적인 자원으로부터 콘텐츠를 수집하는 장치이다. 웹페이지에 접속 후 웹페이지에 있는 링크들에 접속하여 재귀적으로 콘텐츠를 수집한다. 용례 검색 엔진 인덱싱 웹 페이지들을 모아 검색 엔진을 위한 로컬 인덱스를 생성한다. (googlebot) 웹 아카이빙 나중에 사용할 목적으로 웹에 있는 정보들을 장기 저장한다. 웹 마이닝 인터넷으로부터 유용한 지식/자원 등을 도출해낸다. (주주 총회/연차 보고서) 웹 모니터링 저작권/상표권 침해를 모니터링한다. 데이터의 규모에 따라 웹 크롤러 설계는 달라질 것이므로 설계할 데이터의 규모와 기능을 알아내야 한다. 참조 : https://velog.io/@monkb/%EC%9B%B9-%ED%81%AC%EB%A1%A4%EB%9F%AC-%EC%84%A4%EA%B3%84

개발 공부 - Web 템플릿 엔진

서버 사이드 템플릿 엔진 : JSP, Thymleaf, Velocity, Freemarker 타임리프는 Spring boot 공식 지원! 📌 서버 사이드 템플릿 엔진 (Server Side Template Engine) 서버에서 DB 혹은 API에서 가져온 데이터를 미리 정의된 Template에 넣어 Html을 그려서 클라이언트에 전달해주는 역할입니다. HTMl 코드에서 고정적으로 사용되는 부분은 템플릿으로 만들어두고 동적으로 생성되는 부분만 템플릿 특정 장소에 꺼워 넣는 방식으로 동작할 수 있도록 해줍니다. 🛠️ 동작 과정 클라이언트의 요청을 받는다. 필요한 데이터 DB나 API에서 가져온다. 미리 정의된 Template에 해당 데이터를 배치한다. 서버에서 HTML(데이터가 반영된 Template)을 그린다. 해당 HTML을 클라이언트에 전달한다. 서버에서 최종 html 결과를 만들어서 브라우저에 전달하기 때문에 주로 화면 이동이 많은 곳에서 사용됩니다. 대표적인 서버 사이드 템플릿 엔진으로는 Thymeleaf, JSP, Freemarker가 있습니다. 클라이언트 사이드 템플릿 엔진 : Mustache, Squirrelly 📌 클라이언트 사이드 템플릿 엔진 (Client Side Template Engine) HTML 형태로 코드를 작성할 수 있으며 동적으로 DOM을 그리게 해주는 역할입니다. 데이터를 받아서 DOM 객체에 동적으로 그려주는 프로세스를 담당하고 있습니다. 🛠️ 동작 과정 클라이언트에서 공통적인 프레임을 미리 Template로 만든다. 서버에서 필요한 데이터를 받는다. 데이터를 Template에 배치하고 DOM 객체에 동적으로 그려준다. URL이 바뀌어도 HTML을 다시 내려받지 않고 클라이언트에서 알아서 그리기 때문에 주로 단일 화면에서 화면이 변경되는 경우에 사용됩니다. 대표적인 클라이언트 사이드 템플릿 엔진으로는 Mustache, Squirrelly, Handlebars가 있습니다. 템플릿 엔진을 사용하는 이유 1. 많은 코드를 줄...

개발 공부 - Javascript 프레임워크

자바스크립트 프레임워크 비교 - 써본 것 -  1) JQuery : ajax, 비동기가 중요하다. 2) React : 타입스크립트 사용 시에 추천이었다!  3) Vue : 프론트엔드 쪽 프레임워크! 이것은 React보다 덜 써봤으나 추천한다고 한다... (난 아님) 4) Angular : 이것도 Javascript 전용으로 개발하자고 해서 공부했었으나 React로 우회했다. 5) Node.js : 브라우저 외에서 Javascript 동작하도록 하는 런타임 환경 (좋다!) 일반 정보 [ 편집 ] 프레임워크 비교 대상 버전 크기 라이선스 소스 언어 Angular 7 2018년 10월 18일 563 kB  (minified & compressed) MIT TypeScript AngularJS 1.5.0 2016년 2월 5일 144 kB  (minified & compressed) MIT JavaScript 아파치 플렉스 0.9.4 2018년 11월 5일 19 kB  (zipped) Apache ActionScript 3, MXML, CSS Backbone.js 1.2.1 2015년 6월 7.3 kB  (Packed and gzipped) MIT JavaScript Dojo 1.10.4 2015년 1월 18일 Variable. Base size: 41 kB  (minified & gzipped), 155 kB  (minified), 598 kB  (uncompressed) [1] BSD  &  AFL 자바스크립트  + HTML Ember.js 1.7.0 2014년 8월 19일 95 kB  (minified & gzipped), 340 kB  (minified), 1.5 MB  (uncompressed) MIT JavaScript Enyo 2.0.1 2012년 8월 30일 <25 kB  (...