본문 바로가기
Backend boot camp/Session1

Development

by orioncsy 2022. 8. 21.

0. 컴퓨터와 프로그래밍의 이해

  • 개요
    • 백엔드 개발 기술의 최소한의 교양 지식
    • 학습 목표
      • 컴퓨터 구성요소
      • 프로그램 실행 시 컴퓨터 내부
      • 프로그래밍 관련 개념(프로그램, 프로그래밍, 프로그래밍 언어, 컴파일, 빌드, 통합개발환경)

 

  • 컴퓨터의 이해
    • 인트로
      • 계산한다는 computare 라틴어에서 유래
      • 독일군 암호 해독을 위한 튜링 머신이 시초
    • 컴퓨터란?
      • 입력받은 데이터를 정해진 규칙에 따라 처리해서 처리 결과를 저장하고 출력하는 전자 장치
      • 입력받은 데이터 - 입력장치
      • 정해진 규칙 - 프로그램 or 소프트웨어 or 애플리케이션
      • 처리해서 - 중앙처리 장치
      • 처리 결과 저장 - 기억장치
      • 출력하는 - 출력장치
    • 컴퓨터의 구성 요소
      • 정해진 규칙 - 소프트웨어
      • 입력받은 데이터를 처리해서 처리 결과 저장하고 출력 - 하드웨어
    • 소프트웨어
      • 하드웨어 작동 방식을 규정한 명령들의 집합
      • system software
        • application software를 실행하기 위한 플랫폼 - os : Mac, Window, Linux / runtime 환경 : Node.js, JRE
        • 하드웨어와 직접적으로 소통 및 작동 가능하게 함 - 드라이버 : 키보드, 마우스, usb 드라이버
      • application software 
        • 애플리케이션 혹은 프로그램 - 사무, 교육, 게임, 멀티미디어, 통신
    • 하드웨어
      • 중앙처리장치(Central Processing Unit, CPU)
        • 프로그램 실행 및 데이터 처리 담당 장치, 프로세서
        • 제어장치
          • CPU 동작과 데이터 흐름 통제
          • 운영체제와 소통하여 컴퓨터 자원 관리
        • 연산장치
          • 프로그램에 기술된 명령어 수행
          • 코드를 실행
        • 레지스터
          • CPU 내 작고 빠른 기억장치
          • 연산장치에 필요한 데이터들 임시 저장
      • 기억장치(Memory device)
        • 보조기억장치
          • 컴퓨터에 필요한 정보 반영구적 저장
          • 큰 용량 저장 가능하나 읽고 쓰는 속도 느림
          • CPU 속도에 비해 느리기 때문에 직접적으로 소통하지 않음
          • SSD(Solid State Drive), HDD(Hard Disk Drive)
        • 주기억장치
          • 프로그램 실행 시 데이터 저장
          • 큰 용량 불가하나 읽고 쓰는 속도 빠름
          • CPU 속도에 어느정도 부합하기에 직접 소통 가능
          • RAM(Random Access Memory), ROM(Read Only Memory)
        • Cache Memory
          • CPU가 한번 사용한 데이터 중 재사용 가능성이 높은 데이터를 주기억장치에서 미리 불러와 저장하는 기억장치 
        • 기억장치의 계층구조
          • Register(CPU 내 존재) - 캐시 메모리(static RAM) - 주기억장치(Dynamic RAM) - 보조기억장치(하드, SSD, 플로피디스크, 자기 테이프)
          • 오른쪽으로 갈수록 용량 커지고, 속도 느리고, 가격은 저렴해진다
  • 입력 장치(Input device)
    • 사용자로부터 데이터 입력받는 장치 ex) 키보드, 마우스, 트랙패드, 마이크
  • 출력 장치(Output device)
    • 사용자에게 데이터를 출력해주는 장치 ex) 모니터, 스피커, 프린터
  • 시스템 버스(System Bus)
    • CPU 포함한 각 하드웨어 장치 간 통로
    • 하드웨어를 물리적으로 연결한 전선으로 하드웨어에 속함
    • 데이터 버스 - 하드웨어 간 데이터 전달 통로
    • 주소 버스 - 데이터 도착 정보 전달 통로
    • 제어 버스 - CPU의 제어 장치가 생성한 제어 신호를 다른 하드웨어에 전달하는 통로

 

  • 컴퓨터 동작
    • 계산기 실행
      • 운영체제가 보조기억장치에서 저장되어 있던 프로그램을 주기억장치에 로드
      • 로딩되면 모니터에 출력, 실행 중인 프로그램을 프로세스라 불림
      • 키보드, 마우스 등 입력장치를 통해 데이터 입력, 소스코드에 작성된 명령어에 적용하여 계산
      • 계산 완료되면 주기억장치에 저장하고 출력

 

  • 프로그래밍의 이해
    • 인트로
      • 컴퓨터의 특성을 활용하여 문제를 해결하는 것을 프로그래밍
      • 반복적이고 번거로운 작업을 프로그래밍으로 해결 가능
    • 프로그래밍
      • 프로그래밍이란 프로그램을 만드는 과정으로서, 특정 목적을 달성하기 위해 설계된 알고리즘을 프로그래밍 언어를 사용하여 코드로 작성하는 과정을 의미한다.
    • 프로그램
      • 어떠한 목적을 달성하기 위한 컴퓨터 명령문의 집합체
    • 프로그래밍 언어
      • 컴퓨터가 알아들을 수 있는 언어는 기계어
      • 기계어와 사람의 언어를 매개해주는 것이 프로그래밍 언어
      • 기계어와 같은 컴퓨터와 가까운 언어는 저수준 언어, Java와 C언어 같이 사람에 가까운 언어를 고수준 언어
    • 컴파일
      • 소스코드를 기계어 코드로 변환하는 과정을 compile
    • 빌드
      • compile은 build 과정의 일부
      • 소스코드를 실행할 수 있는 산출물로 변환
      • .exe 나 .msi 확장자를 가진 실행파일로 만들어주는 과정
    • 통합개발환경(Integrated Development Environment, IDE)
      • 코드를 작성할 때 사용하는 프로그램
      • 코드 작성 및 편집, 디버깅, 빌드 등의 작업을 하나의 IDE에서 가능
      • Visual Studio Code, IntelliJ, Eclipse

