* PreOnboarding 발제 9AM

한주 진행에 대해 미리 공지 (노션 제공)

프리 온보딩같은 경우는 월요일에 진행했지만 본과정에서는 금요일 오전에 주기적으로 진행할 예정

 

 

 

 

* 1PM TIL & WIL 강좌 (오시영 튜터님)

회고 - restropective 리뷰, 과거 경험을 다시 돌아봄 / 다 개선을 위한 것이다
-  시도해볼만한 것들을 시도해보자 (내일당장하고 해볼수있는일) 그리고 앞으로 어떻게 할지
<= 리뷰가 필요해 (셀프리뷰) : 내가 당장 원하는 시간안에 이걸 할 수 있나? 근데 이게 중요해?
<= 팀-피어리뷰(상호리뷰) = 코드리뷰
<= 멘토님 리뷰를 원하면 TIL쓴거를 멘토님에게 가져가라 (정답을 바라지말고 상태 설명, 상태를 보여줄 수 있게.. 내상태를 빨리 노출해라)
빨리 피드백을 받을수록 방향잡기가 유리하다 

- 아쉬웠던 것들
- 잘한 것들 (이게 스스로의 강점을 키울수 있다) => 이게 나중에 면접관에게 어필할 부분이 된다.

 

- WIL 주간 회고를 하면서 TIL을 안봤다? 그럼 위험신호 

- TIL과 WIL을 통해 스스로의 성장곡선을 확인해라

- TIL을 꼭 내가 다시 볼 수 있도록 만들어보자

- 성장기록을 다른사람이 볼 수 있게 만들어라

- 기록습관을 만들자

- TIL은 완벽하려고 쓰는 것이 아니다 꾸준히 쓰기 위한 것

- 하루의 목표를 세우고 공부에 들어가자

- 실제에서 현업에서의 상황을 상상해보자 (시뮬레이션)

 

 

체크리스트)

- 내가 가치있는 걸 하고 있나? 생각해보자 (나도 거의 남들의 방법으로 오답노트를 해보는 식이라 생각해보면서 하자)

- 내가 왜 그렇게 풀려고 생각했나

- 진짜 그게 가장 쉽게 동작하는 방법인가? - 오컴의 면도날, WTSTTCPW

- 전에 썼던 걸 다시 봤나?

     WIL/MIL에서 TIL 돌아볼 때 다시 봤던 키워드가 있고 여러본 키워드가 있다면 더 깊게 공부해보자

- 당장 블로그에서 본 지식, 특정문제 해결방법의 나열인가? 웹 개발자로서 기반인가?

   검증된 정보라 할 수 있나? (블로그가 정말 맞나? 공식문서는? 사람들이 오픈소스로 접근한 지식은? - 공식문서 위주로)

- 내 가치가 만들어진다

   난 언제 쓰지? 어따 서먹었지? 내가 무얼 더 하고 싶을까?

 

지원할 회사를 선택할 때

난 연봉 얼마, 난 사수 몇명 이상, 나에게 가치가 있는 회사인가, 안 망할 회사 등등

원하는 요소들을 엑셀시트로 정리해 보자

 

'읽기 좋은 코드가 좋은 코드다'  임백준님 번역의 책 추천 

좋은 커밋메세지 쓰기 검색해보기

 

공식문서 찾는 키워드 : 기술명 + doc 

 

기술을 사용해봤다면 공식문서에 찾아보자 용어는 어떤 용어를 쓰는지, 공식 형태는 어떤지 등등

 

이해가 안된다고 강의만 파는 건 피해라 - 내 길을 만들어보는 걸 추천

 

성장하는 데 회고 공부해보고 같이 스터디를 해보는게 큰 도움이 되었다.

 

커리큘럼을 따라가다 계속 모르는게 있다면 비전공자들을 위해 쉽게 쓰여진 도서들을 찾아보자  

- 그림으로 배우는 웹구조, 네트워크, 서버, DB, http 등등, 1일 1로그 100일 완성 IT지식, 초보라는 키워드가 붙은, 개발자가 되기 위해 꼭 알아야 하는 IT용어

 

 

* PreOnboarding 과정 (11/7 ~ 11/12 3pm~9pm 진행)

본 공부시 ZEP에 접속해 카메라를 켠 상태로 스터디를 진행

