728x90
반응형

1. 프로그래밍 언어의 발전

 

✅ 컴퓨터 시스템의 발전

  • 아이디어 시대
    • 계산 자동화를 위한 상상속의 기계 설계 → 튜링 기계(실체화 X)
  • 전자식 컴퓨터 등장(1940~50)
    • 전자 신호를 통한 계산 기계 → 최초 전자식 컴퓨터: 에니악, 콜로서스 
    • 컴퓨터 자체에 프로그램이 들어있어서 프로그램을 변경하려면 컴퓨터를 물리적으로 변경해야했음
  • 프로그램 저장 방식의 컴퓨터
    • 프로그램과 처리기를 분리 → 에드박
    • 이 시절 컴퓨터에 종이로 된 프로그램을 관리자(operator)가 직접 넣어줘야 했음

 

 

✅ 운영체제의 발전

  • 일괄처리 운영체제
    • 관리자(operator)를 대신할 프로그램 등장
  • 시분할 운영체제
    • 한 컴퓨터(서버)를 터미널로 접속하여 여러 사람이 사용
  • DOS(Disk Operating System)
    • IBM 컴퓨터, Apple 등 개인용 컴퓨터(PC) 등장
  • PC 환경 운영체제 발전
    • GUI 운영체제와 Linux의 발전

 

 

✅ 1950년대: 초기 프로그래밍 언어

  • Fortran: 수식과 문장, 제어문의 등장
    • IBM의 존 배커스(John Backus)에 의해 개발됨
    • 과학계산용 언어(Formula Translation)

출처: 방송통신대학교

 

  • Algol: 구조화 프로그래밍의 발전
    • 본래 이름: IAL(International Algebraic Language)
    • 국제 위원회 ACM-GAMM을 통해 설계된 언어
    • 알고리즘 기술 언어

출처: 방송통신대학교

 

  • LISP: 초기 함수형 언어
    • MIT의 존 매카시(John McCarthy)가 설계함
    • 최초의 함수형 언어

출처: 방송통신대학교

 

 

✅ 1960년대: 프로그래밍 언어의 발전

  • Cobol: 레코드 타입의 소개
    • 미 해군에서 그레이스 호퍼(Grace Hopper)가 이끄는 팀에 의해 개발됨
    • 사무용 언어

출처: 방송통신대학교

 

  • PL/1: 너무 복잡한 언어
    • (1950년대 개발된) 모든 언어를 합쳐 보았으나 결과적으로 너무 복잡해짐

 

  • BASIC: 교육용 언어
    • Begginner's All-purpose Symbolic Instruction Code

 

  • Simula: 객체지향의 등장
    • 시뮬레이션 언어

 

 

✅ 1970년대: 프로그래밍 언어의 단순화

  • Pascal: 차세대 교육용 언어
    • 구조화 프로그래밍 지원

 

  • C: 진정한 시스템 프로그래밍 언어
    • Unix 개발용 시스템 프로그래밍 언어 = 운영체제를 만들 수 있는 언어, 하드웨어를 잘 컨트롤 할 수 있는 능력있는 언어
    • Objective-C, C++, Java, C3 등 다양한 언어에 지대한 영향을 끼침
  • Prolog: 선언적 논리 언어
    • 최초의 논리 언어

 

  • Smalltalk: 객체지향 언어의 발전
    • 최초로 GUI, 마우스 등을 도입

  • Ada: 안정성을 위한 대장정
    • 미 국방성(DoD) 공모
    • 매우 복잡한 언어로 1983년에 첫 컴파일러 등장

 

  • ML: 타입 시스템을 갖춘 현대 프로그래밍 언어
    • 강력한 정적 타입 검사, 타입 추론, 패턴 검사, 예외처리 등

 

  • Scheme: 간결한 LISP
    • MIT 학생들의 기초 프로그래밍 언어 +Python

 