1. 웹(Web)

  • 개요
    • 웹 클라이언트와 웹 서버 학습
  • Client Server Architecture
    • 클라이언트 서버 아키텍처, 2 티어 아키텍처
    • 쇼핑몰 앱
      • 인터넷 연결 없이 불가능 - 상품 정보를 서버로부터 받아와야 하기 때문
      • 상품 정보가 앱에 존재한다면? - 끊임없이 업데이트해야 함, 실시간 제공 어려움
      • 결제도 은행 서버와 연결 필요
    • 상품 정보가 존재하는 곳과 사용하는 앱을 분리하는 것이 2 티어 아키텍처
      • 클라이언트 - 리소스를 사용하는 앱
      • 서버 - 리소스가 존재하는 곳
  • 3-tier architecture
    • 클라이언트-서버 구조에서 DB를 추가한 구조 
    • 서버는 리소스를 전달해주는 역할만 함
    • 데이터베이스라는 곳에 리소스를 저장
  • Front end VS Back end
    • Front end : 클라이언트 쪽에서 리소스를 사용하는 곳
    • Back end : 리소스를 전달 해주는 서버나 리소스를 저장하는 DB
  • Client와 Server 종류
    • 클라이언트 : 웹 앱(웹사이트), 스마트폰/태블릿 앱, 데스크톱 앱
    • 서버 : 웹 서버, 파일 서버, 메일 서버, DB 서버

2. 개발환경 세팅

  • Window
    • WSL2/JDK/Intellij/JetBrains ToolBox/환경변수 설정
    • WSL2 설치(Window Subsystem for Linux 2)
      • Windows 버전이 20H1, 20H2, 21H1 이상(windows + s 후 시스템 검색)
      • Windows terminal 설치(windows + s 후 Microsoft Store 열고 windows terminal 검색 후 다운로드)
      • 터미널 우클릭 후 관리자 권한 실행으로 들어가서(windows + s 후 터미널 검색)
      • dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
      • dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
      • 재부팅
      • 링크에서 4단계 Linux 커널 패키지 다운(x64 머신용 최신 WSL2 Linux 커널 업데이트 패키지)
      • 실행 오류 발생하면 반복해서 finish
      • 터미널에서 wsl --set-default-version 2
      • Microsoft Store에서 ubuntu 검색하고 다운
      • 실행 후 ID P/W 설정
      • 터미널에서 wsl -l -v 버전 2인지 확인(버전 1이면 wsl --set-version Ubuntu 2)
      • 터미널 종류 후 다시 실행하고 아래로 꺾인 꺽쇠 버튼 클릭해서 리눅스 클릭
    • JDK 설치
      • Zulu OpenJDK 다운로드 페이지로 가서 Java Version과 Operating System, Architecture를 선택
      • Architecture는 내 컴퓨터 → 속성에서 64bit or 32bit 운영체제를 확인
      • ‘.msi’ 버튼을 눌러 다운로드
      • 실행 및 finish
      • “windows + R” 키를 눌러 실행 창을 열고 cmd를 입력해 명령 프롬프트
      • java 입력
  • Intellij /JetBrains Tool Box
    • 구글 검색 후 다운로드
  • 환경변수 설정
    • window + S로 환경 변수 검색
    • 환경변수 클릭, 시스템 변수에서 새로 만들기
    • 변수 이름 : JAVA_HOME
    • 변수 값 : C:₩Program Files₩Zulu₩zulu-11
    • 시스템 변수 path 찾아 편집
    • 새로 만들기
    • %JAVA_HOME%₩bin 추가
    • 같은 방식으로
    • 변수 이름 : CLASSPATH
    • 변수 값 : %JAVA_HOME%₩lib
    • cmd에서 path로 검색하여 확인
  • Mac
    • JDK/Intellij/JetBrains ToolBox
    • JDK
      • 윈도우와 동일, .dmg 버튼으로 다운로드, M1은 arm 64bit, intel은 x86 64bit
      • 터미널에 java 입력
    • Intellij/JetBrains ToolBox
      • window와 동일

3. 개발환경 세팅

  • Learn intellij idea 들어가서 start learning으로 tutorial 실행
  • 단축키

'Backend boot camp > Session1' 카테고리의 다른 글

[JAVA]기초 - 변수, 타입, 문자열, 연산자, 콘솔 입출력  (0) 2022.09.06
[Git] 기초  (0) 2022.09.06
[Linux] 기초  (0) 2022.09.06
[Publishing]HTML, CSS  (0) 2022.08.23
Learn how to learn  (0) 2022.08.19