파싱(완), Git blog, cloud 특강

calis_ws·2023년 5월 12일
0
post-custom-banner

파싱 이어서

공공데이터 parsing

파싱이란 데이터를 입력받아서 객체(인스턴스)를 만드는 것을 말한다.
전국 병원의 공공데이터를 이용하여 파싱을 해보자

File Reader로 파일 데이터 1줄 출력하기

public class ReadFileEx {
   // FileReader x
   public static void main(String[] args) throws IOException {
       BufferedReader br = new BufferedReader(new FileReader("./hospital_info_0920.csv"), Charset.forName(“EUC-KR”));
       System.out.println(br.readLine());
   }
}

FileReader를 사용하여 파일을 읽어온다.
생성자에는 파일 경로와 Charset.forName("EUC-KR")를 전달하며 EUC-KR 은 한글을 표현하기 위한 인코딩 방식이다.

파싱

각 데이터들을 따로 처리해야 하기 때문에 배열로 생성한다.

class Hospital {
	String name;
	String address;
	String tel;
}

public Hospital makeAHospital(String line){
	Hospital hospital = new Hospital();
	return hospital;
}

Hospital 객체 생성과 변수에 할당한다.

public Hospital makeAHospital(String “하나정형외과, 인천광역시 xxxx, 032-xxxx-xxxx”){
	String[] dataArr = line.split(","); //(1)번
	Hospital hospital = new Hospital(); //(2)번

	hospital.name = dataArr[0];    //(3)번
	hospital.address = dataArr[1]; //(3)번
	hospital.tel = dataArr[2];     //(3)번

	return hospital; //(4)번
}

hospital을 반환하면 한 줄의 데이터를 하나의 인스턴스로 만들어낸다.

파일 전체 출력하기

파일에서 읽어온 정보를 담을 ArrayList를 생성한다.

public List<Hospital> getHospital(List<String> lines){
	List<Hospital> hospitals = new ArrayList<>();
	for(String line : lines){
		hospitals.add(parse(line));
	}
	return hospitals;
}

lines배열의 길이만큼 line을 반복한다.
List hopitalsparse() 메소드에서 리턴 된 값을 삽입한다.

main 메소드

public static void main(String[] args) throws IOException{
	ReadFileEx rfe = new ReadFileEx(Charset.forName("UTF-8"));
    
	List<String> strLines = rfe.getLines("hospital_info_10lines.csv");
	List<Hospital> parsedHospitals = rfe.getHospital(strLines);
	for (int i = 0; i < parsedHospitals.size(); i++) {
			Hospital hospital = parsedHospitals.get(i);
			System.out.printf("%s %s %s\n", hospital.getName(), hospital.getWebsiteAddr(), hospital.getAddress().getFullAddr());
	}
}

getHospital() 메소드에서 읽어온 병원 정보를 Hospital 타입의 list인 parsedHospitals 에 담아준다

parsedHospitals 배열에서 인덱스 i 위치에 있는 값을 출력해서 hospital에 담아준다

완성

import java.io.*;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class ReadFileEx {
    public List<String> getLines(String fileName) throws IOException {
        List<String> lines = new LinkedList<>();

        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), "EUC-KR"));
        // FileInputStream과 InputStreamReader를 조합하여 파일을 읽어온다.
        String line;
        while ((line = br.readLine()) != null) {
                lines.add(line);
        }
        return lines;
    }
    public Hospital parse(String str) {
        String[] splitted = str.split(",");

        Address address = new Address(splitted[10], splitted[5], splitted[7]);
        Hospital hospital = new Hospital(splitted[1], splitted[11], address);

        return hospital;
    }
    public List<Hospital> getHospitals(List<String> lines) {
        List<Hospital> hospitals = new ArrayList<>();
        for (String line : lines){
            hospitals.add(parse(line));
        }
        return hospitals;
    }

    public static void main(String[] args) throws IOException {
        ReadFileEx rfe = new ReadFileEx();
        List<String> strLines = rfe.getLines("C:\\git\\건강보험심사평가원_전국 병의원 및 약국 현황 2022.9\\1.병원정보서비스 2022.10..csv");
        List<Hospital> hospitals = rfe.getHospitals(strLines);
        System.out.println(hospitals.get(2).getName());
    }
}