✅ 1980년대: 현대 프로그래밍 언어의 등장

  • Common LISP: 방대한 LISP의 통합
    • 함수형 언어 패러다임과 객체지향 패러다임을 동시에 지원

 

  • Objective-C: C의 탈을 쓴 Smalltalk
    • C를 기초로 한 객체지향 언어의 신호탄
    • Apple의 애플리케이션 작성 언어로 발전

 

  • C++: 객체지향으로 변신한 C
    • 클래스 개념을 C에 도입

 

  • Perl: 문자열 처리를 위한 언어
    • 정규식을 바탕으로 한 강력한 패턴 매칭 기능 포함

 

 

✅ 1990년대 이후: 프로그래밍 언어의 대중화

  • Java: 단순한 객체지향 언어
    • 원래 목적은 임베디드 컴퓨팅 분야였으나 웹 브라우저에 탑재되면서 인기
    • JVM(Java Virtual Machine) : 가상 기계를 통해 운영 체제에 상관 없이 자바 프로그램 동작 가능

 

  • JavaScript: 웹 프로그래밍 언어
    • Netscape
    • Elm, TypeScript 등 다양한 변종 언어로 발전

 

  • Python: 빠른 프로토타이핑 언어
    • 스크립트 언어
    • 동적 언어를 추구 → 예를 들어 변수를 선언할 때 정수형, 실수형 과 같이 자료형을 미리 정하지 않고 실제 동작을 할 때 해당 변수에 실수 값이 들어오면 실수형으로 저장하는 것
    • 다중 패러다임 언어

 

  • Haskell: 순수 함수현 언어
    • 모나드(monad)가 탑재되면서 점차 인기
    • Scala에 영향을 줌

 

 

 

2. 프로그램 동작 원리

 

 프로그램 동작 원리

 

출처: 방송통신대학교

  • 컴퓨터 구조
    • CPU와 메모리, 저장장치 등이 BUS로 연결
    • 다양한 입출력 장치도 BUS에 연결될 수 있음
  • 컴퓨터 동작 원리
    • 전원 켬 → 저장장치에 있던 운영체제가 메모리에 적재 → 수행
    • CPU는 인출-해석-실행 주기를 반복하여 명령어를 실행
      1. 인출: 메모리에 있던 명령어 하나를 가져옴
      2. 해석: 해당 명령어를 해석
      3. 실행: 해당 명령어를 실행
  • 프로그램 동작 원리
    • CPU는 인출-해석-실행 주기를 반복하여 메모리에 적재된 프로그램의 명령어를 실행

 

 

프로그래밍 언어 구현이 필요한 이유

  • 기계어
    • CPU가 이해하고 수행하는 명령어
    • 이진수 형태의 명령어를 사람이 이해하는 것은 매우 난해
  • 어셈블리어
    • 기계어에 거의 일대일 대응하는 형태의 기호 언어 (숫자를 몇 개를 문자로 살짝 바꾼 정도)
    • CPU에 종속적 → 이식성이 거의 0 (A CPU에서 만든 프로그램은 B CPU 프로그램에서 작동 X)
  • 고급 프로그래밍 언어
    • 사람에 가까운 표현으로 프로그램을 나타냄
    • 특정 기계에 종속적이지 않음
    • 프로그램을 CPU가 알아듣는 기계어로 표현해 주어야 함
      1. 소스 프로그램: 프로그래머가 작성한 프로그램
      2. 목적 프로그램: 컴퓨터 하드웨어가 수행할 수 있는 프로그램

 

 

 프로그래밍 언어의 구현 방법

출처: 방송통신대학교

  • 인터프리터
      • 프로그래밍 언어로 작성된 고수준의 명령을 해석하여 수행하는 프로그램
      • CPU의 인출-해석-실행 주기를 흉내 냄(소스 프로그램의 명령어를 하나씩 가져와 해석 후 실행)

 

  • 컴파일러
      • 소스 프로그램을 통으로 변역해서 완벽한 기계어 프로그램을 만들어 냄
      • 인터프리터가 하는 해석 과정을 미리 모두 수행(수행 입장에선 효율적)
      • 상용 프로그램은 컴파일 방식으로 번역한 후 판매

 

  • 하이브리드 구현
      • 인터프리터 방식과 컴파일러 방식을 조합한 방식
      • 중간코드까지 컴파일한 후 인터프리터를 통해 해석
      • 대표적인 언어: Java

 

 

 

