일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 보안
- db
- 스프링부트
- bytecode
- 자바
- Spring Boot
- JPA
- BCI
- 자료구조
- 디자인 패턴
- ORM
- 웹
- Spring
- 데이터베이스
- 스프링 부트
- java
- rabbitmq
- mysql
- 파이썬
- django
- 파이썬3
- node.js
- 장고
- 안드로이드
- Python
- HTTP
- 웹 개발
- 스프링
- 개발
- python3
- Today
- Total
목록분류 전체보기 (104)
semtax의 개발 일지
1. 자바 제네릭(Generic) & 타입구조 소개 사실 자바 제네릭은, 초창기 자바에는 존재하지 않는 문법이었다. 그래서 타입이나 메서드 정보와 문법적으로 흡사함에도 불구하고, 해당영역이 아닌, 별도의 다른영역에 저장된다. 또한 제네릭같은경우 실제 실행되는 바이트코드에는 영향을 미치지 않기 때문에 별도의 영역에 저장을 해도 따로 문제가 생기지는 않는다. 자바 스펙문서상에서 제네릭의 문법은 아래와 같은 EBNF(Extended Bacus-Naur Form)으로 정의되어있다. 문법의 정의가 꽤나 복잡하다는것을 알 수 있다. TypeSignature: Z | C | B | S | I | F | J | D | FieldTypeSignature FieldTypeSignature : ClassTypeSignatu..
1. JVM은 어떻게 클래스 파일을 실행하는가? 일단 자바가 어떠한 방식으로 컴파일된 클래스 파일을 실행하는지 알아보자. 먼저, JVM(자바 가상 머신)이 컴파일된 클래스파일을 읽어서 메모리에 로딩을 한다. 그 다음에, JVM이 클래스 파일에 있는 바이트코드를 순차적으로 읽으면서 그에 맞는 동작을 수행한다(사실 요즘에는 JVM이 속도를 위해서 자주 사용하는 부분을 파악해서 Just in time 방식을 이용해서 해당 부분을 미리 Native Code로 변환을 해서 실행을 한다). 이때 자바에서는 이러한 바이트코드들을 실행하는 기본 단위가 스레드(Thread)이다. 또한, 자바에서는 각 스레드 별로 Execution Stack(JVM Stack)을 1개씩 가지고 있다. 또한 각 스레드에서 함수를 호출할시 ..
Expressjs에서 JSON Request Body 파싱하기 expressjs에서 웹 서비스를 제작 했을때, json으로 이루어진 Request Body를 받았을 경우, 요청값을 제대로 받아오지 못하는 문제가 발생한다. expressjs에서는 이러한 문제를 해결하는 방법으로 크게 2가지 방법을 사용할 수 있다. body-parser 모듈 사용(4.16 이전 버전). express.json() 사용 1. Express 4.x ~ 4.16 이전 버전인 경우(body-parser 사용) expressjs 4.16 이전 버전에서는 위와 같은 문제를 해결하기 위해 body-parser라는 외부 모듈을 사용해야 한다. 설치방법은 아래와 같다 npm install body-parser 설치한 모듈은 아래와 같이 사..
1. 개관 이번시간에는, Expressjs에서 지원하는 라우팅 기능과 HTTP Method에 대해서 알아보도록 하겠습니다. 2. Expressjs Routing 위키피디아에 라우팅이라는 단어를 쳐보면 전혀 관련 없어 보이는 네트워크 이야기가 나오고 최적경로와 같은 이야기가 나옵니다. 사실 Expressjs와 같은 웹 프레임워크에서 이야기하는 라우팅이라는 단어가 전혀 관련이 없어 보일수는 있지만 경로를 찾아준다는 맥락에서는 관계가 있다고 볼 수 있습니다. 즉, 웹 프레임워크에서의 라우팅은 사용자가 특정 URL에 접근을 하면 해당 URL에 대응되는 이벤트 핸들러를 찾아서 그에 대응되는 함수를 실행 해준다는 면에서 공통점이 존재합니다. Expressjs에서는 아래와 같은 방식으로 라우팅을 수행합니다 const..
1. 자바 클래스 구조 1-1. 자바 클래스 전체 구조 컴파일된 자바 클래스의 개략적인 구조는 아래와 같이 구성되어있다. 클래스 메타정보 버전, 식별자 등 소스파일 이름 상속관련 정보들 클래스 접근자에 대한 정보 클래스 내에 선언된 필드들의 목록 메서드와 생성자들의 목록 어노테이션 정보 상수 목록들(Constant Pool) 바이트 코드 내부 클래스 정보 그림으로 나타내면 아래와 같다. 1-2. Internal Name 컴파일된 클래스에서, 클래스 이름들은 소스코드와는 다르게 내부적으로 "java/lang/String"과 같은식으로 사용이 된다. 이를 Internal Name이라고 부른다. 참고로, 자바의 Class 클래스를 이용해서 해당 이름을 얻어올 수 있다. 1-3. 타입 및 메서드 명명 규칙 컴파..
개요 이번 장에서는 expressjs가 무엇인지를 알아보고, expressjs를 설치하고 간단한 웹서비스를 만들어 보는것을 진행해보도록 하겠습니다. Expressjs란? expressjs는 node.js 기반의 MVC 웹 프레임워크 입니다. node.js 기반의 웹 프레임워크중에서 사용자가 가장 많은 프레임워크 입니다. 프로젝트 환경 설정 먼저 프로젝트 진행 전에, 먼저 node.js와 npm이 설치되어 있어야 합니다. 아래 명령어를 이용해서 expressjs 를 진행 할 프로젝트 환경을 설정합니다. npm init 위 명령어를 실행하면 package.json이 생성되는데, npm(node package manager)에서 저 파일을 이용하여 각 패키지들의 의존성을 관리합니다. 또한, package.js..
자바 시스템 클래스 들을 ASM으로 변경하는법 아래와 같이 자기가 직접 정의된 클래스 로더를 만들어서 수행하면 된다. 대충 순서는 다음과 같다. ClassLoader와 Class 클래스를 이용해서 변경하려는 클래스를 읽어 옴 setAccessible함수를 이용해서 권한을 수정가능한 상태로 변경함 reflection을 이용해서 ClassLoader.defineClass 을 호출하여 변경하려는 클래스에 접근 접근한 클래스를 변경후 반환 아래는 예제 코드이다. private Class loadClass(byte[] b) { // Override defineClass (as it is protected) and define the class. Class clazz = null; try { ClassLoader ..
1. ASM을 어디에다 쓰는가? 난독화 도구 제작등에도 사용 됨. JIT만들때도 활용이 가능 함. 그 외 기존 class 파일의 바이트 코드 패치를 할때 사용 됨. AspectJ 같은데서도 쓰인다고 함 2. ASM 라이브러리의 전체적인 구조 2-1. 전체 구성 Tree Based API와 Event Based API를 제공함 Tree Based API는 Top-Down으로 자바 바이트 코드를 파싱하여 생성된 AST를 순회하는 방식으로 동작 Event Based API는 순차적으로 바이트코드를 읽어들어서 특정 구문이 발견되었을때(Ex: 클래스 정의, 변수선언 등) 해당 구문이 발생하면 이벤트 핸들러가 실행되는 방식임 2-2. 주요 모듈 org.objectweb.asm : 이벤트 based API를 제공 o..