본문 바로가기

전체 글

(197)
[Java] 배열(Array), ArrayList, LinkedList 1. 배열(Array)1-1. 배열이란?입력된 데이터가 메모리 공간에 연속적으로 저장되는 자료 구조이다. 메모리에 연속적으로 저장된다는 특징으로 인해 index를 통해 데이터에 접근이 가능하다. 연속적으로 저장하기 위해서는 미리 메모리의 크기를 할당받아야 하므로, 배열을 생성 후 크기를 수정할 수 없다. 1-2. 시간복잡도삽입배열의 끝에 데이터를 삽입하는 경우 : O(1)끝이 아닌 처음이나 중간에 삽입하는 경우 : O(N)전자의 경우 삽입될 메모리의 영역을 알고 있기 때문에 바로 삽입할 수 있다. 후자의 경우 특정 위치에 데이터를 삽입하게 되면 삽입된 지점 이후의 데이터를 뒤로 복사하여 이동시켜야 한다.탐색특정 인덱스(Index) 탐색 : O(1)모든 데이터 탐색 : O(N)배열의 특징으로 연속적으로 메..
[Spring] 다중 인스턴스에서 @Scheduled 문제와 ShedLock 사용하기 1. 실행 환경Java 17Gradle 8.5SpringBoot 3.2.3 2. 기존 코드우리 프로젝트의 경우 게시물(Section)에 좋아요 기능과 관련한 API를 Redis를 사용하여 처리하고 있다. Redis에서 (key: SectionId, value:listof(userId))로 관리하고 있다.30초 간격으로 스케줄링을 통해 Redis에 좋아요 정보를 DB의 Likes 테이블로 옮긴다.// 30초마다 Redis 좋아요 기록을 DB의 Likes 테이블에 저장한다.@Scheduled(fixedDelay = 1000L * 30)@Transactionalpublic void saveLikes() { log.info("스케줄링 호츌"); // 정규식에 해당하는 모든 key를 조회한다. S..
[네트워크] TCP 3-way-handshake, 4-way-handshake 1. TCP1-1. TCP란?TCP는 Transmission Control Protocol로써, 신뢰성이 높고 연결 지향 프로토콜이다. ”신뢰성이 높다” 의미는 두 장치 간에 정보를 전달함에 있어 안정적이고 순서대로 에러 없이 데이터를 교환할 수 있음을 의미한다. TCP는 연결 지향 프로토콜이기 때문에 두 장치가 데이터를 교환하기 전에 연결을 맺어야 한다. 여기서 연결을 맺는다는 것은 두 장치간에 세션이 존재하는지 확인한다는 의미이다. 두 장치가 세션을 연결하기 위해서는 3-way-handshake 과정을 거쳐아 한다. 2. 3-way-handshake STEP 1. Client → Server로 SYN 패킷 전송SYN 요청이란 연결을 요청하는 패킷이다. 발신자가 수신자에게 SYN 요청을 보내어 연결을 ..
[운영체제] TLB(Translation Lookaside Buffer) page table은 메모리에 저장되는데, CPU는 프로세스를 사용하기 위해 메모리에 두 번 접근해야 한다.메모리에 저장된 page table에 접근가상 주소를 물리 주소로 변환하기 위해 page table에 접근한다.page table 기반으로 실제 메모리에 접근page 테이블에서 얻은 물리 주소를 통해 실제 물리 메모리에 접근한다. CPU에서 메모리에 접근하는 것은 시간이 소요되는 작업이다. 따라서 메모리에 두 번의 접근이 필요하면 상당한 시간이 소요된다. 이러한 문제를 해결하기 위해서는 메모리에 접근하는 횟수를 줄여야 한다.  1. TLB(Translation Lookaside Buffer)1-1. TLB란?TLB(Translation Lookaside Buffer)는 메모리 접근 횟수를 줄이고자 ..
[운영체제] 프로세스 주소 공간과 TLS(Thread Local Storage) 1. 프로세스 주소 공간스택(Stack) 영역컴파일 시점에 크기가 결정된다.함수의 호출과 관계있는 지역 변수와 매개 변수 그리고 함수의 실행을 마치고 복귀할 주소가 저장되는 영역이다.스택 영역은 함수의 호출과 함께 생성되고 종료와 함께 소멸된다.메모리의 높은 주소에서 낮은 주소 방향으로 할당된다.재귀가 너무 깊게 호출되면 StackOverFlow 예외가 발생하는데, 이는 제한된 스택 영역을 초과하였기 때문에 발생한다.프로그램 실행 중에 변경될 수 있으므로 Read-Write로 설정되어 있다.힙(Heap) 영역런타임 시점에 결정되는 영역이다.사용자에 의해 동적으로 할당되고 명시적으로 해제해야 한다.malloc(), new(), free()주로 참조형 데이터가 할당된다.프로그램 실행 중에 변경될 수 있으므로..
[Spring] java.time.format.DateTimeParseException: Text '2024-05-25 14:33:07.049436' could not be parsed at index 10 RedisRedis에서는 마지막으로 알림이 조회된 시간을 저장한다.hget Notification:notification lastNotificationTime"2024-07-09T23:39:39.101337"@Getter@RedisHash("Notification")@AllArgsConstructor(access = AccessLevel.PRIVATE)public class NotificationRedis { @Id private String notification; // key private LocalDateTime lastNotificationTime; // value public static NotificationRedis of(String notification, LocalD..
[네트워크] HTTP와 HTTPS 1. HTTP1-1. HTTP란?HTTP란 Hyper Text Transfer Protocol의 약자로써, 서버/클라이언트 모델에서 데이터를 주고받기 위한 프로토콜이다. HTTP는 80 포트를 사용하며 클라이언트로부터 요청이 오기를 기다린다. 1-2. HTTP 구조GET /index.html HTTP/1.1Host: www.example.comUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q..
[Kotlin] sealed class 1. 등장 배경부모 클래스가 있고 자식 클래스가 3개가 존재할 때, 컴파일러 입장에서는 부모 클래스를 상속하는 클래스가 몇 개인지 알 수 없다. 1-1. 부모 클래스open class Car( val name: String, val color: String) { internal fun carInfo() { println("차의 종류는 ${name}이며 색깔은 ${color}입니다.") }} 1-2. 자식 클래스class Honda( name: String, color: String) : Car(name = name, color = color)class Hyundai( name: String, color: String) : Car(name = name..