출처 : 멋사 5기 백엔드 위키 2팀 회고의 정석

Git blog

Ruby 설치

Git bash로 bundler, jekyll 설치

  1. $ gem

  2. repository 생성

  3. $ git clone <repo_name>

  4. cd gitblog_hello2

  5. $ gem install bundler
    $ gem install github-pages
    $ gem install jekyll

Settings → Pages → main브랜치 save

Actions에서 배포 되었는지 확인

Gitblog 엔진 설치

  • $ jekyll new .

로컬에 블로그 엔진 설치 및 서버 띄우기

  • $ bundle install
    $ bundle exec jekyll serve

화면 깨지는 문제 해결

config.yml 파일 수정

  • 주의 : 날짜, 시간 수정 안하면 post 충돌난다.

완성

cloud 도메인 특강

우수연 강사님

Cloud 란?

컴퓨팅 리소스를 인터넷을 통해 사용자의 직접적인 관리없이 사용하는 것을 말한다.

이 후 자세한 내용은 교안 참고

긍정적인 사고 == 경험하는 모든 것을 내 인사이트로 만들고자 하는 시도

5F 회고

  • Fact (사실)

  • Feeling (느낌)

  • Finding (교훈)

  • Future action (향후 행동)

  • Feedback (피드백)

개발자 커뮤니티 참여

  1. 다양한 경험
    → 각기 다른 경험을 가진 다양한 사람들과의 네트워킹, 나의 경험 공유

  2. 끊임없는 도전
    → 동기 부여, 넓은 시야, 다양한 기회, 나만의 길을 찾는 여정

  3. 회고 및 피드백
    → 내가 잘 하고 있는지에 대한 검증

단점

  1. 유한한 시간
    → 시간 투자에 따른 Trade-off

  2. 갈대 같은 나의 마음
    → 이게 맞나..? 저게 더 좋은것 같은데..?

  3. 오히려 잃어가는 성장 동력
    → 비교, 좌절, 눈물

취업을 위한 현실적인 조언

  1. 조급해 하지 말기.

  2. 나만의 것을 만들자.
    깊이 없는 많은 프로젝트 경험X, 하나의 프로젝트를 운영까지 O

  3. 완벽한 준비는 없다. 여러 번의 면접 경험.

  4. 회사와 팀에 대해 알아보자.
    사전조사!!! → 나의 목표와 여정을 가고자 하는 회사와 연결

  5. 회고 및 피드백

취업 이후의 번아웃을 위한 조언

  1. 여러분의 목표는?
    몰두센네카라쿠배당토?

  2. 왜?
    높은연봉, 대용량트래픽경험, 뛰어난동료들, etc

  3. 만약 상상과 다르다면?

  4. 목표 vs 꿈
    목표 : 꿈을 이루기 위한 수단이 되어야함 + 나에대한믿음

Q & A

Q. 목표가 꿈을 위한 수단이었다고 말씀하셨는데 목표가 무엇이었나요?

A. 내 꿈은 세상을 바꾸는 것이다. 핵심만 이야기 하자면 클라우드를 선택한 이유는 구현이라는 과정보다 디자인 영역에 초점을 두고 영향력을 만들고 싶었다. 이직 전에 가상화 개발의 코어를 개발(프로비저닝)했었는데
코어 영역 이해는 높아졌지만 비지니스 밸류에 대한 부분이 힘들었다.
그런 경험을 하고싶어서 새로운 목표를 세우고 달성하고 있다.

Q. 강사님만의 회고 빈도나 회고 사건(대상)을 선택하는 기준이 있을까요?

