멀티캠퍼스 JAVA 백엔드 부트캠프/정리

멀티캠퍼스 백엔드 개발자 취업캠프(Java) 입과 5주차 정리

5ein 2023. 3. 5. 23:07

2023.02.27

27, 28 일은 git특강 수업을 듣는날 이다.

 

## 깃허브 특강 (1일차) ##

 

- Git: 버전관리 시스템 (프로그램)

깃이 없다면? 깃을 사용하면?
1.       변경내역을 확인이 어렵다.
2.       작업을 되돌리기 어렵다.
3.       협력하기 어렵다.
1.       변경 내역들을 확인할 있다.
2.       필요하다면 작업을 되돌린다.
3.       여러 명의 코드를 쉽게 나누고 합치며 개발할 있다.

- 소스 트리: 깃을 포장해주는 역할 깃을 쉽게 사용할 수 있게 함(GUI)
UI이기 때문에 깃을 먼저 깐 뒤! 소스 트리 깔아야 함.

- 깃허브: 깃(git) 저장소(cloud)
개발자의 insta라고 생각하면 됨 (내 코드를 자랑하고, 어필하는 공간)

- 버전: 유의미한 변화가 결과물로 나온 것 (커밋들)

- 프로그램 개발: 버전을 쌓아 프로그램을 만들어 나가는것

## 깃 ##
- 작업디렉터리: 프로그램 소스폴더(버전 관리의 대상이 위치하는 공간 (. git이 있는 디렉터리))
- 스테이지: 깃이 관리(다음버전이 될 후보가 올라가는 공간(git이 관리하는 가상의 공간))
- 저장소: 깃이 관리 (버전이 만들어지고 관리되는 공간(git이 관리하는 가상의 공간))

## 하나의 버전이 만들어지는 과정 ##
1. 작업 디렉터리 내에서 변경사항 생성(일반적인 코딩 작업)
2. 스테이지로 add
3. 저장소로 commit 

 

- Add: 작업 디렉터리의 내용을 스테이지에 올리는 것
- Commit: 스테이지의 내용을 저장소에 올리는 것

## 소스트리의 줄 색상 뜻 ##
초록색 형광펜(+): 추가한 내용
빨간색 형광펜(-): 삭제한 내용

- 커밋 해시: 각각의 버전에 지칭된 고유한 정보(ID) 
너무 길어서, 커밋 해시의 일부인 앞에서7번째까지만 사용하기도 함

- 태그: 특정 커밋을 좀더 가독성 있도록 붙이는 꼬리표
태그를 쓰는 이유?
- 여러 커밋 중에서 더 유의미한 커밋을 지칭하기 위함.
- 예로 릴리즈 하기위한 커밋.
- 형식: ver0.0.1 또는 v0.0.1 이런식으로 버전을 나타냄

깃(git)은 어디가 바뀌었는지, 관리해야 되는지만 상관함.
      코드의 문법오류 등은 잡아내지 못함. 

- 버전 비교: 서로 다른 커밋을 비교하는 것 (커밋 이전의 내용뿐만 아니라, 커밋 이전의 파일도 접근할 수 있음)

## 버전되돌리기 2가지 방법 ##
- 방법 1. Revert: 버전을 되돌린 새로운 버전 만들기 (내가 헷갈린대 꼭필요할때만 사용!)
- 방법 2. Reset: 버전을 완전히 되돌리기 3가지 방법
- 방법1. Soft reset: 커밋 사실만 되돌리기 (많이는 쓰지말래 내가 헷갈린대)
- 방법 2. Mixed reset: 스테이지까지 되돌리기 (많이는 쓰지말래 내가 헷갈린대)
- 방법 3. Hard reset: 작업 디렉터리까지 되돌리기 (dump 뜨고 hard reset을 사용하는게 좋다고 하셨다.)

 

덤프(dump): 저장소(폴더) 자체를 복사본을 만드는 

 

