WeeklyReview - 10월 2주차

목차


한 주 간의 TIL

2019.10.08
  • Math 클래스를 안쓰고 반올림하는 방법
    • Math클래스를 쓰는것보다 복잡해서 생산성은 떨어지는 방식이지만, 반올림에 대한 메카니즘(?)을 이해할 수 있었다.
  • 자바에서 문자열 String은 클래스였다. 원래 String형 변수를 선언할 때에 객체를 생성하듯이 new 키워드(예약어)를 사용해야 하지만 생략이 가능하다.
    • String str1 = new String("abc");
      String str2 = "abc";
      boolean test = str.equals(str2); // true
  • git checkout 은 branch가 아니라 head를 변경한다. 정확히는 head의 방향!
  • git reset 은 head가 가리키는 branch를 변경
    • git에선 아무것도 삭제하지 않다. 모든 기록을 저장할 뿐.
    • git reflog를 통해 모든 활동을 확인할 수 있다. merge, checkout 등.
  • auto-merge 되는 커밋이 많을 수록 버전관리가 잘되고 있는 것이다. 프로그래머가 직접 merge하는 일은 코드의 양이나 파일의 양에 따라 매우 어려운 일.
  • 3-way-merge
    • 두 개의 커밋이 동일한 파일을 변경한 상태에서 merge 할 경우 어떤 변경사항을 새로운 커밋에 담을지 git에서 물어보는데, 이 때 두 커밋이 공통으로 바라보는 원래의 커밋 즉 BASE를 기준으로 match하는 코드와 match하지 않는 코드를 비교.
    • git config --global merge.conflictstyle diff3
  • 웹 페이지에서 데이터 긁어오는 법 (a.k.a curl)
    • CLI에서 web browser가 아니어서 데이터를 못 긁어올 경우, 클라이언트 정보를 추가해서 입력할 경우 서버를 속여서 가져올 수 있음.
    • curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36"

2019.10.09
  • 자바에서 문자열 비교시엔 == 대신 equals() 를 써야 한다.
  • 자바에서 String 은 단순 데이터 타입이 아니라 클래스인데 여기서 비교 연산자 == 를 사용하면 값을 비교하기 앞서 클래스를 비교하기 때문에 의도한 값이 반환되지 않을 수 있다.
    • 그러나 equals() 를 사용하면 클래스 비교없이 값만을 비교할 수 있다.
  • 배열도 문자열 처럼 비교할 수 있다. Arrays.equals(arr1, arr2)

2019.10.10
  • git add -f
    • 강제로 staging area에 올리고 싶은 파일이 있을 때, -f 사용.
    • .gitignore 를 생성했는데 sourceTree에서 파일이 안보이길래 명령어 강제해서 stagaing area에 올림.

2019.10.11
  • 42 Seoul 설명회 참석
    • 예전에 NHN Next를 떠올리게 할만큼 매력적인 교육기관이다. 다른 것은 강사가 없고 강의가 없다는 것이다. 매주 과제가 주어지고 이를 학생들 스스로가 해결하는 과정이다.
    • 교육비X, 강사X, 교재X 전통적인 교육방식의 대학과는 완전히 다른 기관이다. 정부지원으로 운영되며, 파리에 있는 에꼴42의 프로그램을 그대로 가져오는 프로그램이다. 이름에서 알 수 있듯 이들 독립적으로 운영되는게 아니라 이들 네트워크가 활용될 것으로 예상된다.
    • 2년의 교육과정과 내 나이를 고려했을 때, 솔직히 초반만 하더라도 "내가 여기 참여했을 때 충분한 가치를 얻어올 수 있을까?" 라는 질문에 시원하게 YES를 못하고 있었는데 이 과정이 전달하고자 하는 가치가 수료증이 아니라 교육 그 자체에 있으며, 이로인해 열정 있는 학생들과 성장할 수 있다는 점이 내게 엄청 큰 베네핏으로 다가왔다. 현재 실력으로 SI 중소기업에 입사하는 것보다 이 과정을 이수하며 좋은 동료를 얻는 것이 비교할 수 없는 큰 가치라고 생각했다.
      되든 안되든 무조건 지원해볼 생각이다.
  • wget
    • 도커로 우분투 컨테이너를 생성해서 우분투 환경에서 웹서버를 구축중이다. 이과정에서 알게된 명령어인데, apt-get 과는 좀 다른 명령어이다. apt-get 이 우분투 기본 패키지 매니저라면, wget 은 웹 상에서 파일을 다운받아올 때 쓰는 명령어라고 한다.
    • 참고 문서 : ask ubuntu - Apt-get vs Wget
  • Way to install java in ubuntu
    1. check ubuntu version
      • uname -a
    2. get download link from oracle old version
    3. install java via wget from command line
      1. wget --header "Cookie: oraclelicense=accept-securebackup-cookie" https://download.oracle.com/otn/java/jdk/8u202-b08/1961070e4c9b4e26a04e7f5a083f551e/jdk-8u202-linux-x64.tar.gz
    4. ask ubuntu - install specific java version for 12.04

