카테고리 없음

[혼공얄코]6주차-강지윤

•갱갱갱• 2025. 2. 21. 17:38

04-4 / 오류라는 위험에 대비하기

프로그램 오류의 종류와 이를 발생시키는 원인, 오류를 방지하기 위해 어떤 방법이 사용되는지 배워보는 절

     컴파일 오류, 런타임 오류
      소스 코드에 오타나 문법적 결함 등의 문제가 있는 경우 빌드 과정에서 컴파일이 실패하면서 오류가 보고
  
                  컴파일 오류 : 개발자로서는 가장 상대하기 편한 오류, 배포하기 전에 발견, 오류 발생 원인이 뚜렷
                  런타임 오류 : 런타임에 발생하는 런타임 오류가 바로 프로그래밍 밖에서 새는 바가지에 해당, 인터프리터 언어에서 발생하는 오류는 모두 런타임 오류
                                      까다로운 것은 이를 발견 못한 채로 프로그램이 사용자에게 배포, 테스트에서 거르지 못한 오류를 발견하고 논리적 결함이나 예상치 못한 돌발 변수에 의해 발견

   논리 오류
     빌드 과정에서, 런타임 오류는 실행 과정에서 오류가 발생했음을 어필, 컴파일이나 실행 자체는 성공하지만 잘못된 결과를 반환하는 오류를 논리 오류
     알고리즘상의 논리적 결함이나 코드상의 문제로 발생, 논리 오류는 문제가 눈에 바로 띄지 않기 때문에 가장 경계해야 할 오류, 항상 주의 깊게 확인할 필요

  예외 처리
    개발자가 아무리 세심하게 프로그래밍해도 피할 수 없는 오류, 다양한 상황이 변수로 작용하는 경우
    C 언어를 제외하고는 대부분의 프로그래밍 언어에서 예외 처리 방법을 제공하며, 이들 대부분은 유사한 구문과 형식을 취함, 자바 코드와 같이 try-catch란 구문을 사용

  메모리 누수, 가바지 컬렉션
   메모리 공간을 한정되어 있어서 치워 주지 않으면 런타임 오류로 이어짐, 메모리 공간에 불필요한 데이터가 쌓여서 남아있는 것을 메모리 누수
   객체지향이나 함수형 기능이 없어 번거로운 C 프로그래밍을 더더욱 어렵게 만드는 요소로 작용
   메모리 관리를 상당 부분 자동으로 처리해 주는 기능이 가바지 컬렉션이라 함

               가바지 컬렉션의 한계 : 프로그램이 동작하는 도중 불특정 시점에 시행, 언어의 쓰레기 수집 방식에 따라 프로그램이 부분적으로 혹은 전체적으로 중단







04-5 / 개발에 필요한 여러 가지 도구


패키지 매니저
   라이브러리를 마치 앱 마켓에서 앱을 다운로드하는 것처럼 내려받고 그 내역을 관리해 주는 도구가 패키지 매니저
   패키지 : 라이브러리와 유사한 개념으로, 라이브러리가 소스 코드 작성을 위해 사용되는 코드의 묶음
   패키지 매니저 : 이런 패키지를 편리하고 안전하게 다루기 위한 도구
   영체제 패키지 매니저 : 컴퓨터에서 사용할 프로그램들을 관리
   프로그래밍 언어 패키지 매니저 : 소프트웨어를 개발할 때 사용할 수 있음

환경 변수
  프로그램이 컴퓨터에서 동작할 때 환경과 관련된 변수, 즉 동적인 값, 운영체제에서 작동하는 응용 프로그램이 참조하기 위한 설정을 기록
  운영체제 입장에서 해당 프로세스를 실행시키기 위해 참조하는 값을 담은 변수

             필요한 프로그램의 실행 경로 : 먼저 시스템 속성에서 환경 변수를 설정
             개발 환경 용도 구분 : 기업에서는 같은 구조의 데이터베이스를 두 개 이상 두어 하나는 실제 서비스에 사용하고 나머지는 개발용 및 테스트용으로 사용
                                             백엔드 프로그램 개발은 개발용 컴퓨터에서 진행, 서버에 배포된 다음에는 서비스용 데이터베이스에 연동, 프로그램이 작동할 환경의 용도를 구분
            민감한 요소의 보안 : 소스 코드에 아이디, 비밀번호처럼 중요한 정보 적어 둔다면 매우 위험
                                                -> 프로그램은 지정된 컴퓨터에서만 해당 환경 변수 값을 사용해서 데이터베이스에 접속, 소스 코드에 정보를 포함할 필요 없이 해당 작업 수행

런타임 환경
  런타임 시스템 이라 불리기도 하며, 어떤 프로그래밍 언어가 컴퓨터에서 일을 할 수 있도록 해 주는 요소, 프로그래밍 언어 이름 뒤에 런타임이 붙으면 이를 지칭

