HCD 랩스 9월 4주차

우영·2025년 9월 22일

HDC 랩스 풀스택 1기

목록 보기
6/20

9/22

Today
1. 자바 스레드 or nqtt, 깃허브

assignment
1.파이썬 성적관리 - 자바 메인 하나에 풀기

review : fstring, function_args_exam2, 클래스 예제1, join, mro, file_test1


깃허브 계정 2개, DB연동
io, jdbc 자바로 웹을 연동시키는 것

  • data 폴더에 test.txt
  • io.FileInputStreamTest2
  • FileReaderTest

  • FileInputStream은 한글이 깨짐 -> FileReader 2byte 단위
  • printwriter, printStream 만 기억하면 됨.
  • PrintStreamTest
  • FileWriterTest

  • FileCopy1 filereader와 writer를 사용해서 복사해보기

  • FileCopy2 while문 위에 아예 조건을 한번에 설정

  • 시간 복잡도 시간을 아끼기 위해서 c와 c++보다 더 걸림 Scanner로 읽는거 BufferReader가 효율적이다


보조스트림, Buffered 스트림 - 배열을 추가해 작업속도가 훨씬 빠름, 원본이랑 관계가 없음
readLine() : 한줄 읽기

BufferedReader, BufferedWriter = 리더는 파일이 있을 경우 읽어오거나 복사, writer는 파일이 없을 경우 파일을 만드는 것


  • IO 실습
  • Grade_BufferedWriter : finally close가 없어도 파일은 생성이 됨.

정제를 잘해야함. trim등 공백 제거를 잘해야함.

공부해야함!!

  • Prob2

  • PrintWriterTest

  • TryWithResourceTest

    • 위에 3개 다 공부하기
  • 통신 - thread


  • git
  • 규칙
  • 백업 필수!
    총 크게 4가지
  • 원격 저장소(remote) (원격에서 로컬 :fetch) (local에서 작업공간까지 합치는것 :merge) (pull = fetch + merge)
  • 로컬 저장소 (로컬에서 원격으로 올리는 경우 :push)
  • 작업공간 (add)- 스테이징영역(git에 따로 보낼 애들만 모아놓음) (commit)-> 앞의 2개를 로컬저장소로 보냄
  • 다운로드 받는 작업 (= 싱크를 맞추는 것: pull) fetch, merge



  • main이라는 브랜치가 제공됨(중요), 충돌이 일어날 수 있어 옛날엔 마스터

  • 브랜치 : 실제 작업하는 작업 공간

  • git브랜치 전략이 있음


9/23 - 깃허브, bash, CI/CD, sql

assignment
1.파이썬 성적관리 - 자바 메인 하나에 풀기

review

  • fstring, function_args_exam2, 클래스 예제1, join, mro, file_test1, 팀장, 팀원 깃허브

  • git
    • 제일 중요한 것 : 원격저장소와 로컬 저장소의 싱크가 맞아야 함.
    • fork : 내 계정으로 복제
      나의 로컬저장소, 나의 원격저장소, 팀장님 원격저장소의 싱크 동기화
  • 원격저장소(git)에 있는게 나의 로컬저장소에 있어야 비로소 push가 가능

  • 깃하고 연결됐다는 의미

  • git원격저장소에 연결하기 위해서 토큰을 발급(1회 - 한 번 발급하면 다시 볼 수 없어서 잘 관리)


    위에거 fetch 아래거는 push - 싱크가 맞아야 push가 됨, remote에 있는 걸 fetch로 가져와야 함

  • 브랜치와 연결
  • space바를 누르면 main이 뜸 -> main을 눌러서
  • remote tracking 확인
  • merge 진행
  • 병합됨

안될 시

  • 레포지토리 삭제

