Moment
- 3.5년차 개발자 회고록 (+ 2023년 개인 회고록) 1. 시작하며 3년차 개발자 회고록 (상반기) 1. 시작하며 블로그에 "3년 차 개발자 회고록"이라는 타이틀로 글을 시작하는 날이 오다니 새삼 신기하다. 신입 때 나의 상상 속 3년 차 개발자는 분명 어나더클래스의 실력을 갖춘 미친 퍼포먼스 todayscoding.tistory.com 상반기 회고록 쓴 지가 벌써 6개월이나 지났다니. 나이 들수록 시간이 빨리 간다더니 진짜 맞는 말인가 보다. 이전에 기록했던 회고들을 쭉 훑어봤는데, 업무와 업무 외 개발활동 말고는 내 개인적인 생활이나 감정이 담겨있는 글이 없는 게 아쉬웠다. 회고록을 기록하기 시작했을 때 '개발자 회고록'이라는 타이틀을 붙여서인지 아니면 실제로 내 생활보단 일을 먼저 생각했기 때문이었는지는 모르겠다. 결론적으로는 이번 회고록은 하반기 회..
- 3년차 개발자 회고록 (상반기) 1. 시작하며 블로그에 "3년 차 개발자 회고록"이라는 타이틀로 글을 시작하는 날이 오다니 새삼 신기하다. 신입 때 나의 상상 속 3년 차 개발자는 분명 어나더클래스의 실력을 갖춘 미친 퍼포먼스를 내는 사람일 거라고 생각했었다. 하지만 현실은 비교적 능숙하게 힘을 덜 들이며 효율적으로 쳇바퀴를 타는 방법을 터득했다..?라고 느끼는 것 말고는 아직도 배울 것이 더 많은 부족한 사람이다. 물론 능숙하게 쳇바퀴를 타기 위해 2년 넘게 꽤나 치열하게 노력해 왔으니 지금의 상황이 만족스럽기도 하다. 평범함 속에 숨겨진 성실함이 비범한 인생의 조건이라는 말도 있으니까 말이다. 작년과 재작년에 12개월치 회고를 하는 게 밀린 일기를 쓰는 기분이었어서, 올 해는 1~6월까지의 상반기 회고록을 나눠서 써보려고 한다. 2..
- 2년차 개발자 회고록 작년에도 연말에 휘몰아치는 업무를 해내느라 겨우 1월에 정신을 되찾고 회고록을 썼었는데, 올해는 무려 2월이 되어서야 작년 회고록을 쓴다. 작년 회고록에서 내 개발자 생활은 "눈코 뜰새 없다."라는 표현이 참 어울린다고 했었는데, 올 해 역시 그 표현은 유효하다. (이번에도 글에서는 읽기 편하게 올해라고 표현하려고 한다.) 워낙 정리하면서 일하는 걸 좋아하는 성격이라 진작에 연간 업무에 대한 정리는 노션에 차곡차곡 쌓아왔었는데, 회고글은 미루고 미루다 이제야 쓰는 걸 보니 정리와 글은 또 다른 영역인가 보다. 앞으론 나를 돌아보는 글에도 부지런해야겠다. 시작하며 오늘 서점에서 ‘창피하지만, 일단 해봅니다.’라는 책을 샀다. 그 책의 일부에 이런 말이 나온다. 능력이 아니라 태도로 싸워라. 능력은 비교하기..
- 1년차 개발자 회고록 새해의 1월 하고도 12일이나 지났다. 회사에서 한 달 전부터 준비해온 22년 첫 업데이트를 무사히 끝내고 퇴근한 지금에서야 겨우 '아, 회고록!' 하고 마음을 다잡으며 키보드를 두드리게 된 나를 보니, 개발자로서의 이번 1년은 "눈코 뜰새 없었다."라는 표현이 참 어울린다. 이 글을 쓰고 있는 순간에도 '다음 개발건 쿼리 쪽 어떻게 개선하지? 일정 산출은 어느 정도로 하지?' 등의 수많은 물음표가 머리를 채우고 있으나, 최대한 걱정은 비우고 지난 1년을 차분히 되돌아보려고 한다. 시작하며 올해에는 정말 많은 일이 있었다. (1월이 되어버렸지만 몰입을 위해 올해라고 하자.) 정말 정말 많이 배웠고 많이 성장했다. 하지만 그보다 아직 아쉬운 점, 부끄러운 점이 너무나도 많다. 이렇게 스스로 부족함을 느끼는..
- (기고문) 함께 일하기 위한 도구, 협업툴 개발자의 질문 지난 8월, 개발자를 위한 매거진, 리드잇zine 4호에 내 두번째 기고문이 실렸다. '함께 일한다는 것'이라는 주제를 보고 협업툴 회사에 일하는 개발자로서 그냥 지나칠 수 없었다. readIT zine 4호 | 리드잇 | 교보문고- 교보ebook 개발자를 위한 매거진, 리드잇zine 4호! 이번 4호 주제는 '함께 일한다는 것'입니다. 이번 호에서는 사람 이야기를 담았습니다. 코로나19가 발생한 지 4년이 지났지만 여전히 코로나 확산세가 심상 ebook-product.kyobobook.co.kr 전문 나는 메신저와 업무관리가 더해진 협업툴 서비스 ‘플로우`를 개발하고 있다. 협업툴은 사람들이 협업을 할 수 있도록 도와주는 도구이며, 한마디로 난 사람들에게 함께 일하기 좋은 문화와 원활한 소통의 문화를 ..
- 삶의 지도 개발자 글쓰기 모임 '글또'라는 곳에서 '삶의 지도' 에 대한 글을 과제로 받았다. 처음엔 어떻게 쓰나 막막했었는데, 막상 쓰고나니 내 인생을 이렇게까지 돌아보고 글로 남긴 적이 있었나 싶어 이왕 쓴김에 블로그에도 남긴다. INTRO. 내가 이 길을 걷고있는 이유 ‘삶의 지도’ 를 그려보자는 생각을 하고 계산을 해보니 10,200일의 시간을 지나보내고 있습니다. 그 속의 수많은 순간이 쌓여 지금의 저를 만들었겠죠. 현재 협업툴 소프트웨어 회사에서 3년차 주니어 풀스택 개발자로 근무하기까지, 그리고 파트 리더역할을 맡게 되기까지 어떤 길을 걸어왔을까 생각해보았습니다. 돌이켜보니 그 이전의 기억은 크지 않았고 근 10년, 즉 20대의 제가 지금의 저를 만들어왔더군요. 이 말이 당연한 이야기처럼 들릴 수도 있..
- 퇴사 후 회고록 방향을 찾고 싶은가? 그렇다면 먼저 방향을 잃어봤는가? 2020년은 내 인생 터닝포인트의 해라고 말해도 과언이 아닐 정도로 내 생각, 감정, 생활 등등 모든 면에 있어 큰 변화를 가져왔던 1년인 것 같다. 약 3년간 열정을 다해 다니던 회사에서의 퇴사 후 슬럼프, 그리고 떠난 두 번째 유럽여행, 돌아와서 마음을 다잡고 시작하게 된 웹/플랫폼 개발, 슬럼프를 이기게 해 준 취미 댄스팀생활, 서울에서 홀로 보낸 백수 시절, 스타트업 개발자로의 새로운 시작. 2020년을 되돌아보면 정서적으로 어지럽고 힘들고 어두웠던 시기가 더 많은 것 같다. 그럼에도 불구하고 결과적으로는 내 인생에서 아주 뜻깊고 결정적인 한 해였기 때문에, 나의 다사다난한 과거가 미래의 누군가에게 도움이 되었으면 좋겠다는 마음으로 회고록을 ..
Dev Note
- 1. 데스크탑 애플리케이션 프레임워크, 일렉트론에 대해 알아보자. 시작하며 지금까지 일렉트론을 통해 pc앱 개발/빌드/유지보수를 해오면서 개인적으로 공부도 하고 정리도 하고 회사 내에서 간간이 세미나도 진행해 왔다. 하지만 돌아보면 A to Z의 글로 흐름 있게 '잘' 남기지는 못한 것 같아 글로 남겨야 한다는 필요성을 느꼈고, 일렉트론에 대한 공부가 필요한 사람들이 참고하면 좋을만한 정보들이 내 개인 노션에만 잠들어있는 게 아쉬웠다. 앞으로 블로그에 쓰인 시리즈의 글을 통해 누군가가 아래의 정보들을 얻어갈 수 있도록 작성해 나가는 것이 목표다. 일렉트론이 무엇인지, 일렉트론의 프로세스 구조는 어떻게 생겼는지, 본인이 개발한 웹 서비스로 어떻게 pc 앱을 만들 수 있는지, 어떻게 인증서를 넣어 빌드를 하는지, 자동 배포 구조는 어떻게 만드는지 사실 일렉트론을 주제로 꾸..
- 2. 일렉트론의 프로세스 구조와 통신에 대해 알아보자. 이전 포스팅에서 일렉트론이 무엇인지에 대해 간략하게 알아보았습니다. 1. 데스크탑 애플리케이션 프레임워크, 일렉트론에 대해 알아보자. 시작하며 지금까지 일렉트론을 통해 pc앱 개발/빌드/유지보수를 해오면서 개인적으로 공부도 하고 정리도 하고 회사 내에서 간간이 세미나도 진행해 왔다. 하지만 돌아보면 A to Z의 글로 흐름 있 todayscoding.tistory.com 이번에는 일렉트론의 프로세스 구조가 어떻게 되어있는지, 프로세스 간 통신을 어떻게 하는지에 대해 좀 더 자세히 알아보겠습니다. 일렉트론에서 가장 중요한 개념은 ‘격리’ 와 ‘통신’이다. 프로세스 구조를 모른 채로 Electron을 활용해서 개발을 하다 보면같은 js로 짜인 코드 간의 호출인데도 '왜 될 거 같은데 안되지?', '값을 넘겼..
- Intersection Observer 로 화면에 보이는 부분만 로딩하기 (feat. Lazy loading) 🖥️ 최근 회사에서 개발하던 기능 중 요소의 가시성에 따라 API 를 호출해야하는 작업이 있었습니다. 기존에는 페이지에 진입하는 순간 관련 API를 모두 호출하여 화면에 그려주는 방식으로 구현이 되어있었는데요, 해상도나 유저의 세팅 상태에 따라 보이지 않는 기능의 API까지 전부 호출하던 부분이 비효율적이라고 판단되어, 일반적으로는 이미지를 Lazy loading 하는데에 주로 쓰이는 Intersection Observer API 를 활용하여 서버로 호출하는 API 자체도 Lazy loading 을 시도해보았고, 관련 내용을 공유해보려고 합니다. Lazy loading 이란? Lazy loading 은 '지연 로딩', 즉 리소스를 식별하여 필요할 때만 로드하는 전략입니다. 웹이 발전함에 따라 사용자에게 ..
- 크롬 개발자도구 뜯어보기 Why? ✏️ 개발자 도구는 평소에 습관처럼 디버깅하는데에 쓰고 있지만, 이번에 회사에서 '프론트엔드 성능 최적화 가이드'라는 책으로 스터디를 진행하면서 생각보다 놓치고 있는 부분도 많고 더 좋은 기능도 많이 제공하고 있다는 것을 알게되어 포스팅을 해본다. 크롬 개발자 도구 크롬 브라우저에서 제공하는 웹 개발에 도움되는 다양한 툴입니다. 여는 방법 f12 ctrl + shift + i (command + option + i) 요소 검사 (하이라이트) Network 패널 현재 웹 페이지에서 발생하는 모든 네트워크 트래픽을 상세하게 알려줍니다. 어떤 리소스가 어느 시점에 로드되는지, 해당 리소스의 크기 등을 확인할 수 있습니다. Perfomance 패널 웹 페이지가 로드될 때, 실행되는 모든 작업을 보여줍니..
- PostgreSQL 에서 Vacuum 이 필요한 이유 (MVCC, XID) 🧹 PostgreSQL을 사용한다면 Vacuum에 대해 반드시 잘 이해하고 적절하게 관리해야 합니다. 얼마전 운영하고있던 서비스에 Vacuum 을 통한 관리가 제대로 되지 않았던 이유로 DB부하가 심하게 와서 장애가 발생한 적이 있습니다. 이번 포스팅에서는 신경쓰지 않으면 서비스에 치명적일 수 있는 Vacuum 의 역할에 대해 자세히 알아보려고 합니다. Vacuum 의 첫 번째 역할, 공간확보! Vacuum의 사전적 의미는 "진공청소기를 이용한 청소" 입니다. UPDATE 와 DELETE 를 통해 변경 또는 삭제된 자료들이 차지 하고 있는 디스크 공간을 다시 사용하기 위해 불필요한 쓰레기 데이터들을 정리하고, 디스크 공간의 효율성을 높입니다. 왜 불필요한 쓰레기 데이터가 공간을 차지하는걸까요? 다중 버전..
- JavaScript 에서는 함수형프로그래밍이 대세다? (함수형 vs 객체지향) Why? 💬 요즘엔 주로 javascript 를 활용하여 개발을 하고 공부를 하고 협업을 하다보니 같은 언어인데도 사람마다 정말 다양한 코드 스타일로 작업을 한다고 느낀다. 보통은 주로 활용하는 라이브러리나 프레임워크가 코드스타일에 영향을 많이 주는 것 같은데, 나의 회사의 경우 프레임워크 없이 프론트엔드 개발을 하고 있어 더욱 멤버들의 자유도가 높다. 그래서 문득 '어떤 이유와 의도로 지금의 방식으로 프로그래밍을 하고있는 것일까?' 라는 생각, '과연 그 방법은 내가 개발하고자 하는 서비스에 최적화되어있을까?' 라는 생각이 들어 함수형과 객체지향에 대해서 간단히 정리를 해 보았다. 그리고 동료들도 다들 어떤 이유로 본인의 스타일을 만들었고 유지하게 되었는지가 궁금해서 이야기를 나눠보았다. 1. 객체지향..
- 인프콘에서 네트워킹 할 준비 완료! 가보쟈고~!~! https://www.rallit.com/resumes/126010@soiy0205/%EC%9E%A5%EC%86%8C%EC%9D%B4 장소이 - 풀스택 개발자 이력서 www.rallit.com
- 업무의 미로에서 방향 찾기 현재 회사에 풀스택 개발자로 입사 후 3년이 지나 올해로 4년 차가 되었고, 그 사이에 팀장이라는 직책도 임명받았고 얼마 전에는 연봉협상도 진행되었다. 언제나 그렇듯 연봉협상을 하면 회사 분위기가 뒤숭숭하다. 아무래도 경기가 안 좋은 요즘 같은 상황엔 누구나 만족할만한 연봉 인상률이 나오긴 힘드니, 열심히 달려왔던 동료들의 동기부여가 줄어든 모습이 많이 보인다. 이번 인사평가때는 처음으로 누군가를 평가하고, 그 평가가 누군가의 연봉 인상률에 영향을 미치는 경험을 하게 되었다. 나는 입사 후 지금까지 매년 해가 넘어가는 이 시즌에는 모든 업무프로젝트들과 내 활동에 대한 회고를 정리하곤 했고, 그 회고는 겸사겸사 평가를 위한 자료로도 쓰이곤 했다. 그래서 이번에도 팀원들에게 본인이 본인을 회고하는 시간을 가..
- Protocol Buffers 로 Java - NodeJs 통신시키기 왜 REST Api 에 Protocol Buffer 를 적용했는가? 얼마전 신규 오픈한 기능의 실시간 통신을 위해 구축해놓은 서버가 정상수치가 아니라는 인프라팀의 제보가 왔다. 정확히는 nginx 에서 무리가 왔기 때문에 소켓 서버를 타겟으로 들어오는 부분에서 문제가 있다는 추측이다. PM2 로그를 통해 본 서버로그에 아래와 같은 문구가 엄청나게 많이 찍히고 있고 파일이나 크기가 큰 리스트를 주고받는 경우도 많았기 때문에 실시간 서버에 들어오는 데이터의 크기를 의심하고 리퀘스트 파라미터를 처리하는 개선 작업을 진행해보려고 가닥을 잡았다. 어떻게 request entity 를 줄일 수 있나? 처음에는 빨리 해결하는 방법과 제대로 해결하는 방법 2가지의 안을 가지고 있었다. 회사의 상황상 기능 개발이 아닌 ..
- '모던자바스크립트 Deep Dive' 를 읽으며 (5장~8장) 5장. 표현식과 문 🧐 '값'은 '표현식'이 평가되어 생성된 결과를 말한다. var sum = 10 + 20 이 간단한 '문'은 '10' 과 '20' 이라는 숫자 '리터럴' 의 합이 '평가'되어 생성된 숫자 '값' 이 할당되는 '할당문'이다. 값으로 평가될 수 없는 변수선언문과 같은 것들은 표현식인 문이 아니다. 간단한 문이라도 기본을 놓치지 말고 깊이있게 이해하려고 노력하자. ✅ 문과 표현식을 구별하고 해석할 수 있다면 자바스크립트 엔진의 입장에서 코드를 읽을 수 있고 실행 결과를 예측하는 데 도움이 된다. 이는 버그를 줄이고 코드의 품질을 높여줄 것이다. 네! 🧐 자바스크립트 엔진이 소스코드를 해석할 때 문의 끝이라고 예측되는 지점에 세미콜론을 자동으로 붙여주는 세미콜론 자동 삽입 기능(ASI)이 암..
- '모던자바스크립트 Deep Dive' 를 읽으며 (1장~4장) 1장. 프로그래밍 🧐 대부분의 문제(요구사항)은 복잡하며 명확하지 않을 수도 있다. 따라서 문제(요구사항)을 명확히 이해하는 것이 우선되어야 하며 복잡함을 단순하게 분해하고 자료를 정리하고 구분해야 하며 순서에 맞게 행위를 배열해야 한다. 프로그래밍에 대한 내용이긴 했지만, 그 외에도 업무적인 해결 능력이나 프로젝트 진행중 문제 해결능력에 대해서도 기억하고있으면 좋을 만한 내용이라는 생각이 들었다. 개발과 업무, 프로젝트 관리 등 요구사항이나 문제는 항상 복잡하고 명확하지 않을 수 있으며, 그 불명확함을 단순하게하고 배열하는게 문제해결 능력이라는 사실을 기억하자. 🧐 프로그래밍 학습은 일반적으로 문법을 배우는 것부터 시작하는 외국어 학습과 유사하다. 문법을 잘 안다고 해서 외국어를 잘한다고 말할 수는 없..
- 3.5년차 개발자 회고록 (+ 2023년 개인 회고록) 1. 시작하며 3년차 개발자 회고록 (상반기) 1. 시작하며 블로그에 "3년 차 개발자 회고록"이라는 타이틀로 글을 시작하는 날이 오다니 새삼 신기하다. 신입 때 나의 상상 속 3년 차 개발자는 분명 어나더클래스의 실력을 갖춘 미친 퍼포먼스 todayscoding.tistory.com 상반기 회고록 쓴 지가 벌써 6개월이나 지났다니. 나이 들수록 시간이 빨리 간다더니 진짜 맞는 말인가 보다. 이전에 기록했던 회고들을 쭉 훑어봤는데, 업무와 업무 외 개발활동 말고는 내 개인적인 생활이나 감정이 담겨있는 글이 없는 게 아쉬웠다. 회고록을 기록하기 시작했을 때 '개발자 회고록'이라는 타이틀을 붙여서인지 아니면 실제로 내 생활보단 일을 먼저 생각했기 때문이었는지는 모르겠다. 결론적으로는 이번 회고록은 하반기 회..
- 효과적인 코드 리뷰를 향한 여정 (ft. aws codecommit, space) 현재 제가 몸담고있는 개발팀에서는 space라는 리뷰툴을 활용해 코드리뷰 진행 검토를 진행중입니다. space 라는 툴이 선택되기까지 정말 많은 과정이 있었고, 그럼에도 불구하고 아직 개선하고 정해야할 프로세스도 많습니다. 제가 저희 조직에 도입하기 위해 거쳐온 이 경험들이 얕은 경험에 불과할 수도 있겠지만, 아직 코드 리뷰를 정착하지 않은 팀이나 조직이 있다면 중간 공유가 인사이트가 될 수도 있을 것 같아 사용 후기를 공유합니다. 왜 space 를 쓰게 되었나 처음엔 flow task로 pull request 시작. 작년 이맘때쯤까지 저희 팀에서는 플로우 협업툴 업무 게시글을 활용한 pull request 를 진행했었습니다. 하지만 당시에는 아래와 같은 문제로 인해 자~연 스럽게 역사속으로 사라졌습니다..
- 3년차 개발자 회고록 (상반기) 1. 시작하며 블로그에 "3년 차 개발자 회고록"이라는 타이틀로 글을 시작하는 날이 오다니 새삼 신기하다. 신입 때 나의 상상 속 3년 차 개발자는 분명 어나더클래스의 실력을 갖춘 미친 퍼포먼스를 내는 사람일 거라고 생각했었다. 하지만 현실은 비교적 능숙하게 힘을 덜 들이며 효율적으로 쳇바퀴를 타는 방법을 터득했다..?라고 느끼는 것 말고는 아직도 배울 것이 더 많은 부족한 사람이다. 물론 능숙하게 쳇바퀴를 타기 위해 2년 넘게 꽤나 치열하게 노력해 왔으니 지금의 상황이 만족스럽기도 하다. 평범함 속에 숨겨진 성실함이 비범한 인생의 조건이라는 말도 있으니까 말이다. 작년과 재작년에 12개월치 회고를 하는 게 밀린 일기를 쓰는 기분이었어서, 올 해는 1~6월까지의 상반기 회고록을 나눠서 써보려고 한다. 2..
- PostgreSQL 에서 Vacuum 이 필요한 이유 (MVCC, XID) 🧹 PostgreSQL을 사용한다면 Vacuum에 대해 반드시 잘 이해하고 적절하게 관리해야 합니다. 얼마전 운영하고있던 서비스에 Vacuum 을 통한 관리가 제대로 되지 않았던 이유로 DB부하가 심하게 와서 장애가 발생한 적이 있습니다. 이번 포스팅에서는 신경쓰지 않으면 서비스에 치명적일 수 있는 Vacuum 의 역할에 대해 자세히 알아보려고 합니다. Vacuum 의 첫 번째 역할, 공간확보! Vacuum의 사전적 의미는 "진공청소기를 이용한 청소" 입니다. UPDATE 와 DELETE 를 통해 변경 또는 삭제된 자료들이 차지 하고 있는 디스크 공간을 다시 사용하기 위해 불필요한 쓰레기 데이터들을 정리하고, 디스크 공간의 효율성을 높입니다. 왜 불필요한 쓰레기 데이터가 공간을 차지하는걸까요? 다중 버전..
- Intersection Observer 로 화면에 보이는 부분만 로딩하기 (feat. Lazy loading) 🖥️ 최근 회사에서 개발하던 기능 중 요소의 가시성에 따라 API 를 호출해야하는 작업이 있었습니다. 기존에는 페이지에 진입하는 순간 관련 API를 모두 호출하여 화면에 그려주는 방식으로 구현이 되어있었는데요, 해상도나 유저의 세팅 상태에 따라 보이지 않는 기능의 API까지 전부 호출하던 부분이 비효율적이라고 판단되어, 일반적으로는 이미지를 Lazy loading 하는데에 주로 쓰이는 Intersection Observer API 를 활용하여 서버로 호출하는 API 자체도 Lazy loading 을 시도해보았고, 관련 내용을 공유해보려고 합니다. Lazy loading 이란? Lazy loading 은 '지연 로딩', 즉 리소스를 식별하여 필요할 때만 로드하는 전략입니다. 웹이 발전함에 따라 사용자에게 ..
- 크롬 개발자도구 뜯어보기 Why? ✏️ 개발자 도구는 평소에 습관처럼 디버깅하는데에 쓰고 있지만, 이번에 회사에서 '프론트엔드 성능 최적화 가이드'라는 책으로 스터디를 진행하면서 생각보다 놓치고 있는 부분도 많고 더 좋은 기능도 많이 제공하고 있다는 것을 알게되어 포스팅을 해본다. 크롬 개발자 도구 크롬 브라우저에서 제공하는 웹 개발에 도움되는 다양한 툴입니다. 여는 방법 f12 ctrl + shift + i (command + option + i) 요소 검사 (하이라이트) Network 패널 현재 웹 페이지에서 발생하는 모든 네트워크 트래픽을 상세하게 알려줍니다. 어떤 리소스가 어느 시점에 로드되는지, 해당 리소스의 크기 등을 확인할 수 있습니다. Perfomance 패널 웹 페이지가 로드될 때, 실행되는 모든 작업을 보여줍니..
- JavaScript 에서는 함수형프로그래밍이 대세다? (함수형 vs 객체지향) Why? 💬 요즘엔 주로 javascript 를 활용하여 개발을 하고 공부를 하고 협업을 하다보니 같은 언어인데도 사람마다 정말 다양한 코드 스타일로 작업을 한다고 느낀다. 보통은 주로 활용하는 라이브러리나 프레임워크가 코드스타일에 영향을 많이 주는 것 같은데, 나의 회사의 경우 프레임워크 없이 프론트엔드 개발을 하고 있어 더욱 멤버들의 자유도가 높다. 그래서 문득 '어떤 이유와 의도로 지금의 방식으로 프로그래밍을 하고있는 것일까?' 라는 생각, '과연 그 방법은 내가 개발하고자 하는 서비스에 최적화되어있을까?' 라는 생각이 들어 함수형과 객체지향에 대해서 간단히 정리를 해 보았다. 그리고 동료들도 다들 어떤 이유로 본인의 스타일을 만들었고 유지하게 되었는지가 궁금해서 이야기를 나눠보았다. 1. 객체지향..
- 2. 일렉트론의 프로세스 구조와 통신에 대해 알아보자. 이전 포스팅에서 일렉트론이 무엇인지에 대해 간략하게 알아보았습니다. 1. 데스크탑 애플리케이션 프레임워크, 일렉트론에 대해 알아보자. 시작하며 지금까지 일렉트론을 통해 pc앱 개발/빌드/유지보수를 해오면서 개인적으로 공부도 하고 정리도 하고 회사 내에서 간간이 세미나도 진행해 왔다. 하지만 돌아보면 A to Z의 글로 흐름 있 todayscoding.tistory.com 이번에는 일렉트론의 프로세스 구조가 어떻게 되어있는지, 프로세스 간 통신을 어떻게 하는지에 대해 좀 더 자세히 알아보겠습니다. 일렉트론에서 가장 중요한 개념은 ‘격리’ 와 ‘통신’이다. 프로세스 구조를 모른 채로 Electron을 활용해서 개발을 하다 보면같은 js로 짜인 코드 간의 호출인데도 '왜 될 거 같은데 안되지?', '값을 넘겼..
- 1. 데스크탑 애플리케이션 프레임워크, 일렉트론에 대해 알아보자. 시작하며 지금까지 일렉트론을 통해 pc앱 개발/빌드/유지보수를 해오면서 개인적으로 공부도 하고 정리도 하고 회사 내에서 간간이 세미나도 진행해 왔다. 하지만 돌아보면 A to Z의 글로 흐름 있게 '잘' 남기지는 못한 것 같아 글로 남겨야 한다는 필요성을 느꼈고, 일렉트론에 대한 공부가 필요한 사람들이 참고하면 좋을만한 정보들이 내 개인 노션에만 잠들어있는 게 아쉬웠다. 앞으로 블로그에 쓰인 시리즈의 글을 통해 누군가가 아래의 정보들을 얻어갈 수 있도록 작성해 나가는 것이 목표다. 일렉트론이 무엇인지, 일렉트론의 프로세스 구조는 어떻게 생겼는지, 본인이 개발한 웹 서비스로 어떻게 pc 앱을 만들 수 있는지, 어떻게 인증서를 넣어 빌드를 하는지, 자동 배포 구조는 어떻게 만드는지 사실 일렉트론을 주제로 꾸..
- 2년차 개발자 회고록 작년에도 연말에 휘몰아치는 업무를 해내느라 겨우 1월에 정신을 되찾고 회고록을 썼었는데, 올해는 무려 2월이 되어서야 작년 회고록을 쓴다. 작년 회고록에서 내 개발자 생활은 "눈코 뜰새 없다."라는 표현이 참 어울린다고 했었는데, 올 해 역시 그 표현은 유효하다. (이번에도 글에서는 읽기 편하게 올해라고 표현하려고 한다.) 워낙 정리하면서 일하는 걸 좋아하는 성격이라 진작에 연간 업무에 대한 정리는 노션에 차곡차곡 쌓아왔었는데, 회고글은 미루고 미루다 이제야 쓰는 걸 보니 정리와 글은 또 다른 영역인가 보다. 앞으론 나를 돌아보는 글에도 부지런해야겠다. 시작하며 오늘 서점에서 ‘창피하지만, 일단 해봅니다.’라는 책을 샀다. 그 책의 일부에 이런 말이 나온다. 능력이 아니라 태도로 싸워라. 능력은 비교하기..
- (기고문) 함께 일하기 위한 도구, 협업툴 개발자의 질문 지난 8월, 개발자를 위한 매거진, 리드잇zine 4호에 내 두번째 기고문이 실렸다. '함께 일한다는 것'이라는 주제를 보고 협업툴 회사에 일하는 개발자로서 그냥 지나칠 수 없었다. readIT zine 4호 | 리드잇 | 교보문고- 교보ebook 개발자를 위한 매거진, 리드잇zine 4호! 이번 4호 주제는 '함께 일한다는 것'입니다. 이번 호에서는 사람 이야기를 담았습니다. 코로나19가 발생한 지 4년이 지났지만 여전히 코로나 확산세가 심상 ebook-product.kyobobook.co.kr 전문 나는 메신저와 업무관리가 더해진 협업툴 서비스 ‘플로우`를 개발하고 있다. 협업툴은 사람들이 협업을 할 수 있도록 도와주는 도구이며, 한마디로 난 사람들에게 함께 일하기 좋은 문화와 원활한 소통의 문화를 ..
- [책 후기] Do it! 모던 자바스크립트 프로그래밍의 정석 읽게된 계기 모던 자바스크립트(es6)를 현재 실무에서 활용하고 있으나, 필요한 부분만 조금씩 찾아보거나 부분적인 강의만 들었을 뿐 전체적으로 한번에 훑어본 적이 없었다. 아직 모르는 지식도 많아서 아는 것들 사이에 중간중간 채워넣기 위해 언젠가 기본서적을 꼭 읽어야겠다고 생각했었는데, 마침 새로운 도서가 나와서 신청하여 읽게되었다. 좋았던 부분 1. 제목에 써있는 대로 정말 교과서처럼 '이해-실습-문제' 과정으로 진행된다. 처음 접하는 분들이 직접 코드를 작성하면서 익혀나가기 좋을 것 같다. 2. 코드예시가 정말 친절하게 단계별로 작성되어있고, 설명도 매우 풀어서 쉽게 작성되어있어 큰 어려움 없이 바로바로 이해하면서 넘어갈 수 있다. (그럼에도 불구하고 이해가 안되면 유튜브에서 무료로 제공되는 동영상 ..
- intellij 에서 git 으로 인식되지 않는 브랜치 해결 ( /.idea 폴더의 역할) intellij 사용중에 특정 레포에서만 몇몇 브랜치에서 git 으로 인식되지 않는 문제가 발생했다. 원인 자체는 간단하지만, 인텔리제이 사용자라면 협업중에 비슷한 경우가 생길 수 있는 부분이라 기록한다. 현상 일반적인 경우 git, commit ,history 등 intellij 에서 제공하는 탭들이 보여야 정상인데, 아래처럼 git 이 아닌 일반 프로젝트로 나오고 있었다. 특정 브랜치에서만 인텔리제이를 활용한 풀리퀘,커밋,깃 코드 분석과 히스토리를 전혀 볼 수가 없었지만 터미널을 통해 다른 브랜치로 체크아웃을 한 후엔 정상적으로 작동하고 있었다. 원인 원인은 인텔리제이를 사용하지 않는 다른 협업자가 불필요한 폴더를 삭제하는 과정중에 /.idea 폴더를 삭제한 뒤 push 를 한게 원인이었다. 위 문제..
- 인덱스 확장 기능 사용법 인덱스 스캔 방식은 여러가지가 있다. 각 스캔 방식의 주요 특징을 비교해보자. 1. Index Range Scan B*Tree 인덱스의 가장 일반적이고 정상적인 형태의 액세스 방식이다. 인덱스 루트에서 리프 블록까지 수직적으로 탐색한 후에 ‘필요한 범위'만 스캔한다. 앞선 내용에 있지만, 범위지정시캔을 하려면 선두 컬럼을 가공하지 않은 상태로 조건절에 사용해야 한다. 다시 강조하지만 인덱스를 태운다고 성능이 좋다고 생각하면 안된다. 스캔 범위와 액세스 횟수를 얼마나 줄일 수 있느냐로 성능이 결정된다. 2. Index Full Scan 수직적 탐색 없이 인덱스 리프 블록을 처음부터 끝까지 수평적으로 탐색하는 방식이다. 대게 데이터 검색을 위한 최적의 인덱스가 없을 때 차선으로 선택된다. Index Full..
- 인덱스 기본 사용법 인덱스를 사용한다는 것 인덱스 컬럼을 가공하지 않아야 인덱스를 정상적으로 사용할 수 있다. 즉, 인덱스 컬럼을 가공하면 인덱스를 정상적으로 사용할 수 없다. 여기서 ‘인덱스를 정상적으로 사용한다'는 표현은 리프 블록에서 스캔 시작점을 찾아 거기서부터 스캔하다가 중간에 멈추는 것, 즉 리프 블록 일부만 index Range Scan을 의미한다. 인덱스 컬럼을 가공해도 인덱스를 사용할 수는 있지만, 스캔 시작점을 찾을 수 없고 멈출 수도 없어 리프 블록 전체를 스캔해야만 한다. 즉 일부가 아닌 전체를 스캔하는 Index full scan 방식으로 작동한다. 인덱스를 Range Scan 할 수 없는 이유 인덱스 스캔 시작점을 찾을 수 없기 때문이다. 일정 범위를 스캔하려면 ‘시작'과 ‘끝' 지점이 있어야함. ..
- 인덱스 구조 및 탐색 인덱스 튜닝의 두 가지 핵심요소 인덱스는 큰 테이블에서 소량 데이터를 검색할 때 사용한다. 온라인 트랜젝션 처리 (OLPT) 시스템에서는 소량 데이터를 주로 검색하므로 인덱스 튜닝이 무엇보다 중요하다. 첫번째. 인덱스 스캔 효율화 튜닝 인덱스 스캔 과정에서 발생하는 비효율을 줄이는 것. 두번째. 랜덤 엑세스 퇴소화 튜닝 테이블 액세스 횟수를 줄이는 것. 인덱스 스캔 후 테이블 레코드를 엑세스할 때 랜덤 I/O 방식을 사용함. 데이터 베이스 성능이 느린 이유는 디스크 I/O 때문이다. 읽어야 할 데이터량이 많고, 그 과정에 디스크 I/O가 많이 발생할 때 느리다. 인덱스를 많이 사용하는 OLTP 시스템이라면 디스크 I/O 중에서도 랜덤 I/O가 특히 중요하다. 이 두개중 성능에 미치는 영향이 더 큰 것은 ..
- 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..
- 소프트 파싱 vs 하드 파싱 소프트 파싱 vs 하드 파싱 라이브러리 캐시 SQL 파싱, 최적화, 로우소스생성 과정을 거쳐 생성한 내부 프로시저를 반복 재사용할 수 있도록 캐싱해 두는 메모리 공간을 ‘라이브러리 캐시'라고 한다. 라이브러리 캐시는 SGA의 구성요소이다. 하나의 쿼리를 수행하는데 있어 후보군이 될만한 무수히 많은 실행경로를 도출하고, 짧은 순간에 딕셔너리와 통계정보를 읽어 각각에 대한 효율성을 판단하는 과정은 결코 가벼울 수 없다. 이렇게 어려운 작업을 거쳐 생성한 내부 프로시저를 한번만 사용하고 버린다면 이만저만한 비효율이 아니기 때문에 라이브러리 캐시가 필수적이다. SGA(System Global Area) : 서버 프로세스와 백그라운드 프로세스가 공통으로 엑세스하는 데이터와 제어 구조를 캐싱하는 메모리 공간이다. ..
- 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 내부에서 프로시저를 작성하고 컴파일해서 실행 가능한 상태로 만드는 전 과정..
- [SQL-1] 정규화란? - 제 1/2/3정규형 정규화의 개념과 필요한 이유에 대해서 알아보자 1. 제1정규형 : 모든 속성은 반드시 하나의 값을 가져야 한다. 1) 잘못된 사례1 => 다중 값을 가지는 경우 다음과 같은 모델이 있다고 가정했을 때 발생할 수 있는 문제는 다음과 같다. 연락처 정보에서 집전화 번호와 핸드폰 번호를 구별할 수 없다. 집전화가 여러대인 '장소오'와 핸드폰번호가 여러개인 '장소삼'이 혼재되어잇기 때문에 원하는 데이터만 추출하기 어렵다. 이메일처럼 다른 유형의 데이터를 포함할 수도 있어 본연의 의미가 퇴색될 수 있다. 이와 같이 데이터를 관리한다면 '연락처' 속성의 의미는 퇴색될 것이고, 개발의 복잡성은 증가할 것이며 장기적으로 불안정한 데이터 구조를 양산할 것이다. 사원번호 사원명 연락처 10001 장소이 010-1111-2..
- [네덜란드 교환학생] 헤이그 대학교 입학허가서 준비서류 과거타 블로그에 작성했던 내용을 우연히 발견하게 되어 이 블로그로 옮긴다. 드디어 고생고생고생고생끝에 입학 허가 메일이 도착했다ㅠㅠ 준비하는데 자료들이 부족했고 세종대학교의 경우 이번에 헤이그대학에 처음 파견되는 것이기 때문에 너무너무 정보가 부족했다. 그래서 다음학기에 파견될 분들을 돕는것 뿐만아니라 이 고생을 나중에도 기억하기위해...? 정리를 하기로 결심! ㅋㅋㅋ 일단헤이그대학 입학허가서 준비를 위한 서류는 크게 5가지가 있다. 1. 통장 사본 2. subject choice form 3. Antecendents declaration 4. proof of sufficient financial means (잔고확인증 선택!) 5. 보험료 납인확인증 1,2번은 학교측에서 요구하는 사항이고 3,4,5번..
- [네덜란드 교환학생] 헤이그 대학교 전공선택 과거타 블로그에 작성했던 내용을 우연히 발견하게 되어 이 블로그로 옮긴다. 2016년 가을학기에 네덜란드의 헤이그대학교로 교환학생을 가기로 결정이 났다. 정식 명칭은 헤이그 실무중심대학이다. Hague University of of Applied Sciences 네덜란드는 두가지의 대학 종류가 있는데 우리나라와 비슷 하게 연구 중심 대학(Research University) 와 실무중심 대학(University of Applied Sciences)로 나뉘어 진다고 한다. 열심히 지원서를 쓰고 면접을 준비해서 교환학생에 일단 붙기만 하면 반은 왔을거라 생각했던 나의 크나큰 착각이었다. 합격통보를 받은 후 좀 오래 있다가 합격자 오리엔테이션이 열렸는데 파견 담당자님이 " 네덜란드 헤이그대학 가시는 분들은 ..
- Oracle 과 PostgreSQL의 차이점 Oracle 과 PostgreSQL의 가장 큰 차이점은 2가지 정도로 나눌 수 있다. 1. MVCC 모델 구현 방식의 차이 MVCC란 다중 버전 동시성 제어(multiversion concurrency control, MCC, MVCC) 이다. 동시성 제어란 뭘까? 간단하게 말하면 만약 동시성 제어 없이 누군가가 데이터베이스를 읽는 동시에 다른 누군가가 기록을 하려고 한다면 사용자는 반쯤 기록되거나 일관성이 없는 데이터를 보게 될 가능성이 있다. 이렇게 동시성을 높이기 위해서는 '읽기 작업은 쓰기 작업을 블로킹 하지 않고, 쓰기 작업은 읽기 작업을 블로킹하지 않아야 한다'는 원칙을 지켜야 한다. 그 원칙을 지키기 위해 필요한게 MVCC 이다. - ORACLE : 이 MVCC를 구현하기 위해 UNDO 세그..
- 1년차 개발자 회고록 새해의 1월 하고도 12일이나 지났다. 회사에서 한 달 전부터 준비해온 22년 첫 업데이트를 무사히 끝내고 퇴근한 지금에서야 겨우 '아, 회고록!' 하고 마음을 다잡으며 키보드를 두드리게 된 나를 보니, 개발자로서의 이번 1년은 "눈코 뜰새 없었다."라는 표현이 참 어울린다. 이 글을 쓰고 있는 순간에도 '다음 개발건 쿼리 쪽 어떻게 개선하지? 일정 산출은 어느 정도로 하지?' 등의 수많은 물음표가 머리를 채우고 있으나, 최대한 걱정은 비우고 지난 1년을 차분히 되돌아보려고 한다. 시작하며 올해에는 정말 많은 일이 있었다. (1월이 되어버렸지만 몰입을 위해 올해라고 하자.) 정말 정말 많이 배웠고 많이 성장했다. 하지만 그보다 아직 아쉬운 점, 부끄러운 점이 너무나도 많다. 이렇게 스스로 부족함을 느끼는..
- [readIT 1호 Review] 성장판을 찾아서(1) 우연히 readIT 라는 교보문고에서 발간하는 매거진을 알게되었다. 1호는 21명의 현직자분들이 '개발자로서의 성장'에 대한 이야기를 하는 내용으로 구성되어있다. 개발자로서 성장에 목마름 반, 업무에 지침 반인 상태였던 나로서는 한문장 한문장이 먼저 길을 걸어본 선배님들이 바로 옆에서 건내주는 충고처럼 느껴졌다. (거의 랜선선배 21분 생긴 기분ㅠㅠ) 꼭 기록해놓고 두고두고 보며 개발자의 길을 걷는 동안 들여다보며 좋은 영향과 자극을 받고 싶다는 생각이 절로 들어서 인상깊은 부분들을 짧게나마 남긴다. 06 유한태 _ 성장판을 찾아서 정체보다 더 무서운 건 ‘포기’다. 새로운 자극이 들어와도 무시하는 상태. 현재 상태에 안주하지 말고 새로운 자극을 계속 받아들이자. 사람 들로부터, 책으로부터. 내가 가장 ..
- 스케줄링 알고리즘 기본 FIFO 스케줄링 말 그대로 First In First Out 배치처리 시스템과 비슷함 최단 작업 우선 (SJF) 스케줄링 Shortest Job First 가장 프로세스 실행시간이 짧은 프로세스부터 먼저 실행을 시키는 알고리즘 RealTime OS (RTOS) 응용프로그램 실시간 성능 보장을 목표로 하는 OS 저어엉확하게 프로그램 시작 / 완료 시간을 보장해야하는 공정스러운?곳에서 많이 쓰임. Hardware RTOS, Software RTOS General Purpose OS (GPOS) 프로세스 실행시간에 민감하지 않고, 일반적인 목적으로 사용되는 OS 우리가 쓰는 일반적인 운영체제가 여기에 속함. Windows, Linux 우선순위 기반 스케줄러 Priority-Based 스케줄러 정적 우선순위 ..
- 멀티 태스킹 vs 프로세싱 vs 프로그래밍 멀티 태스킹 단일 cpu 에서 여러 응용 프로그램을 동시에 실행하는 것처럼 보이게 하는 시스템 멀티 프로세싱 여러 cpu 에서 하나의 응용 프로그램을 병렬로 실행하게 해서, 실행속도를 높이는 기법 멀티 프로그래밍 최대한 cpu를 많이 활용하도록 하는 시스템이다. 즉, 시간대비 cpu 활용도를 높이기 위해 응용 프로그램을 짧은 시간 안에 실행완료가 가능하도록 하는것! 응용프로그램은 cpu를 온전히 쓰기보다는, 다른 작업을 중간에 필요로 하는 경우가 많기 때문.
- 일렉트론 커스텀 네비게이션바 [작업한 이유] 데스크탑 설치형 서비스를 일렉트론이라는 툴을 이용해서 개발하고 있다. 그리고 일렉트론은 기본적으로 제공하는 상단 바가 존재하지 않는다. 이전에 우리 서비스는 뒤로가기/앞으로가기가 따로 없이 레이어를 전환하는 방식으로 구현되어있었는데 이번 웹 리뉴얼에서 뒤로가기/앞으로가기가 생기면서 설치형에서도 해당 기능을 사용할 수 있도록 상단바의 일부 기능이 필요하게 되었다. 찾아보니 라이브러리를 이용하는 방식도 있지만 직접 아이콘으로 커스텀하여 기능을 적용하는 방식이 더 서비스에 녹아들기 좋을 것 같아 직접 기능을 넣는 방식으로 결정했다. - 뒤로가기 - 앞으로가기 - 새로고침 - 우클릭시 새로고침 / 강력새로고침 선택팝업 [작업방식] 이참에 일렉트론의 이벤트만 처리하는 파일도 분리해서 작업했고 이벤..
- 조직도 쿼리 개선 [개선했던 이유] 데스크탑 미니모드에서만 사용하던 조직도를 웹에서도 오픈할 예정이어서 기존에 조직도 탐색 시 아래의 거슬렸던 문제들을 해결하고자 개선을 진행했었다. 1. 전문을 사용자 depth 만큼 여러 번 호출하는 점 조직도가 펼쳐진 상태에서는 나의 소속 상위부서 뿐만 아니라 소속상위부서 하위의 같은 depth 부서들도 함께 조회해야 하기 때문에 재조회가 필요하다. 이 과정을 이전의 방식은 (최상위 -> 내 소속 부서)까지 한 depth 한 depth씩 js에서 반복분으로 찾아들어가 쿼리를 호출하도록 개발되어있었다. 2. 속도가 오래 걸리는 점 그러다 보니 안 그래도 슬로 쿼리로 이뤄져 있던 api인 데다가 depth가 깊은 경우에는 상위부서 값만 다르게 넘기는 동일 api의 수많은 호출이 일어나고 ..
- 섹션 1. 인터넷 네트워크 http/웹은 인터넷네트워크를 기반으로 하기때문에 사전학습으로 알아보자. 1. IP (인터넷 프로토콜) 인터넷 프로토콜의 역할 클라이언트가 ip주소를 부여받고 지정한 ip주소에 데이터를 전달한다. 이때 패킷(Packet)이라는 통신 단위로 데이터를 전달하게 된다. 한계 비연결성 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송한다! 정확히는 대상 서버가 패킷을 받을 수 있는지 없는지의 상태를 알 수가 없기 때문에 그냥 일단 보냄. 비신뢰성 중간에 패킷이 사라지거나 패킷이 순서대로 오지 않을 수 있다. 그럼 소실로 이어짐. 메시지가 대략 1500 바이트가 넘으면 끊어서 보내게 되는데, 끊어진 2개의 순서가 보장되지 않음. 패킷들이 중간에 다른 노드를 탈 수 있기 때문이다. ex) Hello, w..
- [JAVA] 변수(Variable), 타입, 형변환 1.1 변수란? 값을 저장할 수 있는 메모리상의 공간을 의미한다. 하나의 변수에는 단 하나의 값만을 저장할 수 있다. 그래서 값을 여러 번 저장하면 마지막에 저장한 값을 갖게 된다. 1.2 변수의 선언 변수가 선언되면 메모리에 변수의 타입에 맞는 크기의 저장공간이 확보되어, 값을 저장할 준비가 된다. 변수타입은 변수에 담을 값의 종류와 범위를 충분히 고려하여 결정해야 한다. 변수의 종류에 따라 변수의 초기화를 생략할 수 있는 경우도 있지만, 변수는 사용되기 전에 적절한 값으로 초기화 하는 것이 좋다. [참고] 지역변수는 사용되기 전에 초기화를 반드시 해야 하지만, 클래스변수와 인스턴스 변수는 초기화를 생략할 수 있다. 1.3 변수의 명명규칙 [필수규칙] 대소문자가 구분되며 길이제한이 없다. : True와..
- 퇴사 후 회고록 방향을 찾고 싶은가? 그렇다면 먼저 방향을 잃어봤는가? 2020년은 내 인생 터닝포인트의 해라고 말해도 과언이 아닐 정도로 내 생각, 감정, 생활 등등 모든 면에 있어 큰 변화를 가져왔던 1년인 것 같다. 약 3년간 열정을 다해 다니던 회사에서의 퇴사 후 슬럼프, 그리고 떠난 두 번째 유럽여행, 돌아와서 마음을 다잡고 시작하게 된 웹/플랫폼 개발, 슬럼프를 이기게 해 준 취미 댄스팀생활, 서울에서 홀로 보낸 백수 시절, 스타트업 개발자로의 새로운 시작. 2020년을 되돌아보면 정서적으로 어지럽고 힘들고 어두웠던 시기가 더 많은 것 같다. 그럼에도 불구하고 결과적으로는 내 인생에서 아주 뜻깊고 결정적인 한 해였기 때문에, 나의 다사다난한 과거가 미래의 누군가에게 도움이 되었으면 좋겠다는 마음으로 회고록을 ..
- [JAVA] 난수생성 Math.random() vs Random 이전에 난수에 대한 개념과 Seed에 대한 내용을 알아보았다. 이번에는 실제로 JAVA에서 사용되는 대표적인 난수 생성 방법인 Random클래스와 Math 클래스의 random()메소드에 대해 알아보자. 두 가지의 차이중 종자값의 개념이 포함되므로 seed 종자값에 개념은 설명은 미리 이해하는 것이 좋다. 2020/10/22 - [🕵🏻♀️개발지식/이론] - 컴퓨터에서 생성하는 난수는 진짜 난수가 아니다? 컴퓨터에서 생성하는 난수는 진짜 난수가 아니다? 코드를 짜다보면 '난수'를 사용해야하는 경우가 많다. 습관적으로 Random클래스나 Math클래스의 random() 매소드를 쓰곤 했는데 정확한 차이를 모르고 썼는데, 알고리즘 공부를 하던 중 난수가 진짜 todayscoding.tistory.com 자바..
- 컴퓨터에서 생성하는 난수는 진짜 난수가 아니다? 코드를 짜다보면 '난수'를 사용해야하는 경우가 많다. 습관적으로 Random클래스나 Math클래스의 random() 매소드를 쓰곤 했는데 정확한 차이를 모르고 썼는데, 알고리즘 공부를 하던 중 난수가 진짜 난수가 아니라는 글을 보고 이참에 컴퓨터가 난수를 생성하는 과정을 정확히 알고싶어졌다. 난수란? 난수(亂數)란 정의된 범위 내에서 무작위로 추출된 수를 일컫는다. 난수는 누구라도 그 다음에 나올 값을 확신할 수 없어야 한다. 하지만 컴퓨터 과학 분야에서 말하는 난수는 보통 결정론적인 방법으로 생성된 난수이다. 특정 입력이나 조건에 따라 무작위로 선택된 것처럼 보이는 난수 또는 난수열이 생성되며 그 생성 조건이나 입력이 같다면 그 결과값은 항상 같다. 진정한 의미에서의 난수는 아니지만 그 결과값이 충분히..
- [JAVA 백준알고리즘] 14888번 연산자 끼워넣기 14888번 연산자 끼워넣기! 깊이우선탐색(DFS)의 재귀호출을 활용한 문제 중 기본적인 문제에 속한다고 한다. 문제 N개의 수로 이루어진 수열 A1, A2, ..., AN이 주어진다. 또, 수와 수 사이에 끼워넣을 수 있는 N-1개의 연산자가 주어진다. 연산자는 덧셈(+), 뺄셈(-), 곱셈(×), 나눗셈(÷)으로만 이루어져 있다. 우리는 수와 수 사이에 연산자를 하나씩 넣어서, 수식을 하나 만들 수 있다. 이때, 주어진 수의 순서를 바꾸면 안 된다. 예를 들어, 6개의 수로 이루어진 수열이 1, 2, 3, 4, 5, 6이고, 주어진 연산자가 덧셈(+) 2개, 뺄셈(-) 1개, 곱셈(×) 1개, 나눗셈(÷) 1개인 경우에는 총 60가지의 식을 만들 수 있다. 예를 들어, 아래와 같은 식을 만들 수 있다..
- 정적 바인딩(Static binding) vs 동적 바인딩(Dynamic binding) 바인딩(binding)이란? 네이버 지식백과에서 찾아보면 바인딩은 '컴퓨터 프로그래밍에서 각종 값들이 확정되어 더 이상 변경할 수 없는 구속(bind) 상태가 되는 것' 으로 설명되어있다. 즉, 프로그래머가 코딩을 해서 컴파일을 하게 되면 각각의 코드가 메모리 어딘가에 저장되고, 함수를 호출하는 부분에는 그 함수가 저장된 메모리의 주소값이 저장되며 프로그래머가 값을 변경할 수 없는 상태가 된다. 여기서 함수를 호출하는 부분(호출부)에 함수가 위치한 메모리 번지(정의부)로 연결시킨 것을 바인딩이라고 한다! 정적바인딩(Static binding)이란? 실행 이전에 값이 확정되면 정적 바인딩이라고 한다. 컴파일 타임에 호출될 함수가 결정되는 것으로, 함수는 기본적으로 정적 바인딩된다. 컴파일러는 선언되어있는..
- 객체 지향 프로그래밍을 파해쳐보자! 처음 객체에 대해 배웠을 때 '객체'에 대해 설명하기 위해 노력하는 글들을 수도없이 읽었고, 나도 그 글을 이해하고 내 입으로 설명해보기 위해 몇일간 끙끙 앓았던 기억이 있다...🤣 수도없이 '객체'를 쓰고 있지만 아직도 그게 뭐야? 라고 물어보면 선뜻 대답하기가 쉽지 않다. 뭔지도 모르고 쓰지도 못했던 그때와는 달리 다행(?)히도 지금은 뭔진 정확히 몰라도 아주 유용히 쓰고 있으나 머리속에는 난해한 무언가만 남아있는 찝찝함😂😥 객체 지향 프로그래밍이 뭔지 간단명료하게 정리해보자!🕵🏻♀️ 객체지향프로그래밍(OOP : Object Oriented Programming) 이전에는? 객체 지향 프로그래밍 이전의 프로그래밍 패러다임을 살펴보면, 중심이 컴퓨터에 있었다. 프로그램이 어떤 일을 하고나서, 그 다음..
- [JAVA] replace()와 replaceAll()의 차이_정규표현식 vs 문자열 본 포스팅 내용은 제가 이해한 방식으로 구현 및 작성하였습니다. 더 좋은 방식이 있다면 피드백 주시면 정말 감사하겠습니다!🙏🏻 데이터베이스에 /r/n로 표현되어있는 엔터를 로 바꿔 표현하던 중 문제가 생겼다.. 컨트롤러에 작성한 java코드는 아래와 같다. 1. replaceAll("\\r\\n", " ") 사용 -> 오류 survey.setSurveyIntro(survey.getSurveyIntro().replaceAll("\\r\\n", " ")); replaceAll을 사용하여 다시 setter로 넣어줬는데도 바뀌지 않는 것이다. replaceAll함수 사용이나 set과 get사용에 문제가 있나? 2. replaceAll("수고", "소이") 사용 -> 정상작동 survey.setSurveyIntr..
- [DP_백준 9095번 문제_JAVA] 1, 2, 3 더하기 인생 두번째 알고리즘 문제 성공!🎇 아직까진 풀고나서 맞는지 아닌지 확신에 차진 않지만 다른 분들의 답을 보고 내가 생각하지 못한게 무엇인지를 파악하고 적용할 수 있는 정도가 되었다는 것도 하루만에 장족의 발전이라고 생각한다. 내일은 더 발전하자!🎈 문제풀이는 완벽하진 않지만 제가 이해한 방식으로 풀이 했습니다. 코드를 보다가 더 좋은 방식이 있다면 피드백 주시면 정말 감사하겠습니다!🙏🏻 문제 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 1+1+1+1 1+1+2 1+2+1 2+1+1 2+2 1+3 3+1 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트..
- [백준코딩사이트] 컴파일에러 발생시 백준사이트를 어제 처음 이용하다가 아래와 같이 '컴파일에러'라고 발생하였다. 원인은 아주 간단했다. 코드 제출 시 import구문도 함께 넣어줘야한다.
- [DP_백준 1463번 문제_JAVA] 1로 만들기 내 인생 처음으로 다이나믹 프로그래밍 문제를 풀었다!! 🎆 어제의 나처럼 첫 시작하시는 분들에게 도움이 되길 바라며 글을 써본다 어제 밤에 문제를 접하고 잠들기 전까지 잊혀지지 않아서 '동적프로그래밍' 으로 유튜브에 검색했을 때 나오는 영상들을 c/java/파이썬 언어불문 전부 재생해서 보면서 잠들었다. 그럼에도 불구하고 '재귀함수'라던가 'topdown방식과 bottonup방식'이 뭔지 전혀 이해가 되지 않는 상태였다. 이것 저것 찾아보다가 '사람과 컴퓨터 모두 이해하기 편한 방식' 이라고 쓰여있는 글을 보고 정말 놀라기도 했다... 하지만 누군가가 했으니 나도 할 수 있겠지!! 싶어서 찾아보며 공부한 끝에 문제풀이 성공! 누군가에겐 쉽고 간단한 문제일 수 있으나 시작이 반이라고.. 첫 성공이 감격스러..
- input 태그속성 중 disabled와 readonly의 차이 input태그에 넣어있는 value를 servlet에서 가져오려고 아무리 시도해봐도 null만 들어가는 상황에 봉착했다.. 답답한 상황에서 알게 된 사실! disabled와 readonly의 차이가 value값의 사용가능여부에 있다는 것!!! disabled 와 readonly 모두 input 태그를 비활성화시켜서 사용자가 직접 값을 입력하지 못한다는 점에서는 동일하다. 하지만 disabled로 설정했을 경우에는 value 값을 가져오지 못하고, readonly 는 값을 가져올 수가 있다. 이 간단한 걸 몰라서 1시간 가까이 시간을 버렸지만.......😂 그 끝에는 결국 알게되었음에 감사하며 공부를 계속한다🕵🏻♀️
- [HTML기초] 1.텍스트관련태그 ⚾ 글자 관련 태그 : h1~h6 까지 표현 할 수 있으며 h1이 가장 크고 h6이 가장 작다. h1 태그입니다. h2 태그입니다. h3 태그입니다. h4 태그입니다. h5 태그입니다. h6 태그입니다. ⚾ 줄바꿈 태그 ⚾ 수평선+줄바꿈 태그 ⚾ 문단 구분 태그 문단영역을 나누는 태그로는 p태그와 pre태그가 있다. p태그는 문단영역을 나누는 태그이지만 한 개의 공백만 표시하여 줄 바꿈입력을 별도의 태그로 지정해주어야한다. pre 태그는 여러칸 띄우기 혹은 줄 바꿈등을 포함하여 입력한 내용 그대로를 표현하는 태그이다. 문단영역을 나누는 태그로는 p태그와 pre태그가 있다. p태그는 문단영역을 나누는 태그이지만 한 개의 공백만 표시하여 줄 바꿈입력을 별도의 태그로 지정해주어야한다. pre 태그는 여러칸 띄..
- [JAVA기초] 변수(Variable)의 개념과 명명규칙 🎃 변수란? 값을 저장할 수 있는 메모리상(RAM)의 공간을 의미한다. 하나의 변수에는 단 하나의 값만을 저장할 수 있다. 여러 개의 값을 저장할 수는 없기 때문에, 값을 여러 번 저장하면 마지막에 저장한 값만을 갖게 된다. 🎃 변수의 선언 메모리 공간에 데이터를 저장할 수 있는 공간을 할당하는 것을 말한다. 더 자세히는, stack에 공간을 만들어 놓는 것이다. 변수가 선언되면 메모리에 변수의 타입에 맞는 크기의 저장공간이 확보되어, 값을 저장할 준비가 된다. 변수 타입(자료형)은 변수에 담을 값의 종류와 범위를 충분히 고려하여 결정해야 한다. 변수의 종류에 따라 변수의 초기화를 생략할 수 있는 경우도 있지만, 변수는 사용되기 전에 적절한 값으로 초기화 하는 것이 좋다. 지역변수는 사용되기 전에 초기화..
Best
- 정적 바인딩(Static binding) vs 동적 바인딩(Dynamic binding)
- intellij 에서 git 으로 인식되지 않는 브랜치 해결 ( /.idea 폴더의 역할)
- 컴퓨터에서 생성하는 난수는 진짜 난수가 아니다?
- 크롬 개발자도구 뜯어보기
- 인덱스 기본 사용법
- 1. 데스크탑 애플리케이션 프레임워크, 일렉트론에 대해 알아보자.
- PostgreSQL 에서 Vacuum 이 필요한 이유 (MVCC, XID)
- [JAVA] 난수생성 Math.random() vs Random
- 효과적인 코드 리뷰를 향한 여정 (ft. aws codecommit, space)
- [네덜란드 교환학생] 헤이그 대학교 입학허가서 준비서류
반응형