분류 전체보기 86

락, 트랜잭션과 작업크기, 락대기, 교착상태

1. 락 스레드는 공유 자원을 사용하기 때문에 데이터의 정확성을 지키기 위해서는 각각의 스레드를 원자적으로 만들어야 한다. 원자적: 더이상 쪼개질 수 없고 한 스레드가 다른 스레드를 방해할 수 없음. 각각의 스레드를 원자적으로 만들기 위해서는 상호 배제 메커니즘이 필요하다. 이 상호 배제 메커니즘을 달성하게 해주는 것이 어드바이저리 락이다. 위쪽 스레드들에서 락을 먼저 하면 아래쪽 스레드들은 락이 해제될 때 까지 기다려야 한다. 락이 어드바이저리인 이유는 락을 지킬지 안 지킬지를 사용자가 아닌 프로그램이 결정하기 때문입니다. 이럴경우 스레드의 충돌은 해결하지만 한 스레드의 작업이 느리다면 다른 스레드가 오래 기달려야하는 문제가 발생할 수 있어 멀티태스킹의 장점을 잃어버린다. 2. 트랜잭션과 작업 크기 성..

CS 2022.02.22

JPA 연관관계

1. 단방향, 양방향 단방향, 양방향은 객체에서만 의미있는 연관관계이다. 데이터베이스 테이블은 외래키로 양 쪽 테이블 조인이 가능합니다. 따라서 데이터베이스는 단방향이니 양방향이니 나눌 필요가 없습니다. 테이블끼리 연결된 순간 그냥 양방향이 되는 것이다. 그러나 객체는 참조용 필드(변수)가 있는 객체만 다른 객체를 참조하는 것이 가능합니다. 그렇기 때문에 두 객체 사이에 하나의 객체만 참조용 필드를 갖고 참조하면 단방향 관계, 두 객체 모두가 각각 참조용 필드를 갖고 참조하면 양방향 관계라고 합니다. 엄밀하게는 양방향 관계는 없고 두 객체가 단방향 참조를 각각 가져서 양방향 관계처럼 사용하고 말하는 것입니다. 어떤 연관관계를 선택할지는 프로젝트에서 어떤 객체에서 참조가 필요한지를 고민해보면 됩니다. 2...

자바 2022.02.20

동적 메모리 할당, 더 효율적인 메모리 할당, 가비지 컬렉션, 이중 연결 리스트

1. 동적 메모리 할당. 배열이 사용하는 메모리는 정적이다. 즉, 한번 정해진 메모리 크기에서 변화가 존재하지 않는다. 반면에 연결리스트의 노드들은 동적입니다. 즉, 이들은 필요에 따라서 자유롭게 생기기도 하고 사라지기도 합니다. 이러한 동적 메모리 할당은 메모리 영역중에서 힙공간을 사용합니다. MMU(메모리 관리 유닛)이 있는 시스템이라면 런타임 라이브러리가 프로그램에게 필요한 메모리 용량을 판단해 운영체제에게 요청한다. C언어에서는 대표적인 동적 메모리 할당 방법으로 malloc과 free함수가 있다. malloc의 작동 원리는 단일 연결 리스트 데이터 구조를 사용합니다. 전체 힙 공간은 처음에 한 블록으로 존재합니다. 이후 필요할때마다 필요한 크기만큼 블록을 만들어 할당한다. 프로그램이 free로 ..

CS 2022.02.16

CORS란 무엇인가? SOP란 무엇인가?

웹 생태계에는 다른 출처로의 리소스 요청을 제한하는 것과 관련된 두 가지 정책이 존재한다. 한 가지는 이 포스팅의 주제인 CORS, 그리고 또 한 가지는 SOP(Same-Origin Policy)이다. 1. CORS란? CORS는 Cross-Origin Resource Sharing의 줄임말로, 한국어로 직역하면 교차 출처 리소스 공유라고 해석할 수 있다. 여기서 “교차 출처”라고 하는 것은 “다른 출처”를 의미한다. 2. SOP란? SOP는 “같은 출처에서만 리소스를 공유할 수 있다”라는 규칙을 가진 정책이다. 그러나 웹이라는 오픈스페이스 환경에서 다른 출처에 있는 리소스를 가져와서 사용하는 일은 굉장히 흔한 일이라 무작정 막을 수도 없는 노릇이니 몇 가지 예외 조항을 두고 이 조항에 해당하는 리소스 ..

2022.02.13

파동에 올라타라, 범용직렬버스, 네트워킹

파동에 올라타라 우주에는 다양한 파장들이 있는데 그 중 가장 근본적인 파장은 사인파이다. 다른 모든 파장들은 사인파를 조합해 만들어낼 수 있다. 사인파의 형태입니다. 파장과 진폭은 위의 그림을 참조하세요. 1초에 몇번 반복되는 지가 주파수입니다. 다른말로 헤르츠, 초당 사이클이라 부릅니다. 파장과 진폭은 아래와 같은 관계를 가집니다. 따라서 주파수가 높아진다면 파장은 짧아집니다. 파장 = 파동속도/주파수; 우리가 데이터를 보내기 위해 사용할 파동을 반송파라고 합니다. 마크-스페이스 방식은 장거리 통신에는 적합하지 않다. 이 문제를 라디오를 가능하게 한 트릭을 적용해 해결할 수 있다. 반송파를 이용하면 장거리 통신이 가능하기 때문에 이 반송파를 마크-스페이스 파형으로 변화시키는 변조를 통해 해결할 수 있다..