git 정리

  1. github에서 레포지토리 새로 생성
  2. 이클립스 새로운 워크스페이스 만들기
  3. 프로젝트 만들기와 java project 선택
  4. project 만들기 - 밑의 사진처럼 맨 밑에 module 해제
  5. package랑 class 파일 만들기 -> 컨트롤 + s 저장해주기

  6. Second 프로젝트 우클릭 후 - team - share project - use or create 클릭 - create repository
  • team - share project -> 이 프로젝트를 Git으로 저장하겠다.
  • create repository -> 새로 Git 저장소를 하나 만들까요?
  • .git폴더가 만들어지면서 로컬 저장소가 생김


  • 프로젝트명 바뀜 master
    • 기본 브랜치를 자동으로 생성해줌.
  1. git작업과 관련된 view추가

  • 마우스를 코드에 다시 클릭하면 자동으로 밑에 뜸

  • add to 하면 stage로 이동 후
  • message 입력 후 commit
  • 레포지토리 - 세콘드 - 로칼 - 마스터에 보면 메시지입력된거와 cf584c가 뜨면 여기까지 완료
  1. 리모트 연결

  • change를 누르면 이 화면이 뜸
  • url은 복사해서 붙여넣기
  • 유저에는 닉네임 비번은 토큰
  • save
  • origin 생성 확인 (fetch와 push할 준비가 됨)
  1. fetch 작업하기 (원격 저장소(remote)에 있는 최신 이력(커밋·브랜치)을 로컬 저장소로 "가져오기")
  • add 하면 옆에 화면 뜸
  • Source 에서 space bar 누름
  • finish
  • save and fetch

    -close
  1. merge 하기 (그 가져온 커밋을 현재 내 브랜치에 합침)
  • Second 우클릭 - merge
  • origin 선택 후 Merge
  1. push 하기
  • configure
  • save and push
  • close
  1. github로 이동
  • 빨간색 상자 버튼 만들어짐 - 클릭

  • create pull request 클릭

  • merge pull request 클릭 or Close pull request

  • 이 화면 뜨면 끝

  • github의 레포지토리랑 이클립스의 파일이 같이 올라간걸 볼 수 있음

  • 이클립스에도 read.me 파일이 있음

  1. branch 정리 - 이름을 통일
  • github는 main을 쓰고 있고 이클립스는 master를 쓰고 있어서 안맞을 수가 있음. master 보다는 main이 권고사항

  • main 체크아웃 하고 master 삭제 (알아서 복사됨)

  • main만 남음

  • github가서 master 삭제

  • master 삭제

  • 삭제된거 확인

  • main 에서 main 가는거 조심

    • 작업 브랜치 만들고 작업
    • 백업 필요

이제 팀원 차례

  • 팀원이 팀장꺼 fork(edge로 나의 다른 계정으로 팀원 역할 함)

  • 팀원 토큰 생성후 팀원의 워크 스페이스를 새로 만듦. 안만들고 진행해도 상관없음 팀장 팀원 구분만 잘하면 됨.

  • 팀원 꺼 url과 토큰 입력 후

  • .git 확인 로컬 저장소 생성

  • 팀장껄 가져옴

  • 작업 하기 위해 불러옴

  • 새로운 브랜치를 생성 (나중에 삭제, 메인 브랜치에서 진행X)

  • 이름 설정 - 나중에 삭제할거지만 나중에 협업 할때는 로그에 남아서 알아보기 쉽게 적어야 함.

  • 패키지와 클래스 생성(변경된것을 확인하려고 임의로 넣음)

  • staging에서 add와 commit해서 로컬저장소에 올리고

  • 내 원격 저장소에 올리는 작업이므로 push하면 됨. fetch랑 merge를 할 이유가 없음(싱크 맞출필요가 없어서)

    • fetch랑 merge : 다른 사람 변경사항을 내 코드랑 합칠 때 필요한 작업
  • 내 원격 저장소 확인

  • gitTest누르고 push

  • github가서 request

  • request 하면 팀장님에게 요청됨

  1. step3
    나의 로컬 저장소와 원격저장소를 팀장님의 원격저장소와 동기화
    • 팀장님의 저장소에는 내가 저장한 내용과 다른 팀원이 작업한 내용이 있다.
    • origin : 나의 remote저장소
    • upstream : 팀장님의 원격저장소(내가 fork한 저장소)
      1) 팀장님의 원격저장소를 등록(처음에만 작업)
      2) 팀장님의 원격저장소의 main브랜치에서 변경된 내용을 fetch
      3) 나의 main과 팀장님의 main을 merge
      4) 나의 git저장소에 push

upstream : 팀장님의 원격저장소에서 나의 로컬저장소로 가져오기 위한 작업

  • 이해 : 다른 팀원들의 수정내용으로 인해 팀장의 원격저장소의 내용이 바뀔 시 원격 저장소에서 가져와 내 브랜치와 merge후 올림(싱크를 맞추는 작업)
    • 싱크를 맞추지 않고 올렸을 때 충돌 발생을 방지하기 위함이라고 볼 수 있음
    • 또한 편의성

upstream 하는 방법

  • remote 하나 생성, 생성 시 팀장 url을 넣고 밑에는 팀원 아이디와 토큰을 넣음
  • remote 생성 확인
  • 그다음에 fetch 와 merge 진행
  • (필요시) fork로 올릴 시 push
  • 많이 연습 필요

9/24 - sql

assignment
월요일까지 - 하나의 사이트를 정해서 영화(영화아이디) 같이 작성해보기
오늘 과제 p103 마켓DB
1.파이썬 성적관리 - 자바 메인 하나에 풀기

review

  • fstring, function_args_exam2, 클래스 예제1, join, mro, file_test1
  • gitHub 팀장, 팀원

