2021 하반기, 2022 상반기 목표 올해+내년에 하고자 하는 목표 게임 프로그래밍 공부 시작 가장 막연하지만 취미로 게임 하나를 개발해보자 혜원언니가 추천해준 유니티 강의를 먼저 들어보고 개발 환경을 선택해볼 생각이다. https://www.inflearn.com/course/%EA%B3%A0%EB%B0%95%EC%82%AC-%EC%9C%A0%EB%8B%88%ED%8B%B0-%EA%B8%B0%EC%B4%88 Study Plan/Else 2021.11.08
[Web]Maven LifeCycle Maven은 정해진 라이프사이클에 의하여 작업 수행하며, 전반적인 프로젝트 관리 기능까지 포함하고 있다. 프로젝트의 빌드(Build)를 자동화해 주는 빌드 툴로서 컴파일하고 패키징하여 배포까지 자동으로 해주는 도구이다. Maven에서 제공하는 build 단계(LifeCycle)이 존재하며, 메이븐에 내장된 라이프사이클은 default, clean, site 3가지가 있다. * 라이프 사이클 mvn process-resources : resources:resources의 실행으로 resource 디렉토리에 있는 내용을 target/classes로 복사한다. mvn compile : compiler:compile의 실행으로 src/java 밑의 모든 자바 소스를 컴파일해서 target/classes로 복사 .. Web/Else 2021.11.04
[Web]multipart/form-data 프로젝트를 진행하면서 view에서 controller로 deb, tar, jpg 등의 파일을 보내주는 경우가 굉장히 많았다. 처음에는 임시로 String으로 이름만 받다가 서버 쪽에 전송을 해야하여 multipart/form-data를 이용하였다. 내가 작성한 소스를 먼저 살펴보고 개념을 하나씩 정리해 봐야겠다. .ftl 파일 설치 Modal DT 설치 파일 설치 파일을 첨부하세요. 저장 닫기 .js 파일 var form = $('#install_form')[0]; var data = new FormData(form); $.ajax({ type: "PUT", enctype: 'multipart/form-data', url: "/install", data: data, processData: false, c.. Web/Else 2021.10.28
[JavaScript]IP input mask IP를 입력받을 때 'xxx.xxx.xxx.xxx'의 형식만 입력이 가능하게 하였다. 이 때 사용한 것이 미리 정의된 형식을 보장하여 사용자가 입력을 할 수 있도록 도와주는 inputmask 라이브러리이다. input mask는 그 외 날짜, 숫자, 전화번호 등의 입력하는데에 유용하다. 1. 내가 사용한 코드는 다음과 같다. $("#ip").inputmask({alias: "ip", greedy: false}); ... $("#ip").inputmask('remove'); 2. 다른 방식의 코드 IP Address //input mask bundle ip address var ipv4_address = $('#ipv4'); ipv4_address.inputmask({ alias: "ip", greedy:.. Web/Front 2021.10.28
[Java]리소스 확인 앱이 구동되는 H/W의 리소스를 확인하여 관리하고자 할 때 Java가 제공하는 H/W 상태 파악을 위한 접근 가능한 class를 이용하였다. OperatingSystemMXBean라는 인터페이스의 CPU 상태 및 메모리 상태를 확인할 수 있는 기능을 이용했는데, 이 인터페이스는 Java 가상 머신이 실행 중인 운영 체제에 대한 시스템 속성에 액세스하기 위한 몇 가지 편리한 방법을 정의한다. https://docs.oracle.com/javase/7/docs/api/java/lang/management/OperatingSystemMXBean.html?is-external=true OperatingSystemMXBean (Java Platform SE 7 ) Returns the system load ave.. Programming 2021.10.28
[Spring Boot]Docker-compose docker-compose란 Docker에서 사용하는 컨테이너 공간을 한 곳에서 관리하기 위한 도구이다. yml파일로 작성하며, docker-compose명령어를 활용하여 여러 개의 컨테이너를 한 번에 관리한다. 장점으로는 1. Multiple isolated environments on a single host docker 자체가 isolated environment에서 동작하며 docker-compose가 여러 docker를 한 번에 실행시키는 것을 고려해보면, 당연한 장점 아닌 장점이다. 2. Preserve volume data when containers are created 볼륨을 보존한다. 이 말은 즉, 기존 컨테이너에 의해 관리되는 volume이 있을 때 새로운 컨테이너가 기존 컨테이너가 .. Web/Spring Boot 2021.10.27
[Spring Boot]Docker 이미지 빌드 이번 진행했었던 과제에 maven 플러그인을 사용하여 Spring Boot 애플리케이션을 Docker 이미지로 배포하는 내용이 포함되어 있었는데, 소스를 조금 이해하고자 빌드 환경을 공부하려 한다. 그 전에 Docker를 왜 쓰는지 와닿지 않아서 찾아봤는데 인프런에 잘 설명해준 영상이 있어 함께 포스팅한다. 정말 너~무 너무 잘 나와있어서 감사하다. 제목도 딱 내가 하고 싶던 질문(왜 굳이 도커를 써야하나요?)ㅋㅋㅋㅋㅋㅋ 시간되면 강의도 들어봐야지. https://youtu.be/3FcFL2C3ME8 https://www.44bits.io/ko/post/why-should-i-use-docker-container#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0-%EC%99%9C-%EB%.. Web/Spring Boot 2021.10.27
[Web]Custom Validator 자바스크립트에서 input 값에 영문,숫자,특수문자 입력만 허용하려고 validation을 작성할 때 사용했던 내용이다. formValidation을 사용하는데 문서 외에는 구글링해도 잘안나온다^___^… name: { validators: { notEmpty: { message: '아무거나 입력하세요.', trim: true }, regexp: { regexp: /^[A-Za-z0-9]*$/, message: '영문, 숫자만 입력해야합니다.' } } } 위 코드와 같이 regexp를 사용할 수도 있지만 커스텀 validator를 만들면 이렇게 정의할 수 있다. var alphabets = /^[a-zA-Z0-9,/,~,!,@,#,$,%,^,&,*,\-,_,+,=,?,>, Web/Front 2021.10.26
[Web]Freemarker문법 템플릿 엔진으로 Freemarker를 사용하는데 view 내에서의 문법들이 가끔 쓰이고 있어 시간내어 찾아보았다. 문서의 Reference 장 참고하면 문법 확인 가능한데, 특히 #assign이나 반복문, 조건문 위주로 많이 사용하고 있다. https://freemarker.apache.org/docs/ref.html Template Language Reference freemarker.apache.org freemarker는 자바 객체에서 데이터를 생성해서 템플릿에 넣어주면 freemarker에서 템플릿에 맞게 변환하여 HTML 파일을 생성한다. 다른언어도 쓸 수 있지만, JVM 위에서 돌아가므로 주로 자바 서블릿에서 많이 쓴다. Java EE에 종속적이라는 JSP단점을 극복했으며 Thymeleaf나 .. Web/Front 2021.10.26
[CS]UML과 Diagram 회사 내에서 전문가를 인증하는 프로젝트 과제를 수행했을 때 설계 내용을 발표자료에 담아내는 과정이 가장 어려웠던 기억이 있다. 선배 책임님께서 진행하시는 세미나에 참석해서 설명들은 내용을 바탕으로 조금 더 공부하고 정리하기로 했다. 먼저 key point를 정리하자면 아래와 같다. Class, Sequence, State Diagram Diagram reverse engineering UML(Unified Modeling Language) https://velog.io/@hanblueblue/UML-UML-%EA%B8%B0%EC%B4%88 [UML] UML 기초 UML기초 개념 및 UseCase Diagram 작성하기 velog.io UML의 기본적인 개념과 특징은 위 블로그에 자세히 나와있으니 참고하고.. Etc/Study 2021.10.25
[JavaScript]JSON 형식의 문자열과 Encode 함수 Object(객체)를 Json 문자열로 변환할 때 stringify()를 사용한다. 또한 데이터를 인코드하기 위해 btoa() 함수를 사용한다. var val = btoa(encodeURIComponent(JSON.stringify(row))); 반대로 Json 문자열을 Object로 변환할 때는 parse()를 사용하며 디코드하기 위해 atob()를 사용한다. var row = JSON.parse(decodeURIComponent(atob(val))); encodeURIComponent 함수는 모든 문자를 인코딩한다. URI로 데이터를 전달하기 위해서 문자열을 인코딩하는데 사용한다. Encoding 할 때 한글을 포함한 경우에는 정상적으로 변환되지 않기 때문에 데이터를 감싸는 역할을 한다. 인자명 데이.. Web/Front 2021.10.25
[Web]Url 주소 가져오기 웹 프로젝트에서 페이지에 해당하는 목록을 표시할 때 Url 주소를 가져와 인식하였다. 네이버 페이지로 예시를 보자면, 아래와 같이 책방에 관련된 페이지를 보고 있을 때 책방 메뉴를 시각적으로 표현해주는 기능을 구현했다. url을 주소를 가져오는 함수들은 다음과 같다. 예) http://localhost:8080/project/list.jsp 함수 예시 내용 request.getContextPath() /project 프로젝트 Path만 가져온다 request.getRequestURI() /project/list.jsp 프로젝트 + 파일경로까지 가져온다. request.getRequestURL() http://localhost:8080/project/list.jsp 전체 경로를 가져온다. request.S.. Web/Else 2021.10.25
[Web]사용자 정의 예외 클래스 앞서 예외처리하는 방법에 대해 공부했다면, 이번에는 그 예외를 정의한 부분에 대해 이해해보고자 한다. https://x-ojm.tistory.com/25 [Web]@ContollerAdvice, @ExceptionHandler 예외처리 @RestController public class MyRestController { ... @ExceptionHandler(NullPointerException.class) public Object nullex(Exception e) { System.err.println(e.getClass()); return "myService"; } } @Exce.. x-ojm.tistory.com 프로젝트에 사용된 예시로 해당 유저가 존재하지 않을 때 발생하는 예외다. Excepti.. Web/Else 2021.10.25
[JAVA]자바 스트림(Stream) 앱이 구동될 때 동작하는 ApplicationRunner 부분에서 Stream을 사용하고 있는데 Java에 익숙하지 않아 처음 접하는 낯선 개념이라 API를 찾아봤다. import java.util.stream.Stream; Stream은 컬렉션, 배열등의 저장 요소를 하나씩 참조하며 함수형 인터페이스(람다식)를 적용하며 반복적으로 처리할 수 있도록 해주는 기능이다. Stream을 이용하면 불필요한 코딩(for, if 문법)을 걷어낼 수 있고 직관적이기 때문에 가독성이 좋아진다. map() 함수 map은 요소들을 특정조건에 해당하는 값으로 변환해주어 특히 요소들을 대,소문자 변형 등의 작업을 하고 싶을떄 사용한다. 코드 안에서는 entity로 정의한 App이라는 DB table data 객체를 생성하는 .. Programming 2021.10.25
[Web]@ContollerAdvice, @ExceptionHandler 예외처리 @RestController public class MyRestController { ... @ExceptionHandler(NullPointerException.class) public Object nullex(Exception e) { System.err.println(e.getClass()); return "myService"; } } @ExceptionHandler같은 경우는 @Controller, @RestController가 적용된 Bean내에서 발생하는 예외를 잡아서 하나의 메서드에서 처리해주는 기능을 한다. 즉, 메소드 위에 선언되며, 등록한 예외를 Catch하여 처리할 수 있다. 위 예제와 같이 @ExceptionHandler라는 어노테이션을 쓰고 인자로 캐치하고 싶은 예외클래스를 등록하.. Web/Else 2021.10.22
[GO]Golang Golang 이란? 가비지 컬렉션 기능이 있고, 병행성(concurrent)을 잘 지원하는 컴파일 언어다. 병행성 Go를 이용해 프로그램들이 서로 소통하면서 상태를 공유하는 동시성(concurrency) 프로그램을 쉽게 만들 수 있다. 동시성이란 멀티스레딩, 병렬 컴퓨팅 뿐 아니라, 비동기성 입출력 또한 포함한다. 예를 들어, 이벤트 기반 서버와 같이, 데이터베이스나 네트워크 작업과 같이 시간이 많이 걸리는 연산을 하는 동안 프로그램이 다른 일을 하는 것을 말한다. 구문이 C와 비슷하지만 메모리 보안, 쓰레기 수집, 구조 타이핑, CSP 스타일 병행성을 제공한다. 간결한 문법과 빠른 컴파일의 시스템 프로그래밍에 적합되게 설계된 언어다. Go의 문법은 대체로 C와 비슷하다: 코드 블록들은 중괄호로 둘러싸고.. Programming 2021.10.22
[IPC]Shared Memory 응용 앞에서 공부한 예제 소스를 이해하여 스스로 새롭게 프로그램을 짠다. 이 때 cmd로 IPC_RMID를 전달하여 shmid를 clear 시켜준다. 또한 shmat함수의 아규먼트를 지정할 때 참고하자면 첫번째 아규먼트는 shmget을 이용해서 얻어낸 식별자 번호이며, 두번째 아규먼트는 메모리가 붙을 주소를 명시하기 위해 사용하는데, 0을 사용할경우 커널이 메모리가 붙을 주소를 명시하게 된다. 특별한 사항이 없다면 0을 사용하도록 한다. 세번째 아규먼트를 이용해서, 우리는 해당 공유메모리에 대한 "읽기전용", "읽기/쓰기가능" 모드로 열수 있는데, SHM_RDONLY를 지정할경우 읽기 전용으로, 아무값도 지정하지 않을경우 "읽기/쓰기 가능" 모드로 열리게 된다. ipcs -m 위 명령을 통해 공유메모 리를 확.. Etc 2021.10.22
[IPC]Shared Memory 공유 메모리(Shared Memory)는 IPC(Inter-Process Communication)의 한 가지 방법으로 프로세스간 통신이 필요할 경우 사용한다. 공유 메모리를 통한 통신은 둘 이상의 프로세스가 공통 메모리에 액세스 할 수 있는 개념으로 한 프로세스에서 변경한 메모리 공간의 내용을 다른 프로세스에서 접근할 수 있다. 공유 메모리의 생성 요청은 최초 공유 메모리 영역을 만드는 프로세스가 커널에 공유 메모리 공간의 할당을 요청함으로써 이루어지며 만들어진 공유 메모리는 커널에 의해서 관리된다. 만들어진 공유 메모리는 시스템을 리부팅하거나 직접 공유 메모리의 공간을 삭제시키지 않는 한, 공유 메모리를 사용하는 모든 프로세스가 없어졌다고 하더라도 공유 메모리의 공간은 계속적으로 유지되게 된다. 프로.. Etc 2021.10.22
[IPC]Semaphore 두 개 이상의 프로세스가 동시에 공유 메모리와 같은 공유 자원을 접근할때 동기화를 걸어주는 것을 목표로 한다. 운영 체계 또는 프로그램 작성 내에서 공유 자원에 대한 접속을 제어하기 위해 사용되는 신호를 말한다. 예를 들어, 공유 메모리에 여러 프로세스가 동시에 쓰기를 시도한다면 데이터가 손상되는 현상이 발생한다. 따라서 여러 프로세스 사이의 동작 순서를 지정해야 한다. 프로세스들이 공유 영역에 대한 접근 순서를 정하는 방법 중 하나가 세마포어이다. 병행 내지 병렬로 동작되는 둘 이상의 프로세서 사이에서 마이크로프로세서 시간이나 입출력 접속구와 같은 공유 자원을 동시에 사용할 수 없기 때문에, 한 프로세서가 사용하고 있는 동안에 세마포어를 세워서 다른 프로세서를 대기시키고 사용이 끝나면 해제시키는 방법으.. Etc 2021.10.22
[IPC]Semaphore C 예제 // 2021-04-07 kimso #include #include #include #include #include #include #include /* 세마포어 공용체 정의 */ union semun{ int val; struct semid_ds *buf; unsigned short *array; }; /* 세마포어를 생성하고 초기화 */ int initsem(key_t semkey){ printf("***initsem function ! \n"); union semun semunarg; int status = 0, semid; /* 인자로 받은 키를 지정해 세마포어 식별자 생성, return 값이 -1이고, errno 값이 EEXIST면 이미 존재하는 세마포어 식별자로 기존 식별자 읽어옴 */ sem.. Etc 2021.10.22