이전 글에서 Critical Section에서 동기화를 하기 위한 소프트웨어적인 해결 방법을 알아봤었다. Mutual Exclusion, Progress, Bounded Waiting 세가지 요구사항을 만족시켜야 Critical Section에 대한 문제를 해결할 수 있다. 이는 일종의 lock으로 볼 수 있는데, 이번 글에서는 하드웨어적으로 lock을 구현하는 방법에 대해 알아보자. Synchronization Hardware 하드웨어적으로 Critical Section 문제를 해결하기 위한 제일 간단한 방법은 비선점형 커널을 사용하는 것이다. 비선점형 커널을 사용하여 프로세스가 Critical Section안에 있을 때 interrupt되지 않게 하면 된다. 하지만 응답성이 나빠서 real-time ..
개요 Garbage Collector(GC)는 Heap 메모리에서 참조되지 않는 객체를 식별하여 메모리에서 삭제하는 기능이다. JVM은 GC를 수행하기 아래의 과정을 거친다. GC Steps Marking 메모리 중 어떤 부분이 사용되지 않고 있는지 체크하는 단계이다. 아래 그림 1을 참고하자. 모든 메모리를 체크해야한다면 GC에게 큰 부담이 될 수 있다. JVM은 이를 해결하기 위해 세대별로 메모리를 구분하여 GC를 따로 적용하는 아이디어를 채택하였다. 이는 뒤에서 설명하겠다. Normal Deletion 이 단계는 Marking으로 찾아낸 비참조 객체를 삭제하는 단계이다. 객체 삭제 후 메모리는 아래 그림 2와 같다. 삭제 후에 생기는 빈 공간은 Memory Allocator가 참조하고 있어서, 메모..
Vue를 하며 웹팩 설정을 간단하게 정리해 놓는다. 웹팩은 모듈 번들러로서 서로 의존성이 있는 것들끼리 하나로 묶어주는 역할을 한다. 따라서 여러개의 파일을 브라우저에서 로딩하지 않아도 된다. 번들링을 시작할 지점(entry), 번들된 결과물을 놓을 위치(output)을 정하고, 파일을 어떤 로더로 부를지, 어떤 플러그인으로 결과물을 처리할 지 정할 수 있다. webpack js파일 module.exports에 entry, output, loader, plugin을 정의하여 사용한다. 예시로는 아래 코드와 같다. const path = require('path'); const UglifyJSPlugin = require('uglifyjs-webpack-plugin'); const webpack = req..
프론트엔드와 백엔드를 나눠서 관리하기 위해 여러개의 모듈로 이루어진 Maven 프로젝트를 구성하는 방법을 알아봤다. Maven에서 다중 모듈을 사용하기 위해선 아래처럼 modules 태그를 사용하면 된다. frontend backend 위와 같이 frontend, backend 모듈 두개를 만든다면 아래 그림 1과 같이 프로젝트 폴더가 구성될 것이다. 이 때 빌드를 하면, pom.xml에서 modules에 넣은 모듈 순서대로 빌드가 된다. 각 모듈의 pom.xml에서 artifactId가 그 모듈의 이름이 되므로 주의하자.
윈도우에서 git bash 등을 사용하여 repository에 접근할 때 암호를 한 번 입력하면, 다시 입력하지 않아도 된다. 그런데 gitlab이나 github 등에서 암호를 변경하면 잘못된 이름이나 비밀번호를 입력했다는 표시와 함께 git 저장소에 접근을 못한다. 이럴 때 윈도우에 자동저장된 암호를 변경해야한다. 실행 -> "자격 증명 관리자" 입력 및 실행 자격 증명 관리자를 실행하면 아래 그림 1과 같은 화면이 나온다. 위 화면에서 자동 저장된 git 계정의 암호를 변경하면 된다.
JVM 관련해서 까먹고 자주 찾는 것 같아 기록을 해둔다. JVM 구조에 대해 자세히 알기 위해선 위 그림 1의 구조를 알고 있어야 한다. 1. Class LoaderJava의 컴파일러가 자바의 소스코드(.java 파일)를 빌드하면 바이트코드 파일(.class 파일)이 생성된다. 각 운영체제의 JVM의 Class Loader가 이 바이트코드 파일을 Runtime Data Areas에 로딩하여 프로그램을 구동한다.Class Loader의 로딩은 런타임에 일어나는데, 클래스에 처음 접근될 때 일어난다. 이를 이용해 Lazy Loading Singleton 같은 것들을 구현하기도 한다. 참고로 Class Loading 시간엔 thread-safe하다. 2. Execution EngineClass Loader가..
프로그램에서 Log를 남기는 여러가지 방법이 있다. 가장 쉽고 많이 사용하는 방법이 콘솔에 남기는 것인데, 보기가 까다롭다. 로그를 위한 여러 라이브러리가 많지만 라이브러리를 사용하지 않아도 자바에서 제공해주는 로그 클래스가 있다. Logger 클래스는 JDK 1.7부터 제공한다. 별다른 설정없이 사용한다면, 에러나 경고가 생겼을 때 콘솔에 남는 모양새로 똑같이 로그가 콘솔에 남게 된다. 이를 제대로 사용하기 위해선 Logger에 추가로 설정을 해줘야 한다. 1. Logger 기본 기능 Logger는 계층구조로 되어있다. default로 있는 Logger는 global로 모든 다른 Logger의 부모이다. 우선, 기본으로 있는 global Logger를 사용해보자. 아래처럼 Logger.getLogger..
404, 500 등 에러가 발생했을 때 처리할 페이지를 만드는 방법을 알아보자. web.xml에 URL 매핑에러가 발생했을 때 어떤 URL로 redirect 할 것인지 web.xml에 작성할 수 있다. Servlet 버전 3.0 이상이어야 이용 가능한데, 요즘엔 걱정 안해도 될 것 같다. 혹시라도 그 아래 버전을 사용하고 있다면 다른 방법을 찾아보자.아래처럼 error-page 태그 하위에 어떤 에러인지, 어디로 매핑할지를 작성할 수 있다. /errors 위와 같이 작성하면 default로 사용할 에러 처리 URL을 만든 것이다. 만약 404, 500을 따로 처리하고 싶다면 아래처럼 에러 종류와 함께 error-page 태그를 여러개 작성하면 된다. 404 /error/no-resource 500 /er..
- Total
- Today
- Yesterday
- unity
- Bin
- @Component
- MySQL
- Linux
- spring batch
- @Qualifier
- thymeleaf 변수 인식
- 클로저
- thymeleaf cannot resolve
- chunk
- @Bean
- Closure
- Express
- Check point within polygon
- Bean
- Barycentric coordinates
- @Autowired
- nodejs
- spring
- npm
- mybatis
- JavaScript
- Tasklet
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |