2018년 9월 18일 화요일

수와 계산의 기본 - 서장


수의 개념 중 일반성과 추상성에 대한 말부터 나온다.

수의 일반성을 검색하니 연관검색어로 비트겐슈타인의 논리철학논고가 나온다...
아~ 벌써 블랙홀에 빠져드나 서장이므로 어떤식으로 전개해 나갈 지 방향만 잡겠다.

수의 추상성을 검색해보니 연관 도서로 '당신의 아이가 수학을 못하는 진짜 이유'가
나오는데, 이북 샘플을 읽어보니 이 책도 보고싶다. (구립도서관가서 빌려오기로)


추상 (抽象) : 어떤 모양을 뽑아낸다.
 - 抽 : 뽑을 추
 - 象 : 코끼리 상/본뜰 상
 -> 여기서 像(형상 상) 도 있어 어떤 차이가 있나 검색했더니,
  앞에 사람 인 이 붙은 형상 상은 사람이 인위적으로 본따 그려놓은 것이고
  (예: 우상, 초상화 )
 코끼리 상 은 자연적이고 관념적인 것을 나타낸다.(예: 상아탑, 상형문자, 상징)

추상화 : 어떤 개념이 구체적인 대상을 벗어남
돌 3개, 펜 3개, 바퀴 3개 등 이런 구체적인 대상을 벗어나 3 이라는 개념이 존재하게 된다.
같은 종류의 무엇이 0, 0, 0 이면 3으로 표현한다. 무엇에 어떠한 것이 들어가든 3이라는 개념이 존재하므로, 추상화 되는 순간 개념과 구체적인 대상이 분리된다.

이 내용을 전부 이해하고 받아들인건 아니지만 
꼭 추상클래스나 인터페이스를 개념(약속)으로,
구현클래스를 구체적인 대상으로 생각한다면 
추상화에 대한 개념을 가깝게 받아들일 수 있을까?


아무튼 서장에서 중요한 것은 '익숙해지는 것'이라 했으니,
형식적이고 추상적인 계산을 연습하다 보면 그것이 무엇을 의미하는지 일일이 생각하지 않아도 계산결과는 알게 되는 '형식성'의 편리함을 무의식중에 익히는 것이라 한다.

(여기서 버스로 이동하며 스치듯 봤던 논리학에서의 형식성이 떠올랐다.
예를 들어 바위는 새다. 새는 난다. 그러므로 바위는 난다. 에서 내용의 참이나 거짓과는 별개로 이러한 추론?의 형식만 맞다면 논리적으로는 이상이 없다는 쪽으로 이해했다.
마치 회계사는 주어진 정보가 올바른지 조작되었는지 별개로 올바른 절차에 따라 감사했는지만 책임을 지듯?)

밑의 예를 보면 2(만원) x 2(장)은 = 4(만원)
2(만원) x 3(만원) = 6 (?!)
5(시간) + 7(kg) =12 (?!)

이렇게 형식성의 함정을 예로 들면서 
형식적인 훈련을 함과 동시에 의미를 생각하게 하는 교육의 중요성을 말한다.

워후 벌써부터 뇌가 뜨듯해진다.

이해가 되지 않으면 몇만번을 반복해서 봤던 김득신 만큼은 아니더라도
구멍 숭숭 뚫린 채로 그건 그거대로 덧칠하며 끝까지 보자!

아~주 칭찬해! ㅋ



시작은 작게


누에가 고치를 만들듯 가늘지만 꾸준하게 뽑아내는게 목표이므로

부담없이 시작할 수 있을 정도의 수학책을 골랐다.


알라딘에서 권당 3천원씩 1.수와 계산, 3.확률과 통계 편을 구입.

하루에 두 페이지씩만 보고 요약해도 한 권은 75일에 끝나므로,
반드시 지켜야 할 분량은 두 페이지로 한다.

욕심을 내자면 하루 2챕터씩 끝내고 싶지만 시작은 이렇게 하기로!


2018년 7월 3일 화요일

2달간의 목표


회사에 입사한 신입개발자는 신규프로젝트에 투입하면 사고낼 확률이 더 크므로, 우선 기존 프로젝트에 투입하여 유지보수 업무를 배운다


당장 내일 투입됐을때 유지보수 가능한 능력이 있는가 - 인턴으로 살아남기
뉴딜 비트 과정은 서버단을 중점적으로 한다

취업 후 1~2년 가고싶은 기업을 목표로 준비할 것 (알고리즘, 백/프론트, CS, 사용하는 언어)
PM, PL 보다 개발자로 계속 일하고 싶다면 SI업계에 계속 있기보다는 이직을 권함
빅데이터는 컴공보다는 수학과에 가깝다
IoT는 전자과에 가깝다

