개발일지 44

mvc디자인 패턴

mvc패턴은 Model, View, Controller의 약자이다. 이 패턴이 필요한 예시로 만약 spring mybatis을 사용하여 back을 만들었고, front를 jsp로 만든 웹이 있다. 하지만 어느 순간 웹을 앱으로 만들어야 할 순간이 왔다. (하이브리드 앱으로 만들 수 있기도 하다.) 이러한 경우 이 디자인 패턴이 도움이 된다. jsp로 만든 view를 java안드로이드, 플러터, 리엑트 네이티브 등으로 바꿀 수 있다. 그 이유는 model(back)과 view(front)를 controller로 분리하였기 때문이다. 또 간단한 이미지 처리 같은 작업은 model까지 갈 필요 없이 controller에서 처리하여 더 빠른 처리 속도를 보여준다. Model은 데이터를 직접 받아오는 back의 ..

동기적 처리와 비동기적 처리

대부분의 프로그램 언어가 위에서 아래로 쓴 코드를 읽고 중간에 오류가 있으면 오류를 보낸다.(동기적 처리 == 순차적 처리) 여기서 문제가 일어날 수 있다. 만약 내가 웹을 만드는 중 데이터를 처리해야 하는 경우가 발생한다. 코드를 다 만들었는데 원하는 데이터가 안 오면, 그다음 코드로 넘어가지 않아 서버나 화면이 나오지 않는다.(json을 사용하여 정보를 받을 경우 try/catch문을 구현하라고 나오기도 한다. 하지만 try/catch는 다음 코드로 넘어가 데이터가 도착해도 다시 돌아오지 않는다.) 이를 막고자 데이터가 도착하지 않아도, 다음 작업을진행하도록 하는 문법이 비동기적으로 처리하는 문법이다. 데이터가 도착하면 넘어간 부분으로 돌아와 데이터가 필요한 곳에 그 데이터를 집어넣어 페이지를 완성한..

yield return

yield를 알려면 IEnumertor/IEnumerable을 알아야 한다. IEnumertor는 컬렉션에서 값을 반환하는 것이고, IEnumerable이 그 값이다. public interface IEnumerator { object Current { get; } bool MoveNext(); void Reset(); } 지금은 foreach를 사용하기 때문에 이 인터페이스를 구현하여 사용하는 것은 권장되지 않는다. 그렇지만 unity에서 yield return을 사용하기 때문에 그 개념은 알고 있는 것이 좋다. yield return은 IEnumertor/IEnumerable의 간단한 표기이다. 그래서 직접 IEnumertor/IEnumerable을 구현할 필요가 없다. yield return은 비동..

개발일지/unity 2022.02.07

무한 달리기 게임 알고리즘

무한 달리기 게임은 대표적으로 3가지 방법을 쓴다. 1. 캐릭터는 가만히 있고, 배경이 움직인다. 2. 캐릭터가 움직이며 지나온 구역을 지우고 새로운 구역을 만든다. 3. 캐릭터가 움직며 전에 만든 다리를 재활용한다.(이 경우 위의 방법보다 더 빠른 속도가 나온다.) 2번째의 핵심 알고리즘은 for문을 사용하여 생성하거나 update문 안에 yield return을 사용하여 계속 생성한 후 지나온 길은 삭제하거나 보이지 않게한다 3번째의 핵심 알고리즘은 캐릭터가 지나온 거리가 지나는 막대의 최고 x좌표보다 클 경우 큐로 저장해놓은 다리를 마지막에 다시 사용하는 알고리즘이다.

개발일지/unity 2022.01.21

큐(queue)와 스택(stack)

큐와 스택은 둘 다 배열이다. 일반적인 배열과는 다르게 배열에 넣는 순서와 나오는 순서가 정해진 특별한 배열이다. 스택(stack)은 아래의 그림처럼 작용한다. 배열에 넣을 때는 push함수를 쓰고, 뺄때는 pop함수를 쓴다. 여기서 스택의 특별한 성질이 나오는데 LIFO(Last In First Out)구조이다 . 한마디로 마지막에 넣은 것이 먼저나오고 처음 넣은 것이 마지막에 나온다는 것이다.(총의 탄창같이) 큐(queue)는 아래의 그림처럼 나온다. 배열에 넣을 때는 enqueue함수를 쓰고, 빼낼 때는 dequeue를 사용한다. 큐는 FIFO(First In First Out)구조로 처음에 넣은것이 처음으로 나온다.(종이컵 디스펜서처럼) 처음에는 이 그림처럼 위에서 아래로 또는 오른쪽에서 왼쪽으로..