- 스태시(Stash): 커밋과 관계없이 임시보관 하는 것!! (수정하던 애를 임시보관)
살리면 남겨두지말고 지우기(나중에되면 이게 중요했던건가 싶어서 못지우게 된다고 하셨다.)
(내가 헷갈릴수 있어 꼭필요할때만 사용하래!)


2023.02.28

## 깃허브 특강 (2일차) ##

- IT 전문가 : <도메인 지식> + 코딩 능력 + 4차산업

- 깃
1. 배경: 리눅스 토르발즈가 자신의 코드를 관리하기 위해서 직접 만든 s/w (2005)

2. 깃 설치 (= 소스트리): 작업 디렉터리, 스테이지, 저장소
          -  작업 디렉터리: 소스트리 보관소  Add
          -  스테이지: 버전을 확정할 후보들의 임시 무대 Commit
          -  저장소: 버전들이 확정된 공간

3. 깃 응용
  - 버전 관리 : 이전버점과 뭐가 다르지?
  - 버전 되돌리기
     - revert: 현재 커밋 아까움, 현재 보관하고, 그 앞의 것을 새 커밋으로 복사  가끔만 쓰자
     - reset: 그냥 현재 커밋 날려~ (soft, miced, hard) + 덤프 
 - 임시보관 (스태시)  하나씩만 써라, 필요없으면 삭제해라.

4. 깃 고급 (협업을 위한 준비): 브랜치
  - 브랜치(나뭇가지): 버전을 여러 개의 흐름으로 관리함, 버전의 분기 (브랜치는 무조건 하나는 있다.)

브랜치로 버전의 분기를 관리하는 방법
     1. 브랜치를 나눈다
     2. 각자의 브랜치에서 작업한다
     3. (필요하다면) 나눈 브랜치를 합친다.

최초의 브랜치: 마스터 브랜치(깃) == 메인 브랜치(깃허브)

Head : 현재 작업중인 커밋
체크아웃: head를 변경하는 작업ex)b로 체크아웃 해라 == b 를 head로 해라 (우클릭해서 체크아웃 누르면 바꿀수 있음)

- 브랜치 합치기(Merge, 머지)
     1. 빨리감기 병합
     2. 일반 병합

- 브랜치 충돌: 같은애를 두군데서 수정(동시작업)했을 때  둘중 하나는 버려야함

## 깃허브 ##
- 깃허브 :  개발자의 인스타그램, 원격저장소 호스팅 서비스

- Clone(클론)은 다운로드 개념
- push는 업로드 개념
- fetch는 원격 저장소의 변경사항을 일단 갖고만 오기
- pull은 원격 저장소의 변경사항을 가져와서 로컬과 합치기

- 클론: 원격저장소 복제 (쌍둥이를 만든거 라고 생각)

브랜치에 (main인지 master인지에 따라 어디서 시작했는지 알수 있음)
 - main: 깃허브에서 시작 => 클론한애들은 main이라고 되있음
 - master: 소스트리에서 시작 

클론해온거를 그사람꺼에 내가 푸쉬할수 없다.
(당연하다! 누군가가 마음대로 고치면 말가질 수 있기 때문에 푸쉬 불가)

**** 중요 1 ****
1. 깃허브 저장소를 내 소스트리와 클론 + 작업 + 푸쉬

**** 중요2 ****
기존에 작업하던 깃 프로젝트가 있다. 그런데, 이제부터는 이것도 깃허브에서 함께 관리하자.
---> 깃허브 저장소에 올리고 클론 + 작업 + 푸쉬

 

md 문법 이용해서 readme 파일 만들기를 해보았다!


2023.03.01

오늘은 공휴일이어서 수업이 없었다. 그래서 어제 배웠던 readme 파일을 꾸미는 작업을 했다.

그런데 스텍을 대학교에서 배웠던 것들도 적어도 될지를 고민 했지만.. 적었다.