A. 어떠한 경험이라도 내 경험이다라고 인지하는 편이다. 사람은 세상에 적응 할수록 새로운 경험은 무뎌진다. 매번 같은일도 다르다고 생각한다. 경험 전과 후의 자신과의 차이점을 고민하고 회고하는 타입이다.

Q. Cloud는 aws 자격증이 필요하다고 들었는데, 입사하고 지원받아서 자격증을 따려 합니다. 그러면 신입으로 cloud 가기는 힘들까요?

A. 꼭 필요하지는 않다 목표 설정이 더 중요하다.

Q. 스타트업은 일반 기업과 달리 채용 공고를 탐색하기에는 조금 어려움이 있는데 스타트업에 합류하는 좋은 방법이 있을까요?

A. 좋은 스타트업 찾기가 힘들다. 좋은 곳에선 더욱 검증된 사람을 뽑고 싶어하기 때문에 연결된 사람들을 뽑는 편이다. 네트워크장을 활용했으면 하는 바람이다.

Q. 현재 IBM 다니시는데 영어회화는 어떻게 준비하셨나요?

A. 입사 전에도 안했다. 하지만 개발영어는 자신있었다. 영어 컨퍼런스가 있으면 참여했다. 비지니스영어와 회화는 다른 영역이다. 개발 공부와 같이 영어 공부 또한 불가피한 것

Q. 클라우드 쪽으로 가려면 보안 쪽도 공부해야 할까요?

A. 아는게 모르는거보다 훨씬 낫다. 보안도 분야가 다양하기 때문에 사용자 입장이라면 보안은 당연히 고안해야 한다.

Q. 회고나 기술을 정리한 개발 블로그 운영을 추천하시나요?

A. 당연히 하는게 안하는 것보다 낫다. 포스트 내용에 본인의 인사이트가 얼마나 담겨있느냐가 중요하다고 생각한다.

Q. cloud 관련 커뮤니티 말고 OKKY 같은 커뮤니티도 보시나요?

A. 나는 보진 않는다. 좋은 커뮤니티가 없다고 생각해서 커뮤니티를 직접 운영했다. (AUSG : cloud 관련 대학생들 모임)
커뮤니티가 좋은지 안 좋은지의 기준은 상대적인 것

Q. 회고팀 단위로 회고가 진행이 되는데 경험이 있으신가요?

A. 내 생각에 회고가 잘되기 위해선 회고를 주도하는 마스터가 필요하다고 생각한다. 프로젝트의 단위라면 '잘한 점', '아쉬웠던 점', '앞으로 해야할것' 을 나누고 의견수립 후 진행했었다. 매일 회고가 진행된다면 보여주기식이 아닌 의미 있는 회고가 되었으면 하는 바람이다.

강의를 마치며

앞으로 백엔드 개발자가 바라보아야 할 것이 무엇인지 고민해보고 커리어를 이어 나갔으면 좋겠다. 자신의 영역 내에서 최대한 활용 할 수 있도록 하길 바란다.

review

어제 시작한 파싱을 오늘 이어서 마무리까지 지어 보았다. 수업시간에는 시작부터 난관에 빠져서 진행하지 못 했는데 수업을 마친 후에 백엔드 위키의 도움을 얻어 코드를 겨우 완성할 수 있었다. 덕분에 파싱에 대해 어느 정도 감을 잡을 수 있었다.

Git blog를 만들어 보았는데 다른 실습들 보단 그나마 어렵지 않게 만들 수 있었다. 그 때문인지 오랜만에 스트레스를 많이 받지 않았던 날인 것 같다.

벌써 기다리던 주말이 다가왔지만 아무래도 쉴 틈없이 메소드에 대한 복습을 해야할 것 같다. 메소드부터 파싱까지 전체적으로 다루어 봐야 겠다. 이번 주도 고생했다 우석아

profile
반갑습니다람지
post-custom-banner

0개의 댓글