3-6PM 6-7PM 7-8PM 8PM 이후 부터
당일 분량 공부 및 TIL 작성 저녁식사 팀원들 모여서 일지와 내용을 논의
TIL 제출
해결하지 못한건 기술매니저님 도움받아 해결하기

 

* 환경설정 부분은 책 말고 항해에서 제공하는 페이지로 대체해 인텔리제이로 진행

 

 

 

 

 

 

 

 

 

 

1-10 / 반복문

반복문이란?

반복해서 실행해야할 것을 로직으로 한 번만 만들어 놓고 코드가 반복해서 실행하게 만드는 것

 


1. for문

int sum = 0;
for(int i=0; i<10; i++){
    sum += (i + 1);
}
System.out.println(sum);

// 55 
// *0~10까지 더한 수의 결과
for ( int i = 0 ; i < 10 ;  i++ ) { 반복될 구문 }
① 초기화식 ② 조건식 ③ 증감식

① 초기화식은 for문 진입시 단 한번 실행되는 구문

② for문 안에서의 조건문이 참일 때 계속 수행하게 된다

③ 한번 수행되고 나서 그 다음번을 수행하기위한 조건을 체크하기 직전에 수행해 줄 구문  

 

 


2. for-each문 

String[] days = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};

for(String day: days){
    System.out.println(day);
}

// Monday
// Tuesday
// Wednesday
// Thursday
// Friday
// Saturday
// Sunday
for ( String day days ) { 반복될 구문 }
제어할 변수 타입과 변수명 반복 대상

 

 


3. while문

int i = 0;
int sum = 0;
while (i<10) {
    if(i == 4){
    	i++;
        continue;
    }
    sum += (i + 1);
    i++;
}
System.out.println(sum);

// 50
// *1~10을 더하는데 5만 빼고 더 한 수
// 만약 i++가 없다면 무한루프에 빠지게 된다
for ( i<10 ) { 반복할 구문 }
조건문 (참이면 계속 반복)

 

 


4. do-while문

while문은 무조건 조건을 먼저보는 데 이와 달리 먼저 한번은 무조건 실행하고 그 다음 수행할때 부터 조건을 보는 구문이 있다. 그게 바로 do-while문.

int i = 0;
int sum = 0;
while (i<10) {

    do {
        sum += (i + 1);
    	i++;
    } while (i<10);
 
}
System.out.println(sum);

// 55
// *1~10을 더한 수
// 만약 i++가 없다면 무한루프에 빠지게 된다
do { sum+=(i+1); i++; } while ( i<10 );
*반복식 조건식

*반복식은 무조건 한번은 실행될 식이자 계속 반복될 식

 

 


1-11 / 반복문 퀴즈

문제1)

1부터 100까지 합을 구하는 반복문 코드를 작성해보세요

더보기
int sum = 0;
for(int i=0; i<100; i++){
    sum += i+1;
}
System.out.println(sum);

// 5050

 

문제2)

5초부터 시작하는 카운트다운을 반복문을 써서 만들어 보세요

더보기
for(int i=5; i>=0; i--){
    System.out.println(i);
}

// 5
// 4
// 3
// 2
// 1
// 0

 

문제3) 조건문과 반복문을 이용한 문제

1부터 30까지 홀수의 합과 짝수의 합을 구하고 각각 출력하는 프로그램을 작성해보세요

더보기
int sumOdd = 0;
int sumEven = 0;
for(int i=0; i < 30; i++){
    int value = i+1;
    if(value % 2 == 0){
        sumEven += value;
    } else {
        sumOdd += value;
    }
}
System.out.println("홀수의 합은" + sumOdd);
System.out.println("짝수의 합은" + sumEven);

// 홀수의 합은225
// 짝수의 합은240

 

 

 

 

 

1-8 / 조건문

조건문이란?

코드 실행에 있어 조건을 제시하는 문장으로 해당 조건에 충족하면 조건문 안에 있는 코드를 실행한다.

 

 


1. if 문

int num1 = 150;
int num2 = 100;

if (num1 < num2){
    System.out.println("num1이 num2보다 작다");
} else if (num1 < 50){
	System.out.println("num1은 50보다 작다");
} else {
	System.out.println("num1이 num2보다 크고 50보다 크다");
}

// num1이 num2보다 크고 50보다 크다

