분류 전체보기
[시스템 프로그래밍] Bomb Lab Phase 1
[시스템 프로그래밍] Bomb Lab Phase 1
2022.12.21gdb bomb 명령어로 디버깅 모드에 진입한 후 disas phase_1 명령어로 phase_1 함수가 어셈블리어로 어떻게 작성된 지 확인해봤다. +11 : 함수를 호출한다. +16 : %eax 레지스터를 test한다. +18 : 결과가 같지 않으면 +25로 점프한다. +25 폭탄이 터진다. 음.. +11줄에서 문자열 두 개를 비교하고 %eax 레지스터에 결과를 넣게 되고, 이 결과에 따라서 폭탄이 터지거나 안 터지게 되는 것 같다. 좀 더 자세하게 살펴보자. test 명령어는 두 피연산자를 and 연산한다. jne 명령어는 ZF가 0일 경우 실행된다. 즉, +11줄에서의 결과가 1이면 폭탄이 터지지 않고, 0이면 폭탄이 터지게 됨을 알 수 있다. 그렇다면 당연히 +11줄에서 두 개의 문자열이 같은 경..
[JPA] 영속성 컨텍스트
[JPA] 영속성 컨텍스트
2022.12.21자바 객체와 관계형 데이터베이스를 어떻게 매핑해서 사용해야 할까? 실제로 JPA는 내부적으로 어떻게 동작하는걸까? JPA의 작동 원리를 제대로 이해하기 위해서는 영속성 컨텍스트에 대해 이해해야 한다. 영속성 컨텍스트는 엔티티를 영구적으로 저장하는 환경으로, 눈에 보이지 않는 논리적인 개념이다. EntityManager를 생성하면 이에 대응하는 PersistenceContext 가 생성된다. 엔티티를 처음 만들면 엔티티는 비영속 상태이다. persist 메서드를 사용하면 엔티티가 영속 상태가 되어 영속성 컨텍스트에 관리된다. 즉, em.persist() 메서드는 단순히 데이터베이스에 값을 저장하는게 아니고, 엔티티를 영속화함을 의미한다. 그런데 왜 이런 매커니즘을 도입했을까? 객체와 데이터베이스 사이에 영..
[JPA] 도입
[JPA] 도입
2022.12.21Java Persistence API의 약자로 자바 진영의 ORM 기술 표준을 의미한다. JPA는 인터페이스이고, 인터페이스를 구현한 여러 구현체가 있는데 그 중 하이버네이트를 가장 많이 사용한다. 객체는 객체대로, 데이터베이스는 데이터베이스대로 설계하고 ORM 프레임워크가 객체와 데이터베이스간 차이를 해결해 데이터베이스를 자바 객체를 다루는 것 처럼 사용할 수 있도록 한다. 아예 밑바닥부터 구현되는건 아니고, JDBC API도 적절하게 사용한다. Persistence 클래스는 yml, xml 등 설정 정보를 읽고 EntityManagerFactory 클래스를 만든다. 그리고 필요할 때 마다 EntityManager를 만들어서 사용하는 방식으로 동작한다. EntityManager는 JPA에서 애플리케이션..
[시스템 프로그래밍] Data Lab
[시스템 프로그래밍] Data Lab
2022.12.201. bitNor int bitNor(int x, int y) { return (~x) & (~y); // use de morgan law to use able operands. } 드모르간 법칙을 사용해 사용 가능한 연산자만으로 bitNor를 구현하자. ~(x | y) => (~x) & (~y) 2. float_neg unsigned float_neg(unsigned uf) { int res = (0x80
[C++] 예외처리
[C++] 예외처리
2022.12.18C++ 에서 를 include하면 특정 데이터 타입이 표현할 수 있는 최대 / 최소 범위를 구할 수 있다. int 나 long 타입으로 변수를 지정하고, 해당 데이터 타입이 표현할 수 있는 수를 넘어선 수를 저장하면 어떻게 될까? 코드를 실행하는 환경에 따라 다르지만, 이 경우는 undefined behavior이다. (언어에 정의 돼 있지 않다) unsigned의 경우는 좀 다르다. undefined behavior가 아니다. unsigned의 경우 표현할 수 있는 수를 넘어선 수는 wrap around로 처리된다. unsigned 데이터 타입을 다루지 않는 경우 항상 undefined behavior에 의존해서 프로그램을 작성할 수 없으니 오버플로우나 언더플로우가 발생할 수 있는 연산은 연산 전에 체..
[C++] Template
[C++] Template
2022.12.17C++은 Template을 통해 Generic Programming을 지원한다. (Compile time Polymorphism) (제네릭 프로그래밍은 데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있는 기술에 중점을 두어 재사용성을 높일 수 있는 프로그래밍 방식 - 위키백과) C++에서 Template은 class 와 function으로 나뉜다. 1. Class Template 클래스들이 여러 개 있는데 자료형만 다른 경우 template을 적용해 간단하게 표현할 수 있다. (template 선언 시 넘겨주는 type-parameter-key 값인 typename과 class는 같은 역할을 한다) 컴파일러는 Pair 와 Pair을 보고 template을 참고해 해당하는 ..
[C++] STL
[C++] STL
2022.12.15Standard Template Library. C++에 이미 정의돼있는 라이브러리를 의미한다. STL에는 데이터를 저장하는 객체인 Container / 여러 가지 편리한 메서드를 제공하는 Algorithm과 Functions / Container의 객체를 가리키는 Iterator 로 총 4가지 종류가 있다. 이 중 Container에 대해 살펴보자. 1. Array int arr[10]; 에서 사용하는 C-style 배열과는 다르다. 왼쪽과 같이 Random Access 방식으로 요소에 접근 할 때는 오류를 뱉지 않지만, 오른쪽과 같이 array STL을 사용해서 요소에 접근 시 오류를 뱉는다. 런타임 시간에 invalid index를 체크해준다. 2. vector vector 컨테이너 내부 요소들은 ..
[JavaScript] BOM
[JavaScript] BOM
2022.12.09Browser Object Model 으로 웹 브라우저에서 웹 페이지를 제외한 모든 객체들을 의미한다. 그림은 BOM의 구조를 보여준다. window 객체가 최상단에 위치하고 그 아래 document / screen / location / history / navigator가 위치한다. document는 Document Object Model 부분에서 자세히 알아봤으니.. 다른 요소들에 대해 알아보자. window 객체에는 전역 변수로 선언한 모든 요소들이 포함된다. 모든 객체의 근원이 되기 때문에 window를 생략해서 사용하기도 한다. (window.document.get... -> document.get...) screen screen 객체를 통해 화면의 크기와 지원하는 색상 등을 알 수 있다. l..
[CSS] Selector
[CSS] Selector
2022.12.081. 띄어쓰기 1 2 3 이 적용된다. 띄어쓰기 a b 는 a 내부에 있는 b 모두를 지정함. 2. + 3 이 지정된다. a + b 는 a 태그 아래 b 한개만 지정함. 3. ~ 3 4 가 지정된다. a ~ b 는 a 태그 아래의 b 모두를 지정함. 3. anchor a : b 는 a 태그를 b 할 때 { ... } 를 작동시킨다. 선택자와 결합해서 사용하는 경우가 많음. a:first-child 는 첫 번째 요소를 가리킴. 4. pseudo-element 왼쪽과 같이 첫 줄만 지정하거나 첫 글자만 지정하는 등 특정 부분을 지정할 때 사용한다. before와 after로 요소를 배치하는것도 가능함. 태그 없이 :: 만 사용해서 요소를 지정하기도 한다. 5. attribute selector 웹 크롤링 시..
[HTML] Media
[HTML] Media
2022.12.02웹 페이지 내부에서 이미지, 음악, 비디오 등 다양한 미디어를 표현할 수 있다. 1. Video 여러 format이 있지만 HTML 에서는 MP4, WebM, Ogg 형식만 지원한다. controls 속성으로 재생 / 정지 등 실행을 제어할 수 있는 장치를 해당 비디오에 추가한다. 브라우저가 첫 번째 source를 재생하지 못하면 다음 source를 재생하는 방식으로 동작한다. 태그 기반으로 동작하기 때문에 자바스크립트의 DOM을 사용해 비디오를 다룰 수 있다. video 태그에 여러 속성을 추가 할 수 있다. autoplay : 브라우저가 로딩됐을 떄 자동으로 재생하도록 설정한다. mute : 음소거 상태로 재생한다. track : 속성은 아니다. source 밑에 추가해 비디오의 자막을 설정한다. 2..
[HTML] Graphics
[HTML] Graphics
2022.12.01HTML의 canvas / svg 태그를 사용하면 웹 페이지 내부에 그림을 그릴 수 있다. canvas 태그를 사용해 지정한 위치에 선을 긋는 간단한 예시이다. canvas 태그를 사용할 때는 자바스크립트를 사용해서 그림을 그린다. 간단하게 선을 긋는 예시 뿐만 아니라 이미지, 원, 색상 등 다양한 그림을 표현할 수 있으니 필요할 때 찾아서 사용하자. svg 태그를 사용해 사각형을 그리는 예시이다. 자바스크립트 대신 HTML 태그를 사용해서 그림을 표현한다. 태그 기반이기 때문에 그림의 일부를 수정할 때 자바스크립트의 DOM으로 접근한다. svg는 태그를 사용해 그림을 표현하는구나 ~ 정도로만 머리에 넣고 이 정보를 인덱스로 필요할 때 찾아서 사용하자. canvas는 픽셀 단위로 그림을 표현해 확대 시 ..
[시스템 프로그래밍] 동적 메모리
[시스템 프로그래밍] 동적 메모리
2022.11.30메모리는 무한하지 않고, 많은 소프트웨어들이 메모리에 큰 영향을 받는다. 당장 백준 사이트에서 그래프 알고리즘 문제를 풀 때도 메모리를 효과적으로 사용하지 못하면 알고리즘을 제대로 작성했어도 맞았습니다를 받을 수 없다. 가상 메모리.. 캐시... 메모리에도 여러 종류가 있다. 다른 메모리들은 컴퓨터구조나 운영체제를 공부하면서 배우기로 하고, 이번에는 동적 메모리에 대해 자세히 살펴보자. C를 공부하면서 배웠듯 동적 메모리는 Heap 메모리 부분에 할당된다. malloc과 free 함수를 사용해 메모리를 할당받고 반환한다. 자바에서는 Garbage Collection이 있어 반환에 신경쓰지 않아도 되지만, C에서는 메모리를 사용한 후 반납 해 줘야 한다. 프로그램이 돌아갈 때 메모리를 살펴보면 위와 같은 ..