SQL

  • 테이블 : 데이터 저장하는 곳
    • 열 : 레코드, 튜플
  • 기본키(PK) : 유일성과 최소성을 만족
  • 외래키(FK) : 기본키를 참조
  1. 데이터베이스
    1) 용어
  • 데이터베이스: 기업이나 조직에서 필요한 데이터를 저장해 놓은 데이터 집합

  • DBMS (Database Management System)
    데이터를 관리하는 시스템, 데이터의 유지보수나 보안을 유지할 수 있도록 제공되는
    소프트웨어 DBMS를 이용해서 데이터를 입력, 수정, 삭제, 조회하는 일들을 처리할 수 있다.

  • DBA(Database Administrator)
    데이터를 관리하는 업무를 담당하는 사람, 데이터 설계, 인덱싱, 튜닝, 백업.....

    2) DBMS의 장점

    • 무결한 데이터 유지

    • 데이터를 공유

    • 데이터의 일관성을 유지

    • 중복을 최소화할 수 있다.(관계형데이터베이스의 특징)

      3) 관계형데이터베이스

  • mysql, oracle, 관계형 데이터베이스

  • 데이터를 관리하는 최소단위는 테이블로 2차원 표의 형태

  • 데이터를 처리하기 위한 명령문을 사용

  • SQL의 약자 : ?

  • 테이블(Relation), 컬럼(attribute), 레코드(tuple)

  • 테이블의 무결성이나 작업의 편의성, 공간의 최소화를 위해 테이블을 나눠서 관리한다.
    테이블을 분리하는 것을 테이블정규화라 한다.

  • 테이블에서 레코드를 구분하는 컬럼을 기본키라 한다.(pk - 기본키는 중복이 없고 반드시 데이터가 있어야 한다.)

  • 테이블 정규화 후에 기본키 테이블의 기본키를 참조해서 쓰는 테이블을 외래키 테이블이라 하고 이런 컬럼을 외래키(fk)

    4) SQL

  • 데이터의 조회, 수정, 삭제, 입력에 사용되는 언어
    DML (데이터조작어): insert, update, delete, select
    DDL(데이터정의어) : create, alter, drop , rename
    DCL(데이터제어어) : grant, revoke
    TCL(트랜잭션처리어):commit,rollback
    Query(데이터조회):select

    • 기본 select
    • 함수
    • 그룹화
    • 서브쿼리

영화(영화아이디. 영화면, 사진. 정보 가격 장르 감독 제작사 배우
영화배우(아이디, 배우, 영화아이디)
=> 여러 데이터가 텍스트로 들어가는 경우 json형식, 로 구분

  1. mysql명령
    계정접속 -> 데이터베이스 접속 -> 테이블 사용
    1) mysql접속
    mysql - u 계정 -p 패스워드 데이터베이스명
    mysql - u 계정 -p 패스워드
    mysql - u 계정 -p 데이터베이스명
    => root 계정으로 접속
    => -p만 입력하면 패스워드를 입력해야 함
    ex) mysql -u root -p

  2. 데이터베이스 관련 명령어
    mysql을 설치하면 기본으로 제공되는 데이터베이스, mysql을 실행할 때 사용하는 설정 값이나 기본로그에 관련된 데이터
    information_schema : db의 메타데이터 보관(테이블, 컬럼타입, 접근권한정보...)
    performance_schema : db관련 여러 작업을 모니터링할때 사용(락, 싱크로문제 모니터링)
    sys : mysql의 실행 이력(유저, 호스트, 세션정보)
    mysql : 시스템데이터베이스로 mysql을 운영할때 필요한 정보(권한, 프로시져, 유저정보....)
    1) 데이터베이스 목록 확인
    show databases
    2)현재 접속중인 데이터베이스를 확인
    select database()
    3) 사용자정의 데이터베이스를 생성
    create database 데이터베이스이름;
    4) 사용할 데이터베이스 선택
    use 데이터베이스명

    [미션1]

  • root 계정에 접속해서 myestdb 데이터베이스 생성
  • mytestdb데이터베이스에 접속
  • 현재 사용중인데이터베이스 조회
  • 캡처 후 제출
  1. 사용자관리 명령어
    1) 사용자 생성
    => create user
    [형식]
    create user '사용자계정'@'호스트명' identified by '패스워드;
    호스트명 - localhost(127.0.0.1), ip
    접근을 제한할 수 있다. 특정 ip에서 허용하겠다. ,% 모든거
    ex) mtdb계정생성(패스워드1234)
    내부에서만 접근이 가능한 사용자 생성
    create user mydb@localhost identified bt '1234'; 192.168대역의 ip에서만 접근을 허용하는 사용자
    create user mydb@'192.168.%' dentified bt '1234'; 외부의 모든 접근을 허용
    create user mydb@'%' dentified bt '1234'; 192.168.0.15의 ip에서만 접근을 허용
    create user mydb@'192.168.0.15' dentified bt '1234';
    2) 계정삭제
    drop user 계정명@호스트 ex)mytest
  2. 권한관련 명령
  • 계정을 생성한 후에 사용할 수 았는 권한해야 한다.

  • 권한은 root 계정에서 정의

  • root계정은 보안상의 이유로 localhost로
    [형식]
    grant 권한list on 데이터베이스.테이블 to 계정
    => 권한list를 계정에게 부여(데이터베이스에서만 사용할 수 있는 권한을 부여)

    1) 특정 계정의 권한을 확인
    show grants for mydb@localhost
    mydb -> 계정, localhost -> 호스트

    2) 현재 접속한 계정의 권한을 확인
    show grants for current_user

    3) 권한부여
    [모든권한]
    grant all privileges on 데이터베이스.테이블명 to sample@localhost
    grant all privileges on mytestdb.* to sample@localhost
    => mytestdb데이터베이스의 모든 테이블에 대해서 모든 권한을 부여

    [특정권한]
    grant insert,update on mytestdb.emptest2 to sample@localhost
    -> 권한리스트 --> 데이터베이스.테이블명
    mydb@localhost계정이 mytestdb데이터베이스의 emptest테이블에 대해서 insert와 select할 수 있도록 권한을 부여
    [미션]
    sample계정을 localhost로 생성하고 mytestdb데이터베이스의 emptest2테이블에 insert,update권한을 부여

    insert into emptest values('bts2', '1234');
    추가 후 작업상태 확인

    update emptest
    set pass = '2345'
    의 실행확인

    실행확인
    select * from emptest2

    2) 생성된 계정확인
    3) sample계정으로 접속 후 현재 계정의 권한을 조회
    => 실행결과 캡쳐 후 제출