① if

if (num1 < num2) {   System.out.println("num1은 num2보다 작다");   }
조건문
시작
 조건을 넣는 부분으로 ()안에 넣는다
 num1 이 num2 보다 크다면 true 아니면 false
 true라면 실행할 코드로 {}안에 넣는다
 num1은 num2보다 작다 출력

 

② else if

else if (num1 < 50) {   System.out.println("num1은 50보다 작다");   }
추가 조건문  위의 조건문에서 false로 넘어왔으나 여기서 다시 한번 다른 조건을 판별하는 부분으로 ()안에 넣는다
 num1 이 num2 보다 크다면 true 아니면 false
 이 조건에서 true라면 실행할 코드로 {}안에 넣는다
 num1은 50보다 작다 출력
 조건문에서 if나 else는 한번만 쓸 수 있지만 else if는 이 둘 사이에서 여러번 사용하는게 가능하다

 

③ else

else {   System.out.println("num1은 num2보다 크고 50보다 크다 ");   }
앞 조건문에서
false 경우
 위에서 모든 조건에 false라면 실행할 코드로 {}안에 넣는다
 num1은 num2보다 크다  50보다 크다 출력

 

 


2. Switch문

char score = 'C';
switch (score) {
    case 'A' :
        System.out.println("A등급 축하합니다");
        break;
    case 'B':
        System.out.println("B등급");
        break;
    case 'C':
        System.out.println("C등급");
        break;
    default :
        System.out.println("C보다 아래 등급입니다");
        
// C등급

① switch 문 뒤에 () 안에 판별할 변수를 넣어준다

② case 값 : 판별 변수의 값에 따라 나눈다

③ break; 는 switch문을 탈출하란 의미. break 가 없다면 아래 내용이 판별없이 다 출력된다.

 

 

 

 


3. 삼항 연산자

int a = 5;
String result = ( a < 10 ) ? "10보다 작다" : "10보다 크다";
System.out.println(result);

// 10보다 작다
3개의 항으로 이루어진 연산자
판별식의 결과에 따라 참일때의 값이나 거짓일 때의 값이 대입된다.
( a < 10) ? "10보다 작다" : "10보다 크다" ;
판별식 ? 참일 때의 값 : 거짓일 때의 값 ;

 

 

 

 

 


1-9 / 조건문 퀴즈

 

숫자를 입력 받으면 그게 어떤 등급인지 출력하는 문제

91 ~ 100 : A등급

81 ~ 90 : B등급

71 ~ 80 : C등급

그 외 점수는 F 등급

 

기초 세팅)

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in); //시스템 input을 받는다
    int score = sc.nextInt(); // 다음에 들어오는 숫자를 받는다
}

문제풀이)

더보기
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in); //시스템 input을 받는다
    int score = sc.nextInt(); // 다음에 들어오는 숫자를 받는다
    
    if (90 < score && score <= 100) {
        System.out.println("A등급");
    } else if (80 < score && score <= 90){
        System.out.println("B등급");
    } else if (70 < score && score <= 80){
        System.out.println("C등급");
    } else {
        System.out.println("F등급");
    }
}

 

 

 

 


+ Tip
* sout이라고 치면 System.out.println(); 이 자동으로 쳐진다.
* 코드를 쳤을 때 빨갛게 나오면 마우스를 올려 메세지를 보고 alt + Enter를 눌러 IDE가 제안하는 것을 보고 선택

 

 

* 2022/11/01 8pm Zoom 진행

* 백엔드로 갈 예정이라 Node.js와 Spring 세션 내용만 정리

 

프론트 엔드 vs 백 엔드

프론트 엔드 : 사용자와 가깝다.

백 엔드 : 사용자와 프론트 엔드와는 상대적으로 멀다.

backend architecture 백엔드는 굉장히 큰 아키텍쳐(시스템 구성)를 만져볼 수 있다. 설계하기.

처음엔 설계된 일부를 다뤄보는 거라면 후에는 설계에 참여하고 제안할 수 있다.

 

 


C는 언어들 중에서 컴퓨터와 가깝고 강력한 언어이기에 임베디드 개발에 사용되어짐

C의 벽 Pointer 

너무 어려워서 실수가 잦아지니 Pointer를 신경쓰지 않게 개발자들이 개발할 수 있도록 만들자 한 것이 Java

