본문 바로가기

분류 전체보기

(119)
[Linux] Scheduling과 Context Switching Multi Tasking와 Multi Processing에서 언급한 OS의 Scheduling을 이해를 위한 글이다.Multi TaskingScheduling 대해서 보기전에 Multi Tasking을 살펴보자. 예제는 CPU의 core는 1개이고, process는 2개이다. Process A는 스레드가 1개, Process B는 스레드가 2개 있다. 프로세스는 실행 환경과 자원을 제공하는 컨테이너 역할이고, 실제 CPU 코어를 사용해서 코드를 하나 하나 실행하는 것은 스레드이다. 1. CPU의 Core가 Process A에 있는 Thread A1를 실행한다. 2. Process A에 있는 Thread A1의 실행을 잠시 멈추고 Process B에 있는 Thread B1를 실행한다. 3. Process ..
[Linux] Multi Tasking와 Multi Processing Multi Tasking단일 프로그램 실행예를 들어, 연산을 처리하는 CPU 코어를 하나라고 가정한다. 이때, 음악 프로그램으로 노래를 들으면서 워드 프로그램을 사용하면 어떻게 되나? 음악 프로그램을 종료된 이후에 워드 프로그램으로 문서 작업을 할수 있다. 프로그램의 실행은 프로그램을 구성하는 코드를 순서대로 CPU가 연산하는 것이다. 앞서 가정했듯이 CPU 코어가 하나라면, 한번에 하나의 프로그램의 코드를 실행할수 있다.  이러한 문제점을 해결하기 위해서, 하나의 CPU 코어로 여러 프로그램들을 동시에 실행하는 multi tasking 기술이 등장했다. Multi Tasking이란?컴퓨터 시스템에서 하나의 코어로 동시에 여러 작업(프로그램)을 수행하는 능력을 Multi Tasking이라 한다. 다만,..
[Java] Process와 Thread Process프로세스란?프로세스를 간단히 말하면 프로그램이 실행된것이다. 프로그램은 실행하기전에는 단순히 파일에 불과하다. 그러나 프로그램을 실행하면 OS로부터 실행에 필요한 자원(메모리)을 할당받아서 프로세스가 된다. 운영체제의 각 프로세스는 독립적인 메모리 공간을 갖고 있다. 이렇게 운영체제에 의해 프로세스들은 각기 격리되어 관리되기 때문에 하나의 프로세스가 충돌해도 다른 프로세스에 영향을 끼치지 않는다.  프로세스의 메모리 영역code: 실행할 프로그램의 코드가 저장되는 영역data: static 변수와 global 변수가 저장되는 영역heap: 동적으로 할당되는 영역stack: 메서드 호출시 생성되는 지역변수, 매개변수와 반환주소가 저장되는 영역프로세스의 역할프로세스는 메모리 공간, 파일 핸들, ..
[Java] TDD란? 실습을 통한 실천법 다음 주제는 채수원 저자님의 '테스트 주도 개발: TDD 실천법과 도구' 1장을 토대로 작성한 글이다. TDD란 무엇이고 개발 방식과 이에 따른 효과에 대한 내용이다. TDD 개요TDD의 정의일반적인 소프트웨어 개발 프로세스는 기능을 구현하고 테스트를 수행하는 형태이다. TDD(Test Driven Development)에서는 그와 반대로 진행된다. 기능을 구현하기 전에 테스트 케이스 작성부터 하는 개발 접근 방식이다.Test the program before you write it.켄트 벡(Kent Beck) 테스트 케이스는 테스트 할 경우의 수를 메서드 단위로 작성한 것이다. 이렇게 요구사항을 충족하는 기능을 구현하기에 앞서 테스트 케이스를 먼저 작성한다. 그리고나서 프로덕션 코드를 작성하고 테스트한..
[Spring] CGLIB로 트랜잭션 자동 관리 원리 구현 JDK Dynamic Proxy로 EntityManager 생명주기 자동 관리 원리 구현에서 프록시 객체를 통해 EntityManager 인터페이스의 메서드가 호출될때마다, 런타임에 EntityManager 구현체를 지연 생성 후 메서드 호출이 가능하도록 구현하였다. 이어서 트랜잭션 스코프를 나타내는 @Transactional 애노테이션을 붙인 메서드 내에서 EntityManager 구현체의 생명주기가 관리될수 있도록 구현할것이다.트랜잭션이 시작될 때 프록시 객체가 실제 EntityManager 구현체를 생성 후 트랜잭션을 마칠때 EntityManager 구현체를 닫히도록 로직을 작성하고, 트랜잭션 스코프 내에서 자동으로 트랜잭션이 처리되도록 구현하려고 한다.이를 통해, Spring과 JPA가 통합된 애..
[Spring] JDK Dynamic Proxy로 EntityManager 생명주기 자동 관리 원리 구현 이전에 EntityManger와 Persistence Context 내용에 이어서, JPA를 사용한 스프링 부트 애플리케이션(전반적인 Spring 생태계 이해 (9) - JPA)에서 트랜잭션을 시작하면, 런타임 시점에 어떻게 주입했던 EntityManager 구현체를 다시 생성해서 주입하는지 알아보기 위해서 작성한 내용이다. 그리하여 JPA에서는 이를 java로 어떻게 구현했는지 알아보았다.동적으로 객체 생성과 주입인터페이스로 동적으로 EntityManager 구현체 생성 및 주입웹 애플리케이션 계층구조에서 일반적으로 Service 클래스의 메서드를 트랜잭션 범위로 설정하며, Repository 객체 생성에 EntityManager 구현체를 주입한다. 이 트랜잭션 범위 마다 런타임 시점에 새로운 Enti..
[JPA] EntityManger와 Persistence Context 앞서 JPA(Java Persistence API)의 간략하게 개념과 적용하는 것에 대해 설명하였다. 이번엔 JPA에서 중요한 개념인 EntityManger와 Persistence Context에 대해서 알아보았다.EntityEntity는 데이터베이스의 테이블을 모델링한 클래스로서 본질적인 객체를 뜻한다. Entity 는 Web Application Layer에서 Domain Layer에 해당하며, 객체 지향 중심으로 설계하는 애플리케이션에서 데이터베이스의 테이블을 객체로 다루기 위해 Domain 객체로 표현한다. 그리하여 Domain을 Entity로 지정하면, 애플리케이션 로직은 Domain을 대상으로 DB에 반영할수 있게된다. 다음 코드에서 Member 도메인 클래스를 @Entity annotatio..
전반적인 Spring 생태계 이해 (9) - JPA JPA (Java Persistence API) 개념JPA 등장 배경데이터 저장 기술은 프로그래밍 패러다임과 다르게 데이터를 효과적으로 저장하기 위해서 발전해왔다. 그래서 애플리케이션 서버와 RDBMS(Relational DataBase Management System)가 상호작용 하기 위하여 SQL 중심적으로 개발해야되는 부분은 자바 애플리케이션 서버의 객체 지향 중심 설계 관점과 달랐다. SQL(Structured Query Language)은 관계형 데이터베이스에 정보를 구조적으로 저장하고 처리하기 위한 프로그래밍 언어이다. Java 애플리케이션은 상속, 인테페이스 구현, 참조를 통해 객체 끼리 연관관계를 맺는다. 반면, RDB(Relational DataBase)는 PK와 FK를 통해 연관관계를 ..