목록전체 (124)
지나공 : 지식을 나누는 공간
Query Explain Plan https://www.mongodb.com/ko-kr/docs/rapid/tutorial/analyze-query-plan/ explain result를 보고 query에 대한 아래 정보를 얻을 수 있다. 쿼리 수행에 걸리는 시간 쿼리가 인덱스를 사용하는지 쿼리 수행을 위해 스캔되는 문서나 인덱스 키의 개수 쿼리 성능에 대한 통계를 제공하는 메소드 [cursor.explain("executionStats")] & [db.collection.explain("executionStats")] 쿼리가 인덱스를 사용하는지 여부와 방법을 측정할 때 유용 아래 document가 들어있다고 가정하자. { "_id" : 1, "item" : "f1", type: "food", quant..
우테코의 테코톡에서 잘 설명해줘서 두고 두고 보려고 기록하는 글. Index와 DB Index인덱스는, 쉽게 찾아볼 수 있도록 일정한 순서에 따라 놓은 목록을 말한다. 현재 데이터가 아무 기준 없이 저장된 상태라면 뒤죽박죽이라서, 특정 키워드를 찾으려 하면 모든 데이터를 순차적으로 탐색해야 한다. 그러나 데이터가 특정 기준으로 정렬되어 있다면 검색을 빠르게 할 수 있다. DB 인덱스는, 데이터베이스 테이블에 대한 검색 성능을 향상시키는 자료구조로, WHERE절 등을 통해서 활용된다.이메일을 인덱스로 정한다면, 이메일 컬럼에 대한 값을 복사해서 이걸 abc 순으로 정렬한 데이터가 생긴다. 여기서"SELECT * FROM member WHERE email = 'ehl3288@naver.com'을 실행하면 e..
코틀린 인 액션을 통해 빠르게 코틀린을 손에 익히고 있다. 코드나 사용법은 손과 눈에 익히면 그만인데 그 외에 언어의 특징은 기록해두려고 한다. 자바와 마찬가지로 코틀린도 정적 타입 언어다. (statically typed) 정접 타입 언어란, 모든 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있고 프로그램 안에서 필드나 메서드를 사용할 때마다 컴파일러가 타입을 검증해준다는 뜻 동적 타입 언어에는, JVM의 경우 Groovy나 JRuby 등이 있는데 타입과 관계 없이 모든 값을 변수에 넣을 수 있고 메서드나 필드 접근에 대한 검증이 실행 시점에 일어나며, 그에 따라 코드가 더 짧아지고 데이터 구조를 더 유연하게 생성하고 사용할 수 있다. 그러나 이러한 동적 타입 언어는 이름을 잘못 입력하는 등의 실..
이 글.... 사족이 길어질 예정입니다ㅋㅋ 이직 준비 정보가 필요한 분들은 바로 스크롤 내려보세용 ~들어가는 글만 2년의 전 직장 생활을 마치고 네이버에서 새로운 커리어를 시작한다. 그리고 새해부터는 3년차 백엔드 개발자가 된다! 내가 3년차라는게 믿기지 않고, 3년차의 커리어 시작을 네이버에서 한다는 것도 아직은 실감이 나지 않는다. 23년을 돌아보면 상반기에는 벚꽃도 보고 워터파크도 가고 바다도 가고... 여기저기 정말 잘 놀러다녔다. 하지만 추석에 뉴욕 여행 다녀온 걸 마지막으로 하반기는 이직 준비와 마인드 컨트롤을 하며 지낸 게 전부다. 이직을 준비하는 게 취준 다시 하는 느낌이라 너무 힘들었는데, 그래도 상반기에 잘 놀았고 주변의 도움이 있었기에 버틸 수 있었다. 그리고 생각보다 금방(?) 원하..
Spring Batch의 도메인 이해 1) Job 배치 계층 구조에서 가장 상위에 있는 개념으로, 하나의 배치 작업 자체를 의미함. 배치 작업을 어떻게 구성하고 실행할지 전체적으로 설정하고 명세헤 놓은 객체 최상위 인터페이스로서 스프링 배치가 기본 구현체를 제공한다. JobLauncher가 run을 통해 job을 실행시킨다. 내부에 List 이라는 steps를 가지고 step을 거기다 add한다. build는 실제 job 기본 구현체 SimpleJob 순차적으로 step을 실행시키는 job. 스텝을 포함하고 있는 컨테이너 역할 모든 job에서 유용하게 사용 가능한 표준 기능을 가진다. FlowJob 특정 조건과 흐름에 따라 step을 구성해서 실행시키는 job Flow 객체를 실행시켜서 작업을 진행한다...
메모리와 디스크 메모리 : RAM. 빠른 액세스를 위해 데이터를 임시로 저장하는 저장소로, 컴퓨터 전원이 꺼지면 휘발된다. 디스크 : HDD, SSD처럼 영구적으로 데이터를 저장하는 저장소. 디스크 내의 데이터는 CPU 처리 속도가 메모리보다 느림. 그러나 저장 용량이 크고 전원 꺼져도 휘발되지 않는다. Redis는 메모리 기반의 저장소다. 그러니 전원 끄면 Redis의 데이터가 날아가지만 Redis는 영속성을 위한 기능을 제공한다. Redis의 백업. 영속성 redis에서 데이터 접근은 메모리에서 일어나지만, 쌓인 데이터를 디스크에 저장할 수도 있다. Redis가 이렇게 데이터 영속성을 지원하는 방버베는 아래 두 가지 방식이 있는데, 이를 통해 Redis를 껐다 켰을 때 기존 데이터가 유지되게 할 수 ..
올해 들어 헥사고날 아키텍처 책을 읽었는데 이걸 실무에 당장 도입하기는 쉽지 않다고 생각했다. 패키지 이름도 낯설고 은근 러닝커브(?)가 좀 있는 거 같다. 그래서 이걸 당장 도입하자는 욕심은 잠시 내려놨고, 대신 헥사고날 아키텍처에서 지향하는 것, package-private을 통해 강제하고자 하는 것이 무엇인지 떠올렸다. 최근 팀원 분과 페어프로그래밍을 진행하면서 대부분에게 익숙한 레이어드 아키텍처 안에서도 헥사고날 아키텍처의 지향점을 잘 녹여내자는 목표를 가졌다. 나는 헥사고날을 [만들면서 배우는 클린 아키텍처, 위키북스] 책으로 접했는데, 결국 내내 반복적으로 말하는 지향점은 객체 지향 설계, 즉 SOLID 원칙이었다. 최근에 우리 팀에서 매년 반복적으로 준비하는 행사의 코드가 여기저기 산재되어 ..
들어가는 말 최근 회사에서 solid 원칙을 적용하여 리팩터링을 진행했다. 워낙 의존성이 꼬여 있어서 무언가 로직을 바꾸기 보다는 최대한 기존의 로직을 유지하면서 진행해야 했다. 그래서 기존 로직을 유지한다는 요구사항을 만족하지만 더 적합한 기술(?)로 바꾸는 작업만 했는데 그 과정에서 직면한 문제가 있었다. 일단 문제에 들어가기 앞서 스프링 빈 콜백에 대해 훑어보고 들어가자. 스프링 빈 콜백 리마인드 스프링 빈으로 등록되는 클래스 안에서 어떤 멤버변수가 딱 한번만 초기화되게 하려면 어떻게 해야할까? 일단 스프링 빈은 기본적으로 싱글톤이기 때문에 딱 한번만 초기화해놓고 계속 그때 초기화된 그대로 멤버변수를 반환하는 것이 가능하다. 기존 로직은 아래처럼 매번 그 멤버변수의 size를 확인하여 원하는 값으로..
개요 2023년의 반절이 지나가고 있다. 어느덧 입사한지 1년반이 되었고, 나도 2년차가 됐다. 2년차라고 말할 수 있는 객관적인 실력에 도달했을지는 모르겠는데 일단 작년보다는 무조건 발전한 것 같다. 업무 작년에는 작은 업무들을 위주로 하고 FE와 BE를 동일한 비율로 했는데 올해는 BE에 집중하고 있다. 올해 초 조직개편이 이뤄지면서 다른 팀이었던 분들과 한 팀이 되었고 그 팀의 팀장님으로 팀장님도 바뀌었다. 이전 팀이 너무 좋았어서 팀원과 팀장님이 바뀌는게 많이 걱정됐는데, 작년도 좋았고 올해는 올해대로 좋다. 특히 합쳐진 다른 파트의 협업 문화가 좋아서 우리 파트도 긍정적인 영향을 많이 받았다. 덕분에 나도 2023년 상반기가 뜻깊게 채워지고 있다. 무엇보다 일이 재밌어졌다. 팀원 분들께 배울 수..
현재까지 1,2 편을 적고 3을 적게 됐다. 이렇게 보니 엄청 길게 느껴졌던 내용들이 생각보다 짧은 것 같기도..? 하다. 빈 생명주기 콜백과 빈 스코프가 남았다. 바로 시작! 스프링 프로그램이 시작하기 전과 후에 무언가 부가적인 작업을 해줘야 할 때가 있다. 예를 들면 데이터베이스 커넥션 풀이나 네트워크 소켓 등이 있다. 애플리케이션이 시작될 시점에 미리 필요한 연결을 해둬야 하고, 종료될 쯤에는 연결됐던 걸 다시 해제하는 작업이 필요하다. 이러한 부가 작업들은 주요 프로그램이 실행되기 전과 후에 각각 이루어져야 한다. 이번 시간에는 네트워크 소켓을 담당하는 NetworkClient라는 객체를 만들어서 테스트한다. 네트워크 소켓을 담당하는 빈이기 때문에 이 빈의 로직이 실행되기 전에 네트워크 연결이 세..