분류 전체보기 312

Real MySQL 4장 정리

아키텍쳐 MySQL엔진 MySQL엔진은 SQL 문장 분석이나 최적화같은 두뇌역할을 수행 얘는 MySQL서버 하나에 한개밖에 없다. 커넥션 핸들러, SQL파서 및 전처리기 옵티마이저 쿼리의 최적화된 실행을 위해 스토리지 엔진 데이터 저장 / 불러오는 역할 수행 이거는 여러개 동시사용 가능하다. 스레딩 구조 MySQL서버는 프로세스가 아니라 스레딩 기반으로 동작 포그라운드 스레드 최소 mysql에 접근한 클라이언트의 수만큼 존재 그래서 사용하면 여기있고 다쓰면 스레드캐시로 돌아감 근데 스레드캐시가 일정 갯수 이상이면 그냥 종료시킨다. 데이터를 데이터버퍼나 캐시로부터 가져온다. 없는 경우에는 직접 디스크나 인덱스 파일에서부터 데이터를 가져옴 (InnoDB기준) 데이터 버퍼나 캐시에 저장 이후는 백그라운드에서 ..

2022 하반기 현대자동차 CCS서버개발팀 백엔드 합격 후기

1. 서류 준비 현대자동차라는 회사는 사실 서류에서 엄청나게 사람을 거르는 것 같다. 2022 하반기 채용은 팀별 지원이었기 때문에 해당 팀에의 기준이 맞는지가 중요하다고 생각한다. 그리고 "서류에서 엄청 떨어짐" + "팀의 기준이 확실함"에 비해, 자소서의 항목은 그리 많은 편이 아니기에 자신이 했던 경험을 이에 잘 녹여내는 것이 중요할 것 같다. 나의 경우에는 이전에 짧은 기간 동안 IT회사에 근무했던 경험과 여러 개발 동아리에서의 공부, 개인적으로 운영하는 블로그와 Git계정을 첨부하였고 이외에도 자소서 항목 중간에 Notion으로 작성한 개인 포트폴리오를 첨부하였다. 자소서 항목만 사용하는 것이 아니라 이외에도 여러 방법을 통해 자신의 스펙이나 경험을 보여주는 것이 주요할 것이라 생각한다. 추가로..

기타/일상 2023.11.15

Spring 기본(IoC, DI, Bean)

IoC 컨테이너 Inversion of Controll 말하자면 제어의 역전 이라는 것이다. 그래서 그게 뭔데? 라고 하면 말하자면 "주도권을 뺴앗겨서, 그 주도권이 Spring에게 있다."는 뜻이다. 예를 들어 Class 설계도 Object 실체화가 가능한 것 예를 들어 abstract class처럼 실제로 존재하지 않는 것들은 Object가 될 수 없다. Instance 실체화 된 것 이런 3개에 대하여 생각해 보았을 때에 보통은 java에서 Public void MakeHandsomeMan() { Ryoochan ryoochan = new Ryoochan(); }이런 식으로 직접 heap영역에 만들었을 것이다. 그러면 MakeHandsomeMan 에서만 ryoochan이 존재하고, 다른 곳에서는 사..

Kafka 아는척하기 강의 정리

-> https://www.youtube.com/watch?v=xqrIDHbGjOY&t=4s 카프카를 공부해보기 위해 찾아보다가 정말 좋은 강의가 있어 이론에 대한 기초를 알기 위해 보고 정리해 보았다. 데이터 스트리밍 및 이벤트 기반 데이터 파이프라인을 위한 메시지 큐 시스템. 기본 모양 카프카 클러스터 메세지를 저장하는 저장소 하나의 카프카 클러스터는 여러개의 브로커로 구성된다. 각 브로커는 메세지를 나눠서 저장하고(이중화 처리 / 장애시 대체 등등도 여기서 한다) 한다. 주키퍼는 클러스터를 관리하는데에 쓰인다. 프로듀서 카프카 클러스터에 메세지를 보낸다. 컨슈머 메세지를 카프카에서 읽어오는 역할을 한다. 토픽과 파티션 토픽 메시지를 구분하는 단위 파일시스템의 폴더와 유사 프로듀서가 메시지를 카프카에..

이론 정리 2023.11.08

스트림 활용법

정리 스트림을 활용하는 방법에 관한 내용인데, 사실 이 부분은 어느 정도 알고 있기 때문에 정리하고자 한다. 이전에서 보았듯, 스트림은 내부 반복 뿐 아니라 코드를 병렬로 실행할지 여부를 알고 있다. 그래서 내부적으로 다양한 최적화가 가능하다. 필터링 프레디케이트 필터링 (filter) 프레디케이트를 사용해서 필터핑을 한다. 고유 요소 필터링 (distinct) 이름에서 알 수 있듯, 중복된 값을 제거하는것 객체의 Equals, HashCode를 통해 진행한다. 슬라이싱 요소의 선택이나 스킵 프레디케이트 활용 슬라이싱 Takewhile predicate결과값 이외는 모두 버리는 연산 즉, 결과값이 TRUE일 때까지는 값을 가져오지만 false가 되는 순간 스트림이 중지되고 반환 filter와의 차이점은 ..

