전체 글 96

JPA기본편 - 엔티티 매핑 (객체와 테이블, 필드와 컬럼, 기본 키 매핑)

데이터베이스 스키마 자동 생성 jpa에서는 DDL을 애플리케이션 실행 시점에 자동으로 생성해준다. 데이터베이스 방언(dialect)을 이용해서 데이터베이스에 맞는 적절한 DDL을 생성한다. 그리고 이렇게 생성된 DDL은 개발 장비에서만 사용하고 운영서버에서는 사용하지 않는다. (사용하더라도 다듬고 사용) hibernate.hbm2ddl.auto 옵션 create 기존 테이블 삭제 후 다시 생성 (drop + create) create-drop create와 같으나 종료 시점에 테이블 drop update 변경분만 반영(운영 DB에는 사용하면 안됨!) validate 엔티티와 테이블이 정상 매핑되었는지만 확인 none 사용하지 않음. 운영장비에는 절대 create, create-drop, update를 사..

JPA 2023.04.01

JPA기본편 - 영속성 관리

엔티티 매니저 팩토리와 엔티티 매니저 고객의 요청이 올 때마다 엔티티매니저를 생성하고, 이 엔티티 매니저는 데이터 커넥션을 사용해서 db에 접근하게 된다. 영속성 컨텍스트란? 영속성 컨텍스트란, 엔티티를 영구 저장하는 환경이다. 논리적인 개념으로 눈에 보이지는 않고 엔티티 매니저를 통해서 영속성 컨텍스트에 접근한다. //엔티티를 영속성 컨텍스트에 저장한다. EntityManager.persist(entity); 엔티티 생명주기 1. 비영속 (new/transient) = 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 2. 영속 (managed) = 영속성 컨텍스트에 관리되는 상태 3. 준영속 (detached) = 영속성 컨텍스트에 저장되었다가 분리된 상태 4. 삭제 (removed) = 삭제된 상태 ..

JPA 2023.04.01

JPA기본편 - JPA소개와 기본 개념

JPA란? JAVA Persistence API. 객체와 관계형데이터베이스의 차이때문에 생기는 SQL의존적인 개발을 피하기 위해 사용하는 자바 진영의 ORM 기술 표준! 애플리케이션과 JDBC 사이에서 동작하며, 프로그래머가 객체중심으로 데이터베이스에 접근하며 개발할 수 있도록 도와준다. JPA 구동 방식 객체와 테이블을 생성하고 매핑하기 @Entity는 jpa가 관리할 객체를 알려주고, @Id는 데이터베이스의 pk와 매핑된다. //객체생성 @Entity public class Member { @Id private Long id; private String name; } //테이블생성 create table Member ( id bigint not null, name varchar(255), primar..

JPA 2023.03.31

스프링 MVC 1편

* 인프런 김영한님의 강의 "스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술"을 듣고 정리한 내용입니다. https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1 스프링의 전체구조 Dispatcher servlet? 스프링 mvc도 프론트 컨트롤러 패턴으로 구현되어있고 그 프론트 컨트롤러 역할을 하는것이 Dispatcher servlet이다. 스프링부트는 이 Dispatcher servlet을 서블릿으로 자동으로 등록하면서 모든 경로에 대해 매핑한다. (urlpatterns="/") 서블릿 호출 > FrameworkServlet에서 오버라이딩한 service()호출 > 여러 메서드가 호출 > DispacherServlet의 doDispatch..

Spring & SpringBoot 2023.03.29

Free-Space Management

free-space management 고정된 크기를 사용하는 paging을 이용하면 빈공간 관리가 쉬워진다. 하지만 가변크기일때는 빈공간 관리가 보다 어렵다. segment도 최대 크기는 일정하지만 그 최대 크기를 모두 segment로 사용하지는 않기 때문에 이것 역시 가변적이다. segment가 아닌 base and bound방식을 쓰더라도 한 덩어리의 크기는 가변이다. 또 이 segment를 사용하는 과정에서 남은 공간이 너무 조금씩 흩어져 있어서 사용할 수가 없는 external fragmentation현상이 생길 수 있다. 메모리의 할당과 반납 void *malloc(size_t size) //메모리 할당 요청 voif free(void *ptr) //메모리 반납 또한 메모리 할당을 요청하는 m..

