전체 글
-
@Async와 스레드 풀 - ThreadPoolTaskExecutor가 기본 설정이다!Dev/Java 2023. 12. 12. 23:55
회사에서 프로젝트를 진행하며 @Async를 사용할 일이 있었다. 기존 프로젝트의 설정이 완료된 상태였기 때문에 비동기로 동작해야 하는 메소드 위에 @Async만 붙이기만 하면 간단하게 지나갈 수 있었지만 의문이 생겼다. 비동기로 메소드가 실행되면 스레드의 개수는 누가 관리하는 거지? 자바 커뮤니티에서 유명한 baeldung의 글을 포함해서 여러 블로그들을 찾을 수 있었다. 기본적으로 SimpleAsyncTaskExecutor을 사용하기 때문에 ThreadPoolTaskExecutor을 사용하도록 하는 추가적인 설정을 하지 않으면 스레드의 개수가 무한대로 늘어날 수 있다. 결론부터 말하면 이것은 틀렸다. 1. @Async 적용하기 우선 Spring에서 @Async 어노테이션을 이용한 비동기 처리 방법은 매..
-
2023 카카오 블라인드 채용 후기.../ETC 2023. 1. 30. 17:31
2023 카카오 블라인드 채용 후기 우선 결과부터 말씀드리자면 최종 탈락했습니다. 2차 인터뷰 기간 동안 오픈 채팅방에서 많은 분들이 최종 탈락 후기는 없다고 말씀이 많으셨습니다. 지금에서야 느낀 건 1차 인터뷰 탈락은 후기를 적을 기운이 남아있지만 최종 탈락은 너무 허탈한 느낌입니다. 건축 계열 전공이라 졸업 전시 준비와 카카오 전형을 동시에 진행했는데 최종 합격했다면 정말 짜릿했을 것 같습니다. 그래도 좋은 경험이었고 나름 준비하면서 많이 성장을 한 것 같습니다. 1차 코딩 테스트 총 7문제가 출제 되었습니다. 1번 - 구현 2번 - 그리디 3번 - 완전 탐색 4번 - 트리 5번 - Union Find 6번,7번 - ? 백준 문제와 프로그래머스 모두 꽤 풀었던 시점이라 그래도 어느정도 준비는 됐다고 ..
-
Red-Black Tree에서 Red 노드를 삽입하고 균형을 맞추는 이유?CS/Data Structure 2023. 1. 2. 17:33
Red-Black 노드는 모든 경로의 Black 노드의 개수를 동일하게 유지한다. Red-Black Tree는 일반적인 이진 탐색 트리와 다르게 Black 노드의 개수를 통해 균형을 유지한다. Tree에 새로운 노드를 삽입하는 경우를 생각해보자. Black 노드를 삽입이 불가능한 것은 아니다. 중요한 것은 Red-Black 트리의 조건에 맞게 모든 경로에 대하여 동일한 Black Depth를 갖도록 균형을 맞춰주는 것이다. Black 노드를 삽입하면, 언제나 균형이 깨진다. 새로운 노드가 추가되는 경로에만 Black 노드의 개수가 1개 증가하기 때문이다. 반면에 Red 노드를 삽입하는 경우에는 균형이 유지되는 경우가 존재한다. 리프 노드의 부모가 Black 노드인 경우에는 Red-Black 노드의 조건과..
-
자바는 Call by ValueCS 2022. 12. 28. 15:13
자바는 Call by Value를 사용한다. 자바 코드와 함께 정리가 잘 된 글들이 많지만 아주 간단하고 쉽게 정리해보겠다. 1. Call by Value vs. Call by Reference 함수가 호출될 때, 메모리 공간에서는 임시의 공간이 생성된다. 함수가 종료되면 공간이 사라진다. (더 자세한 내용은 Garbage Collector를 공부해보면 된다.) 1. Call by Value 함수 호출 시 전달 되는 변수의 값을 복사하여 함수의 인자로 사용한다. 복사된 인자는 함수 내부에서 지역 변수로 사용된다. 2. Call by Reference 함수 호출 시 인자로 전달 되는 변수의 참조를 전달한다. 함수 내부에서 인자의 값이 변경되면, 참조된 변수들도 값이 바뀐다. JVM에서는 원시 타입은 Sta..
-
[OS]CPU 스케줄링 알고리즘에 대하여CS/OS 2022. 12. 13. 20:03
1. CPU 스케줄링 운영체제의 단기 스케줄러는 스케줄링 알고리즘을 이용해 어떤 프로세스에게 CPU를 할당할 지(디스패치) 결정한다. 프로세스의 실행은 CPU 실행과 I/O 대기의 사이클로 구성된다. CPU 버스트로 시작되어 I/O 버스트가 발생하고 다시 CPU 버스트가 발생, I/O 버스트 발생.. 마지막 CPU 버스트는 또 다른 I/O 버스트가 뒤따르며, 실행을 종료하기 위한 시스템 콜과 함께 끝난다. CPU를 많이 쓰는 프로세스(CPU bound job)와 I/O를 많이 쓰는 프로세스(I/O bound job)가 섞여 있기 때문에 CPU 스케줄링이 필요하다. CPU 스케줄링 알고리즘의 선택 기준은 다음과 같다. CPU 이용률 : CPU가 얼마나 바쁘게 일을 하는가 처리량 : 단위 시간 당 완료된 프..
-
[JavaScript]호이스팅이란? var, let, const의 차이Dev/JavaScript 2022. 11. 30. 20:22
1. 호이스팅 자바스크립트에서 변수는 선언 → 초기화 단게를 거친다. 선언 단계에서는 변수명을 등록하여 자바스크립트 엔진에게 변수의 존재를 알린다. 초기화 단계에서는 값을 저장하기 위한 메모리 공간을 확보하고 암묵적으로 undefinde를 할당한다. 변수 선언은 런타임에서 되는 것이 아니라 그 이전에 먼저 수행된다. 자바스크립트 엔진은 변수 선언을 포함한 모든 선언문을 먼저 실행한다. 이를 호이스팅이라고 한다. (var, let, const, function, function*, class 키워드를 사용해 선언한 모든 식별자는 호이스팅된다.) 이러한 점에서 함수 선언문과 함수 표현식에는 차이가 있다. 함수 선언문은 함수 자체가 호이스팅 되고, 함수 표현식은 undefined로 초기화 된다. // 함수 참..
-
해시 충돌이 위험한 이유와 암호화 알고리즘Dev 2022. 11. 8. 20:43
해시 충돌이 위험한 이유? 해시는 무한한 입력값을 받고, 유한한 출력값을 내므로 근본적으로 충돌을 피할 수 없다.(비둘기집의 원리) 해시 함수에서 중요한 것은 계산을 통한 임의의 충돌을 찾아내는 것이 불가능해야 한다는 점이다. 해시의 출력값은 파일의 위변조 여부를 가리는 수단이므로 임의의 충돌을 찾아내는 것은 문제가 된다. 암호화 알고리즘 단방향 암호화인 해싱은 데이터의 변조와 무결성을 확인하기 위해 사용된다. 양방향 암호화는 데이터를 교환할 때 노출을 막기 위해 사용된다. 1. 양방향 암호화 알고리즘 (암호화 / 복호화) 양방향 암호는 대칭형 암호와 비대칭형 암호로 나눌 수 있다. 이는 암호화에 사용하는 키와 복호화에 사용하는 키가 같은지 다른지를 기준으로 구분한다. 일반적으로 대칭형 암호는 비공개키 ..
-
복잡한 MySQL Lock의 세계CS/DB 2022. 9. 6. 21:00
MySQL Lock이라는 키워드로 구글링을 하면 너무 많은 종류가 있고 결론적으로 어떤 방식을 사용한다는 것인지 이해가 되지 않았다. 본 글은 Real MySQL 8.0 1권을 읽고 정리한 글이다. MySQL에서는 InnoDB에서 제공하는 잠금과 MySQL에서 제공하는 잠금 두 종류가 있다. 또 각각에서 제공하는 잠금에는 범위에 따라 여러 종류로 구분된다. 각 잠금들은 무엇이고 언제 사용되는 지 정리해보자. MySQL의 잠금 MySQL에서 사용되는 잠금은 크게 스토리지 엔진 레벨과 MySQL 엔진 레벨로 나눌 수 있다. MySQL 엔진 레벨의 잠금은 모든 스토리지 엔진에 영향을 미치고, 스토리지 엔진 레벨의 잠금은 다른 스토리지에는 영향을 미치지 않는다. MySQL 8.0부터는 InnoDB가 기본 스토리..