3. 프로그래밍 언어의 평가 기준

 

✅ 프로그래밍 언어의 요구사항

  • 표현 풍부성(expressiveness): 프로그래머의 아이디어를 표현할 수 있어야 함
  • 유지 보수성(maintainabilty): 변화에 쉽게 대처할 수 있어야 함
  • 실행 가능성(executability): 컴퓨터에서 실행할 수 있어야 함

 

 

✅ 프로그래밍 언어의 설계 원칙

  • 규칙성(regularity): 언어의 기능이 잘 조합될 수 있어야 함 (일반성, 직교성, 일관성)
  • 추상화 지원(support of abstraction): 실세계의 대상을 추상화하여 나타낼 수 있고 이를 대상으로 어떤 연산을 수행할 수 있어야 함
  • 복잡도 제어(complexity control): 복잡한 대상 및 처리 방법을 제어할 수 있어야 함 (캡슐화, 모듈화)

 

 

✅ 프로그래밍 언어의 평가 기준

  • 작성력: 프로그램 수식이나 문장, 기능을 쉽게 표현할 수 있는가
  • 가독성: 작성된 프로그램을 보고 쉽게 이해할 수 있도록 하는가
  • 신뢰성: 작성된 프로그램이 오류에 빠지는 가능성을 줄이는가
  • 직교성: 언어 기능이 서로 간섭하지 않고 자유롭게 조합될 수 있는가
  • 일관성: 유사한 기능을 같은 형태로 나타낼 수 있는가
  • 확장성: 사용자가 원하는 새로운 기능을 추가할 수 있는가
  • 효율성: 작성된 프로그램이 효율적으로 수행될 수 있도록 하는가
  • 유연성: 프로그래머가 표현하고 싶은 내용을 유연하게 수용하는가
  • 이식성: 프로그램을 다른 실행 환경으로 이전할 수 있는가 (대표적인 언어: Java)

 

 

✅ 프로그래밍 언어의 선택 기준

  • 해당 프로그래밍 언어를 사용하는 커뮤니티가 활발하고 호의적인 언어
  • 특정 응용 분야가 존재하는 프로그래밍 언어
  • 접해 보지 못한 프로그래밍 패러다임을 지원할 수 있는 프로그래밍 언어

 

 

728x90
반응형
728x90
반응형

우연치 않은 기회로 인프런 첫 콘퍼런스인 인프콘에 다녀왔습니다
행사 전날까지 갈까말까 고민한게 무색할 정도로 정말 재밌게 놀다와서 글을 안 남길 수가 없더라구요
내년에도 또 열리길 바라며..🥹 후기 시작할게요!






보시다시피 사람이 정말 많았어요
그래서 행사장에 들어선 순간 집에 가고 싶다는 생각이 들었답니다🙃 이런 콘퍼런스 참여는 난생 처음이라 더 그랬던 거 같아요
그치만 오프닝이 끝나자마자 이 분위기에 완.벽.적.응




그래서 저도 쉬는 시간마다 다른 분들처럼 기업부스에 줄을 서서 여러가지 선물을 받았답니다✌️
(제가 받아온 선물은 맨 마지막에 추가해놓았으니 궁금하신 분들 확인 해주세욧)

사진 속 기업들 외에도 야놀자, 토스, 오늘의 집 등이 있었어요
참여 기업들이 엄청 빵빵하쥬? 역시 네카라쿠배!




이번 콘퍼런스의 전체 시간표입니다
2022 인프콘의 주제에 맞게 주니어 개발자들에게 도움이 될만한 발표들이 정말 많았어요
마음 같아선 모든 발표를 듣고 싶었으나 그럴 수 없기에 추리고 추려 6개의 발표를 듣고 왔답니다
개인적으로 얄코님 발표 듣고 싶었는데 아쉬웠어요🥲




한정수 개발자님은 본인의 경험담을 연차 별로 쪼개서 해당 연차에 했던 좋았던 선택과 후회되는 선택을 얘기해주셨어요
추천해주신 넥스트 스텝 - TDD, 클린 코드 강의 꼭 들어보겠습니다