보다 인간에 친화적으로 언어를 개발함.

Pointer 개념을 신경쓰지 않게 되므로써 물론 덜 효율적이게 되긴함.

javascript는 java보다도 인간에 가까운 언어.

 

javascript는 쉽다 근데 왜 C나 Java를 쓸까?

자료형을 본인이 정의해주지 않는 건 언뜻 편해보일지 모르지만 결국 버그와 누수가 생길 수 밖에 없음. 자료형마다 하는 기능이 있어 사용하고자 하는 기능을 사용하고자 할 때 자동으로 정해준다는 건 사람의 의도가 제대로 적용되지 않을 수가 있다.

이런 문제때문에 javascript도 변수의 type을 정해주는 typescript(근데 이것도 결국은 javascript로 돌아감)로 넘어가게됨

 

언어 전환도 또한

javascript > java 는 어려움

java > javascript 는 쉬움

컴퓨터에 가까운 언어일수 록 어렵기 때문

 

 

 


스프링 부트는 스프링 안에 있는 것, 스프링 시큐리티는 덤으로 공부하는 것

스프링 부트 - 스프링을 쉽게 사용하기 위한 

스프링 시큐리티 - 로그인 회원가입등을 담당하고 있는 모듈

 

 

 


 

추가 내용

 

항해과정이 현업과 거의 동일한 프로세스를 겪는다. 

항해는 주마다 새로운 프로젝트를 하는 커리큘럼을 하는데 기간설정된 상태로 일에 들어가며 모른 상태로 일에 들어간다.

(현업이라고 다 알고서 일에 들어가는게 아님)

주마다 프로젝트를 진행하면서 프레임워크가 익숙해질 수 밖에 없다.

 

주마다 하는 고민과 노력을 이력으로 만들어내라. 경험을 만들어라. 

그래서 다른사람에게 경험을 설명할 수 있는게 만들어라

 

 

 

 

항해과정에 Node.js 와 Spring 채용 비율은 비슷하다고 한다.

Spring은 보통 프로그램 경험이 있는 사람들이 많이 선택한다.

 

비전공 입장에서 노드제가 분명 쉬운것은 맞다

하지만 장기적으로 보자면 노드제에서 스프링으로 바꾸는 케이스가 많다.

 

어려운 언어일 수록 페이는 상대적으로 다를 수 밖에 없다.

Frontend 보다 Backend 

backend 에서도 좀더 어려운 언어가 대우를 받을 수 밖에 없다.

 

Front와 Back의 수요 비율은 1:5 정도

 

Java 는 오래된 만큼 교과서적 느낌

javascript 는 자유로운 느낌 

 

Java 단점을 보완해 JetBrains사가 만든 Kotlin 

 

프로그래머로써 일하면 결국 여러 단어를 다루게 된다.

 

프로그래머는 언어보다는 사고능력이 중요하다. 

 

 

 

 

 

* 2022/11/01 6pm Zoom 진행

* 백엔드로 갈 예정이라 Node.js와 Spring 세션 내용만 정리

 

Node.js

 

프론트 엔드 vs 백 엔드

프론트 엔드 : 눈에 보이는 모든것

바로바로 화면상으로 바뀌는 게 보이는 걸 좋아하는 사람

*ui : user interface 사용자가 직접 맞닿는

 

백 엔드: 프론트 외의 모든것

가공한 데이터를 다른 곳에서 사용하는 걸 좋아하는 사람, 설계하는 거 좋아하는 사람

 

 

 


Node.js

언어자체는 아님. 플랫폼. javascript라는 언어를 사용한 것을 Node.js에 넣어 실행하는 마법상자.

기본적으로 javascript는 잘해야하고 이를 통해 Node.js 기능을 잘 사용하는 것

 

Spring은 프레임워크

자바의 jvm이 javascript의 Node.js 

Node.js는 가볍다. javascript가 가벼운건 아니지만

jvm이 요구하는 cpu나 메모리보다 월등하게 가볍다. 따라서 리소스를 덜 사용하기때문에 리소스에 들어갈 비용이 다른데로 들어갈 수 있다.

 

트렌드가 바뀌면서 마이크로화 되면서 서비스를 나누게 되면서 일부를 도전할 수 있게 되면서

대기업에서도 많이 사용하는 추세

 

 

 

 


