[개발 일기] 2025.01.07 - OSI 7계층 (데이터 링크 계층)
·
개발 일기
개요 오늘은 OSI 7 계층에서 2번째 계층인 데이터 링크 계층 차례이다.  드가자.   데이터 링크 계층 데이터 링크 계층은 물리 계층과 네트워크 계층으로 받은 패킷을 다음 목적지까지 안전하게 전달하는 역할을 한다.   프레임 데이터 링크 계층에서 사용되는 기본 데이터 유닛이다.  프레임의 구조는 다음과 같다. 목적지 주소데이터를 받을 장치의 MAC 주소(Medium Access Control address)참고로 MAC 주소는 고유한 주소임. 지구상에 있는 모든 컴퓨터는 MAC 주소가 다름 출발지 주소데이터를 보낸 장치의 MAC 주소 데이터실제 전송하려는 정보이는 상위 계층에서 전송된 데이터(예: IP 패킷)를 포함 FCS프레임의 오류 검사를 위한 정보수신자는 FCS 값을 이용해 데이터가 전송 중 손..
[개발 일기] 2025.01.06 - OSI 7계층 (물리 계층)
·
개발 일기
개요 이전까지 OSI 7 계층은 단순히 전공 공부할 때나 정처기 준비할 때 달달 외우기만 했다.  각 계층이 어떤 역할을 가지고 있는지 말은 할 수 있지만, 이건 완전히 이해한 상태에서 설명한 것이 아니라 그냥 시험용으로 외운 글을 말하는 느낌이다.  그래서 이번 기회에 각 계층을 하루에 하나씩 공부할 생각이다.   물리 계층 물리 계층은 OSI 7계층에서 1 계층으로 데이터를 전송할 때 가장 마지막으로 거치는 계층이고, 전기신호를 수신할 때 가장 처음으로 지나는 계층이다.  그렇기 때문에 물리 계층은 전기신호를 컴퓨터 내부에서 사용 가능한 데이터로, 컴퓨터 내부에서 사용되는 데이터를 전기신호로 변환하는 역할을 수행하기도 한다.  채팅 애플리케이션을 예로 들면, 사용자가 메시지를 작성하고 ‘전송’ 버튼을..
[개발 일기] 2025.01.05 - 자바 객체 락 (synchronized)
·
개발 일기
개요 우리가 보통 동기화 환경을 구축할 때, 아래의 예제 코드와 같이 동기화 환경이 설정된 메서드에 진입하기 위해선 락을 획득해야 한다고 한다. public OrderService { ... public synchronized void createOrder(OrderCreateRequest request) { // 주문 생성 & 재고 차감 로직 } ... } 그렇다면 이 락이 뭐고, 도대체 어디에 있는지에 대해 알아보자   락 락(Lock)은 동기화를 구현하기 위한 기술로, 여러 스레드(사용자)가 공유 리소스에 접근할 때 데이터의 무결성을 보장하기 위해 사용된다. 락은 동시에 하나의 스레드만 특정 리소스에 접근할 수 있도록 제어하는 역할을 한다.  쉽게 설명하면 데이..
[개발 일기] 2025.01.04 - Event, Publisher, Listener
·
개발 일기
개요 프로그래밍 환경에선 이벤트라는 말이 자주 사용된다.  그리고 이벤트는 Publisher와 Listener와 함께 사용된다.  늘 개발할 때마다 Event, Publisher와 Listener는 자주 봤지만, 내부 기능과 사용목적은 확실하게 알지 못했다.  오늘은 이 세 가지 객체의 목적을 알아보자.   Event Spring의 Event란 스프링 애플리케이션 내부에서 발생하는 작업이나 상태변화를 나타내는 객체이다.  무슨 말인지 모르겠다. 쉽게 설명해 보자.  예를 들어 "홍길동 사용자가 회원가입을 했다", "홍길동 사용자가 로그인에 성공했다" 같은 상황이 이벤트를 의미한다.  그리고 이 이벤트는 다른 리스너(Listener)가 "어? 무슨 일이 있었네!" 하고 알아차릴 수 있게 도와주는 일종의 메..
[개발 일기] 2025.01.03 - Redis의 만료기한
·
개발 일기
개요 OKKY에서 Access 토큰과 Refresh 토큰에 관한 이야기를 나누는 것을 봤다.  그리고 자연스럽게 Redis와 만료기한과 관련된 내용도 나왔는데, 이때 갑자기 떠오른 기억이, 이전까지 Refresh 토큰이나 임시 예약과 같은 기능을 사용할 때 Redis의 만료기한도 함께 사용했었던 기억이었다.(임시 예약에 Redis의 만료기한을 사용한 이유는 최종 결제가 성공적으로 이루어지지 않는 경우 해당 예약은 취소해야 하기 때문!)  그때 당시엔, ‘알아서 데이터도 삭제해 주네? 이거 편하네~’라고 생각하고 대수롭지 않게 넘겼는데, 이게 무슨 원리 때문인지, 단순한 인메모리 DB의 특징인 건지 궁금해서 일기를 쓴다.   인메모리 DB 인메모리 DB란 명칭 그대로, 메모리에 직접 데이터를 저장하고 읽는..
[개발 일기] 2025.01.02 - @Transactional (readOnly = true)
·
개발 일기
개요 오늘 가져온 주제는 읽기 전용 트랜잭션인 @Transactional(readOnly = true)이다.  오늘 이전에 읽은 책 자바 ORM 표준 JPA 프로그래밍을 읽다가 Service 구현체에 @Transactional(readOnly = true)을 기본적으로 달고, 해당 클래스의 메서드 중 데이터베이스에 변경을 가하는 작업을 수행하는 메서드라면 @Transactional을 작성해 따로 처리하는 것이 성능에서 더 이득일 수 있다는 글을 보고 그 이유가 무엇인지 한번 더 공부해보고 싶어졌다.   @Transactional @Transactional 은 데이터베이스의 작업에서 일관성과 무결성을 보장하기 위해 사용하는 어노테이션이다.  그렇기 때문에 @Transactional 어노테이션이 달린 메서드..