반응형

안녕하세요. 코딩교육자 Henry입니다.

 

첫인사로 제 닉네임 앞에 코딩교육자라는 말을 넣어보았습니다.

 

코딩교육자? 무슨의미지 싶어하시는 분들도 있을 것 같습니다.

 

개발자가 교육자의 길을 걸어야 하는 이유는? 라는 배달의 민족의 우아콘 2021에 나온 문구에서 따온 말입니다.

https://woowacon.com/?session=175 

 

Woowacon 2021

 

woowacon.com

 

코딩을 하는 사람들을 필히 교육자의 마음가짐을 가지고 살아야 한다는 것을 의미합니다.

 

이어서, 앞으로 저의 별칭을 코딩교육자라고 하겠습니다.

 

제가 배운 빅데이터 기술들을 쉽고 정확하게 가르쳐줄 수 있는 능력을 갖고 싶기 때문입니다.

 

오늘은 제가 빅데이터 엔지니어로 성장하기 2번째 일지를 쓰고 있습니다.

 

어떻게 시작할지 고민이 되었습니다.

 

성장이란 무엇일까요.

 

기술을 배워서 밥벌이를 할 수 있는 것?

다른 개발자보다 누군가보다 데이터를 잘하는 사람이 되는 것?

많은 기술들을 다루는 명령어를 외우는 것?

 

성장의 개념부터 정해야 했습니다.

 

여러번 고민하다가 정의를 내렸습니다.

성장이란, 빅데이터를 통해 누군가의 삶의 이롭게 해줄 수 있는 무언가를 만드는 기술력과 그런 마음가짐을 갖는 것.

 

저에게 성장이란, 기술을 넘어선 마음가짐이어야 했습니다.

 

돈을 위해 코드를 짜는 사람이 아니라, 

누군가를 편리하게 해주기 위해 코드를 짜는 사람이 되어야 겠다고 다짐했습니다.

 

오늘은 빅데이터 엔지니어로 성장하기의 2번째 일지입니다.

오늘 제가 성장 하기 위해 인강 쇼핑을 해보았습니다.

 

아직 빅데이터의 경험이 많이 없어,

먼저 인강을 들으며 어느정도 용어에 익숙해지면 좋겠다는 생각이 들었습니다.

 

인강에도 종류가 많이 있습니다.

 

  • 기술을 알려주는 인강
  • 개념 정리를 잘 해주는 인강
  • 개발자의 경험을 풀어서 궁금증을 풀어주고 초기 개발 성장의 로드맵을 그려주는 인강

 

제가 결정한 인강은,

개발자의 경험을 풀어서 설명을 듣는 로드맵 인강이었습니다.

 

 

특별히 이분의 이력을 보면서 초기 빅데이터 시장에 대한

경험들이 대단하다는 생각이 많이 들었습니다.

 

2000년대 초기부터 시작한 경력을 가지고 계셨고,

아래의 뉴스를 잠깐 읽어보았는데, 짧은 대화에서도

확실히 빅데이터라는 분야를 바라보는 시각을 가지고 계신 것 같았습니다.

 

https://news.mt.co.kr/mtview.php?no=2015112510281433366

 

오픈소스가 만드는 실리콘밸리, 오픈소스로 읽는다 - 머니투데이

실리콘밸리에서는 세상을 바꾸는 혁신이 만들어진다. 세상의 눈과 귀는 변화를 읽기 위해 혁신을 선도하는 최고경영자와 그들에 투자하는 벤처캐피털에 향해 있다. 혁신을 ...

news.mt.co.kr

 

그래서 이분이 로드맵을 그려주신다는 강의를 고르게 되었습니다.

 

강의는 아래와 같습니다.

 

사이트: 프로그래머스

강의명: 실리콘밸리에서 날아온 데이터 분야 커리어 특강

강의시간: 5시간 32분

 

앞으로 몇일 동안은 이분의 강의를 기록하는데 시간을 쓸 것 같습니다.

 

너무 좋은 시작이라 여겨집니다.

 

 

 

 

 

 

 

 

반응형
반응형

안녕하세요. Henry입니다

 

앞으로 블로그에다가 데이터 엔지니어로 성장하기 일지를 작성해보려고 합니다.

 

저는 지금은 금융권 회사에서 IT 업무를 맡으며 살아가고 있습니다.

 

하지만 학부시절부터 데이터 엔지니어링에 대한 흥미를 가져왔고,

 

사실 엄밀히 말하자면 제가 IT를 계속 할 수 있도록 도와주었던 원동력이 

 

바로 이 빅데이터 엔지니어링이었기 때문이었습니다.

 

이제 2021년이 다 갔습니다. 앞으로 2022년을 어떻게 보내야 할까 고민을 하던 찰나에

 

데이터 엔지니어로 커리어를 전문성으로 가지고 성장해보고 싶다는 꿈을 이루고 싶었습니다.

 

2022년에는 반드시 데이터 엔지니어로 공부하며 배운 지식들을 기록하고 공유할 수 있는 사람이 되고 싶습니다.

 

그래서 2022년 말 이맘 때가 왔을 때, 자신있게 1년간 성장했다는 것을 증명해보이고 싶습니다.

 

물론 현재 맡고 있는 업무와 무관한 분야인지라, 어려움도 많으리라 생각이 듭니다.

 

아무래도 밥벌이가 되는 현재 업무를 신경쓰기 시작하면, 지금은 다짐은 어느순간 뒷전이 될 수도 있다고 생각합니다.

 

그러나 우리 컴공인들이 학부시절 배웠던 분할정복법(Divide and Conquer)을 근간으로 계획성 있게 단계별로 목표를 잡아간다면

 

어떠한 변화(?)는 있으리라 기대해봅니다.

 

앞으로 저는 아래와 같은 방식으로 공부를 할 것입니다.

 

  • 인강(Inflearn, Fast Campus, Programmers, 논문들)
  • 개인 프로젝트
  • 개별 스터디
  • 데이터 분석 대회 등
  • Git 코드관리

위의 방식을 통해 이 분야에서 성장하고 싶습니다.

 

지금껏 저는 방향을 상실한 파도 위 돛단배와 같이 목적 없이 의미없이

 

그저 도움이 되리라는 마음가짐으로 다양한 분야의 공부를 폭식해왔습니다.

 

그러나 제가 배웠던 부분들을 자신감있게 누군가에게 가르쳐줄 만한 것들이 없는 것은 없는 것 같습니다.

 

모든 분야에서 완벽함을 갖추려고 했었던 욕심이었던 것 같기도 합니다.

 

이제 다시 초심으로 돌아가 공부를 하려고 합니다.

 

컴퓨터 안에서도 데이터 엔지니어링 이라는 세부분야를 전공 분야처럼 공부해보고 싶습니다.

 

그러기 위해서 가장 중요한 기록을 오늘 처음 시작합니다.

 

앞으로 제가 공부하면서 느끼고 배운 부분들을 여기에 적겠습니다.

 

오늘 스스로의 다짐은 훗날 저의 기쁨으로 찾아올 것입니다.

반응형
반응형

안녕하세요 

개발자 헨리입니다.

 

제가 요즘에 프로그래머스에서 진행하는 

Node.js 백엔드 개발 스터디를 참여하며

백엔드에 대해서 공부하고 있습니다.

 

강의를 듣게 된 이유는

저의 최종 목적지는 빅데이터 엔지니어인데,

그곳을 가기 위해, 백엔드는 필연적인 과정이라고 생각이 들었습니다.

회사에서는 Python을 이용한 Fastapi 서버

집에서는 배달의 민족 김영한님의 스프링 완전정복 커리큘럼을 공부하고 있는데,

 

공부라는게 혼자서 하는것보다 여럿이서 같이 하는게 

훨씬 더 재밌고 제가 추구하는 방향과 같아서

앞으로 좋은 스터디들을 찾아서 하려고 합니다.

 

"실무와 가까워지는 Node.js 백엔드 개발(feat,TypeScript)"

 

 

 

# 스터디를 시작하기 전에

3가지 준비물이 필요합니다.

 

- 소통하기 위한 슬랙

- 스켈레톤 코드가 담긴 깃 레파지토리 클론하기

- 매주 목요일 온라인 스터디를 위한 줌 설치

 

 

# 1주차 스터디를 통해서 배운 점

1. 데이터베이스 설계를 먼저 해라

프로젝트를 시작할 때, 우선 데이터베이스 설계를 하는 것이 중요하다.

왜냐하면, 결국 데이터의 형태와 타입에 따라서 프로그램이 설계되기 때문이다.

스터디 리더이신 배달의민족 "송요창" 리더님도 이번 스터디를 통해서

프로젝트에 따른 데이터베이스 선택 방법을 잘 익혔으면 좋겠다고 말씀하셨다.

 

2. 인증과 인가

예전에 면접을 보려던 어떤 스타트업에서 이런 질문을 받았던 적이 있다.

 

"지금 회사에서 Fastapi를 사용해서 API 서버를 운영하고 계시다고 하셨는데,

인증은 어떻게 하고 계세요?"

 

그때 인증에 대해서 제대로 알지 못하고 있었기 때문에, 

답변을 하지 못했다.

 

그런데 이번에 인증과 인가 개념에 대해서 제대로 배울 수 있어 좋았다.

 

인증이란, 너가 누구인지 궁금해 하는 것이고,

인가란, 너가 누군지는 알겠는데, 권한이 있느냐 는 것이다.

 

이번 수업을 통해서 배울 수 있었다.

 

3. 타입스크립트와 자바스크립트의 차이

송요창 리더님께서 타입스크립트와 자바스크립트의 차이에 대해서 명확하게 설명해주셨다.

자바스크립트는, 자료타입이 제대로 명시가 되어 있지 않은 프로그래밍 언어이기 때문에,

이 경우에 타입 처리를 해줄때, 에러를 에러로 보지 않아서, 실제 운영환경에서 많은 에러가 발생한다.

그래서 타입스크립트가 나오게 되었다. 그 결과 기존 프로젝트 개발 테스트 환경에서 80% 에러가 소멸하게 되었다.

타입스크립트는, 자바스크립트와 문법적으로 배우 유사하지만, 각 변수들의 타입들을 명시해주는 것이

특징인 언어이다.

 

# 리더님이 계신 배달의 민족에서도 타입스크립트는 사용하고 계시고,

계속적으로 인기가 많아지고 있다.

 

타입스크립트 관심도 변화

 

4. 파이어베이스의 파이어스토어

파이어베이스는 예전에 개인적으로 채팅 프로젝트를 만들 때, 혼자서 데이터 저장소로 사용했었다.

이번 프로젝트에서는 파이어스토어를 사용해서 진행한다고 한다.

파이어스토어는 JSON 포맷 형식처럼 작성이 가능하다. 자바스크립트만으로 데이터베이스 활용이 가능하고, GUI로 편집이 가능하다. 또한 작은 규모에서는 무료라는 점도 좋은 것 같다.

클라우드 파이어스토어

 

 

# 1주차 다짐

최종적으로 이번에 만들 프로젝트는

커피 주문 프로젝트이다.

 

물론 기존에 스켈레톤 코드를 주시긴 하지만, 그래도 기대가 된다.

 

프로젝트 초기 구동 화면

 

반응형
반응형

안녕하세요!

헨리입니다~~ >___<

 

오늘은 Window 10 컴퓨터에 최신 Java 프로그램을 설치하는 방법을 배워보겠습니다.

 

먼저 필요한 준비물은,

Window 10 컴퓨터와, 인터넷이 접속되는 환경이면 충분합니다.

 

 

저와 같이 따라서 해주시면 됩니다.

 

 

1. 구글에 자바 설치라고 검색합니다.

 

2. 그러면 아래와 같은 화면이 뜰 것입니다.

여기서 오라클 홈페이지로 접속합니다.

다음 링크로 바로 들어오셔도 좋습니다

https://www.oracle.com/java/technologies/downloads/#jdk17-windows

 

 

 

3. 상단의 Java SE를 클릭합니다.

 

 

 

4. Java SE(Standard Edition) 17 버전 다운로드를 클릭합니다.

 

 

 

5. 자신의 OS 버전에 맞는 자바 프로그램을 설치합니다.

저희는 Window 64 버전을 설치할 것입니다.

 

 

 

6. 설치한 파일을 자신이 원하는 폴더로 옮깁니다.

저는 C:\DEV\java\jdk 옮겨서 진행하겠습니다.

저는 이렇게 보통 다운로드 받은 파일을 특정 폴더 안에 모아놓고 관리하는 편입니다^^ㅎㅎ

다운로드 -> C:\DEV\java\jdk

 

 