한주승 개발자님은 테스트가 서툰 주니어 개발자들 위해 테스트 방법에 대해 말씀해주셨습니다
그 중에 원인을 찾을 때는 (외부)인터페이스를 먼저 테스트하라는 말이 가장 와닿았습니다
최근에 타 시스템에서 연계 받아오는 금액 데이터가 안 맞았는데 제가 관리하는 시스템을 제일 먼저 쥐잡듯이 테스트해서 시간 버린게 생각이 났거든요^^;






서지연 개발자님은 대표적인 코드리뷰 방식인 GitHub의 Pull Requests 말고 다른 코드 리뷰 방식인Stacked Changes를 설명해주셨습니다
제 공부 목록에 추가 되었네요🥲






김민준 개발자님은 개발자의 셀프 브랜딩에 관하여 설명해주셨습니다
블로그, 유튜브, 강의, 책 출판 등 자신만의 콘텐츠를 만들라는 말씀을 따라서 앞으로 열심히 블로그 하겠습미다!






강동한 개발자님은 Node.js와 10년을 함께하면서 얻은 것들에 대해 얘기해주셨습니다
노드에 대한 진심어린 애정이 느껴지는 발표였어요!
저는 아직 Node.js를 사용해 본 적은 없지만 궁금해서 들어봤습니당





마지막으로 1타 강사 강영한 개발자님은 개발자로서 성장하는 방법과 이직, 취업을 위한 이력서 꿀팁을 알려주셨습니다
프로젝트만 나열한 이력서 얘기할 때 뜨끔했어요
제 얘기거든요…🐥
다음 이력서에는 담당 프로젝트에서 발생한 문제를 해결한 방법에 대해 자세히 기술해놓으려구요!






이렇게 많이 뭘 받아올 줄 몰랐는데 행복🎁
앞으로 이런 콘퍼런스 자리가 생기면 무조건 신청하려고요! 너무 재밌었어요!

 

 

 

 

728x90
반응형
728x90
반응형

✅ 프로그래밍 언어

: 컴퓨터가 수행할 수 있고 사람이 읽을 수 있는 형태로 계산을 나타내는 표기 체계

출처: 한국방송통신대학교

 

 

 

🔸 프로그래밍 언어의 기본 기능

  • 작성력: 프로그래머의 의도를 나타낼 수 있도록 하는 기능
  • 가독성: 프로그램을 쉽게 해독할 수 있도록 하는 기능
  • 실행 가능성: 컴퓨터에서 실행될 수 있도록 하는 기능




🔸 프로그래밍 언어의 부가 기능

  • 추상화: 어떤 대상을 간략하게 추려 나타내는 방법
  • 모듈화: 복잡한 대상을 나누어 구성할 수 있는 방법




🔸 프로그래밍 언어의 특성

  • 기계적: 기계적으로 처리할 수 있어야 함 => 엄밀한 규칙에 따라 정의
  • 구조적: 복잡한 구조를 나타낼 수 있어야 함 예) 자료 구조, 제어 구조
  • 가변적: 시대의 필요에 따라 바뀔 수 있음 예) Python: 명령형 언어 → 객체지향 개념 탑재




🔸 프로그래밍 언어 스트럼

  • 저급 언어: 기계에 종속적인 언어 예) 기계어, 어셈블리어
  • 고급 언어: 기계 독립적으로 정의되고 실행될 수 있는 언어 예) C, Java, Python 등