그대신 스택이라고 하지않고 경험 이라고 하고 적었다.

https://github.com/Ileriayo/markdown-badges#badges 이 사이트 에서 검색해서 뱃지를 가져왔다!

 

완성한 깃허브

일단 지금 당장은 마음에 드는 것 같다!!


2023.03.02

 

대상 = 엔티티 = 객체

 

ERD: 엔티티 관계도

Constraints: 제약 조건 (PK등등)

 

개체무결성(결점이 없는, intigrety): PK 설정과 관련 있다. ==> 자동으로 작업을 할 때 마다 not null, unique 자동 체크

ex)

Id는 unique(겹치면 안됨), notnull(비워두면 안됨) ==> PK(프라이머리키) = 개체 무결성

게시판(writer) id 등록된 회원만 사용가능하다 ==> FK(외래키, foreign keys)

 

- SQL 제약조건 넣는 방법

              1)  테이블 만들 + 제약조건

              2) 테이블 만들고 나서 제약조건을 수정(추가)

 

퀴즈

더보기

퀴즈. SQL제약조건

-- depart2 table생성- id(pk), name, instructor 테이블 생성하면서 제약조건 추가해 주세요.
CREATE TABLE HR."depart2" (
"id" VARCHAR2(100),
"name" VARCHAR2(100), 
"instructor" VARCHAR2(100) ,
CONSTRAINT depart2_PK PRIMARY KEY ("id")
)
-- student2 table생성- id(pk), name, tel, depart_id(fk) 테이블 생성후, 제약조건(pk, fk)추가해 주세요.
CREATE TABLE HR."student2" (
id varchar2(100),
name varchar2(100),
tel varchar2(100),
depart_id varchar2(100)
) 
ALTER TABLE HR."student2"
ADD CONSTRAINT student2_PK PRIMARY KEY (id)
ALTER TABLE hr."student2"
ADD CONSTRAINT FK_depart2 FOREIGN KEY (depart_id) REFERENCES hr."depart2"("id");

 

퀴즈

-- 1. orderlist3을 만드세요 -- id(number), title, price(number)
CREATE TABLE orderlist3 (
id number(38, 0),
title varchar2(100),
price number(38, 0)
)

-- 2. sequence를 만드세요. --or_seq, start값: 1, increment값: 1
CREATE SEQUENCE or_seq INCREMENT BY 1 START WITH 1

-- 3. row값 3개 이상 넣어보고 확인해보세요.
INSERT INTO orderlist3 VALUES (or_seq.nextval, 'title3', '5')
SELECT * FROM orderlist3

ORDER BY id -- 오름차순
SELECT * FROM orderlist3
ORDER BY id DESC – 내림차순

 

select, update, delete 정리 문제

더보기
-- select, update, delete 정리 문제

-- 1. price number(oracle), int(mysql)
CREATE TABLE PRODUCT3(	
	"ID" VARCHAR2(200),
	"NAME" VARCHAR2(200),
	"CONTENT" VARCHAR2(200),
	"PRICE" NUMBER(38,0),
	"COMPANY" VARCHAR2(200),
	"IMG" VARCHAR2(200)
)

-- 2. price로 내림차순 정렬하여 전체컬럼 검색
SELECT * FROM PRODUCT3 ORDER BY PRICE DESC

-- 3. company로 오름차순 정렬하여 제품의 이름, 내용, 가격 검색
SELECT NAME, CONTENT, PRICE FROM PRODUCT3 ORDER BY COMPANY

-- 4. company의 목록을 검색(중복제거)
SELECT DISTINCT COMPANY FROM PRODUCT3

-- 5. 각 신발을 5개씩 주문했을 때의 가격을 price5라고 항목명을 지정하여 출력
SELECT PRICE * 5 AS PRICE5 FROM PRODUCT3

-- 6. price가 5000인 제품명과 회사명
SELECT NAME, COMPANY FROM PRODUCT3 WHERE PRICE = 5000

