[개발 일기] 2025.01.23 - 직렬화
·
개발 일기
개요 오늘은 자바에서 밥 먹듯이 사용되는 직렬화에 대해 정리해 보자.   자바 직렬화 자바에서 직렬화란 자바 환경 내부에서 사용되던 객체나 데이터를 외부의 자바 시스템에서도 사용 가능하도록 바이트 형태로 변환하는 과정을 의미한다.  조금 더 전공자처럼 얘기하면 JVM의 런타임 데이터 영역에 위치하고 있는 객체를 바이트 형태로 변환하는 과정이다.  역직렬화는 이것과 반대로 바이트 형태로 변환된 데이터를 다시 자바에서 사용할 수 있는 객체 형태로 변환한 후, JVM의 런타임 데이터 영역에 저장하는 것을 의미한다.   Serializable Serializable의 사전적 의미는 직렬화이다.  직렬화를 자바에서 구현하기 위해선 일단 Serializable 인터페이스를 상속받은 후 구현해야 한다. class M..
[개발 일기] 2025.01.22 - static
·
개발 일기
개요 자바를 사용할 때 정말 밥 먹듯이 사용하던 static 키워드..  오늘은 static 키워드에 대해 정리해 보자.   static static의 사전적 의미는 ‘고정된’이다.  자바에선 이 static 키워드를 사용해 고정된 필드, 고정된 메서드를 만들 수 있다.  이렇게 고정된 필드, 고정된 메서드를 합쳐서 정적 멤버라고 표현한다.  만약 정적 멤버는 클래스가 클래스 로더에 의해 메모리에 저장될 때 함께 저장되는데, 이러한 정적 멤버는 한번 생성되면 자바 애플리케이션이 종료될 때까지 메모리에 남아있는다.  다음은 static이 적용된 클래스 예시이다. class Member { static int age; // 정적 멤버 (클래스에 속함) String name; // 인스턴스 필드 (..
[개발 일기] 2025.01.21 - TCP/IP
·
개발 일기
개요 TCP도 알고, IP도 안다.  그럼 TCP/IP는 뭘까?   TCP (Transmission Control Protocol) TCP란 전송 제어 프로토콜의 약자로 클라이언트와 서버 간의 신뢰성 있는 통신을 위해 만들어진 프로토콜이다.  신뢰성 있는 통신이 가능한 이유는 요청 이전에 송신자와 수신자 사이에 커넥션이 이루어지기 때문이다.  이 과정을 TCP 3 Way Handshake라고 한다.  TCP 3 Way Handshake란 상대 컴퓨터가 통신하기에 적절한 상태인지 체크하는 과정이다. SYN (Synchronize Sequence Numbers)클라이언트가 서버와의 연결을 요청하며, SYN 패킷(Sequence Number 포함)을 보낸다.클라이언트는 SYN_SENT 상태가 된다.SYN-AC..
[DB] MySQL 테이블 복구 (Feat : 바이너리 로그)
·
백엔드
바이너리 로그를 사용한 복구 MySQL에서 바이너리 로그(Binary Log)란 데이터베이스 서버에서 수행된 모든 변경 작업을 기록하는 파일이다.  이 로그는 데이터 손실이 발생했을 때 복구 작업을 수행하거나, 복제하는 데 사용된다.  데이터베이스에 접속한 후, 아래 쿼리를 실행하면 저렇게 binlog.XXXXXX 파일이 있는데, 저 파일이 바이너리 로그이다.SHOW BINARY LOGS; 하나의 파일을 선택해 조회를 해본 결과 바이너리 로그의 형태는 다음과 같다.# 바이너리 로그 파일 열람 명령어mysqlbinlog binlog.000403#250120 18:02:05 server id 1 end_log_pos 2288 CRC32 0x89fd1c5e Query thread_id=10 exec_tim..
[개발 일기] 2025.01.20 - 함수형 인터페이스
·
개발 일기
개요 이름부터 아찔하다. 함수형 인터페이스라니..  최근에 '이펙티브 자바'라는 개발 서적을 읽고 있는데, 그 안에 람다식에 대한 내용이 포함되어 있었다.  그래서 람다식에 대해 공부좀 해볼까 싶어서 살펴보니, 결국 함수형 인터페이스를 기반으로 한다는 것을 알게 되었다.  그래서 오늘 한번 간단히 함수형 인터페이스에 대해 일기를 써보게 되었다.   함수형 인터페이스 함수형 인터페이스란, 단 하나의 추상 메서드만을 가지는 인터페이스를 말한다.  … 생각보다 너무 단순한다.  아래의 코드도 함수형 인터페이스다.@FunctionalInterfacepublic interface MyFunction { // 하나의 추상 메서드 int add(int a, int b);}  (참고) 추상 메서드 추상 메서..
[개발 일기] 2025.01.19 - JWT(JWS, JWE)
·
개발 일기
개요 난 프로젝트에서 사용자의 인증・인가 기능에 대부분 JWT를 사용했다.  그 이유는 JWT의 간편함에 있다. 서버 입장에선 사용자의 정보를 따로 보관할 필요 없고(Refresh Token 예외), 토큰 내부엔 만료 일자와 사용자의 정보가 모두 포함되어 있기 때문이다.  하지만 JWT의 보안적인 단점도 존재하는데, 이 단점을 극복할 수 있는 기술이 JWE이다. (실제 현업에서 JWE가 사용되는 경우는 드뭄)  이처럼 인증・인가에 사용할 수 있는 토큰이 다양하다. 오늘은 그러한 토큰들에 대해 정리해 보자.   JWT 단점 JWE는 JWT의 암호화 기능을 추가한 기술이다. 이와 같이 따로 암호화된 토큰 기술이 있는 이유는 JWT에 암호화 기능은 없기 때문이다.  보통 JWT 토큰은 아래와 같은 문자열처럼 ..