[컴퓨터구조] 2. Instructions: Language of the Computer(4) - MIPS 명령어 형식 (Instruction Formats)
·
Computer Science/컴퓨터구조
2. Instructions: Language of the Computer(4) - MIPS 명령어 형식 (Instruction Formats)#Computer_Architecture명령어 표현명령어는 이진수로 인코딩되며, 이를 machine code라고 부릅니다.MIPS 명령어는 32비트 명령어로 인코딩됩니다.opcode의 경우 앞에 6bit를 보고 나머지 26비트가 어떤 필드로 구성되어 있는지 결정된다.add $t1, $s0, $s1add인지 아닌지(opcode), 어떤 레지스터를 활용하는지(5bit) X 3….이 내용에 대한 세부 내용들은 아래에서 다룸적은 수의 포맷으로 구성되어 있으며, 각 포맷은 연산 코드(opcode), 레지스터 번호 등을 포함합니다.Register numbers$t0 – $t..
[컴퓨터구조] 2. Instructions: Language of the Computer(3) - 컴퓨터 내부의 데이터 표현
·
Computer Science/컴퓨터구조
2. Instructions: Language of the Computer(3) - 컴퓨터 내부의 데이터 표현#Computer_Architecture상수 0MIPS에서는 레지스터 0 ($zero)에 항상 상수 0을 저장해놓는다. 레지스터 간의 값 이동에 사용할 수 있다.덮어쓸 수 없습니다.자주 사용하는 연산에서 유용하게 사용됩니다.예시: 두 레지스터 간의 이동에 사용add $t2, $s1, $zero // $t2 = $s1Unsigned Binary Integer기초 지식이니 부가 설명 X주어진 n비트 숫자는 다음과 같이 계산됩니다:범위는 0에서 +2^n - 1까지입니다.예: 32비트 부호 없는 정수의 범위는 0에서 4,294,967,295까지입니다.2의 보수 부호 있는 정수(2s-Complement ..
[컴퓨터구조] 2. Instructions: Language of the Computer(2) - MIPS 기본 연산 및 피연산자
·
Computer Science/컴퓨터구조
2. Instructions: Language of the Computer(2) - MIPS 기본 연산 및 피연산자#Computer_ArchitectureOperationsMIPS ISA에서는 연산을 어떻게 처리하는지 알아보자. 우리가 코드로 작성하는 연산들이 어떻게 명령어로 바뀌는지 이해해야, 하드웨어에서 동작하는 것을 이해할 수 있다.산술 연산(Arithmetic Operations)덧셈과 뺄셈은 3개의 피연산자를 사용합니다.두 개의 source와 하나의 destination 피연산자를 사용합니다.주의) dest 피연산자가 가장 먼저 온다.add a, b, c # a(dest)는 b(source) + c(source)모든 산술 연산은 이러한 형태를 가집니다.설계 원칙 1: 간단하게 하기 위해서는 규..
[컴퓨터구조] 2. Instructions: Language of the Computer(1) - ISA와 MIPS 아키텍처 소개
·
Computer Science/컴퓨터구조
2. Instructions: Language of the Computer(1) - ISA와 MIPS 아키텍처 소개이전 챕터에서 하드웨어와 소프트웨어의 인터페이스 역할을 하는 ISA(Instruction Set Architecture)에 대해서 잠깐 다뤘다.잠깐 복습하자면 CPU마다 ISA가 다르고, CPI는 ISA에 영향을 받는다고 배웠다. 현대 PC 프로세서에서 사용하는 ISA는 x86, 모바일 기기의 대부분은 ARM ISA를 사용하고 있다.이 책에서는 MIPS 아키텍쳐에 대해서 배운다. MIPS는 시스템 프로그래밍 시간에 배운 x86 아키텍쳐와 사실 거의 똑같은 구조를 가지고 있고, 명령어 이름과 문법에서의 일부 차이가 존재한다.Instruction Set명령어 세트는 컴퓨터가 실행할 수 있는 명령..
[Spring Transaction] 스프링과 문제 해결 - 예외 처리
·
Spring/Transaction
스프링과 문제 해결 - 예외 처리이전 챕터에서 체크 예외와 언체크 예외에 대해 다뤘다. 이를 이용하여, 예외 처리를 개선한다.체크 예외와 인터페이스서비스 계층은 POJO로 유지하는 것이 좋다. 하지만, 서비스 계층에서 현재 JDBC 체크 예외인 SQLException에 의존하고 있다.이전 챕터에서 다룬 방법을 적용하여, 리포지토리가 던지는 SQLException 체크 예외를 런타임 예외로 전환해서 서비스 계층에 던지면, 특정 기술에 의존하는 부분을 제거할 수 있다. 인터페이스 도입구현 기술에 강하게 결합되지 않도록 인터페이스를 도입하여 구현 기술을 쉽게 변경할 수 있도록 하자.기존에 처음부터 인터페이스를 만들지 않은 이유는, SQLException 이 체크 예외이기 때문이다.체크 예외를 사용하려면 인터..
[Spring Transaction] 스프링과 문제 해결 - 트랜잭션
·
Spring/Transaction
스프링과 문제 해결 - 트랜잭션이전 챕터에서 트랜잭션이 필요한 이유를 알아봤고, 트랜잭션 내에서 비즈니스 로직을 처리하는 코드를 작성했다.문제점들서비스 계층은 최대한 특정 기술에 의존하지 않고, 순수 자바 코드로 비즈니스 로직을 작성하는게 좋다.구현 기술들이 바뀌더라도, 비즈니스 로직은 최대한 변경 없이 유지되어야 함.계층을 나눔으로써 DB쪽 기술 Data Access Layer, UI쪽 Presentation Layer, 서비스 계층은 순수하게 유지 가능기존 서비스 계층의 MemberService 코드는 여러가지 문제점이 있다.JDBC 구현 기술이 서비스 계층에 누수되는 문제V1(트랜잭션 없는 버전): SQLException이라는 JDBC 기술에 의존한다는 점V2(트랜잭션 있는 버전): JDBC 기술에..
[Spring AOP] 스프링 AOP 적용 예시, 실무 주의 사항
·
Spring/AOP
스프링 AOP - 실전 예제, 실무 주의 사항예제 만들기지금까지 학습한 내용을 활용해서 유용한 스프링 AOP를 만들어보자.@Trace 애노테이션으로 로그 출력하기@Retry 애노테이션으로 예외 발생시 재시도 하기로그 출력 AOP@Trace 가 메서드에 붙어 있으면 호출 정보가 출력되는 AOP를 만든다.@Slf4j@Aspectpublic class TraceAspect { @Before("@annotation(hello.aop.exam.annotation.Trace)") public void doTrace(JoinPoint joinPoint) { Object[] args = joinPoint.getArgs(); log.info("[trace] {} args={}", jo..
[Spring AOP] 스프링 AOP - 포인트컷
·
Spring/AOP
스프링 AOP - 포인트컷애스펙트J는 포인트컷을 편리하게 표현하기 위한 특별한 표현식을 제공한다.포인트컷 지시자포인트컷 표현식은 execution 같은 포인트컷 지시자(Pointcut Designator)로 시작한다. 줄여서 PCD라 한다.포인트컷 지시자의 종류execution: 메소드 실행 조인 포인트를 매칭한다. 스프링 AOP에서 가장 많이 사용하고, 기능도 복잡하다.within: 특정 타입 내의 조인 포인트를 매칭한다.args: 인자가 주어진 타입의 인스턴스인 조인 포인트this: 스프링 빈 객체(스프링 AOP 프록시)를 대상으로 하는 조인 포인트target: Target 객체(스프링 AOP 프록시가 가리키는 실제 대상)를 대상으로 하는 조인 포인트@target: 실행 객체의 클래스에 주어진 타입의..
[Spring AOP] 스프링 AOP 구현
·
Spring/AOP
스프링 AOP 구현프로젝트 생성Spring Web 의존성 사용 Ximplementation 'org.springframework.boot:spring-boot-starter-aop' 의존성 추가예제 프로젝트 만들기이전 챕터에서 사용했던 서비스 계층과 리포지토리 계층 코드랑 같음. 메서드 호출에 대한 로깅만 추가해주자.간단한 테스트@Slf4j@SpringBootTestpublic class AopTest { @Autowired OrderService orderService; @Autowired OrderRepository orderRepository; @Test void aopInfo() { log.info("isAopProxy, orderService={}",..
[Spring AOP] 스프링 AOP 개념
·
Spring/AOP
스프링 AOP 개념AOP 소개 - 핵심 기능과 부가 기능애플리케이션 로직은 크게 핵심 기능과 부가 기능으로 나눌 수 있다. OrderService 초기 버전을 생각해보자.주문 로직을 실행하기 직전에 로그 추적 기능을 사용해야 하면, 핵심 기능인 주문 로직과 부가 기능인 로그 추적 로직이 하나의 객체 안에 섞여 들어가게 된다.부가 기능이 필요한 경우 이렇게 둘을 합해서 하나의 로직을 완성한다. 이제 주문 서비스를 실행하면 핵심 기능인 주문 로직과 부가 기능인 로그 추적 로직이 함께 실행된다.여러 곳에서 공통으로 사용하는 부가 기능보통 부가 기능은 여러 클래스에 걸쳐서 함께 사용된다. 예를 들어서 모든 애플리케이션 호출을 로깅 해야 하는 요구사항을 생각해보자. 이러한 부가 기능은 횡단 관심사(cross-cu..