운영체제 2023.03.28

Segmentation

segmentation 메모리 관리 기법중의 하나로, base and bound를 일반화한것이다. base and bound가 address space를 통째로 물리적 메모리에 배치하는 방식이라면, segmentation은 address space를 논리적으로 다른 공간으로 나누는 방식이다. segmentation은 virtual address space에서 사용하지 않는 빈공간을 굳이 물리적 메모리로 옮길 필요가 없다는 아이디어에서 시작한다. 즉, 가상주소공간에서 사용하지 않는 공간은 물리적 메모리에도 배치하지 않는다는 것이다. 따라서 듬성듬성 주소공간을 사용하는 sparse address space의 경우에는 segmentation이 유리하다. 16KB의 address space를 addressing..

운영체제 2023.03.28

Address Translation, base and bound

Address translation virtual address는 mmu라는 하드웨어에 의해 physical address로 변환된다.(hardware-based address translation) 설명을 위한 가정 1. 모든 메모리는 연속된 공간이다. 2. virtual address가 갖는 address space의 크기도 physical address보다 작다. 3. 모든 프로세스가 갖는 주소공간의 크기가 같다. virtual address space와 physical address 그림 속 프로세스의 address space에서는 코드가 oKB부터 들어있지만 물리적 메모리에서는 그와 다르게 32KB부터 시작한다. 다시 말해 프로그램이 메모리로 로딩되기 전, 기계어 코드를 생성할때 주소의 기준은 ..

운영체제 2023.03.27

The abstraction: Address space

메모리의 가상화, virtual address space virtual memory를 구성하는 핵심 요소. 오늘날의 컴퓨터는 프로그램 여러개를 cpu에 동시 탑재하여 time sharing하는 multiprogramming을 한다. 그리고 이 방법을 통해서 utilization(가용성), efficiency(효율성)을 높일 수 있다. 같은 프로그램으로 생성된 두개의 프로세스가 있다고 할 때, virtual address는 두 프로세스에서 모두 동일하다. (program이 동일하기 때문.) 하지만 물리적으로는 두 프로세스가 다른 곳에 있어야 한다. 따라서 각 address space마다 각 덩어리들이 물리적인 위치로는 어디로 갔는지에 대한 매핑정보(주소변환정보)가 필요하다. 다시말해 매핑정보는 프로세스마다..

운영체제 2023.03.27

Scheduling: Proportional Share

proportional share란? 비례 배분, 공정 배분(fair share)으로도 불린다. 정해진 비율대로 cpu를 나눠쓰게 하는 것에 집중한다. performance보다는 fairness에 초점을 맞추는 것이다. Lottery scheduling 말그대로 추첨권 티켓의 소유권에 따라서 cpu를 분배하는 스케줄링 기법이다. 예를 들어 프로세스 a,b가 75%. 25%로 cpu를 나눠쓰게 하고싶으면 a에게 티켓 75장을, b에게 25장을 주는 것이다. 그리고 추첨된 각 티켓을 가지고있는 프로세스가 당첨된 것이므로 그 비율만큼 cpu를 사용한다. Random number를 생성하며 진행되기 때문에, 시도할때마다 결과는 달라진다. (비결정적) Ticket Mechanisms 1. Ticket curren..

운영체제 2023.03.21

Scheduling: The Multi-Level Feedback Queue (MLFQ)

Multi-Level Feedback Queue의 목적 Multi-Level Feedback Queue (MLFQ)는 두가지의 목적을 갖는다. 1. turnaround time(반환시간) 최적화 반환시간 기준에 있어 SJF/STCF에 근접한 성능을 만드려고 한다. 기존의 SJF/STCF는 프로그램의 실행전에 그 실행시간을 스케줄러가 미리 알아야 한다는 현실적인 제약사항이 있었다. 이것을 극복하기 위해 MLFQ는 실제 미래는 모르지만 일단 작고 짧은 job에게 우선순위를 부여하는 방식을 시도하게 된다. 2. response time(반응시간) 최소화 반응시간 기준에 있어 Round Robin에 근접한 공평성을 구현하려고 한다. Round Robin은 반응시간은 좋지만 반환시간에 있어서는 매우 나쁘다. ML..

운영체제 2023.03.21