-- 7. price가 3000와 6000사이인 제품명과 가격, 회사명 검색
SELECT NAME, PRICE, COMPANY FROM PRODUCT3 WHERE PRICE BETWEEN 3000 AND 6000

-- 8. 회사명이 c100이 아닌 회사명과 제품명
SELECT COMPANY, NAME FROM PRODUCT3 WHERE COMPANY != 'c100'

-- 9. 회사명이 c100,c200인 제품명과 가격
SELECT NAME, PRICE FROM PRODUCT3 WHERE COMPANY = 'c100' OR COMPANY = 'c200'

-- 10. 제품명에 4로 끝나는 제품의 전체 정보 검색
SELECT * FROM PRODUCT3 WHERE NAME LIKE '%4'

-- 11. 제품내용에 food를 포함하는 제품의 전체 정보 검색
SELECT * FROM PRODUCT3 WHERE CONTENT  LIKE '%food%'

-- 12. price가 5000원인 제품의 content를 품절로 수정
UPDATE PRODUCT3 SET CONTENT = '품절' WHERE PRICE = '5000'

-- 13. id가 100, 102번 제품의 img를 o.png로, price를 10000으로 수정
UPDATE PRODUCT3 SET img = '0.png', PRICE = '10000' WHERE ID = 100 OR id = 102

-- 14. 회사명이 c100인 경우 모든 정보 삭제
DELETE FROM PRODUCT3 WHERE COMPANY = 'c100'

-- 15. 테이블의 모든 정보 삭제
DELETE FROM PRODUCT3 --15

-- 확인
SELECT * FROM PRODUCT3

2023.03.03

TRUNCATE DELET 차이점?

DELETE: 저장공간은 남겨두고, 데이터만 지움. 데이터를 복구/취소(ROLLBACK, 롤백) 가능

TRUNCATE: 지우면 저장공간도 남겨두지 않고, 복구/취소 불가능

 

DML - (CRUD, 크루드)

  조작 4가지
C R U D
조작 Create Read Update Delete
sql insert select update delete

 

JOIN : 다른테이블들에서 몇가지 열을 가져와서 하나의 테이블을 만듦

 

함수 = function = 기능 (동적인 처리)

형식: 함수이름(  )

 

문자함수, 숫자함수, 정리 문제

더보기
-- 문자함수, 숫자함수 정리 문제

-- 1. ENAME의 글자수 검색
SELECT LENGTH(ENAME) FROM EMP 

-- 2. JOB이 MANAGER인 사람의 ENAME 글자수 검색
SELECT LENGTH (ENAME) FROM EMP WHERE JOB = 'MANAGER'

-- 3. COMM이 null인 사람의 ENAME, JOB 검색
SELECT ENAME, JOB FROM EMP WHERE COMM IS NULL

-- 4. COMM이 null이 아닌 사람의 HIREDATE 검색
SELECT HIREDATE FROM EMP WHERE COMM IS NOT NULL

-- 5. ENAME의 2번째글자부터끝까지 검색
SELECT SUBSTR(ENAME, 2) FROM EMP

-- 6. JOB의 1번째 글자부터 3번째 글자까지 검색
SELECT SUBSTR(JOB, 1, 3) FROM ENP

-- 7. ENAME의 글자 중 K를 P으로 변경하여 검색
SELECT REPLACE (ENAME, 'K', 'P') FROM ENP

-- 8. ENAME과 ENPNO을 이용하여 ‘7369번은 SMITH입니다'로 출력
SELECT EMPNO || '번은 ' || ENAME || '입니다' FROM EMP

-- 9. HIREDATE 이용하여 입사한 월과 요일을 출력
SELECT HIREDATE,
TO_CHAR(SYSDATE, 'mm') AS mm, TO_CHAR(SYSDATE, 'day') AS DAY
FROM EMP