이론 정리/java 2023.11.04

Springboot에서 외부 Redis에 값을 넣고 빼보자(feat.pipeline, Spring boot 3.0)

코드는 https://github.com/RyooChan/redis-pipeline/tree/main 여기서 확인 가능 Springboot에서 외부 Redis에 값을 넣고 빼보자(feat.pipeline, Spring boot 3.0) 해당 테스트를 하기 전에 Redis는 localhost가 아닌 외부에 존재한다고 가정한다. (외부 레디스를 사용하면 네트워크 지연 시간이 발생하게 될 것이다.) 알다시피 레디스는 굉장히 속도가 빠르다. 그렇지만 레디스와 서버는 TCP 네트워크 모델을 기반으로 통신한다. 이게 무슨 뜻일까... 하면, redis와 서버간의 통신 과정에서 TCP 3-way handshake를 따르고, 여러 번 통신을 하면 결국 속도에서 손해를 볼 수밖에 없다는 것이다. 한번 이를 테스트해 보자..

레디스를 로컬이 아닌 외부에 두는 이유

레디스를 로컬이 아닌 외부에 두는 이유 보통 우리가 공부할 때에는 레디스를 로컬에서 실행한다. 근데 회사를 가면 열에 아홉은 외부 레디스를 쓸 것이다. 로컬에서 실행할때 얻을 수 있는 장점은 빠른 속도 외부 레디스의 경우 통신 과정이 필요하므로 레이턴시가 걸리게 된다. 개발 및 테스트 개발 환경에서의 접근과 설정, 테스트가 용이하다. 정도일 것이다. 단점은 무엇일까?? 어쩌면 뻔하다고 생각될 수 있지만 다음과 같다. 데이터 손상 로컬에 레디스가 존재하는 경우 데이터가 손실될 염려가 더 크다. ex) 서버가 중단되는 경우 데이터의 손상 또 외부에 두게 되면 Redis자체적으로 제공되는 스냅샷을 백업하거나 디스크 로그에 저장하는 등등을 통해 데이터를 조금 더 편하게 저장 가능하다. 확장성 결국 로컬 컴퓨터에..

MySQL 페이징 해보자(feat offset, infinite scroll)

보통 개발할 때에 반드시 공부하고 적용하는게 페이징일 것 같다. 그리고 아마... 처음에는 offset limit을 써서 적용을 할 것 같다. 이 offset limit에 대해, 그리고 offset limit의 문제점에 대해, 해결 방안에 대해 써보려고 한다. 일단은 간단한 테스트를 위해 CREATE TABLE board ( id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, heart INT DEFAULT 0 );이런 테이..

스트림 소개

정리 스트림과 컬렉션의 차이가 뭘까? 사실 회사에서 스트림을 쓰고 있는데 사용하면서도 이게 컬렉션보다 보기 편하고 쓰기 편하군ㅇㅇ 이정도 감상이었는데 이번에 확실히 감이 잡히더라 스트림 시작 여기서 제일 인상깊었고, 컬렉션과의 차이에 대해 쉽게 접근할 수 있었던게, 컬렉션의 주제는 데이터고 스트림의 주제는 계산 이라는 점이었다. 말하자면 컬렉션은 요소 저장 및 접근, 스트림은 그걸 가지고 계산하는 것이 주가 된다는 것이다. 그리고 스트림이 가진 두가지 중요 특징이 파이프라이닝 대부분의 스트림 연산은 스트림 연산끼리 연결해서 커다란 파이프라인을 구성할 수 있도록 스트림 자신을 반환함 lazy(결과값이 필요할 때에 계산하도록... 그니까 알아서 스트림의 중간/최종 연산을 통해 안쓸거는 안쓰게 하는 최적화 같..

이론 정리/java 2023.09.30

채널(channel), 컨텍스트(Context)

채널(channel), 컨텍스트(Context) 이전에 고루틴을 나누는 방법을 보았는데, 동시성을 제어하는 방법들을 살펴봤다. 그리고 거기서 역할을 나누는 것이 있었고... 이 때에 쓰이는게 채널이다. 채널 : 고루틴끼리 메세지를 전달할 수 있는 메세지 큐 데이터를 FIFO로 넣고 -> 빼고 이렇게 하는거임 이거 다른말로 Thread-safe Queue이다. 채널의 크기 기본 크기 0 처음 만들면 크기가 0으로 생성된다. 그리고 make(chan int, 20) 이런 식으로 크기를 정해줄 수 있다(이러면 20개짜리 크기) 이거 그래서 채널 만들어놓고 데이터 넣은 다음에 안빼주면 무한히 대기하게 된다ㄷㄷ 이런것을 좀비 고루틴, 록은 고루틴 릭이라고 하는데(채널을 닫아주지 않아 무한 대기를 하는 고루틴) 이..