이전 글에서 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가 그 모듈의 이름이 되므로 주의하자.
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..
이미지 또는 파일을 리턴하고 싶을 때가 있다. 예를 들어 사용자가 http://도메인/api/images/1 같은 경로로 요청을 보냈을 때 이미지를 리턴하도록 만들어보자.@ResponseBody@ResponseBody 어노테이션을 사용함으로써 HTTP response body에 데이터를 그대로 담아서 전송할 수 있다. 이 어노테이션이 없다면 Spring은 View resolver를 통해 view 파일을 찾으려 할 것이다.직렬화된(byte[]) 이미지나 파일을 리턴하기 위해 @ResponseBody 어노테이션을 Request Mapping 할 메소드에 붙이도록 하자. @GetMapping("/get-text") public @ResponseBody String getText() { return "Hello..
- Total
- Today
- Yesterday
- mybatis
- JavaScript
- @Bean
- Closure
- spring batch
- Check point within polygon
- nodejs
- MySQL
- Linux
- Bin
- Bean
- unity
- Tasklet
- thymeleaf 변수 인식
- npm
- spring
- chunk
- @Qualifier
- Express
- thymeleaf cannot resolve
- @Component
- Barycentric coordinates
- @Autowired
- 클로저
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |