반응형

안녕하세요. 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]

 

감사합니다.

반응형
반응형

안녕하세요

행복한 개발자 Henry입니다!

 

오늘은 프로그래머스에서 

오로지 코딩실력만으로 여름 인턴십을 선발하는 Summer/Winter Coding 챌린지 중

2018년도에 출제되었던 문제를 풀어보았습니다.

 

이번 문제는 프로그래머스 Level 1에 배정되었던 문제였습니다.

 

소수를 구하는 문제였는데요,

for문 3번을 모두 돌려야 하는 완전 탐색이 불가피했던 문제였고,

그렇게 접근해서 풀었더니 모든 테스트에서 정답을 받을 수 있었습니다.

 

아래는 제가 풀었던 문제의 코드입니다.

저는 따로 is_prime이라는 함수를 만들어 문제를 풀어보았습니다.

def solution(nums):
    prime_cnt = 0

    for first in range(len(nums)):
        for second in range(first+1,len(nums)):
            for third in range(second+1, len(nums)):
                if is_prime(nums[first] + nums[second] + nums[third]):
                    prime_cnt += 1

    return prime_cnt

def is_prime(num: int) -> bool:
    for i in range(2, num//2):
        if num%i == 0:
            return False
    return True

 

그럼 오늘도 좋은 하루 되세요~~!!

반응형

+ Recent posts