7. 다운 받은 JDK 파일을 실행합니다.

7-1. Next > 를 클릭합니다.

 

7-2. JDK(Java Development Kit)가 어디에 설치되는지 확인하는 과정입니다.

따로 관리하는 폴더가 없으시다면, 확인 후 Next를 클릭합니다.

 

7-3. 정상적으로 다운로드가 진행중인 것을 볼 수 있습니다.

 

7-4. 다운로드가 성공적으로 마무리 되었습니다.

Close를 누르고 설치를 종료합니다.

 

 

8. 설치한 Java 프로그램을 Window의 Path에 추가해주는 부가 작업이 필요합니다.

그렇지 않으면, 자바를 필요로 하는 프로그램들이 우리가 설치한 JDK(=Java)가 어디에 있는지 알지 못하기 때문입니다.

아까 7-2 단계의 C:\Program Files\Java\jdk-17.0.1 이 경로를 복사합니다.

 

 

 

 

9. Window의 환경변수를 세팅하는 프로그램에 들어갑니다.

Window 키를 누르고, 환경 변수 라고 검색하면 아래와 같은 프로그램이 검색됩니다.

시스템 환경 변수 편집을 누르시면 됩니다.

 

 

10. 환경 변수를 클릭합니다.

 

11. 환경변수에는 사용자변수와 시스템 변수로 나누어져 있습니다.

우리는 여기서 시스템 변수를 편집할 것입니다.

시스템 변수 스크롤을 아래로 조금씩 내리면서 Path 라는 이름의 변수를 찾습니다.

 

그리고 편집을 누릅니다.

 

12. Path 라는 이름으로 다양한 프로그램 위치들이 등록되어 있습니다.

여기에 새로만들기를 클릭해서 아까 복사한 Java 위치를 등록시키면 됩니다.

자바 위치: C:\Program Files\Java\jdk-17.0.1

 

13. 확인을 누릅니다.

 

 

14. 확인을 누르고 나오면 됩니다.

 

 

 

 

======================================================================

 

자 그럼 이제 우리 PC에 Java가 잘 설치되었는지 확인해보겠습니다.

 

15. Window 키를 누르고 CMD 라고 입력합니다.

 

16. 명령 프롬프트 창을 켜서 아래와 같이 SET 이라고 입력해줍니다.

SET이란 현재 시스템 변수로 설정되어 있는 값들을 출력해주는 명령어 입니다.

우리는 여기서 Path 라는 이름으로 C:\Program Files\Java\jdk-17.0.1 이 값이 정상적으로

출력되는 것을 볼 수 있습니다.

 

 

17. 마지막으로 아래의 명령어를 통해 자바가 설치되었는지 확인합니다.

>> java --version

 

아래 사진처럼 17 최신 버전이 출력이 되면 잘 설치가 된 것이고,

java --version 을 입력했을때, java 명령어를 이해하지 못한다면 설치가 안된 것입니다.

설치가 되지 않았을 경우, 위의 과정 중 빠진 부분이 있진 않은지 다시 살펴보시기 바랍니다!

 

 

=====================================================================

 

네, 그럼 오늘도 이렇게 Window에 자바 최신 버전 깔기를 같이 해보았습니다.

 

따라하시다가 잘 안되시는 부분이 있으시면,

댓글로 남겨주시면, 답변드리도록 하겠습니다. 

 

 

 

그럼 오늘도 즐거운 코딩되세요~~~

 

헨리드림

반응형
반응형

 

 

 

안녕하세요

Henry's Algorithm의 Henry입니다.

 

오늘은 제가 프로그래머스 

Level 2의 프린터 문제를 풀어보았습니다.

 

첫 시도는 잘 안풀렸는데,

다음날 다시 풀어보니까, 생각이 잘 정리되서 잘 풀렸네요!ㅎㅎ

 

 

문제는 푸는 요령:

저는 Queue 자료구조를 사용해서 풀었습니다.

priorities와 index 정보를 가지고 있는 배열 각각 1개씩 만들고,

while 문을 통해 priorities가 모두 pop 되기 전까지 우선순위를 비교하는 과정을 반복했습니다.

 

- java.util.Collections을 import해서 List의 최대, 최소를 구할 수 있어, 해당 라이브러리를 사용했습니다.

 

아래는 제가 푼 코드입니다.