CS 2022.02.09

SQL이란? MVC란?

1. SQL은 관계형 데이터베이스의 데이터를 관리하기 위한 프로그래밍 언어로 크게 3가지 종류가 있다. DDL(데이터 정의 언어), DML(데이터 조작 언어), DCL(데이터 제어 언어)로 구분된다. DDL은 각 릴레이션(테이블)을 정의하기 위한 언어로 CREATE, DROP, ALTER등이 존재한다. DML은 데이터를 관리하기 위한 언어로 SELECT, UPDATE, INSERT등이 있다. 마지막으로 DCL은 데이터의 관리, 접근권한을 다루는 언어로 GRANT, REVOKE 등이 있다. SQL을 예를 들어보자면 SELECT * FROM EMP WHERE NAME = "wonjae"; 이런 식으로 사용하는 프로그래밍 언어다. 하지만 스프링의 JPA를 사용한다면 이런 SQL언어를 통해 직접 DB를 제어하지..

웹/스프링 2022.02.06

JPA란 무엇인가?

1. JPA란? Java Persistence API의 줄임말로 JAVA가 제공하는 API 이며 SQL을 쓰지 않고 Method를 통해 DB를 조작할 수 있다. 자바로 영구적(Persistence)으로 데이터를 저장하고 다루기 위해서 필요한 API라고 이해하면 된다. JPA는 JAVA로 데이터를 영구적으로 저장하고 다루기 위해서 여러가지 기능을 가지고 있다. 2. JPA 기능 첫번째 기능은 JPA가 ORM 기술이라는 것이다. ORM은 Object Relational Mapping의 준말로 자바에서 만든 object를 데이터베이스의 테이블 형태로 변환하는 기술이다. 다시말해 우리가 JPA의 인터페이스에 따라서 object를 만들어서 데이터베이스에 보내면 자동으로 테이블로 바꿔준다. 두번째 기능은 JPA가 ..

자바 2022.02.06

메모리상의 데이터 배치, 프로그램 실행

1. 메모리상의 데이터 배치 메모리에는 명령어와 데이터가 존재한다. 데이터는 정적 데이터와 동적 데이터로 구분할 수 있다. 정적데이터는 프로그램 만들 때 크기를 알 수 있는 데이터들이고 동적 데이터는 프로그램 실행 전까지는 크기를 알 수 없는 데이터이다. 크기 고정 text: 실행 코드(명령어들) data: 전역변수(정적 데이터들) 동적으로 크기 변경 heap: 프로그램 실행중 동적으로 할당되는 메모리(동적 데이터) stack: 함수를 호출할 때 임시 데이터 저장 장소(함수 매개변수, 복귀 주소 및 지역 변수) 힙과 스택을 서로 충돌하지 않게 하는 것이 중요하다. 2. 프로그램 실행 어떤 함수는 여러 프로그램에서 쓸 만큼 유용한 경우가 존재한다. 이런 함수를 프로그램 만들 때마다 매번 새로 작성하기 보다..

CS 2022.02.05

시간표현과 상태기억

S-R래치를 통해서 정보를 기억하는 방법에 대해서 알 수 있었다. 여기서 더 나아가 원하는 시점에만 S-R래치를 작동시켜서 정보를 변경하거나 기억하는 방법이 존재한다. 1-1. 게이트가 있는 래치 NAND 결과표 ->하나라도 0이면 출력값은 1이고, 입력값이 1이 있다면 나머지 입력값에 따라 결과가 달라진다. 앞에서 배운 S-R래치에 게이트와 OR게이트 한쌍을 추가한 것. gate-bar값이 1일 때 set-bar와 reset-bar가 어떤 값이든지 상관 없이 출력은 그대로이다. (q = 1). gate-bar값이 0일 때 set-bar와 reset-bar값에 따라서 출력이 변한다. 우리는 이를 통해서 게이트가 있는 래치는 gate-bar값이 0일때(gate값이 1일때)는 입력값을 출력에 반영하는 것이 ..

CS 2022.01.29

Spring이란? Spring Boot란?

1. 스프링이란? 자바 기반의 웹 어플리케이션을 만들 수 있는 오픈소스 프레임워크다. 그러면 오픈소스는 뭐고 프레임워크가 뭔지 알아야한다. 2. 프레임워크란? 프레임 = 틀, 워크 = 동작한다. 즉, 틀안에서만 동작하는 것이다. 스프링은 바로 이 틀을 제공해주는 것이고 우리는 그 틀 안에서만 스프링을 사용할 수 있다. 3. 오픈소스란? 오픈소스는 소스코드를 공개한 것이다. 이 말은 우리들이 이 소스코드 내부를 뜯어 고쳐볼 수 있다는 것이다. 따라서 스프링도 실력만 있다면 마음대로 뜯어 고쳐서 사용할 수 있다. 4. 스프링은 IOC 컨테이너를 가진다. IOC는 (Inversior Of Controll)로서 제어의 역전이라는 의미이다. 주도권이 나로부터 스프링에게 넘어간다는 의미다. 원래 객체를 실체화하는 ..

자바 2022.01.28