SDK
  이런 회사들은 개발자들이 프로그램을 수월하게 개발할 수 있도록 SDK라는 것을 제공, 말 그대로 소프트웨어를 개발하는데 사용되는 키트

라이브러리, 프레임워크
  시작 부분에서 외부 라이브러리를 import한 뒤 이를 사용해서 명령어를 작성하는 방법으로 라이브러리를 활용
  프로그래밍 언어의 개발 환경에서 기본적으로 주어지는 라이브러리도 있고, 외부에서 다운로드해야만 사용 가능한 라이브러리
  어떤 목적을 가지고 라이브러리를 개발해서 제공한 경우도 이에 해당








04-6 / 타임머신을 타고 평행우주를 누비는 개발자

개발자는 깃 같은 프로그램을 사용해서 코드를 관리하고 동료와 협업

   VCS
      프로젝트의 버전을 관리한다는 거은 개발되는 소프트웨어의 ‘시간‘과 ’차원‘을 관리하고 통제한다는 의미
      추가한 기능이 기기의 성능을 저하시키거나 오류를 발생시키는 경우도 있고, 바뀐 디자인에 대한 사용자의 반응이 좋지 않아 이전 상태로 되돌리는 경우
      개발자에게 있어서 작업 중인 코드를 버전별로 관리하는 것은 필수

                           “어떤 작업을 할 때마다 프로젝트를 통째로 복사하거나 저장해 두면 되지 않을까?” <- 한계가 존재

                1 ) 전체 프로젝트를 버전별로 저장하므로 용량을 많이 차지
                2 ) 각 버전에 정확히 어떤 변화가 생겼는지 파악하기 어려움
                3 ) 이 방식으로는 과거의 작업 중 특정한 것만 골라서 되돌리는 것이 불가능

      개발자들은 프로젝트의 버전을 체계적으로 관리하기 위해 사용할 수 있는 편리하고 강력한 기능의 소프트웨어 필요 -> VCS

  
      개발자는 소프트웨어 개발을 시작할 때 해당 프로젝트 폴더를 깃에게 맡김
       버전 관리에 대해 부담감에서 벗어나 프로그래밍에 집중할 수 있게 됨

                  시간여행: 리셋과 리버트 : 프로젝트의 진행 상황을 원하는 시점마다 저장
                                                         프로젝트 상태를 버전으로 저장하는 것을 커밋
                  차원 넘나들기: 브랜치 : 하나의 소프트웨어에서 여러 버전이 동시에 존재할 수 있다는 뜻
                                                      깃은 이를 위하여 브랜치란 기능을 제공, 깃은 하나의 프로젝트 폴더 안에 여러 차원을 분기 할 수 있음

  깃 호스팅 서비스
      다수의 프로그래머가 하나의 소프트웨어, 수많은 폴더와 파일로 이루어진 프로젝트를 공유하며 그 안에서 작업
     클라우드 서비스 또한 동료들 간 협업하여 문서를 작성하는 데 많이 사용, 작성된 코드를 한 결과물로 통합해서 공유될 수 있도록 깃이 교통 정리
     온라인에서 호율적으로 협업하기 위해서는 작업한 여러 버전이 공유되고 저장되는 공간 -> 깃 호스팅 서비스
         푸시 : 이 공간에서 각자 작업한 버전을 업로드하는 것
             : 동료들이 작업한 버전을 통합된 최신 버전으로 다운로드하는 것

     깃허브는 오늘날 가장 널리 사용되는 온라인 깃 저장소, 무료일 경우 저장된 코드를 외부에 공개하기 때문에 누구나 해당 코드를 보고 사용
     다른 사람의 코드를 보고 수정안을 제안해서 코드 개선에 기여할 수도 있음 -> 오픈 소스의 성지인 깃허브

                이슈 : 팀원들과 출입이 허가된 외부인들이 해당 프로젝트에 대한 코멘트를 주고받을 수 있는 공간
                          프로젝트 구성원들은 새로운 기능을 요청하거나 버그를 보고, 관련 업무를 진행할 맴버를 특정하기도 함
                풀 리퀘스트 : 특정 업데이트 작업을 마친 멤버가 코딩한 내용을 깃허브에 올린 뒤, 실제 제품에 이 내용을 적용
                                     팀에서 정한 규칙에 따라 정해진 수 이상의 맴버들이 PR에 동의하면 이는 제품에 반용되어 새 버전 출시
               CI/CD : 지속적인 통합/개발이란 의미, 개발과정의 자동화라고 말함, 개발자는 각 서비스에서 제공하는 방식으로
                             자동화 과정을 설계하여 각 작업이 업로드 될 때마다 프로젝트가 자동으로 빌드, 테스트, 전송, 실행과정까지 거치도록 만들 수 있음  




확인문제