2019.10.12
  • 생활코딩 강의를 통해 배운 리눅스 명령어들
    • --help & man
      • --help는 궁금한 커맨드의 뒤에 붙여서 입력하면 현재 입력창에서 간단히 볼 수 있는 설명서
      • man은 궁금한 커맨드의 앞에 붙여서 입력하면 다른 창으로 넘어가서 더 상세한 설명서를 볼 수 있음.
    • 문서에서 키워드 검색하기
      • /뒤에 찾고 싶은 키워드를 입력하면 현재 보고있는 문서에서 키워드를 검색해서 보여준다. 여기서 N을 입력하면 이동하면서 다음 키워드를 보여준다.
    • 디렉토리 계층구조 생성
      • mkdir -p [directory1/directory2]
    • 디렉토리를 이동하지 않고도 디렉토리 내 파일확인하기
      • ls -l [directory]
    • 내가 자주 사용하는 리눅스 명령어 조회
      • history | awk '{a[$2]++}END{for(i in a){print a[i] " "i}}' | sort -rn |head -10
  • 개발에 필요한 패키지 설치한 도커 이미지 생성하여 배포함
    • 도커헙에 있는 우분투 공식 이미지는 거의 패키지가 없다시피한 기본 이미지였다. 즉시 개발하기엔 필요한 apt-get, sudo, git, vi 등이 없어서 개발에 필요한 이들 패키지들을 설치 후, 도커 이미지로 생성하여 도커헙에 배포해두었다.앞으로 우분투 웹 서버가 필요할 때 이 이미지를 불러와서 개발하면 편할 것 같다.


    무엇을 했는가

    • 자바의정석 뽀개기(?) 중

    자바를 좀 제대로 공부하기 위해서 책을 정독…까지는 아니지만 거의 정독에 이를만큼 다시 읽고있다. 이전에는 백과사전처럼 두고 필요한것만 빼서 읽곤 했는데 그러니까 지식이 듬성듬성 채워진것 같아서 예제 코드까지 함께 상세하게 읽고 있는데 아직 챕터 3까지밖에 정리하진 못했지만 이 부분에서도 새로 알게된것들이 있어서 도움이 되고 있다.

    책의 뒷부분에서는 아는 것보다 모르는 부분이 더 많기 때문에 더 도움이 될 것 같다.


    • 이고잉님의 지옥에서 온 Git 오프라인 강의 참여

    이고잉님이 주최하신 지옥에서 온 Git 오프라인 강의를 참석하고 왔다. 그래도 평소에 Git에 어느정도 안다고 자부했지만, 막상 강의를 들으니까 이 또한 작은 오만이었음이 금방 드러났다. 3-way-merge를 배웠는데 아직 익숙치 않은 개념이다. 하지만 지금까지 merge할 때 충돌이 발생할 것을 우려해 최대한 충돌을 피하거나 reset을 하곤 했는데, merge가 어떻게 이뤄지는지 다시 배우게 된 것 같다.


    • 42서울 설명회 참석

    프랑스의 에꼴42를 벤치마킹한 프로그램이 한국에서도 진행한다고해서 설명회를 다녀왔다. 강사도, 교재도, 수업비도 없는 프로그램이며, 매주 과제를 수행하며 과제를 수행하기 위해 스스로 또는 협력해서 학습을 해야한다고 했다. 정해진 커리큘럼에 종속되기보다 자주적으로 학습하는 걸 좋아하는 내게 좋은 기회라는 생각이 들었다.

    수능을 마친 학생들도 와서 설명회를 듣는걸보니 조금 더 이른 나이에 이런 기회가 있었으면 좋았겠다라는 생각도 들었다. 그러나 일단 지나간 시간은 어쩔수 없고, 지나간 시간 동안에도 배운게 많으므로 앞으로의 미래를 생각해보면, 1년에서 2년정도를 이 프로그램에 투자하는건 투자대비 아웃풋이 더 큰 프로그램이 될 것 같았다. 무엇보다 문턱이 낮지않기 때문에 열정적인 사람들을 많이 만날 수 있을것 같았다. 이들과 함께 성장하고 네트워크를 형성하는 일은 돈을 주고도 못하는 일이기 때문에 1-2년 투자는 아깝지 않은 투자라는 생각이 든다. 그래서 지원해보려고 한다.


    • 주말 스터디 개편(?)

    지난 주말 스터디가 열리지 않았다. 모든 멤버들로부터 스터디 약속시간의 1시간 전에 일시에 불참 통보를 받으면서 캔슬이 되었다. 솔직히 이 스터디가 유지될것 같지않았고, 여기에 리소스를 투입하는 것이 후회스러울 것 같았다. 그래도 한 번만 더 노력해보자라고 생각을 돌려보았다.

    학원에서 면접 할 때 받을 수 있는 질문 중 하나로 “어려움을 어떻게 극복하였는가” 라는 질문을 받을 수 있다고 알려주셨는데, ‘과연 이 스터디도 쉽게 포기한다면 이 질문에 내가 어떻게 답할 수 있을까’ 생각해보니 내가 할 수 있는한 최선을 다해보고, 그래도 안되면 결과를 받아들이는 것으로 생각을 바꾸었다.

    현 스터디의 문제 그리고 해결방안.

    ❗️우선 우리의 스터디는 테헤란로에서만 진행하고 있는데, 이곳이 접근성이 좋다기보다는 그나마 상충한 지역이 여기밖에 없었기 때문이다. 기취업자 두 사람은 대중교통 기준 테헤란로에서 1시간 거리에 거주하고 있다. 때문에 평일까지 회사일을 마치고 토요일 아침에 1시간 가량의 거리를 오는 것은 쉬운 일이 아닐거라고 판단했다.

    • 💡 오프라인을 고집하기보다 온라인 미팅을 제안했다. 오프라인만큼 학습 효율이 있을지는 모르지만 오프라인이기 때문에 발생할 수 있는 이동시간, 식사시간 등의 낭비를 절약할 수 있을거라고 생각했다. OS 제약이 없고, 무료이며 N:N 화상미팅 및 스크린 공유가 가능한 서비스가 필요했고, 이 모든 조건을 충족하는 Hangout을 솔루션으로 결정했다. 다음주 주말 스터디는 Hangout으로 원격으로 진행해보기로 했다.

    ❗️또 하나는 시간대였다. 앞서 설명했듯 평일까지 일을 마치고 주말 오전에 일시에 오는 피로감을 모르지 않다. 때문에 기취업자들을 고려하여 토요일 오전 대신 일요일 오전으로 시간대를 변경하기로 했다. 상대적으로 여유가 있을 거라고 생각했다.

    • 💡 토요일 오전 대신 일요일 오전으로 변경했다. 토요일 오전에 몰려오는 피로감을 피할 수 있고, 오전에 스터디를 마침으로써 오후엔 개인시간을 편하게 쓸 수 있다는 점 때문에 일요일로 결정했다.
      개인적으로 평일로 제안했지만, 현재 기취업자들의 회사 특성상 랩탑 소지가 불가능하고, 회사에서 집까지의 거리를 고려했을 때 평일 회의참여 시간이 저녁 10시를 넘기는 것이 불가피하고 이는 스터디에도, 다음날 출근에도 영향을 미칠 수 있다고 판단하여 일요일 오전으로 결정했다.

    ❗️스터디의 방향이 불명확한 것이 동기부여에 영향을 주었다고 생각했다. 백기선님 영상을 보면서 스터디의 목표를 분명하게 하는 것이 좋겠다는 생각이 들었다. 리더가 없는 스터디를 효과적으로 진행하기 위해서는 각자가 분담해서 공부한걸 리뷰하기 보다는 모두 같은 영역을 공부해서 서로 리뷰하면 토론도 할 수 있고, 이를 통해 더 단단히 배울 수 있을거라고 의견이 모였다.

    • 💡 그래서 서로 같은 영역을 공부할 수 있는 책을 선정해서 스터디를 하기로 했으며, 책은 토비의 스프링으로 결정했다.

    ❗️스터디에 불참하면 다른 스터디원들에게 미안해하고, 스터디에 참석한 사람들은 불참한 사람들 때문에 학습기회를 상실하는 지난 주의 경험이 다시 발생하지 않도록 하기 위해 스터디에 대한 책임을 아예 없애보려고 한다. 스터디에는 자유롭게 참석이 가능하되, 스터디에 참여하는 것이 이익이 되게끔 방향을 바꾸어보려고 한다.

    • 💡 그래서 책을 읽어보고 각자 추가로 공부를 해와서 이에 대한 리뷰를 공유하고, 한 주간 새로배운 지식을 공유하는 시간도 가져보려고 한다. 이를 통해 스터디에 참석하면 얻어가는 것이 있고, 참석하지 않으면 이를 포기하는 프레임을 갖춰보려고 한다.

    무엇을 읽었는가

    자바의 정석을 다시 읽어보면서 자바 예약어나 키워드를 정리하면 좋겠다라는 생각이 들었는데, 역시 구글링해보니까 누가 정리해주신 글이 있었다. 일단 이 글을 보면서 책을 읽었는데 나중엔 내가 작성해서 블로그에 정리해볼 생각이다.

    코드리뷰에 대해 쓴 글인데, 코드리뷰를 왜 해야하는가에 대한 고찰에 가까운 글이다.

    코드 리뷰는 모두가 코드를 함께 리뷰함으로써 문제를 일찍 파악하는데에 그치지않고 코드에 대한 책임을 작성자 한 사람에게만 향하지 않고, 리뷰에 참여한 모두에게 향한다는 문화를 만들 수 있다고 한다.

    문화뿐 아니라 코드 리뷰를 통해 다른 사람이 작성한 코드와의 중복을 방지할 수 있다고 한다. 또 다른 사람의 코드를 리뷰함으로써 ‘이렇게 작성할 수 있구나’ 하며 배우는 부분도 크다고 한다.

    코드리뷰를 시작하기 앞서 주의해야 할 점은 경력이 높은 사람이 경력이 낮은 사람을 일방적으로 알려주려고 하기보다는 모두가 똑같이 다른 사람의 코드를 통해 배울 수 있음을 인지하고 오픈된 시각에서 코드 리뷰를 해야함을 강조했다.


    무엇을 보았는가.

    동기부여에 대한 이야기였다. 백기선님 말씀대로 정말 컨퍼런스에 다니는 사람들은 “코딩안하고 놀러다니는” 사람들이 아니라 새로운 것을 배우고, 사람들을 통해 배우려는 열망이 큰 사람들이다. 아직 큰 컨퍼런스에 참여해본적은 없지만 나도 코엑스에서 열리는 큰 컨퍼런스에 참여해서 사람들을 만나보고 싶다.

    영상 중 여기서부터 웹 어플리케이션과 WAS가 어떻게 동작하는지 방법을 알 수 있었다. 항상 우아한Tech로부터 많이 배우는 것 같다. 여기 크루분들도 크루들과 함께, 그리고 유튜브에 올라가는 영상을 위해 준비하면서 정말 많이 배우겠다라는 생각이들었다.


    다음주엔 무엇을 하겠는가

    이번주에 알고리즘 문제를 많이 못풀었다. 이달 말에 프로그래머스에서 주관하는 윈터코딩 테스트에 신청했으니 여기에 맞춰 조금 더 많이 풀어봐야겠다. 문제만 풀기보다는 이번주부터 알고리즘을 같이 공부하면서 풀어보려고 한다.