-- 10. JOB이 MANAGER이면 level1, SALESMAN이면 level2, 기타이면 level3라고
-- LEVEL_RESULT컬럼에 출력
SELECT JOB,
CASE JOB
WHEN 'MANAGER' THEN 'LEVEL1'
WHEN 'SALESMAN' THEN 'LEVEL2'
ELSE 'LEVEL3'
END AS LEVEL_RESULT
FROM EMP

 

집계/그룹함수 정리문제

더보기
-- 집계/그룹함수 정리 문제

--1. 전체 직원수 출력
SELECT COUNT(*) FROM EMP 

--2. DEPTNO가 20이거나 MGR이 7700이하인 직원수 출력
SELECT COUNT(*) FROM EMP WHERE DEPTNO = 20 OR MGR <= 7700

--3. DEPTNO가 10 또는 20인 직원의 SAL최저 출력
SELECT MIN(SAL) FROM EMP WHERE DEPTNO = 10 OR DEPTNO = 20

--4. 직원의 SAL 최저, 최고, 합계 출력
SELECT MIN(SAL), MAX(SAL), SUM(SAL)
FROM EMP

--5. DEPTNO별 SAL 평균 출력
SELECT DEPTNO, AVG(SAL)
FROM EMP
GROUP BY DEPTNO

--6. DEPTNO별 SAL 합계를 DEPTNO 오름차순으로출력
SELECT DEPTNO, SUM(SAL)
FROM EMP
GROUP BY DEPTNO
ORDER BY DEPTNO

--7. DEPTNO별 SAL 평균이 2000이상인 SAL평균을 DEPTNO역순으로 출력
SELECT DEPTNO, AVG(SAL)
FROM EMP
GROUP BY DEPTNO
HAVING AVG(SAL) >= 2000
ORDER BY DEPTNO DESC 

--8. JOB이 MANAGER인 직원의 전체 수, 월급의 평균 검색
SELECT COUNT(*), AVG(SAL)
FROM EMP
WHERE JOB = 'MANAGER'

--9. ENAME에 S를 포함하는 직원의 전체 수를 검색
SELECT COUNT(*)
FROM EMP
WHERE ENAME LIKE '%S%'

--10. SAL이 3000이상이고, COMM이 null이 아닌 직원의 전체 수 검색, SAL의 역순으로 출력
SELECT COUNT(*)
FROM EMP
WHERE SAL >= 3000 AND COMM IS NOT NULL 
ORDER BY SAL DESC

 

테이블을 합해서 검색하는 방법 3가지

        1. 집합 (set) : UNION, UNION ALL, MINUS, INTERSECT

        2. 조인 (join) <완전 중요>

             - inner join

             - (left/right) outer join

             - self join 이라는 것도 있음!

        3. 서브쿼리

 

Q. 값 하나만 지우는 것은 무엇을 사용해야 할까?

      A. 데이터의 조작 이기 떄문에 update

- Drop-> 스키마 관련된: 컬럼 자체를 없애버리는 (DDL)

- Delete -> row 단위로 지움

- Update -> colum 단위로 지움 (값하나만 지울때는 update사용)

 

정리문제

더보기

1.       SQL 3가지로 구분, 각각을 간단 설명, 예를 들어보세요.

DDL DML DCL
데이터 항목의 정의 데이터 조작 DBMS제어(계정관리, 백업/복원)
create, alter, drop, truncate insert, select, update, delete grant, revoke, backup, restore

 

2.        DML 있는 조작 4가지를 부르는

CRUD(크루드)

 

3.        DML 조작 4가지에 해당하는 SQL

·       C(insert)

·       R(select)

·       U(update)

·       D(delete)

 

4.       정형데이터 베이스란?

항목을 정해서 저장하는 DB

 

5.       스키마란?

데이터를 저장하기 위한 (뼈대): DB, 테이블 , 컬럼 , 제약조건

 

6.       ERD ?

저장할 대상들 간의 관계도 (저장할 대상들 간의 관계를 그림으로 나타낸 )

 