페이스북 반드시 관리할 것 - 신기술 리뷰, 개발을 즐긴다 -> 관리비용이 적다(알아서 배우기 때문에)
깃헙이나 페이스북 계정에 얼굴사진 올리기

라이센스 프로그램에 유의하자(개인용으로 구매했더라도 회사에서 실행하면 라이센스 위반임

HTML, CSS, JS가 퇴근시간을 늦춘다. -> 반드시!!! 갖고 놀 수준을 목표로 평소에 연습을 해 두자 -> UI를 얼마나 빨리 구현하느냐




유지보수에 필요한 기술
안타깝게도 웹개발 유지보수에 필요한 기술이 너무나 다양하다
jsp, php, spring, ... 15년 전부터 써온 기술부터 최근 기술까지 특정할 수 없다
build툴 ant -> maven -> gradle 인데 한국은 아직 maven

View단의 React, VUE, Angular 등은 여기서 나가지 않는다. 각 회사에 맞춰 알아서 배울 것

1. Servlet/Jsp
2. MVC구조
3. Spring MVC
4. AJAX (HTML+CSS+JS는 베이스)
5. MYBATIS --> 유지보수 라는 단어로 파악하자면 여러 부서에서 쓰는 다양한 테이블을 직접 SQL로 다루는 수밖에 없다.(하이버네이트 객체로 다루기엔 권한도 없고)

6. Node.JS + express + JS
7. Linux 명령어 위주 (서버계는 이미 리눅스가 평정했다)
8. 형상관리 git (cvs, svn 보다는) , git bash(bourne again shell)
9. 개발방법론 - RUP, kanban, scrum

+ ChatBot(챗봇) 적용을 위해 https 와 Domain 구입 및 인증해야한다

오라클에서 jdk 8(2019년 예상)은 업데이트 하려면 유료
jdk 11(Long Term Service) 유지보수 버젼 - 유료



하루 과정
8시간 중
오전 - 이론
오후 - 프로젝트 (예제 프로젝트 -> 연습 프로젝트)

<최종>
파일 업로드 스토리지 오프라인 -> 아마존 서버로 테스트(AWS에 스프링 부트 구축한걸 올려서 테스트)

2018년 6월 20일 수요일

Scanner next() 와 nextLine()


자주 쓰는데 자주 헷갈려서 정리를 해야겠다.

 String s = "\r\nWOW BOB\n\n\n\n\nPOP";
  
 Scanner sc1 = new Scanner(s);
 int count1 = 0;
 while(sc1.hasNext()){
  System.out.println(sc1.next());
  count1++;
 }

 //결과출력
 //WOW
 //BOB
 //POP
 //개행문자와 공백은 읽지 않고 문자열 사이에 위치할 경우 구분자로 사용
  
 System.out.println("count1(next) = " + count1);
 // 3번 읽었음 



next()
개행문자와 공백은 읽지 않고 문자열 사이에 위치할 경우 구분자로 사용한다.










 String s = "\r\nWOW BOB\n\n\n\n\nPOP";
  
 Scanner sc2 = new Scanner(s);
 int count2 = 0;
 while(sc2.hasNext()){
  System.out.println(sc2.nextLine());
  count2++;
 }

 //결과출력
 //
 //WOW BOB
 //
 //
 //
 //
 //POP
 //개행문자를 구분자로 사용하고 공백은 문자로 처리
 
 System.out.println("count2(nextLine) = " + count2); 
 // 7번 읽었음



nextLine()
개행문자를 구분자로 사용하고 공백은 문자로 처리한다.






6/20 TIL


인프런에서 달력만들고 일정 등록/검색 하는 프로젝트를 만드는데
후반부 강의는 이러이러한 내용을 코딩할 것이다 하면 각자 머리를 굴려 코딩을 하고
이후 강의를 보며 어떻게 풀어가는지 보며 이해하는데 

내 코딩과 너무 달라서 흐름만 가져오는 식으로 체크하고 있다.

많은 메소드를 한 클래스에 담아버리니 한번 객체를 만들면 그만큼의 공간이 상주해서
성능에 지장이 있을까? 하는 궁금증이 들었다.
요즘 컴퓨터는 워낙 빨라져서 괜찮겠지 하다가도 서버쪽으로 가게 되면
어마어마하게 양이 늘어날거 같은데...?

관련메소드를 뭉탱이로 묶어서 클래스에 담아 유지보수가 쉽게 하는가,
클래스하나 메소드하나 잘게 쳐내느냐

실무를 겪어보지 않아서 모르겠다.


DB 모델 설계시에도 정규화 역정규화가 있듯 어느정도 타협하는 부분도 있을거같고

음...

알아볼 것

  1. 객체지향 코딩?
  2. 클래스와 메소드 숫자, 크기 관계
  3. String / StringBuffer / StringBuilder 어떤 때 사용하는게 좋은가
  4. 리팩토링
  5. 테스트환경



관련서적

  1. 헤드퍼스트 OOP
  2. 자바성능을 결정짓는 코딩습관




2018년 6월 19일 화요일

의자


초기 듀오백 의자 사용한지 벌써 10년이 넘었다.
좌판 한쪽도 부러지고 등받이 고무부분도 삭았다.

그래도 A/S는 끝내줘서 부품을 구매할 까 했는데 바퀴발 빼고는 가스봉 등받이 좌판 전부 갈아야 하는 상태라 새거 하나 지르기로 결정

의자가 하나 더 있지만 3만원인가 주고 산 중국산 싸구려 듀오백 짝퉁은 가스봉도 싸구려라 그런지 엉덩이가 좌우로 흔들거리고 딱딱해서 보조용으로 사용중.

책상이나 의자는 오프라인으로 보고 사는게 좋다는 교훈을 얻음.


일단 후보군을 뽑아보기 위해 여러 키워드로 검색을 해봤다.
허리의자 직장인의자 의자 등등

게이밍의자- 레이싱의자라고도 불리우는 종류는 리클라이너(뒤로 180도 눕기) 기능이 대부분 있었는데 그거 말고는 인조가죽에 땀만 가득찰 거같아 패쓰

허리에 좋은 의자는 닐링체어가 나왔는데 후기를 살펴보면 허리 보호하려다 무릎나간다는 말도 있고 가격도 13~20 만원대 형성

듀오백은 써봤는데 뒤로 젖히는데 한계가 있고 등받이가 따로 노는 느낌이 싫어 다른 브랜드 써보기로

노바디체어는 좌판이 3분할 되어있어 생소했는데 일단 앉아봐야 감이 올 듯

시디즈는 가격이 20~30대로 가격이 쌔다.
T50에서 허리지지대 내구도가 약해보인다는 말이 있어서였는지 T80에선 상하 움직임만 가능하게 바뀌었다.



필요로 하는 기능을 나열하면

  1. 여름에도 시원하고 
  2. 허리 잘받쳐주고 
  3. 리클라이닝 되고 
  4. 육발이에 
  5. 좌판기울기조절
인데 시디즈가 1,2,5 로 세 개를 만족하는데 가격대도 가장 쌔서 고민이 된다.
육발이는 집에 있는 듀오백 발판만 빼서 바꿔끼면 되고 리클라이닝이야 스트레칭 용도로 원한거라 다른방식으로 보완할 수 있긴 하다.


이렇게 고민해봤으니 이제 직접 앉아보는일만 남았다.

2018년 6월 16일 토요일

InfLearn 자바 플레이그라운드


자바 jdk 설치부터 환경변수 설정, 
이클립스 설치 후 인코딩 UTF-8로 변경, 
github과 저장소 연결 및 온라인 저장소에 변경사항 적용하기, 
Hello World 출력까지

중, 환경변수 설정은 헷갈릴 수 있으므로 복습할 겸 다시 작성한다

시스템 정보에 접근하는 방법이 두 가지 있는데
첫째는 시작 버튼 우클릭 -> 시스템 -> 시스템 정보
둘째는 바탕화면 내컴퓨터 우클릭 -> 속성

이후 고급 시스템 설정 -> 고급 탭 -> 환경변수

1. 시스템 변수 - 새로만들기
변수이름 : JAVA_HOME
변수 값 : jdk 디렉토리

이렇게 만든 이유는 classpath 경로설정 및 path에 추가하기 편하라고
사실 이렇게 JAVA_HOME 이라고 변수 만들 필요도 없다.(이름 다른거로 바꿔도 뭐...)
그냥 jdk 디렉토리 두번만 입력하면 되는데 이렇게 하는 이유는 실수 방지+ 중복 제거?

2. 시스템 변수 - 새로 만들기
변수이름 : CLASSPATH
변수 값 : %JAVA_HOME%\lib;.
; 은 디렉토리 구분자 - 다른 디렉토리 추가하고 싶다면 ; 뒤에 추가하면 된다
. 은 현재 디렉토리

3. 시스템 변수 중 path 편집
%JAVA_HOME%\bin 추가


시스템 변수에 jdk\bin 추가한 이유는 어디에서건 java 와 javac 를 접근할 수 있게
전역변수(?이름조차 환경변수)로 등록하여 접근경로 일일히 다 써주지 않아도 되게끔 한 것
classpath는 컴파일 된 클래스파일들 접근경로 인데 이거 안해도 잘 돌아갔다.
이유는 cmd창에서 직접 클래스파일 실행할 경우는 자바 깔고 연습할 때나 해봤지
웹개발 가면 workspace가 하나만 있는 것도 아니고 뭐...