🔸 프로그래밍 언어의 구성 요소

  1. 데이터: 자료를 프로그램이 처리할 수 있는 형태로 나타낸 것 예) 수, 문자, 문자열, 멀티미디어 등
  2. 연산: 데이터 처리 방법으로 연산 적용 후 새로운 데이터를 결과로 얻음
    • 원시연산: 언어가 기본적으로 제공하고 있는 연산
    • 사용자정의연산: 프로그래머가 추가로 정의한 연산
    • 라이브러리: 사용자가 자주 사용할 만한 연산을 미리 정의해둔 것
  3. 명령어: 특정 작업을 지시하는 단어 예) if, while 등
  4. 서브프로그램(=서브루틴): 전체 프로그램을 이루는 작은 코드 블록에 이름을 붙인 것
    • 함수: 연산 수행 결과 값을 반환하는 서브프로그램
    • 프로시저: 결과 값을 반환하지 않는 서브프로그램
  5. 타입: 데이터의 집합과 연산 집합을 합친 개념으로 연산의 안전성 보장을 위해 필요
    • 타입 안정성: 함수 f의 타입이 f(x):A→B라면 모든 aA 에 대해 f(a)B 여야 함
    • 강타입 언어: 타입 오류를 모두 검출하는 언어
    • 약타입 언어: 일부 타입 오류를 허용하는 언어 예)
    • 무타입 언어: 타입 선언문도 없고 어떤 대상의 타입이 계속 변경될 수 있는 언어
  6. 모듈
    • 독립적인 프로그램 구성단위로 서브프로그램도 모듈의 일종
    • 내부와 외부를 구별하며 독자적인 이름 공간을 차지
    • 변수, 함수, 타입 등 프로그래밍 언어에서 제공하는 거의 모든 것을 포함하는 단위

 

728x90
반응형
728x90
반응형

1. 컴퓨터

출처: 방송통신대학교

  • 컴퓨터: 프로그램이 가능한 데이터 처리기(=programmable data processor)
  • 프로그램
    • 컴퓨터가 데이터를 어떻게 처리할지를 알려주는 일련의 명령어 집합
    • 처리 가능한 작업의 유형과 연산의 집합을 결정
    • 프로그래밍 과정의 결과물
      1. 주어진 문제의 해결 방법과 절차를 찾는다. → "알고리즘"
      2. 그것을 적절한 프로그래밍 언어를 사용해서 컴퓨터가 이해할 수 있는 형태로 표현한다.

 

 

 

 

 

2. 컴퓨터과학

출처: 방송통신대학교

  • 데이터의 표현, 저장, 조작, 검색과 밀접히 관련된 분야
  • 컴퓨터, 데이터, 프로그램, 알고리즘에 대한 분야
  • 알고리즘과 관련된 이슈를 다루는 학문


✅ 컴퓨터공학 VS 컴퓨터과학

컴퓨터공학 컴퓨터과학
가격 대비 성능 특성이 좋은 컴퓨팅 엔진을 만들기 위해 하드웨어와 소프트웨어 요소의 조립에 중점 현재의 기술에 덜 의존적인 방식으로 주어진 문제에 대한 해결책의 효율성과 실현 가능성에 보다 중점 → "컴퓨터를 활용한 문제 해결에 대한 학문"

 

 

 

 

 

3. 컴퓨터 시스템

출처: 방송통신대학교

 

하드웨어

  • 기계를 구성하고 있는 모든 물리적인 기계장치/전자장치
  • 핵심장치는 *폰 노이만 모델에서 제시한 4개의 서브시스템이 해당 
    1. 기억장치 → 주기억장치, 보조기억장치
    2. 산술논리연산장치(ALU): 산술 연산과 논리연산의 수행을 통해 직접적인 데이터 처리가 이루어지는 장치
    3. 제어장치(CU): 컴퓨터의 기억장치, ALU, 입출령장치등의 동작을 제어하는 장치
    4. 입출력장치


폰 노이만 모델

  • 컴퓨터의 모든 내부 구조와 처리 과정을 정의한 모델
  • 모든 컴퓨터는 폰 노이만 모델에 기반을 둠
  • 주요개념
    • 내장 프로그램(stroed program)
    • 실행될 프로그램은 메모리에 저장되어야 한다. → "프로그램과 데이터가 동일한 형식(비트 패턴)으로 메모리에 표현된다"는 의미 내포

 