import java.util.Queue;
import java.util.LinkedList;
import java.util.*;

class Solution {
    public int solution(int[] priorities, int location) {
        int answer = 0;
        
        Queue<Integer> indexs = new LinkedList<>();
        Queue<Integer> priors = new LinkedList<>();
        
        for(int i = 0; i< priorities.length; i++){
            priors.add(priorities[i]);
            indexs.add(i);
        }
        
        while(!priors.isEmpty()){
            int front = priors.poll();
            int frontIdx = indexs.poll();
            
            int max = priors.isEmpty() ? -1 : Collections.max(priors);
            
            if(max == -1){
                return answer + 1;
            }
            
            if(front >= max){
                answer += 1;
                if(frontIdx == location){
                    return answer;
                }
                continue;
            }
            
            priors.add(front);
            indexs.add(frontIdx);
        }
        
        return answer;
    }
}

 

 

오늘도 즐거운 코딩되세요~!ㅎㅎ

반응형
반응형

 

 

 

안녕하세요

Henry's Alogirthm의 Henry 입니다.

 

오늘은 프로그래머스의 기능개발 문제를 풀어보았습니다.

 

문제 푸는 요령:

순서가 중요한 문제여서

배열의 인덱스를 중점적으로 활용해서 푸는 문제입니다.

"순서 -> 인덱스 활용"

 

for문으로 순차적으로 접근해주면서 비교 연산자를 통해 풀어주시면 됩니다.

 

아래는 저의 코드입니다.

 

import java.util.Arrays;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        int[] dayOfend = new int[100];
        int day = 0; // 오늘 /  1 -> 하루 뒤
        
        for(int i=0; i<progresses.length; i++){
            while(progresses[i] + day*speeds[i] < 100){
                day ++;
            }
            
            dayOfend[day] ++;
        }
        
        return Arrays.stream(dayOfend).filter(i -> i != 0).toArray();
    }
}

 

 

그럼 오늘도 즐거운 코딩되세요~!ㅎㅎ

반응형
반응형

 

안녕하세요~!

 

Henry's Algorithm의 헨리입니다.

 

오늘은 자바로 문제를 풀어보았습니다.

 

문제 푸는 요령:

두개의 배열중에 하나만 딱 다를때,

정렬을 한 후에 동등비교를 통해서 문제를 풀 수 있게 됩니다.

 

아래 제가 푼 코드를 올려놓겠습니다.

 

다들 열공하시기 바랍니다.

import java.util.Arrays;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        
        Arrays.sort(participant);
        Arrays.sort(completion);
        
        for(int i=0; i<completion.length; i++){
            if(!completion[i].equals(participant[i])){
                return participant[i];
            }
        }
        
        answer = participant[participant.length - 1];
        
        return answer;
    }
}
반응형
반응형

 

 

안녕하세요 Henry입니다.

 

오늘은 회사 출근하기 전에 일찍 눈을 뜨게 되서

코딩 문제를 한문제 풀어보았습니다.

 

python의 dictionary라는 자료형은 정말 잘 사용하기만 한다면 

좋은 도구가 될 수 있는 것 같습니다.

 

이 문제를 풀 때에도

dictionary의 key, value 구조를 활용하여서 userid의 이름을 관리해주고,

마지막에key값을 통해 value값에 접근하면서 문제를 해결할 수 있었습니다.

 

다른 사람의 풀이를 보니 모두 비슷한 사고 과정으로 접근한 것 같습니다.

일단 userid에 대한 최종 name을 얻기 위해 for문 1번,

그리고 출력 구문을 생성해주기 위해 for문 1번을 돌아야하는 거는 다들 같은 생각을 한 것 같습니다.

 

아래는 저의 코드입니다.

 

def solution(record):
    answer = []
    records = [row.split(' ') for row in record]
    users: Dict[str, str] = {}
    
    for row in records:
        if row[0] == 'Enter':
            users[row[1]] = row[2]
            answer.append([row[1],'님이 들어왔습니다.'])
        elif row[0] == 'Change':
            users[row[1]] = row[2]
        elif row[0] == 'Leave':
            answer.append([row[1],'님이 나갔습니다.'])
        else:
            raise Exception
    
    
    return [users[i[0]]+i[1] for i in answer]

 

감사합니다.

반응형

+ Recent posts