7.        제약조건 이란? 1 이상

Not null, PK, FK, unique

 

8.       PRIMARY KEY 설정하는가?

Not null, unique

 

9.       FOREIGN KEY 설정하는가?

문제가 있는 데이터가 들어가지 않게 자동 체크

 

10.   저장할 대상을 부르는 ? 한글/영어

한글: 개체, == 영어: 엔티티

 

11.   VARCHAR2 CHAR 차이

Varchar2 가변, char 불변

 

12.   JOIN 하는가?

검색할 내용이 여러 테이블을 합해서 해야 하는 경우

 

13.   JOIN 3가지 종류 비교

Inner join, left outer join, right outer join


주말

멀티캠퍼스 이러닝 수업 1,2 회차를 들었다.

 

1회차 문제

더보기

class Test{

   public static void main(String[] args) {

      system.out.println("Hello Java");

   }

}

 

Q. 보기와 같이 메모장으로 작성된 자바 소스 파일을 실행하기 위한 컴파일 명령문과 실행 명령문을 입력 하시오.

     cmd 에 들어간다.     ==>

     파일 경로 이동: cd C:\java_Test     ==>

     컴파일 명령문: javac Test.java     ==>

     실행 명령문: java Test

 

2회차 문제

더보기
package self;

public class Exercise01 {

	public static void main(String[] args) {
		//1. 은행 계좌번호를 저장할 account 변수를 선언합니다. 계좌번호는 "01-123-456"입니다.
		String account = "01-123-456";
		
		//2. 잔액을 저장할 balance 변수를 선언합니다. 초기값은 0입니다.
		int balance = 0;
		
		//3. 입금액을 저장할 deposit 변수를 선언합니다. 초기값은 0입니다.
		int deposit = 0;
		
		//4. 출금액을 저장할 withdraw 변수를 선언합니다. 초기값은 0입니다.
		int withdraw = 0;
		
		//5. 은행 이율을 계산할 rate 변수를 선언합니다. 이율은 3.3 입니다.
		double rate = 3.3;
		
		//6. 이자 금액을 저장할 interest 변수를 선언합니다. 초기값은 0.0 입니다
		double interest = 0.0;
		
		//7. deposit 변수에 입금할 500,000을 저장합니다.
		deposit = 500000;
		
		//8. 잔액을 계산합니다. (balance = balance + deposit)
		balance += deposit;
		
		//9. withdraw 변수에 출금할 200,000 저장합니다.
		withdraw = 200000;
		
		//10. 잔액을 계산합니다. (balance = balance - withdraw)
		balance -= withdraw;
		
		//11. 이자 계산을 합니다. (interest = balance * rate)
		interest = balance * rate;
		
		//12. 현재 잔액을 출력합니다.
		System.out.println(balance);
		
		//총
		System.out.println("계좌: " + account + " 의 현재 잔액은: " + balance + " 이고, 이자는: " + interest + " 입니다.");
		
	}

}

파이썬 버전별로 다운 받아서 (여러 버전 깔기 가능!)

파이썬은 자바와 다르게 선언이 없다.

파이썬

주석: #

선언: def

제곱: **

 

요즘은 회사에서 조금씩 여러가지를 있는 사람을 선호하는 경우가 있대( 스택)

              아니면 말이 통하기 때문에

 

하루에 한번씩 커밋하는 것이 중요 (커밋을 얼마나 많이 했는지 흔적이 나오고 기록이 남기 때문에 내가 꾸준하게 했다는 것을 보여주기 위함.)

 

기술면접에서 SQL UPDATE 써보라고 있다고 하셨다.

파이널프로젝트에 정규화 과정 넣으면 좋겠다고 하셨다. (포트폴리오에 넣으라고 하셨다.)

최종 프로젝트는 mysql사용해야함

 

==> 주말 복습할 내용: 함수X, DDL + pk + fk설정, DML(CRUD), Join