커리큘럼

- 자바스크립트 기본문법

- 준비된 과제와 코드를 배우고

- REST API개발하는 방법

- 로그인 기능 구현 (라이브러리를 최대한 사용하지 않고 원리를 이해하는 과정)

- 데이터베이스 (관계형, 비관계형) 둘다 사용

- 웹소켓 이용 (브라우저 실시간 알림기능)

 

장점)

- 프론트 엔드에서 사용하는 javascript를 기반으로 배우기 때문에 프론트엔드 이해도 쉬워진다. 풀스택이 쉬워짐.

 

 


프로그래머 라면)

- 웹 API를 개발할 줄 알아야한다.

- 자기 코드를 짤 줄알아야 한다. (생각보다 이게 안되는 사람이 많다) 이게 진짜 중요하다

  변형과 새로운걸 만들때 스스로가 개발할 수 있게 되야하니까

- 프레임워크 없이도 도전해봐라 (도구 없이 스스로 도전

- 남의 코드를 많이 봐라. 결함을 찾아봐라.

- 코드 리뷰가 있는 회사로 가라 

- 10을 아는 개발자는 보통 얕다. 하나라도 깊고 정확하게 파라. (하나를 깊게 알면 그 연관관계를 정확히 알게되면서 제대로 파악할 줄 알기 때문. 일단 새로운거 배울때도 깊고 정확하게 파고 들려 하기 때문)

- 안정적인 코드를 짤 줄 아는 사람을 보고 실력을 가늠하기 때문에 안정적인 코드를 만드는 데 고민해봐라

- 언어를 공부하려면 계속 뭘 개발해봐라

- 언어는 약간의 패러다임과 API가 다를 뿐, 하나를 제대로 배우면 새로운 언어를 배우는 건 쉽다.

- 백엔드는 설계 능력, 설계도를 잘 만들줄 아는 사람이 되야한다. 재해가 일어났을때를 미리 예상하고 대응할 수 있는 설계도를 만들수 있어야 좋은 설계도

 

 

- 프로그래머는 3분류로 나뉜다) 

일류 : 특정분야의 일류 전체 일류는 없어, 다른 사람의 코드의 결함을 찾아낼 수 있고 이를 개선해 줄 수 있는 프로그래머

- 완벽한 코드란 없어 시간이 흐르면서 변화하기때문에 코드 또한 낡아가게 됨. 매번의 개선을 통해 가장 좋은 코드가 될 수 있도록 노력해야하는 것이 가장 좋은 프로그래머

이류 : 남이 짠 코드를 이해해서 응용할 수 있는 프로그래머

삼류 : 남이 짠 코드 덩어리가 없으면 프로그램을 짤 수 없는 프로그래머

 

 

 


+ 추가 개념

추상화란 사람이 의미를 부여한 것

똑같은 판자가 있다고 하더라도 어떤 역할과 용도에 따라 식탁과 책상이 나눠지는 것을 추상화라고 생각할 수 있다.

데스크톱의 키보드와 노트북의 키보드가 형태가 다를 지언정 둘이 다른것은 아닌것으로 인지하는것도 추상화가 잘된 케이스. 

 

+ 언어를 잘배우면 도구는 뭐든 쉽다

 

+ 프로그래밍 언어를 도구라고 인식하고 선택할때 쉽게 접할 수 있고 쉽게 배울수 있는 걸 선택해라.

 

+ 본사가 현실에 없어서 재택근무를 하는 케이스도 많음

 

 

자바 공화국이 된 이유)

전자 정부 자체가 Spring 기반임 

전자 정부를 다루기 위한 인재양성을 위해 java를 배우게 했기 때문

오래된 역사가 있어서 자바를 많이 사용함

 

스타트업에서는 비용이 덜 들기 때문에 Node.js를 사용

외국에서도 많이 쓰고 대부분 대기업에도 요즘 사용

 

 

3시간 면접)

- 면접

- 알고리즘 문제

- 웹 기능에 대한 질문을 하면서 라이브 코딩하는 방식

 

막상 실제로 면접을 보니

포트폴리오, 상 이런게 별로 의미가 없더라 코드를 스스로 안정적으로 짤 줄 알고 일상화 된 사람이 좋더라. 

 

 

 

 

 

 

 

 

+ Recent posts