CAN과 CAN FD
·
자동차
개념   자동차 통신 기술 중 하나의 CAN 통신 그리고 차세대 통신인 CAN FD 통신에 대해 알아보자  자동차 통신 기술은 ECU와 센서간의 통신을 위해서 많이 사용된다. 물론 속도가 문제가 되지 않는 곳이면 LIN통신도 사용하고있다. 속도 제약이 있는 곳에선 FlexRay를 쓰기도 한다. LIN, CAN, FlexRay 모두 차량에서 많이 사용되는 통신 방법이다. 1. LIN: 가장 싸지만 속도가 느리다.2. FlexRay: 가장 비싸지만 안전하고 속도가 빠르다.3. CAN: LIN과 FlexRay 중간정도의 성능과 안정성을 가지고 있다.    Controller Area Network (CAN)은 차량 내부 네트워크로 가장 많이 사용되는 통신 프로토콜이다. CAN 프로토콜은 비용, 신뢰 성 측면에..
ASIL
·
자동차
정의ASIL(Automotive Safety Integrity Level)은 자동차 안전 무결성 수준을 나타낸다. 도로 차량의 기능 안전을 위해 ISO 26262 표준에 정의된 위험 분류 시스템이다.이 표준은 기능 안전을 "전기 또는 전자 시스템의 오작동 동작으로 인한 위험으로 인한 불합리한 위험이 없음"으로 정의한다. ASIL은 자동차 부품이 ISO 26262를 준수하기 위해 위험 가능성과 허용 가능성을 기반으로 하는 안전 요구 사항을 설정 한다.ISO 26262-A, B, C 및 D에 의해 식별된 4 개의 ASIL이 있다. ASIL  A는 가장 낮은 등급을 나타내고 ASIL D는 가장 높은 수준의 자동차 위험을 나타낸다.에어백, 잠금 방지 브레이크 및 파워 스티어링과 같은 시스템은 고과 관련된 위험이..
ISO 26262
·
자동차
ISO 26262 기능 안전 표준이란? 자동차 업계에서 제품 설계 및 테스트에 대해 표준화된 방식을 도입함에 따라 안전성 관련 절차에 대한 규제가 늘고 있다. ISO 26262는 자동차 부품에서 중요한 부분을 차지하는 중요한 전기 전자 (E/E) 시스템을 위한 기능 안전 표준이다. ISO 26262는 전기 및 전자 시스템의 일반 기능 안전 표준인 IEC 61508에서 파생된 것이다. 자동차 산업 전반의 복잡성이 증가하면서, 안전성 준수 시스템을 제공하기 위한 노력이 커지고 있다. 예를 들어, 최신 자동차는 스로틀 바이 와이어(throttle-by-wire) 같은 전기 신호 기반 시스템을 사용한다. 이는 운전자가 가속 페달을 누르면 페달의 센서가 전자 제어 장치에 신호를 보내는 것이다. 이 제어 장치는 엔..
CAN 통신
·
자동차
CAN 통신이란? CAN (Controller Area Network) 차량 내에서 호스트 컴퓨터 없이 마이크로 컨트롤러나 장치들이 서로 통신하기 위해 설계된 표준 통신 규격이다.  차량 내 *ECU(Electronic control unit)들은 CAN 프로토콜을 사용하여 통신한다.      CAN 특징  메시지 지향성 프로토콜(Message-Oriented Protocol) CAN은 노드의 주소에 의해 데이터가 교환되는 것이 아니라 메시지의 우선순위에 따라 ID(IDentifier)를 할당하고, 이 ID를 이용해 메시지를 구별하는 방식을 사용한다. 즉, 임의의 한 노드 A가 메시지를 전송했다면, A를 제외한 나머지 노드들은 A가 전송한 메시지가 자신에게 필요한 메시지인지를 판단(ID기반 판단)한다. ..
스프링 트랜잭션 전파 - REQUIRES_NEW
·
카테고리 없음
외부 트랜잭션과 내부 트랜잭션을 완전히 분리해서 사용하는 방법에 대해서 알아보자. 외부 트랜잭션과 내부 트랜잭션을 완전히 분리해서 각각 별도의 물리 트랜잭션을 사용하는 방법이다. 그래서 커밋과 롤백도 각각 별도로 이루어지게 된다. 이 방법은 내부 트랜잭션에 문제가 발생해서 롤백해도, 외부 트랜잭션에는 영향을 주지 않는다. 반대로 외부 트랜잭션에 문제가 발생해도 내부 트랜잭션에 영향을 주지 않는다. 이렇게 물리 트랜잭션을 분리하려면 내부 트랜잭션을 시작할 때 REQUIRES_NEW 옵션을 사용하면 된다. 외부 트랜잭션과 내부 트랜잭션이 각각 별도의 물리 트랜잭션을 가진다. 별도의 물리 트랜잭션을 가진다는 뜻은 DB 커넥션을 따로 사용한다는 뜻이다. 이 경우 내부 트랜잭션이 롤백되면서 로직 2가 롤백되어도 ..
트랜잭션 전파 (기본, 내부, 외부)
·
Spring
스프링이 제공하는 트랜잭션 전파에 대해서 알아보자. 외부 트랜잭션이 수행중인데, 내부 트랜잭션이 추가로 수행됨 외부 트랜잭션이 수행중이고, 아직 끝나지 않았는데, 내부 트랜잭션이 수행된다. 외부 트랜잭션이라고 이름 붙인 것은 둘 중 상대적으로 밖에 있기 때문에 외부 트랜잭션이라 한다. 처음 시작된 트랜잭션으로 이해하면 된다. 내부 트랜잭션은 외부에 트랜잭션이 수행되고 있는 도중에 호출되기 때문에 마치 내부에 있는것 처럼 보여서 내부 트랜잭션이라 한다. 스프링 이 경우 외부 트랜잭션과 내부 트랜잭션을 묶어서 하나의 트랜잭션을 만들어준다. 내부 트랜잭션이 외부 트랜잭션에 참여하는 것이다. 이것이 기본 동작이고, 옵션을 통해 다른 동작방식도 선택할 수 있다. 스프링은 이해를 돕기 위해 논리 트랜잭션과 물리 트..
트랜잭션 commit, rollback
·
Spring
@Slf4j @SpringBootTest public class BasicTxTest { @Autowired PlatformTransactionManager txManager; @TestConfiguration static class Config{ @Bean public PlatformTransactionManager transactionManager(DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } } @Test void commit(){ log.info("트랜잭션 시작"); TransactionStatus status = txManager.getTransaction(new DefaultTransactionAt..
Getter, Setter (심화)
·
Spring
Getter Setter를 사용하는 이유 객체의 무결성을 보장하기 위해 예를 들어, 만약 외부에서 몸무게라는 필드에 직접 접근한다면 0보다 낮은 값을 줄 수도 있다. 이 경우 객체의 무결성이 깨지기 때문에 이를 방지하기 위해 Getter/Setter를 사용하여 데이터의 무결성을 지켜준다. 🤔 무결성이란 무엇인가? 데이터의 정확성과 일관성을 유지하고 보증하는 것을 말한다. 🤔 Getter/Setter를 사용하면 데이터 무결성이 지켜지는가? Getter, Setter를 이용해서 데이터를 생성 및 접근을 하게 되면 들어오는 값을 바로 저장하는 게 아닌, 한번 검증하고 처리할 수 있도록 할 수 있기 때문에 데이터의 무결성이 지켜진다. Getter : 본 필드의 값을 숨긴 채 내부에서 가공된 값을 꺼낼 수 있다...
트랜잭션 AOP 주의 사항 - 프록시 내부 호출
·
Spring
@Transactional 을 사용하면 스프링의 트랜잭션 AOP가 적용된다. 트랜잭션 AOP는 기본적으로 프록시 방식의 AOP를 사용한다. 앞서 배운 것 처럼 @Transactional 을 적용하면 프록시 객체가 요청을 먼저 받아서 트랜잭션을 처리하고, 실제 객체를 호출해준다. 따라서 트랜잭션을 적용하려면 항상 프록시를 통해서 대상 객체(Target)을 호출해야 한다. 이렇게 해야 프록시에서 먼저 트랜잭션을 적용하고, 이후에 대상 객체를 호출하게 된다. 만약 프록시를 거치지 않고 대상 객체를 직접 호출하게 되면 AOP가 적용되지 않고, 트랜잭션도 적용되지 않는다. AOP를 적용하면 스프링은 대상 객체 대신에 프록시를 스프링 빈으로 등록한다. 따라서 스프링은 의존관계 주입시에 항상 실제 객체 대신에 프록시..
JPA
·
Spring
JPA(Java Persistence API) Java 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용하는 인터페이스 모음 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스 인터페이스 이기 때문에 Hibernate, OpenJPA 등이 JPA를 구현함 왜 JPA를 사용해야 할까? JPA는 반복적인 CRUD SQL을 처리해준다. JPA는 매핑된 관계를 이용해서 SQL을 생성하고 실행하는데, 개발자는 어떤 SQL이 실행될지 생각만하면 되고, 예측도 쉽게 할 수 있다. 추가적으로 JPA는 네이티브 SQL이란 기능을 제공해주는데 관계 매핑이 어렵거나 성능에 대한 이슈가 우려되는 경우 SQL을 직접 작성하여 사용할 수 있다. JPA를 사용하여 얻을 수..
[JUnit5] 기본 Annotation
·
Spring
@Test 본 어노테이션을 붙이면 Test 메서드로 인식하고 테스트 한다. JUnit5 기준으로 접근제한자가 Default 여도 된다. (JUnit4 까지는 public이어야 했었다.) @Test void create1() { Study study = new Study(); assertNotNull(study); System.out.println("create1()"); } @Test void create2() { System.out.println("create2()"); } @BeforeAll 본 어노테이션을 붙인 메서드는 해당 테스트 클래스를 초기화할 때 딱 한번 수행되는 메서드다. 메서드 시그니쳐는 static 으로 선언해야한다. @BeforeAll static void beforeAll() { S..