예제 1
[시나리오]
1. mydb - 모든권한을 부여
2. sample데이터베이스 만들기
3. emp테이블을 생성
dept테이블을 생성
4. test계정을 만들고 emp테이블에 select명령문을 실행할 수 있는 권한만 부여
5. test계정의 권한이 제한되는지 확인
6. 다시 작업 권한을 부여하고 테스트하기
=> root계정으로 접속해서 test계정에 insert권한을 지정
접근이 가능한지 확인하기(sample데이터베이스의 emp테이블에 대해서만)
6. select
-> sql문은 대소문자를 구분하지 않는다.
-> sql명령문의 끝에는 ;을 추가하기
-> select명령문에서 select절 뒤에 *을 추가하면 모든 칼럼을 조회하겠다는 의미

1)기본select
[구문]
select 컬럼명1, 컬럼명2....
from 테이블명1, 테이블명2....
-> 컬럼과 컬럼, 테이블과 테이블을 구분하기 위해서 ,(콤마)를 이용해서 구분
select empno, ename, hiredate, sal
from emp
-> 컬럼,테이블 별칭(alias)을 사용할 수 있다. 별칭을 사용하면 대신에 컬럼명 처럼 표시된다.
select 컬럼명 as alias
from 테이블명

or

select 컬렴명 alias
from 테이블명

-> 함수나 연산식(사칙연산)을 컬럼에 정의할 수 있다.
-> alias에 특수문자나 공백을 포함하고 싶은 경우""(큰따옴표)로 묶어서 정의

9/25 - sql - select, 함수, inner 조인

assignment

  • sql 조인 5문제
  • 월요일까지 - 하나의 사이트를 정해서 영화(영화아이디) 같이 작성해보기
  • 파이썬 성적관리 - 자바 메인 하나에 풀기

review

  • fstring, function_args_exam2, 클래스 예제1, join, mro, file_test1
  • gitHub 팀장, 팀원 - 완료
  • sql 복습 - 완료

9/26 - 조인, 서브쿼리, DDL

assignment

  • ~ 9/29(월)
    • 하나의 사이트를 정해서 영화(영화아이디) 같이 작성해보기
  • 파이썬 성적관리 - 자바 메인 하나에 풀기
  • review
  • fstring, function_args_exam2, 클래스 예제1, join, mro, file_test1

--
당근마켓 테이블과 값

  • 게시물T
    • 상품 글 번호(PK) ,회원 번호(FK),제목, 가격, 사진, 위치표시, 예약상태, 올린 시간, 카테고리
  • 회원정보T
    • 회원 번호(PK), 아이디, 비밀번호, 전화번호, 이메일, 닉네임
  • 위치정보T
    • 위치 번호(PK), GPS좌표, 인증여부
  • 채팅T
    • 각 채팅별 번호(PK), 상품 글 번호(FK), 보낸사람아이디, 메세지 내용, 보낸시간

SQL

0개의 댓글