CORS오류 해결

웹의 프론트 엔드를 대발하는 중 프론트에서 데이터를 받아 와 정보를 뿌려야 하는 일이 있었는다. 하지만 요청을 해도 그 요청의 리턴값이 안 나온다. 그래서 개발자 모드로 콘솔을 봤더니 cors오류를 해결하라고 메시지를 보냈다. 교차 출처 리소스 공유(Cross-origin resource sharing, CORS), 교차 출처 자원 공유는 웹 페이지상의 제한된 리소스를 최초 자원이 서비스된 도메인 밖의 다른 도메인으로부터 요청할 수 있게 허용하는 구조이다. 웹페이지는 교차 출처 이미지, 스타일시트, 스크립트, iframe, 동영상을 자유로이 임베드할 수 있다. 특정한 도메인 간(cross-domain) 요청, 특히 Ajax 요청은 동일-출처보안정책(SOP)에 의해 기본적으로 금지된다. 출처 : https..

배열에서 LINQ사용

LINQ는 마이크로소프트 사에서 만든 메모리DB이다. 이는 하드디스크에 저장된 일반 DB와 달리 빠른 속도가 장점이다. 하지만 그 결과값을 출력해야 한다. 예를 들어, 여기 2차원 배열이 있다. int[,] table = new int[2, 3]; //c#에서는 [,] 배열과 [][] 배열은 다른 배열이다. table[0, 0] = 1; table[0, 1] = 2; table[0, 2] = 3; table[1, 0] = 4; table[1, 1] = 5; table[1, 2] = 6; for(int i = 0; i

개발일지/c# 2022.01.12

c# windowForm web browser version up(C# 브라우저 버전 올리기)

c# 을 사용해 윈도우 프로그램을 만들고 있다가 예상치 못한 문제를 만났다. 기본적으로 윈도움 폼에서 제공하는 web browser의 버전은 ie8버전이었다. (컴퓨터에 따라 다를 수 있다.) 그래서 html5와 최신 css를 이용한 웹페이지가 안 된다. 하필 프로그램의 개발은 거의 끝난 상황에서 윈도우에서 재공하는 webview2를 이용해 함수를 고칠 수도 없었다. 그래서 버전을 올려야한다는 결론이 나왔다. 만약 이러한 문제를 격는 사람이 있을 수 있어 글을 적는다. namespace IEVersionUp { public partial class Form1 : Form { private const string InternetExplorerRootKey = @"Software\Microsoft\Inter..

개발일지/c# 2022.01.06

ERC721을 사용한 NFT 코드 이해

여기서 4개의 장부가 중요하다.(mapping) _tokenOwner 는 토큰아이디로 그 토큰 주인의 주소를 적는 장부이다. _tokenApprovals 는 토큰 아이디로 그 토큰을 허용받은 주소를 적는 장부이다. _ownerTokenCount 는 주소가 소유한 토큰의 개수를 적는 장부이다.(그냥 알고리즘을 사용할 수 있지만, 가스비를 생각해 장부로 만든다.) _operatorApprovals 는 소유자가 다른 사람에게 권한을 승인한 여부를 적는 장부이다. 여기서 중요하다고 생각하는 장부는 _tokenOwner와 _ownerTokenCount가 중요하다고 생각한다. 그 이유는 중요한 함수인 mint(생성), safeTransferFrom(안전한 주소 변경), transferFrom(실재 주소 변경), b..

GAN 와 style transfer 란 무엇인가?

gan는 Generative Adversarial Networks의 약자로 적대적인 두 네트워크가 생성과 검증을 반복하며 사실에 가까운 이미지를 만드는 알고리즘이다. 입력을 넣으면 여기서 스타일을 뽑아 컨텐츠에 스타일을 적용하여 새로운 출력값을 뽑아내는 알고리즘이다. style transfer 는 입력된 컨텐츠에 입력된 스타일로 새로운 결과값을 만드는 알고리즘이다. 입력으로 스타일과 컨텐츠를 입력하면 컨텐츠에 스타일을 더하여 컨텐츠에 스타일이 혼합된 결과가 나온다. *아직 공부하는 중이라 잘못된 내용이 있을 수 있습니다. 잘못된 부분을 지적해주시면 수정하겠습니다.