본문 바로가기

All49

AI 때문에 글태기가 온 건에 대하여... 정말 오랜만의 포스팅이다. 최소 2~3주에 한 번은 기술 혹은 회고 목적의 글을 남기겠다는 작년의 다짐 이후 꾸준히 글을 써왔는데, 최근 한 달이 가장 글을 쓰지 않은 긴 공백기이지 않았나 싶다. 이제는 생각보다 내 글을 지켜보던 주위 사람도 많아져서 '다음 글은 언제 나와요?' 라는 말도 여러 번 들었다. 오랜만에 '이번주엔 꼭 글을 써봐야지!' 라고 마음먹은 뒤로도 한참 생각했는데, 아무리 생각해도 어떤 주제로 써야 할지 잘 떠오르지 않았다. 왜 이렇게 주제가 떠오르지 않나 그 이유에 대해 한참을 생각하고 개인 노션에서 소재를 찾아 뒤적이다가, 차라리 이 고민 자체를 주제로 써보기로 했다. 내 글태기의 원인 타이틀에서 이미 알 수 있듯 나는 AI 때문에 글태기가 왔다는 핑계아닌 핑계에 도달했다. 난 .. 2024. 4. 14.
업무의 미로에서 방향 찾기 현재 회사에 풀스택 개발자로 입사 후 3년이 지나 올해로 4년 차가 되었고, 그 사이에 팀장이라는 직책도 임명받았고 얼마 전에는 연봉협상도 진행되었다. 언제나 그렇듯 연봉협상을 하면 회사 분위기가 뒤숭숭하다. 아무래도 경기가 안 좋은 요즘 같은 상황엔 누구나 만족할만한 연봉 인상률이 나오긴 힘드니, 열심히 달려왔던 동료들의 동기부여가 줄어든 모습이 많이 보인다. 이번 인사평가때는 처음으로 누군가를 평가하고, 그 평가가 누군가의 연봉 인상률에 영향을 미치는 경험을 하게 되었다. 나는 입사 후 지금까지 매년 해가 넘어가는 이 시즌에는 모든 업무프로젝트들과 내 활동에 대한 회고를 정리하곤 했고, 그 회고는 겸사겸사 평가를 위한 자료로도 쓰이곤 했다. 그래서 이번에도 팀원들에게 본인이 본인을 회고하는 시간을 가.. 2024. 3. 3.
Protocol Buffers 로 Java - NodeJs 통신시키기 왜 REST Api 에 Protocol Buffer 를 적용했는가? 얼마전 신규 오픈한 기능의 실시간 통신을 위해 구축해놓은 서버가 정상수치가 아니라는 인프라팀의 제보가 왔다. 정확히는 nginx 에서 무리가 왔기 때문에 소켓 서버를 타겟으로 들어오는 부분에서 문제가 있다는 추측이다. PM2 로그를 통해 본 서버로그에 아래와 같은 문구가 엄청나게 많이 찍히고 있고 파일이나 크기가 큰 리스트를 주고받는 경우도 많았기 때문에 실시간 서버에 들어오는 데이터의 크기를 의심하고 리퀘스트 파라미터를 처리하는 개선 작업을 진행해보려고 가닥을 잡았다. 어떻게 request entity 를 줄일 수 있나? 처음에는 빨리 해결하는 방법과 제대로 해결하는 방법 2가지의 안을 가지고 있었다. 회사의 상황상 기능 개발이 아닌 .. 2024. 2. 4.
'모던자바스크립트 Deep Dive' 를 읽으며 (5장~8장) 5장. 표현식과 문 🧐 '값'은 '표현식'이 평가되어 생성된 결과를 말한다. var sum = 10 + 20 이 간단한 '문'은 '10' 과 '20' 이라는 숫자 '리터럴' 의 합이 '평가'되어 생성된 숫자 '값' 이 할당되는 '할당문'이다. 값으로 평가될 수 없는 변수선언문과 같은 것들은 표현식인 문이 아니다. 간단한 문이라도 기본을 놓치지 말고 깊이있게 이해하려고 노력하자. ✅ 문과 표현식을 구별하고 해석할 수 있다면 자바스크립트 엔진의 입장에서 코드를 읽을 수 있고 실행 결과를 예측하는 데 도움이 된다. 이는 버그를 줄이고 코드의 품질을 높여줄 것이다. 네! 🧐 자바스크립트 엔진이 소스코드를 해석할 때 문의 끝이라고 예측되는 지점에 세미콜론을 자동으로 붙여주는 세미콜론 자동 삽입 기능(ASI)이 암.. 2024. 1. 17.
'모던자바스크립트 Deep Dive' 를 읽으며 (1장~4장) 1장. 프로그래밍 🧐 대부분의 문제(요구사항)은 복잡하며 명확하지 않을 수도 있다. 따라서 문제(요구사항)을 명확히 이해하는 것이 우선되어야 하며 복잡함을 단순하게 분해하고 자료를 정리하고 구분해야 하며 순서에 맞게 행위를 배열해야 한다. 프로그래밍에 대한 내용이긴 했지만, 그 외에도 업무적인 해결 능력이나 프로젝트 진행중 문제 해결능력에 대해서도 기억하고있으면 좋을 만한 내용이라는 생각이 들었다. 개발과 업무, 프로젝트 관리 등 요구사항이나 문제는 항상 복잡하고 명확하지 않을 수 있으며, 그 불명확함을 단순하게하고 배열하는게 문제해결 능력이라는 사실을 기억하자. 🧐 프로그래밍 학습은 일반적으로 문법을 배우는 것부터 시작하는 외국어 학습과 유사하다. 문법을 잘 안다고 해서 외국어를 잘한다고 말할 수는 없.. 2024. 1. 15.
3.5년차 개발자 회고록 (+ 2023년 개인 회고록) 1. 시작하며 3년차 개발자 회고록 (상반기) 1. 시작하며 블로그에 "3년 차 개발자 회고록"이라는 타이틀로 글을 시작하는 날이 오다니 새삼 신기하다. 신입 때 나의 상상 속 3년 차 개발자는 분명 어나더클래스의 실력을 갖춘 미친 퍼포먼스 todayscoding.tistory.com 상반기 회고록 쓴 지가 벌써 6개월이나 지났다니. 나이 들수록 시간이 빨리 간다더니 진짜 맞는 말인가 보다. 이전에 기록했던 회고들을 쭉 훑어봤는데, 업무와 업무 외 개발활동 말고는 내 개인적인 생활이나 감정이 담겨있는 글이 없는 게 아쉬웠다. 회고록을 기록하기 시작했을 때 '개발자 회고록'이라는 타이틀을 붙여서인지 아니면 실제로 내 생활보단 일을 먼저 생각했기 때문이었는지는 모르겠다. 결론적으로는 이번 회고록은 하반기 회.. 2024. 1. 7.
효과적인 코드 리뷰를 향한 여정 (ft. aws codecommit, space) 현재 제가 몸담고있는 개발팀에서는 space라는 리뷰툴을 활용해 코드리뷰 진행 검토를 진행중입니다. space 라는 툴이 선택되기까지 정말 많은 과정이 있었고, 그럼에도 불구하고 아직 개선하고 정해야할 프로세스도 많습니다. 제가 저희 조직에 도입하기 위해 거쳐온 이 경험들이 얕은 경험에 불과할 수도 있겠지만, 아직 코드 리뷰를 정착하지 않은 팀이나 조직이 있다면 중간 공유가 인사이트가 될 수도 있을 것 같아 사용 후기를 공유합니다. 왜 space 를 쓰게 되었나 처음엔 flow task로 pull request 시작. 작년 이맘때쯤까지 저희 팀에서는 플로우 협업툴 업무 게시글을 활용한 pull request 를 진행했었습니다. 하지만 당시에는 아래와 같은 문제로 인해 자~연 스럽게 역사속으로 사라졌습니다.. 2023. 12. 24.
3년차 개발자 회고록 (상반기) 1. 시작하며 블로그에 "3년 차 개발자 회고록"이라는 타이틀로 글을 시작하는 날이 오다니 새삼 신기하다. 신입 때 나의 상상 속 3년 차 개발자는 분명 어나더클래스의 실력을 갖춘 미친 퍼포먼스를 내는 사람일 거라고 생각했었다. 하지만 현실은 비교적 능숙하게 힘을 덜 들이며 효율적으로 쳇바퀴를 타는 방법을 터득했다..?라고 느끼는 것 말고는 아직도 배울 것이 더 많은 부족한 사람이다. 물론 능숙하게 쳇바퀴를 타기 위해 2년 넘게 꽤나 치열하게 노력해 왔으니 지금의 상황이 만족스럽기도 하다. 평범함 속에 숨겨진 성실함이 비범한 인생의 조건이라는 말도 있으니까 말이다. 작년과 재작년에 12개월치 회고를 하는 게 밀린 일기를 쓰는 기분이었어서, 올 해는 1~6월까지의 상반기 회고록을 나눠서 써보려고 한다. 2.. 2023. 7. 16.
PostgreSQL 에서 Vacuum 이 필요한 이유 (MVCC, XID) 🧹 PostgreSQL을 사용한다면 Vacuum에 대해 반드시 잘 이해하고 적절하게 관리해야 합니다. 얼마전 운영하고있던 서비스에 Vacuum 을 통한 관리가 제대로 되지 않았던 이유로 DB부하가 심하게 와서 장애가 발생한 적이 있습니다. 이번 포스팅에서는 신경쓰지 않으면 서비스에 치명적일 수 있는 Vacuum 의 역할에 대해 자세히 알아보려고 합니다. Vacuum 의 첫 번째 역할, 공간확보! Vacuum의 사전적 의미는 "진공청소기를 이용한 청소" 입니다. UPDATE 와 DELETE 를 통해 변경 또는 삭제된 자료들이 차지 하고 있는 디스크 공간을 다시 사용하기 위해 불필요한 쓰레기 데이터들을 정리하고, 디스크 공간의 효율성을 높입니다. 왜 불필요한 쓰레기 데이터가 공간을 차지하는걸까요? 다중 버전.. 2023. 6. 4.
Intersection Observer 로 화면에 보이는 부분만 로딩하기 (feat. Lazy loading) 🖥️ 최근 회사에서 개발하던 기능 중 요소의 가시성에 따라 API 를 호출해야하는 작업이 있었습니다. 기존에는 페이지에 진입하는 순간 관련 API를 모두 호출하여 화면에 그려주는 방식으로 구현이 되어있었는데요, 해상도나 유저의 세팅 상태에 따라 보이지 않는 기능의 API까지 전부 호출하던 부분이 비효율적이라고 판단되어, 일반적으로는 이미지를 Lazy loading 하는데에 주로 쓰이는 Intersection Observer API 를 활용하여 서버로 호출하는 API 자체도 Lazy loading 을 시도해보았고, 관련 내용을 공유해보려고 합니다. Lazy loading 이란? Lazy loading 은 '지연 로딩', 즉 리소스를 식별하여 필요할 때만 로드하는 전략입니다. 웹이 발전함에 따라 사용자에게 .. 2023. 5. 21.
크롬 개발자도구 뜯어보기 Why? ✏️ 개발자 도구는 평소에 습관처럼 디버깅하는데에 쓰고 있지만, 이번에 회사에서 '프론트엔드 성능 최적화 가이드'라는 책으로 스터디를 진행하면서 생각보다 놓치고 있는 부분도 많고 더 좋은 기능도 많이 제공하고 있다는 것을 알게되어 포스팅을 해본다. 크롬 개발자 도구 크롬 브라우저에서 제공하는 웹 개발에 도움되는 다양한 툴입니다. 여는 방법 f12 ctrl + shift + i (command + option + i) 요소 검사 (하이라이트) Network 패널 현재 웹 페이지에서 발생하는 모든 네트워크 트래픽을 상세하게 알려줍니다. 어떤 리소스가 어느 시점에 로드되는지, 해당 리소스의 크기 등을 확인할 수 있습니다. Perfomance 패널 웹 페이지가 로드될 때, 실행되는 모든 작업을 보여줍니.. 2023. 4. 23.
JavaScript 에서는 함수형프로그래밍이 대세다? (함수형 vs 객체지향) Why? 💬 요즘엔 주로 javascript 를 활용하여 개발을 하고 공부를 하고 협업을 하다보니 같은 언어인데도 사람마다 정말 다양한 코드 스타일로 작업을 한다고 느낀다. 보통은 주로 활용하는 라이브러리나 프레임워크가 코드스타일에 영향을 많이 주는 것 같은데, 나의 회사의 경우 프레임워크 없이 프론트엔드 개발을 하고 있어 더욱 멤버들의 자유도가 높다. 그래서 문득 '어떤 이유와 의도로 지금의 방식으로 프로그래밍을 하고있는 것일까?' 라는 생각, '과연 그 방법은 내가 개발하고자 하는 서비스에 최적화되어있을까?' 라는 생각이 들어 함수형과 객체지향에 대해서 간단히 정리를 해 보았다. 그리고 동료들도 다들 어떤 이유로 본인의 스타일을 만들었고 유지하게 되었는지가 궁금해서 이야기를 나눠보았다. 1. 객체지향.. 2023. 4. 9.
2. 일렉트론의 프로세스 구조와 통신에 대해 알아보자. 이전 포스팅에서 일렉트론이 무엇인지에 대해 간략하게 알아보았습니다. 1. 데스크탑 애플리케이션 프레임워크, 일렉트론에 대해 알아보자. 시작하며 지금까지 일렉트론을 통해 pc앱 개발/빌드/유지보수를 해오면서 개인적으로 공부도 하고 정리도 하고 회사 내에서 간간이 세미나도 진행해 왔다. 하지만 돌아보면 A to Z의 글로 흐름 있 todayscoding.tistory.com 이번에는 일렉트론의 프로세스 구조가 어떻게 되어있는지, 프로세스 간 통신을 어떻게 하는지에 대해 좀 더 자세히 알아보겠습니다. 일렉트론에서 가장 중요한 개념은 ‘격리’ 와 ‘통신’이다. 프로세스 구조를 모른 채로 Electron을 활용해서 개발을 하다 보면같은 js로 짜인 코드 간의 호출인데도 '왜 될 거 같은데 안되지?', '값을 넘겼.. 2023. 3. 12.
1. 데스크탑 애플리케이션 프레임워크, 일렉트론에 대해 알아보자. 시작하며 지금까지 일렉트론을 통해 pc앱 개발/빌드/유지보수를 해오면서 개인적으로 공부도 하고 정리도 하고 회사 내에서 간간이 세미나도 진행해 왔다. 하지만 돌아보면 A to Z의 글로 흐름 있게 '잘' 남기지는 못한 것 같아 글로 남겨야 한다는 필요성을 느꼈고, 일렉트론에 대한 공부가 필요한 사람들이 참고하면 좋을만한 정보들이 내 개인 노션에만 잠들어있는 게 아쉬웠다. 앞으로 블로그에 쓰인 시리즈의 글을 통해 누군가가 아래의 정보들을 얻어갈 수 있도록 작성해 나가는 것이 목표다. 일렉트론이 무엇인지, 일렉트론의 프로세스 구조는 어떻게 생겼는지, 본인이 개발한 웹 서비스로 어떻게 pc 앱을 만들 수 있는지, 어떻게 인증서를 넣어 빌드를 하는지, 자동 배포 구조는 어떻게 만드는지 사실 일렉트론을 주제로 꾸.. 2023. 2. 26.
2년차 개발자 회고록 작년에도 연말에 휘몰아치는 업무를 해내느라 겨우 1월에 정신을 되찾고 회고록을 썼었는데, 올해는 무려 2월이 되어서야 작년 회고록을 쓴다. 작년 회고록에서 내 개발자 생활은 "눈코 뜰새 없다."라는 표현이 참 어울린다고 했었는데, 올 해 역시 그 표현은 유효하다. (이번에도 글에서는 읽기 편하게 올해라고 표현하려고 한다.) 워낙 정리하면서 일하는 걸 좋아하는 성격이라 진작에 연간 업무에 대한 정리는 노션에 차곡차곡 쌓아왔었는데, 회고글은 미루고 미루다 이제야 쓰는 걸 보니 정리와 글은 또 다른 영역인가 보다. 앞으론 나를 돌아보는 글에도 부지런해야겠다. 시작하며 오늘 서점에서 ‘창피하지만, 일단 해봅니다.’라는 책을 샀다. 그 책의 일부에 이런 말이 나온다. 능력이 아니라 태도로 싸워라. 능력은 비교하기.. 2023. 2. 12.
(기고문) 함께 일하기 위한 도구, 협업툴 개발자의 질문 지난 8월, 개발자를 위한 매거진, 리드잇zine 4호에 내 두번째 기고문이 실렸다. '함께 일한다는 것'이라는 주제를 보고 협업툴 회사에 일하는 개발자로서 그냥 지나칠 수 없었다. readIT zine 4호 | 리드잇 | 교보문고- 교보ebook 개발자를 위한 매거진, 리드잇zine 4호! 이번 4호 주제는 '함께 일한다는 것'입니다. 이번 호에서는 사람 이야기를 담았습니다. 코로나19가 발생한 지 4년이 지났지만 여전히 코로나 확산세가 심상 ebook-product.kyobobook.co.kr 전문 나는 메신저와 업무관리가 더해진 협업툴 서비스 ‘플로우`를 개발하고 있다. 협업툴은 사람들이 협업을 할 수 있도록 도와주는 도구이며, 한마디로 난 사람들에게 함께 일하기 좋은 문화와 원활한 소통의 문화를 .. 2023. 1. 27.
[책 후기] Do it! 모던 자바스크립트 프로그래밍의 정석 읽게된 계기 모던 자바스크립트(es6)를 현재 실무에서 활용하고 있으나, 필요한 부분만 조금씩 찾아보거나 부분적인 강의만 들었을 뿐 전체적으로 한번에 훑어본 적이 없었다. 아직 모르는 지식도 많아서 아는 것들 사이에 중간중간 채워넣기 위해 언젠가 기본서적을 꼭 읽어야겠다고 생각했었는데, 마침 새로운 도서가 나와서 신청하여 읽게되었다. 좋았던 부분 1. 제목에 써있는 대로 정말 교과서처럼 '이해-실습-문제' 과정으로 진행된다. 처음 접하는 분들이 직접 코드를 작성하면서 익혀나가기 좋을 것 같다. 2. 코드예시가 정말 친절하게 단계별로 작성되어있고, 설명도 매우 풀어서 쉽게 작성되어있어 큰 어려움 없이 바로바로 이해하면서 넘어갈 수 있다. (그럼에도 불구하고 이해가 안되면 유튜브에서 무료로 제공되는 동영상 .. 2022. 12. 13.
intellij 에서 git 으로 인식되지 않는 브랜치 해결 ( /.idea 폴더의 역할) intellij 사용중에 특정 레포에서만 몇몇 브랜치에서 git 으로 인식되지 않는 문제가 발생했다. 원인 자체는 간단하지만, 인텔리제이 사용자라면 협업중에 비슷한 경우가 생길 수 있는 부분이라 기록한다. 현상 일반적인 경우 git, commit ,history 등 intellij 에서 제공하는 탭들이 보여야 정상인데, 아래처럼 git 이 아닌 일반 프로젝트로 나오고 있었다. 특정 브랜치에서만 인텔리제이를 활용한 풀리퀘,커밋,깃 코드 분석과 히스토리를 전혀 볼 수가 없었지만 터미널을 통해 다른 브랜치로 체크아웃을 한 후엔 정상적으로 작동하고 있었다. 원인 원인은 인텔리제이를 사용하지 않는 다른 협업자가 불필요한 폴더를 삭제하는 과정중에 /.idea 폴더를 삭제한 뒤 push 를 한게 원인이었다. 위 문제.. 2022. 8. 8.
인덱스 확장 기능 사용법 인덱스 스캔 방식은 여러가지가 있다. 각 스캔 방식의 주요 특징을 비교해보자. 1. Index Range Scan B*Tree 인덱스의 가장 일반적이고 정상적인 형태의 액세스 방식이다. 인덱스 루트에서 리프 블록까지 수직적으로 탐색한 후에 ‘필요한 범위'만 스캔한다. 앞선 내용에 있지만, 범위지정시캔을 하려면 선두 컬럼을 가공하지 않은 상태로 조건절에 사용해야 한다. 다시 강조하지만 인덱스를 태운다고 성능이 좋다고 생각하면 안된다. 스캔 범위와 액세스 횟수를 얼마나 줄일 수 있느냐로 성능이 결정된다. 2. Index Full Scan 수직적 탐색 없이 인덱스 리프 블록을 처음부터 끝까지 수평적으로 탐색하는 방식이다. 대게 데이터 검색을 위한 최적의 인덱스가 없을 때 차선으로 선택된다. Index Full.. 2022. 5. 11.
인덱스 기본 사용법 인덱스를 사용한다는 것 인덱스 컬럼을 가공하지 않아야 인덱스를 정상적으로 사용할 수 있다. 즉, 인덱스 컬럼을 가공하면 인덱스를 정상적으로 사용할 수 없다. 여기서 ‘인덱스를 정상적으로 사용한다'는 표현은 리프 블록에서 스캔 시작점을 찾아 거기서부터 스캔하다가 중간에 멈추는 것, 즉 리프 블록 일부만 index Range Scan을 의미한다. 인덱스 컬럼을 가공해도 인덱스를 사용할 수는 있지만, 스캔 시작점을 찾을 수 없고 멈출 수도 없어 리프 블록 전체를 스캔해야만 한다. 즉 일부가 아닌 전체를 스캔하는 Index full scan 방식으로 작동한다. 인덱스를 Range Scan 할 수 없는 이유 인덱스 스캔 시작점을 찾을 수 없기 때문이다. 일정 범위를 스캔하려면 ‘시작'과 ‘끝' 지점이 있어야함. .. 2022. 5. 11.
인덱스 구조 및 탐색 인덱스 튜닝의 두 가지 핵심요소 인덱스는 큰 테이블에서 소량 데이터를 검색할 때 사용한다. 온라인 트랜젝션 처리 (OLPT) 시스템에서는 소량 데이터를 주로 검색하므로 인덱스 튜닝이 무엇보다 중요하다. 첫번째. 인덱스 스캔 효율화 튜닝 인덱스 스캔 과정에서 발생하는 비효율을 줄이는 것. 두번째. 랜덤 엑세스 퇴소화 튜닝 테이블 액세스 횟수를 줄이는 것. 인덱스 스캔 후 테이블 레코드를 엑세스할 때 랜덤 I/O 방식을 사용함. 데이터 베이스 성능이 느린 이유는 디스크 I/O 때문이다. 읽어야 할 데이터량이 많고, 그 과정에 디스크 I/O가 많이 발생할 때 느리다. 인덱스를 많이 사용하는 OLTP 시스템이라면 디스크 I/O 중에서도 랜덤 I/O가 특히 중요하다. 이 두개중 성능에 미치는 영향이 더 큰 것은 .. 2022. 5. 11.
SQL 데이터 저장 구조 및 I/O 메커니즘 SQL이 느린 이유 SQL이 느린 이유는 십중팔구 I/O 때문이라고 필자는 말한다. OS 또는 I/O 서브시스템이 I/O를 처리하는 동안 프로세스는 잠을 자기 때문이다. 프로세스의 생명주기 실행중인 프로세스는 수시로 실행 준비 상태로 전환했다가 다시 실행 상태로 전환하는 것을 반복한다. 여러 프로세스가 하나의 CPU를 공유할 수 있지만 특정 순간에는 하나의 프로세스만 CPU를 사용할 수 있기 때문에 이런 메커니즘이 필요하다. Waiting : 프로세스 도중에 I/O 작업이 필요하여 I/O 작업을 수행하는 상태이다. 이 때 CPU는 I/O를 기다리며, 다른 프로세스를 수행한다. (필자는 이 과정을 잠을 잔다고 표현함.) Waiting 상태가 끝나면 프로세스는 다시 Ready 상태가 되고, 잠시 후 다시 R.. 2022. 5. 4.
소프트 파싱 vs 하드 파싱 소프트 파싱 vs 하드 파싱 라이브러리 캐시 SQL 파싱, 최적화, 로우소스생성 과정을 거쳐 생성한 내부 프로시저를 반복 재사용할 수 있도록 캐싱해 두는 메모리 공간을 ‘라이브러리 캐시'라고 한다. 라이브러리 캐시는 SGA의 구성요소이다. 하나의 쿼리를 수행하는데 있어 후보군이 될만한 무수히 많은 실행경로를 도출하고, 짧은 순간에 딕셔너리와 통계정보를 읽어 각각에 대한 효율성을 판단하는 과정은 결코 가벼울 수 없다. 이렇게 어려운 작업을 거쳐 생성한 내부 프로시저를 한번만 사용하고 버린다면 이만저만한 비효율이 아니기 때문에 라이브러리 캐시가 필수적이다. SGA(System Global Area) : 서버 프로세스와 백그라운드 프로세스가 공통으로 엑세스하는 데이터와 제어 구조를 캐싱하는 메모리 공간이다. .. 2022. 5. 4.
SQL 파싱과 최적화 SQL 최적화의 ‘최적화'란 무엇을 대상으로하며 어떤 과정을 거치는지 알아보자. 구조적, 집합적, 선언적 질의언어 SQL (Structured Query Language) : SQL is a set-based, declarative query language, not an imperative language such as C or BASIC. 즉, 기본적으로 구조적이고 집합적이고 선언적인 질의 언어이다. 원하는 결과 집합을 구조적, 집합적으로 선언한다. 하지만 그 결과 집합을 만드는 과정은 절차적일 수 밖에 없다. 즉, 프로시저(절차기술)가 필요한데, 그런 프로시저를 만들어내는 DBMS 내부 엔진이 SQL 옵티마이저이다. DBMS 내부에서 프로시저를 작성하고 컴파일해서 실행 가능한 상태로 만드는 전 과정.. 2022. 5. 4.
[SQL-1] 정규화란? - 제 1/2/3정규형 정규화의 개념과 필요한 이유에 대해서 알아보자 1. 제1정규형 : 모든 속성은 반드시 하나의 값을 가져야 한다. 1) 잘못된 사례1 => 다중 값을 가지는 경우 다음과 같은 모델이 있다고 가정했을 때 발생할 수 있는 문제는 다음과 같다. 연락처 정보에서 집전화 번호와 핸드폰 번호를 구별할 수 없다. 집전화가 여러대인 '장소오'와 핸드폰번호가 여러개인 '장소삼'이 혼재되어잇기 때문에 원하는 데이터만 추출하기 어렵다. 이메일처럼 다른 유형의 데이터를 포함할 수도 있어 본연의 의미가 퇴색될 수 있다. 이와 같이 데이터를 관리한다면 '연락처' 속성의 의미는 퇴색될 것이고, 개발의 복잡성은 증가할 것이며 장기적으로 불안정한 데이터 구조를 양산할 것이다. 사원번호 사원명 연락처 10001 장소이 010-1111-2.. 2022. 3. 10.
[네덜란드 교환학생] 헤이그 대학교 입학허가서 준비서류 과거타 블로그에 작성했던 내용을 우연히 발견하게 되어 이 블로그로 옮긴다. 드디어 고생고생고생고생끝에 입학 허가 메일이 도착했다ㅠㅠ 준비하는데 자료들이 부족했고 세종대학교의 경우 이번에 헤이그대학에 처음 파견되는 것이기 때문에 너무너무 정보가 부족했다. 그래서 다음학기에 파견될 분들을 돕는것 뿐만아니라 이 고생을 나중에도 기억하기위해...? 정리를 하기로 결심! ㅋㅋㅋ 일단헤이그대학 입학허가서 준비를 위한 서류는 크게 5가지가 있다. 1. 통장 사본 2. subject choice form 3. Antecendents declaration 4. proof of sufficient financial means (잔고확인증 선택!) 5. 보험료 납인확인증 1,2번은 학교측에서 요구하는 사항이고 3,4,5번.. 2022. 2. 19.
[네덜란드 교환학생] 헤이그 대학교 전공선택 과거타 블로그에 작성했던 내용을 우연히 발견하게 되어 이 블로그로 옮긴다. 2016년 가을학기에 네덜란드의 헤이그대학교로 교환학생을 가기로 결정이 났다. 정식 명칭은 헤이그 실무중심대학이다. Hague University of of Applied Sciences 네덜란드는 두가지의 대학 종류가 있는데 우리나라와 비슷 하게 연구 중심 대학(Research University) 와 실무중심 대학(University of Applied Sciences)로 나뉘어 진다고 한다. 열심히 지원서를 쓰고 면접을 준비해서 교환학생에 일단 붙기만 하면 반은 왔을거라 생각했던 나의 크나큰 착각이었다. 합격통보를 받은 후 좀 오래 있다가 합격자 오리엔테이션이 열렸는데 파견 담당자님이 " 네덜란드 헤이그대학 가시는 분들은 .. 2022. 2. 19.
Oracle 과 PostgreSQL의 차이점 Oracle 과 PostgreSQL의 가장 큰 차이점은 2가지 정도로 나눌 수 있다. 1. MVCC 모델 구현 방식의 차이 MVCC란 다중 버전 동시성 제어(multiversion concurrency control, MCC, MVCC) 이다. 동시성 제어란 뭘까? 간단하게 말하면 만약 동시성 제어 없이 누군가가 데이터베이스를 읽는 동시에 다른 누군가가 기록을 하려고 한다면 사용자는 반쯤 기록되거나 일관성이 없는 데이터를 보게 될 가능성이 있다. 이렇게 동시성을 높이기 위해서는 '읽기 작업은 쓰기 작업을 블로킹 하지 않고, 쓰기 작업은 읽기 작업을 블로킹하지 않아야 한다'는 원칙을 지켜야 한다. 그 원칙을 지키기 위해 필요한게 MVCC 이다. - ORACLE : 이 MVCC를 구현하기 위해 UNDO 세그.. 2022. 1. 19.
1년차 개발자 회고록 새해의 1월 하고도 12일이나 지났다. 회사에서 한 달 전부터 준비해온 22년 첫 업데이트를 무사히 끝내고 퇴근한 지금에서야 겨우 '아, 회고록!' 하고 마음을 다잡으며 키보드를 두드리게 된 나를 보니, 개발자로서의 이번 1년은 "눈코 뜰새 없었다."라는 표현이 참 어울린다. 이 글을 쓰고 있는 순간에도 '다음 개발건 쿼리 쪽 어떻게 개선하지? 일정 산출은 어느 정도로 하지?' 등의 수많은 물음표가 머리를 채우고 있으나, 최대한 걱정은 비우고 지난 1년을 차분히 되돌아보려고 한다. 시작하며 올해에는 정말 많은 일이 있었다. (1월이 되어버렸지만 몰입을 위해 올해라고 하자.) 정말 정말 많이 배웠고 많이 성장했다. 하지만 그보다 아직 아쉬운 점, 부끄러운 점이 너무나도 많다. 이렇게 스스로 부족함을 느끼는.. 2022. 1. 12.
[readIT 1호 Review] 성장판을 찾아서(1) 우연히 readIT 라는 교보문고에서 발간하는 매거진을 알게되었다. 1호는 21명의 현직자분들이 '개발자로서의 성장'에 대한 이야기를 하는 내용으로 구성되어있다. 개발자로서 성장에 목마름 반, 업무에 지침 반인 상태였던 나로서는 한문장 한문장이 먼저 길을 걸어본 선배님들이 바로 옆에서 건내주는 충고처럼 느껴졌다. (거의 랜선선배 21분 생긴 기분ㅠㅠ) 꼭 기록해놓고 두고두고 보며 개발자의 길을 걷는 동안 들여다보며 좋은 영향과 자극을 받고 싶다는 생각이 절로 들어서 인상깊은 부분들을 짧게나마 남긴다. 06 유한태 _ 성장판을 찾아서 정체보다 더 무서운 건 ‘포기’다. 새로운 자극이 들어와도 무시하는 상태. 현재 상태에 안주하지 말고 새로운 자극을 계속 받아들이자. 사람 들로부터, 책으로부터. 내가 가장 .. 2021. 11. 15.
반응형