소프트웨어

  • 모든 종류의 프로그램을 총체적으로 표현하는 용어
  • 컴퓨터가 데이터를 어떻게 처리할 것인가를 규정하는 명령어들의 나열
  • 컴퓨터가 이해할 수 있도록 표현된 알고리즘
    • 시스템 소프트웨어: 컴퓨터 자체의 작업 관리와 특정 기능의 수행을 통해 컴퓨터의 전체적인 운영을 담당. Ex) 운영체제, 컴파일러...
    • 응용 소프트웨어: 사용자가 요구하는 작업을 직접적으로 수행하는 프로그램. Ex) 엑셀, DBMS...

 

데이터

  • 모든 데이터는 유형에 관계 없이 비트 패턴으로 표현
  • 비트 패턴: 이진 상태를 나타내는 비트인 0과 1이 나열된 형태 (폰 노이만 모델에서는 데이터의 표현 및 저장 형태에 대해서 정의하지 않음)

 

사용자

  • 컴퓨터의 설계부터 효율적인 이용에 이르기까지 전반적인 데이터 처리 과정에서 유능하고 지식이 풍부한 사람의 적극적인 개입이 필요
728x90
반응형
728x90
반응형

🔸발생 에러

조회 쿼리일 경우 사용된 괄호의 짝이 맞지 않아서 발생하지만

테이블 생성 시 괄호의 짝이 다 맞음에도 불구하고 해당 오류가 발생한다면 속성 제약을 지정하는 순서나 문법이 잘못된 경우일 수도 있다.

 

내 경우는 데이터타입이 DATE인 컬럼의 기본 값을 SYSDATE로 설정하려고 했는데 DEFAULT 키워드를 빼먹어서 발생^^; 

 

 

 

 

728x90
반응형
728x90
반응형

🔸발생 에러

테이블 생성 시 발생한 오류로

컬럼 데이터타입이 NUMBER일 경우 number presicion의 범위는 1~38까지다. 

 

 

 

 


🔸에러 해결

column_nm NUMBER(100) →  column_nm NUMBER(1~38사이의 숫자)

728x90
반응형
728x90
반응형

https://www.oracletutorial.com/getting-started/oracle-sample-database/

 

Oracle Sample Database

This tutorial introduces you an Oracle sample database and shows you how to load it into an Oracle database for practicing

www.oracletutorial.com

https://docs.oracle.com/en/database/oracle/oracle-database/index.html

 

Oracle Database Documentation - Oracle Database

 

docs.oracle.com

https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/index.html

728x90
반응형
728x90
반응형

🔸발생 에러

계정을 생성하려고 하니 이러한 에러가 발생

 

 

 

 


🔸해결 방법

ALTER session SET "_oracle_script" = true;

 

 

 

 

 

728x90
반응형
728x90
반응형

*계정 생성

CREATE USER username IDENTIFIED BY new_password;

*계정 삭제

DROP USER username CASCAED;

*계정 비밀번호 변경

ALTER USER username IDENTIFIED BY new_password;

*계정 조회

SELECT * FROM dba_users; --DBA권한으로 데이터베이스의 모든 계정을 조회
SELECT * FROM all_users; --현재 접속 계정 권한에서 볼 수 있는 데이터베이스의 모든 계정 조회
SELECT * FROM user_users; --현재 접속 계정에 관한 정보만 조회

 


*권한 부여

GRANT connect, resource, dba TO username;

 

CONNECT, RESOURCE, DBA 에 포함된 | 계정에 부여된 권한  조회

SELECT *
FROM dba_sys_privs
WHERE grantee = 'CONNECT' | 'username';

 

728x90
반응형
728x90
반응형

 

🔸발생 에러

비밀번호 오류 횟수 초과로 인해 계정이 잠겨버림

 

*계정 상태 확인

SELECT *
FROM dba_users
WHERE username = 'SYSTEM'; --오라클 11g 부터 계정명 대소문자 구분(설정 변경 가능)

잠겼슈

 

 

 

 


🔸해결 방법

 

1. sqlplus에서 관리자 계정으로 접속

/AS SYSDBA;
(SYS AS SYSDBA;)


2. 계정 잠금 해제

ALTER USER username ACCOUNT UNLOCK;  

 

 

 

 

728x90
반응형

+ Recent posts