728x90

2025년 9주차 (25.03.03 ~ 25.03.09) 업계 뉴스


 

  • 네이버, 초대형 AI 언어모델 '하이퍼클로바X' 공개

 네이버가 자체 개발한 초대형 AI 언어모델 '하이퍼클로바X' 를 공개

 이 모델은 기존 클로바보다 10배 이상의 파라미터를 갖추고 있음

 한국어 처리 능력과 다국어 지원에서 뛰어난 성능을 보이며 특히, 실시간 대화와 창의적 콘텐츠 생성에 특화

 

  • 테슬라, 인간형 로봇 '옵티머스 프로' 상용화 발표

 테슬라가 인간형 로봇 '옵티머스 프로'의 상용화를 발표

 이 로봇은 가정과 산업 현장에서 다양한 작업을 수행할 수 있음

 AI와 자율주행 기술의 기반으로 높은 수준의 자율성을 갖추고 있으며, 2025년 말부터 본격적인 출시 예정

 

  • EU, 디지털 자산 시장 규제 강화 법안 통과

 유럽 연합(EU)이 디지털 자산 시장 규제를 강화하는 법안을 통과시킴

 이 법안은 암호화폐와 NFT(대체 불가 토큰) 등 디지털 자산의 투명성과 안정성을 높이기 위한 내용 포함

 특히, 거래소와 발행자에 대한 엄격한 보고 의무를 부과

 

  • 구글, 생체 인식 결제 시스템 '바이오페이' 출시

 구글이 생체 인식 기반의 결제 시스템 '바이오페이' 출시

 이 시스템은 가용자의 지문, 홍채, 음성 등을 활용해 보다 안전하고 편리한 결제를 제공

 초기 시범 서비스는 미국과 유럽에서 시작될 예정

 

  • 중국, AI 반도체 자급률 70% 달성 목표 발표

 중국 정부가 AI 반도체 자급률을 2027년까지 70%로 끌어올리겠다는 목표를 발표

 이를 위해 다규모 투자와 연구 개발 지원을 확대할 계획

 특히, 미국의 수출 규제에 대응해 자체 기술 역량을 강화하는데 주력을 다하고 있음

 

  • 아마존, 우주 인터넷 프로젝트 '코퍼니쿠스' 가동

 아마존이 우주 인터넷 프로젝트 '코퍼니쿠스'를 본격 가동

 이 프로젝트는 수천 개의 저궤도 위성을 통해 전 세계 어디서나 고속 인터넷을 제공하는 것을 목표로 함

 스페이스X의 스타링크와의 경쟁이 예상됨

 

  • 애플, AR 글래스 '애플 뷰' 출시 예고

 애플이 차세대 AR 글래스 '애플 뷰'의 출시를 예고

 이 제품은 기존 제품보다 더 가볍고, 배터리 수명이 길며, 고해상도 디스플레이를 탑재

 출시는 2025년 하반기로 예정

 


 

 금주의 주요 뉴스입니다!

 점점 새로운 기술이 나날이 발전하고 있네요!

 

728x90

'IT 정보 > 뉴스' 카테고리의 다른 글

[News-8] 금주의 뉴스  (2) 2025.03.06
[News-7] 금주의 뉴스  (1) 2025.02.24
[News-6] 금주의 뉴스  (1) 2025.02.17
[News-5] 금주의 뉴스  (3) 2025.02.16
[News-4] 금주의 뉴스  (5) 2025.02.03
728x90

인터넷이란?

: Interconnected Network 의 줄임말로, 전 세계의 컴퓨터와 네트워크들이 서로 연결된 거대한 네트워크 시스템.

인터넷(Internet) 은 전 세계 모든 디바이스(Device)를 연결할 수 있는 가장 큰 네트워크.

 


 

인터넷의 구성 요소

  1. 하드웨어 구성 요소
    1. 컴퓨터 및 디바이스
      • 종단 시스템(End System)으로 Host 라고도 함
      • 클라이언트(Client) : 인터넷을 사용하는 개인용 컴퓨터, 스마트폰, 태블릿 등
      • 서버(Server) : 웹사이트, 이메일, 파일 등을 제공하는 컴퓨터
    2. 네트워크 장비
      • 라우터(Router) : 서로 다른 네트워크 간 데이터를 전달하는 장치
      • 스위치(Switch) : 네트워크 내에서 데이터를 효율적으로 전달
      • 모뎀(Modem) : 디지털 신호와 아날로그 신호를 변환하여 인터넷에 연결
    3. 전송 매체
      • 디바이스 간에 연결되어 링크(Link) 라고도 함
      • 유선 케이블 : 광케이블, 동축 케이블, UTP 케이블 등
      • 무선 신호 : Wi-Fi, Bluetooth, 이동통신(4G / 5G) 등
  2. 소프트웨어 구성 요소
    1. 프로토콜(Protocol)
      • 송수신되는 정보의 형식, 순서 및 수행 동작을 정의하는 송수신자 개체 간의 통신 규약
      • TCP/IP : 인터넷 통신의 기본 규칙
      • HTTP/HTTPS : 웹 브라우저와 서버 간의 통신
      • FTP : 파일 전송
      • SMTP/IMAP/POP3 : 이메일 전송 및 수신
      • DNS : 도메인 이름을 IP 주소로 반환
    2. 운영체제(OS)
      • 네트워크 장비와 서버를 관리하는 소프트웨어 (ex: Windows Server, Linux)
    3. 애플리케이션(App)
      • 웹 브라우저(Chrome, Firefox, Microsoft Edge..)
      • 이메일 클라이언트(Outlook)
      • 메신저(KakaoTalk, WhatsApp ..)
  3. 네트워크 구조
    1. ISP(Internet Service Provider)
      • 인터넷 서비스를 제공하는 회사 (통신사 : SKT, KT, LG U+ , 지역 전화 및 케이블 회사)
      • 사용자와 인터넷 백본(Backbone)을 연결
    2. 인터넷 백본(Backbone)
      • 전 세계의 주요 네트워크를 연결하는 고속 통신망
      • 대규모 데이터 센터와 ISP를 연결
    3. IXP(Internet Exchange Point)
      • 서로 다른 ISP 간의 데이터 교환을 위한 중계 지점
  4. 인터넷 주소 체계
    1. IP 주소 (Internet Protocol Address)
      • 각 디바이스에 부여된 고유한 숫자 주소 (예 : IPv4: 192.168.x.x , IPv6: 2001:xxxx:xxxx~~)
    2. 도메인 이름(Domain Name)
      • IP 주소를 사람이 쉽게 기억할 수 있도록 변환한 이름 (예 : www.naver.com , www.google.com)
    3. MAC 주소(Media Access Control Address)
      • 네트워크 장치의 하드웨어 고유 주소
  5. 보안 요소
    1. 암호화(Encryption)
      • 데이터를 암호화하여 보안을 강화(예 : HTTPS, SSL/TLS)
    2. 방화벽(Firewall)
      • 외부의 불법적인 접근을 차단
    3. VPN(Virtual Private Network)
      • 안전한 통신을 위해 가상 사설 네트워크를 생성

 


 

 인터넷은 하드웨어, 소프트웨어, 네트워크 구조, 주소 체계, 서비스, 보안 등 다양한 구성 요소들이 유기적으로 연결되어 동작하는 복잡한 시스템입니다.

 다음 포스팅에서는 각 부분에 대해 세밀히 알아보겠습니다!

728x90

'분야 > Network' 카테고리의 다른 글

[Net-1] Network 를 학습하기 앞서  (0) 2025.02.17
728x90

2025년 8주차 (25.02.24 ~ 25.03.02) 업계 뉴스


 

  • 애플, '애플 카' 출시 일정 및 세부 사항 공개

 애플이 자율주행 전기차 '애플 카'의 출시 일정과 세부 사항을 공식 발표

 2025년 12월 출시 예정인 애플 카는 완전 자율주행 기능, 애플 생태계와의 완벽한 통합, 고급 AI 어시스턴트 탑재 예정

 

  • 구글, 양자컴퓨팅 클라우드 서비스 상용화

 구글이 양자컴퓨팅 클라우드 서비스 '퀀텀 클라우드' 상용화

 해당 서비스는 기업과 연구기관이 양자컴퓨팅 자원을 클라우도로 활용할 수 있도록 지원

 복잡한 계산 문제를 해결하는데 활용될 것으로 기대

 

  • EU, AI 규제 법안 최종 통과

 유럽 연합(EU)이 AI 기술의 윤리적 사용과 규제를 위한 법안 최종 통과 조치

 고위험 AI 시스템에 대한 엄격한 규제와 투명성 요구 사항 포함

 

  • 아마존, AI 기반 개인 쇼핑 어시스턴트 출시

 아마존이 AI 기반 개인 쇼핑 어시스턴트 '아마존 스타일'을 출시

 해당 서비스는 사용자 구매 패턴과 선호도를 분석해 맞춤형 상품 추천, 실시간 스타일링 조언도 제공

 

  • 사이버 보안 위기 심화, 글로벌 클라우드 서비스 공격

 최근 글로벌 클라우드 서비스 제공업체들을 대상으로 한 대규모 사이버 공격 발생

 이 공격으로 일부 서비스 중단 및 데이터 유출 사태가 발생

 

  • 중국, 6G 기술 표준화 주도

 중국이 6G 기술의 표준화를 주도하기 위해 국제 표준화 기구(ISO) 와 협력

 관련 기술 개발에 대한 대규모 투자를 계속하고 있음, 2030년까지 6G 상용화 목표

 

  • 마이크로소프트, 게임 산업 인수 합병(M&A) 가속화

 게임 산업에서의 입지를 강화하기 위해 중소형 게임 개발사들을 대상으로 한 인수 합병(M&A) 을 가속화 중

 이는 클라우드 게임 시장 확대를 위한 전략으로 보임

 


 

 지난 주 주요 뉴스들 입니다!

728x90

'IT 정보 > 뉴스' 카테고리의 다른 글

[News-9] 금주의 뉴스  (1) 2025.03.10
[News-7] 금주의 뉴스  (1) 2025.02.24
[News-6] 금주의 뉴스  (1) 2025.02.17
[News-5] 금주의 뉴스  (3) 2025.02.16
[News-4] 금주의 뉴스  (5) 2025.02.03
728x90

Frontend 프로그래밍 언어

 

 

[FE-1] Frontend 를 학습하기 앞서

Frontend 란 무엇일까?: 웹사이트나 애플리케이션에서 사용자가 직접 보고 상호작용하는 부분을 담당하는 기술. HTML, CSS, JavaScript 등을 활용하여 웹 페이지를 구성하고, 사용자 경험(UX) 와 인터페이

devcrl.tistory.com

Frontend 의 주요 구성 요소와 학습 과정에서 살펴볼 수 있듯, Frontend 프로그래밍 언어는 크게 세 가지로 시작할 수 있다.

 

  1. HTML (HyperText Markup Language)
    • 장점 : 직관적인 문법, 범용성, 검색 엔진 최적화(SEO)에 유리
    • 단점 : 정적(static) 언어, 스타일링 기능 부족(CSS 없이)
    • 사용 사례 : 정적 웹 프레임워크(Jekyll, Hugo), 컨텐츠 시스템(WordPress, Drupal), 이메일 템플릿
  2. CSS (Cascading Style Sheets)
    • 장점 : 디자인 분리, 반응형 디자인 지원, 애니메이션 및 효과
    • 단점 : 복잡한 레이아웃 구현의 어려움, 브라우저 호환성 문제
    • 사용 사례 : 반응형 웹 디지인 프레임워크(Bootstrap, Tailwind CSS), 애니메이션 및 인터랙션, 디자인 시스템
  3. JavaScript
    • 장점 : 동적인 인터랙션 추가 가능, npm을 통해 다양한 프레임워크 사용 가능, Backend 병행 개발 가능
    • 단점 : 보안 문제, 브라우저 호환성, 복잡성
    • 사용 사례 : Frontend 프레임워크(React, Vue.js 등) 을 통해 복잡한 애플리케이션 개발 가능

 세 언어는 기초 문법이며 유기적으로 활용되기 때문에 천천히 공부해나가보자.

 결국 세 언어의 다양한 프레임워크, 라이브러리들을 다룰 기회는 충분할 것이다.

 

기준 HTML CSS JavaScript
역할 웹 페이지 구조 정의 웹 페이지 스타일링 웹 페이지 동적 기능 추가
장점 간단, 직관적, SEO 친화적 디자인 분리, 반응형 디자인 동적 기능, 풍부한 생태계
단점 정적 언어, 스타일링 기능 부족 복잡한 레이아웃 구현 보안 문제, 브라우저 호환성
사용 사례 웹 구조, 시맨틱 태그 스타일링, 반응형 디자인 동적 인터랙션, 프레임워크 개발
 직업 시장 웹 퍼블리셔, 콘텐츠 관리자 UI/UX , 디자인 관련 개발자 웹, 게임, 풀스택 관련 개발자

 

 


 

세 언어가 포함된 예제 코드

 

 다음 코드는 버튼 클릭 시 텍스트의 색상이 변경되도록 하는 코드이다.

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>HTML, CSS, JavaScript 예제</title>
  <style>
    /* CSS: 스타일 정의 */
    body {
      font-family: Arial, sans-serif;
      text-align: center;
      margin-top: 50px;
    }
    h1 {
      color: #333;
    }
    button {
      padding: 10px 20px;
      font-size: 16px;
      cursor: pointer;
      background-color: #007BFF;
      color: white;
      border: none;
      border-radius: 5px;
    }
    button:hover {
      background-color: #0056b3;
    }
  </style>
</head>
<body>
  <!-- HTML: 구조 정의 -->
  <h1 id="text">안녕하세요, 세상!</h1>
  <button onclick="changeColor()">색상 변경</button>

  <!-- JavaScript: 동적 기능 추가 -->
  <script>
    function changeColor() {
      const textElement = document.getElementById('text');
      const colors = ['red', 'green', 'blue', 'purple', 'orange'];
      const randomColor = colors[Math.floor(Math.random() * colors.length)];
      textElement.style.color = randomColor;
    }
  </script>
</body>
</html>

 

 

 예제 코드가 상당히 복잡해보인다. 하지만 괜찮다.

 /* CSS */ , <!-- HTML --> , <!-- JavaScript --> 와 같은 생김새로 시작하는 부분이 각 언어로 표현된 부분이다.

 의미나 각종 태그 및 메소드를 알고나면 사실 되게 간단한 코드였다는 것을 알 수 있다.

 다음은 실행 결과 화면이다.

 

실행 시 기본 화면
색상 변경 버튼 클릭 후 화면

 

 

 아마 이 화면을 보고 코드의 구조를 유추할 수 있다면 Frontend 개발자로서의 자질이 보인다고 해도 과언이 아닐 것이다.

 다음 포스팅에서 더 자세히 알아보도록 하자! 각자 유추해보길..

 


 

언어별 학습 로드맵

  • HTML
    1. 기본 구조 이해
    2. 폼 요소 / 시맨틱 태그 활용
    3. 웹 접근성 이해 (ARIA 속성 학습)
    4. SEO 최적화
    5. 웹 컴포넌트 (템플릿 및 Shadow DOM 이해)
    6. 성능 최적 (이미지 최적화, 지연 로딩)
  • CSS
    1. CSS 기본 문법
    2. 레이아웃 기초
    3. Flexbox / Grid
    4. 반응형 디자인 (미디어 쿼리)
    5. CSS 변수 및 애니메이션
    6. 성능 최적화 (CSS 최소화, Critical CSS)
  • JavaScript
    1. 기본 문법
    2. DOM 조작 / 이벤트 처리
    3. ES6+ 문법
    4. 비동기 처리 / API 연동
    5. 프레임워크 / 라이브러리
    6. 상태 관리 및 테스트 (Redux, Jest 등)
    7. 성능 최적화 (코드 스플릿, 메모이제이션)

 

추가 자료 링크

 

 HTML (MDN Web Docs) : HTML: Hypertext Markup Language | MDN

 

HTML: Hypertext Markup Language | MDN

HTML(HyperText Markup Language)은 웹을 이루는 가장 기초적인 구성 요소로, 웹 콘텐츠의 의미와 구조를 정의할 때 사용합니다. HTML 이외의 다른 기술은 일반적으로 웹 페이지의 모양/표현 (CSS), 또는 기

developer.mozilla.org

 CSS, JavaScript 자료까지 함께 찾아볼 수 있다.

 

 

CSS (W3Schools) : CSS Tutorial

 

W3Schools.com

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

 마찬가지로 세 언어 전부 학습 가능

 

 

 JavaScript (JavaScript.info) : The Modern JavaScript Tutorial

 

The Modern JavaScript Tutorial

We want to make this open-source project available for people all around the world. Help to translate the content of this tutorial to your language!

javascript.info

 


 

 오늘은 Frontend 기술의 기본이되는 세 언어에 대해 알아보았습니다.

 

 개강 때문에 포스트가 많이 뜸해졌네요.. 앞으로도 그럴지도 모르지만 끝까지 해보겠습니다.

 

이후로는 본 포스팅의 예제 코드를 분석해보며 천천히 알아가보도록 하겠습니다.

728x90

'분야 > Frontend' 카테고리의 다른 글

[FE-1] Frontend 를 학습하기 앞서  (5) 2025.02.02
728x90

Backend 프로그래밍 언어

 

 

[BE-1] Backend 를 학습하기 앞서

Backend 란 무엇일까?: 소프트웨어 시스템에서 사용자에게 보이지 않는 서버 측의 모든 작업을 처리하는 부분을 의미. 데이터베이스 관리, 서버 로직 , API 설계 등 다양한 작업을 수행하며 , 사용자

devcrl.tistory.com

 Backend 의 주요 구성 요소와 학습 과정에서 살펴볼 수 있듯, Backend 프로그래밍 언어는 크게 세 가지로 시작할 수 있다.

 

  1. Python
    • 장점 : 간결한 문법, 풍부한 라이브러리, 빠른 개발 속도
    • 단점 : 상대적으로 느린 실행 속도
    • 사용 사례 : Django, Flask 프레임워크, 데이터 분석, AI
  2. Java
    • 장점 : 높은 성능, 엔터프라이즈급 애플리케이션에 적합
    • 단점 : 상대적으로 복잡한 문법, 학습 곡선이 높음
    • 사용 사례 : Spring 프레임워크, 대규모 시스템
  3. JavaScript (Node.js)
    • 장점 : Frontend와 Backend 통합 개발 가능, 비동기 처리 강점
    • 단점 : 단일 스레드 모델의 한계
    • 사용 사례 : Express.js, 실시간 애플리케이션 (채팅, 스트리밍)

 시작 언어를 너무 깊게 고민하지말고 자신의 목표와 상황에 맞게 선택해보자.

 고민을 깊게하는 것 보다 특정 언어를 깊게 파고 들어보는 것이 중요하다.

 프로그래밍 언어는 단독으로 사용되지 않기 때문에 다양한 라이브러리, 프레임워크, 언어를 다룰 기회는 충분하다.

 

기준 Python Java JavaScript (Node.js)
학습 난이도 쉬움  중간 중간
성능 상대적으로 느림 빠름 중간
사용 사례 데이터 분석, AI 대규모 엔터프라이즈 실시간 애플리케이션
생태계 풍부함 매우 풍부함 풍부함
직업 시장 스타트업, 데이터 과학 엔터프라이즈 풀스택, 스타트업

 


 

세 언어의 스타일

 각 코드로 작성된 같은 결과물을 출력하는 코드를 살펴보자.

 

Python 예제:

# Hello, World! 출력
print("Hello, World!")

 

 

Java 예제:

public class Main
{
	public static void main(String[] args)
	{
		System.out.println("Hello, World!");
	}
}

 

 

JavaScript 예제:

console.log("Hello, World!")

 

 

 예제 코드들만 살펴봐도 Python이 가장 직관적이고 이해하기 쉽다는 느낌이 든다.

 다음으로 JavaScript 가 그 다음으로로 Java 가 난이도 있어 보인다.

 언어 자체의 난이도는 Python < JavaScript < Java 와 같다.

 

 Java는 객체지향 프로그래밍(OOP) 개념을 깊이 이해해야 하므로 학습 곡선이 높은 편이다.

 JavaScript 는 비동기 프로그래밍 개념의 이해가 어려울 수 있어 마찬가지로 학습 곡선이 높다.

 따라서 시작은 Python 이나 Java로 하는 것을 추천한다.

 


 

언어별 학습 로드맵

  • Python
    1. 기본 문법 학습
    2. Django 또는 Flask 프레임워크 학습
    3. 데이터베이스 연동 (SQLAlchemy, Django ORM)
    4. RESTful API 구현
    5. 배포 (Heroku, AWS)
  • Java
    1. 기본 문법 및 OOP 학습
    2. Spring Boot 프레임워크 학습
    3. 데이터베이스 연동 (JPA, Hibernate)
    4. RESTful API 구현
    5. 배포 (Docker, AWS)
  • JavaScript (Node.js)
    1. 기본 문법 및 비동기 프로그래밍 학습
    2. Express.js 프레임워크 학습
    3. 데이터베이스 연동 (Mongoose, Sequelize)
    4. RESTful API 또는 GraphQL 구현
    5. 배포 (Docker, AWS)

 

추가 자료 링크

 

Python : https://docs.python.org/3/

 

3.13.2 Documentation

Python 3.13.2 documentation Welcome! This is the official documentation for Python 3.13.2. Documentation sections: What's new in Python 3.13? Or all "What's new" documents since Python 2.0 Tutorial Start here: a tour of Python's syntax and features Library

docs.python.org

 

Java : https://docs.oracle.com/javase/tutorial/

 

The Java™ Tutorials

The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See Dev.java for updated tutorials taking advantag

docs.oracle.com

 

JavaScript : https://developer.mozilla.org/ko/docs/Web/JavaScript

 

JavaScript | MDN

JavaScript (JS)는 가벼운, 인터프리터 혹은 just-in-time 컴파일 프로그래밍 언어로, 일급 함수를 지원합니다. 웹 페이지를 위한 스크립트 언어로 잘 알려져 있지만, Node.js, Apache CouchDB, Adobe Acrobat처럼

developer.mozilla.org

 


 

 오늘은 Backend 기술의 주축이 되는 세 언어에 대해 포스팅해보았습니다.

 이후로는 각 언어에 대해 천천히 알아가보도록 하겠습니다.

728x90

'분야 > Backend' 카테고리의 다른 글

[BE-1] Backend 를 학습하기 앞서  (3) 2025.01.24
728x90

2025년 7주차 (25.02.17 ~ 25.02.23) 업계 뉴스


 

  • 메타, 메타버스 플랫폼 '메타월드' 글로벌 출시

 메타(구 페이스북) 가 메타버스 플랫폼 '메타월드'를 전 세계적으로 출시

 가상 현실(VR)과 증강 현실(AR) 기술을 결합해 사용자들이 가상 공간에서 다양한 활동을 할 수 있도록 지원

 

  • 구글, AI 기반 번역 기술 '트랜스포머 X' 출시

 이 기술은 기존 번역 기술보다 더 높은 정확성과 자연스러운 문장 구성을 제공

 실시간 번역 기능 또한 강화

 

  • EU, 디지털 화폐 규제 강화

 유럽 연합(EU)이 디지털 화폐(암호 화폐) 에 대한 규제를 강화하는 법안 통과시킴

 해당 법안은 디지털 화폐의 투명성과 안정성을 높이기 위한 내용 포함

 

  • 아마존, AI 기반 물류 시스템 도입

 아마존이 AI 기반 물류 시스템 전면 도입

 실시간 데이터 분석을 통해 물류 효율성 극대화

 배송 시간 단축에 크게 기여할 것으로 예상

 

  • 중국, AI 칩 개발 가속화

 중국 정부가 AI 칩 개발 가속화를 위한 대규모 투자 단행

 AI 칩 연구 개발과 생산 인프라 구축에 사용될 예정

 


 

 이번 주 주요 뉴스들 입니다.

 구글, EU, 중국의 소식이 계속해서 들립니다.

 이젠 산업의 전반적인 부분이 AI 를 기반으로 하여 발전하고 있는 양상을 보이고 있네요.

728x90

'IT 정보 > 뉴스' 카테고리의 다른 글

[News-9] 금주의 뉴스  (1) 2025.03.10
[News-8] 금주의 뉴스  (2) 2025.03.06
[News-6] 금주의 뉴스  (1) 2025.02.17
[News-5] 금주의 뉴스  (3) 2025.02.16
[News-4] 금주의 뉴스  (5) 2025.02.03
728x90

데이터 처리 도구

 이전 포스팅에서 소개한 Numpy 와 Python 에서의 관련 내용을 살펴보자.

 

[Lang] 프로그래밍 언어란?

프로그래밍 언어(Programming Langauge) 란?: 컴퓨터(기계)에게 명령하거나 의사소통을 할 수 있게 해주는 언어이자 도구  프로그래밍 언어는 다음과 같이 구분되며 보통 컴파일러(Compiler)나 인터프리

devcrl.tistory.com

 

 Python 과 관련된 설명을 참고하면 풍부한 라이브러리와 데이터 분석, AI에 강점이 있다고 되어있다.

 Numpy는 Python의 패키지이다. 복잡한 연산의 효율적인 처리를 위해 사용한다.

 


 

리스트 (List)

 Numpy 를 들여다보기 전에 Python 에서 중요하게 생각해야할 개념은 바로 배열(Array) 자료 구조이다.

 리스트(List)는 배열(Array) 자료 구조의 특징을 갖는 컬렉션(Collection) 자료형의 일종이다.

  • 정의 : 비슷한 성질을 가진 요소(item)들의 묶음(Container)
  • 주요 특징
    • 순서 (Ordered) : item 들은 추가된 순서를 유지
    • 가변적 (Mutatble) : 생성 후에도 요소를 추가, 삭제, 수정 가능
    • 다양한 데이터 타입 (Heterogeneous) : 서로 다른 타입의 데이터 저장 가능
    • 중복 허용 : 동일한 값을 여러 번 저장 가능
    • 인덱싱 (Indexing) & 슬라이싱 (Slicing) : 특정 item에 접근하거나 리스트의 부분 추출 가능
    • 리스트 컴프리헨션 (Comprehension) : 간결하게 리스트 생성 가능
    • 다양한 메소드 제공 : append(), remove(), sort(), reverse() 등 다양한 메소드 제공

 

 이외에도 튜플(Tuple) , 딕셔너리(Dictionary), 세트(Set) 와 같은 자료형이 존재하지만 각 타입에 대한 자세한 설명은 생략하고 어떤 상황에 주로 활용되는지 살펴보자.

 

자료형 순서 유지 가변성 중복 허용 키-값 쌍 주요 사용
리스트 (List) O 가변적 O X 순서가 중요, 데이터 수정이 빈번할 때
튜플 (Tuple) O 불변적 O X 데이터가 안정적으로 유지되어야 할 때
딕셔너리 (Dictionary) X
O (Python 3.7 >)
가변적 키 중복 X O 키를 통한 빠른 값 인덱싱에 사용
세트 (Set) X 가변적 X X 중복을 제거하거나 집합 연산이 필요할 때

 

Python 튜토리얼을 마치고 오셨다면 이해하기 용이할 것입니다.

 


 

자주 사용되는 List 의 주요 기능

 Numpy 를 하기 전에 알아야할 Python List 구조에서 자주 사용되는 기능을 알고 가는게 중요합니다.

 

 

1. 리스트 생성과 초기화

: 리스트는 대괄호 [] 를 사용하여 생성하며, 다양한 방법으로 초기화 가능

# 빈 리스트 생성
empty_list = []

# 초기 값이 있는 리스트 생성
my_list = [1, 2, 3, 4, 5]

# 리스트 컴프리헨션을 사용한 생성
squares = [x**2 for x in range(10)]
# [0, 1, 4, 9, ... , 81] 제곱 수의 리스트

 

 

2. 요소 수정

: 리스트는 가변적(mutable)이므로 요소의 추가/삭제, 수정 가능

 

요소 추가 메소드 : append(), insert(), extend()

my_list = [1, 2, 3]
my_list.append(4)  # [1, 2, 3, 4]
my_list.insert(1, 99)  # [1, 99, 2, 3, 4]
my_list.extend([5, 6])  # [1, 99, 2, 3, 4, 5, 6]

 

요소 삭제 메소드 : remove(), pop(), del

my_list = [1, 2, 3, 4, 5]
my_list.remove(3)  # [1, 2, 4, 5]
my_list.pop(1)  # [1, 4, 5]
del my_list[0]  # [4, 5]

 

 

3. 인덱싱과 슬라이싱

: 리스트는 인덱스를 통해 특정 요소에 접근하거나 부분 리스트를 추출 가능

 

인덱싱 :

my_list = [10, 20, 30, 40, 50]
print(my_list[0])  # 10 (첫 번째 요소)
print(my_list[-1])  # 50 (마지막 요소)

 

슬라이싱 : 

my_list = [10, 20, 30, 40, 50]
print(my_list[1:4])  # [20, 30, 40] (인덱스 1부터 3까지)
print(my_list[:3])  # [10, 20, 30] (처음부터 인덱스 2까지)
print(my_list[2:])  # [30, 40, 50] (인덱스 2부터 끝까지)

 

 

4. 리스트 연산

: 리스트는 +, * 와 같은 연산자를 활용하여 결합하거나 반복 가능

list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined = list1 + list2  # [1, 2, 3, 4, 5, 6] (리스트 결합)
repeated = list1 * 2  # [1, 2, 3, 1, 2, 3] (리스트 반복)

 

 

5. 리스트 메소드

: 리스트는 다양한 메소드를 제공하여 데이터를 쉽게 처리 가능

 

주요 메소드 : sort(), reverse(), index(), count(), len(), in

my_list = [3, 1, 4, 1, 5, 9]
my_list.sort()  # [1, 1, 3, 4, 5, 9]
my_list.reverse()  # [9, 5, 4, 3, 1, 1]
print(my_list.index(4))  # 2 (값 4의 인덱스)
print(my_list.count(1))  # 2 (값 1의 개수)
print(len(my_list))  # 5 (리스트의 길이)
print(3 in my_list)  # True (요소 3이 리스트에 있는지 확인)

 

 

6. 리스트 순회

: 리스트는 반복문을 사용해서 모든 요소의 순회 가능

my_list = [1, 2, 3, 4, 5]
for item in my_list:
    print(item)
# 출력: 1 2 3 4 5

 

 

7. *** 중첩 리스트 (Nested List) ***

: 리스트는 요소로 리스트를 포함 가능, 다차원 배열의 구조를 만들 수 있음

 

Numpy 사용과 가장 밀접한 특징

nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(nested_list[1][2])  # 6 (두 번째 리스트의 세 번째 요소)

 

 

8. 리스트의 복사

: 리스트를 복사할 때에는 얕은 복사(Shallow copy)깊은 복사(Deep copy)를 구분해야 함

 

얕은 복사 :

list1 = [1, 2, 3]
list2 = list1  # 얕은 복사 (동일한 객체 참조)
list2[0] = 99
print(list1)  # [99, 2, 3] (list1도 변경됨)

 list2 라는 이름으로 list1을 복사하여 수정했지만, 원본까지 수정되는 모습이다.

 

깊은 복사 : 

import copy
list1 = [1, 2, 3]
list2 = copy.deepcopy(list1)  # 깊은 복사 (새로운 객체 생성)
list2[0] = 99
print(list1)  # [1, 2, 3] (list1은 변경되지 않음)

 복사 관련 라이브러리 copy 모듈 import(가져오기)

 

 

 이렇게 8가지의 주요 특징을 알아보았다.

 Numpy는 Python의 List와 유사한 배열을 제공하지만, List보다 훨씬 빠르고 효율적이다.

 소개한 주요 특징들이 Numpy의 배열 연산과 유사한 개념으로 확장된다.

 


 

 오늘은 Numpy 에 대해 알아보기 전 Python의 List 자료형에 대해 훑어보았습니다.

 소개해드린 특징들은 Numpy 를 익히기 전 알아야 할 핵심 개념들입니다.

 다음으로는 Numpy 에 대해 다뤄보도록 하겠습니다!

728x90

'분야 > AI' 카테고리의 다른 글

[AI-2] 데이터 처리  (1) 2025.02.20
[AI-1] AI 를 학습하기 앞서  (7) 2025.01.22
728x90

간단한 코드의 구조

 지난 포스팅에서 살펴봤던 코드의 구조를 파악해보자.

#include <stdio.h>

int main(void)
{
	printf("Hello World!");
	return 0;
}

 

이렇게 특정 언어로 작성된 텍스트 파일을 소스 코드라고 한다.

다음과 같은 코드를 크게 세 부분으로 구분해보자.

 

 

 1. 지시자

#include <stdio.h>

 

기억나실지 모르지만, 이전 포스팅에서 # 으로 시작하는 것은 전처리 지시문이라고 하였다.

 # 이라는 특수 기호로 시작하는 문장은 지시자 라고 한다.

 

 프로그램이 컴파일 되기 전에 처리되어야 할 작업들을 지정해준다고 보면 된다.

 해당 코드 #include <stdio.h>C언어의 표준 입출력 라이브러리를 가리키는 헤더 파일로 해당 라이브러리의 정보들을 포함하겠다 라는 의미이다. 웬만한 프로그래밍에는 항상 쓰이는 라이브러리이다.

 

 헤더 파일이란 주로 외부 소스 파일에 미리 정의된 정보들을 가져다 쓰기위해 만들어진 파일이다. 확장자명은 (.h) 이다.

 

 

 2. 함수

int main(void)
{

}

 

 함수는 수학시간에 익히 들어본 개념일 것이다.

 입력이 함수를 거쳐 특정한 출력이 나오도록 하는 것이 우리가 익히 알고있는 함수의 개념이다.

 

 C언어에서는 함수를 이렇게 정의한다.

 자료형에 대해 알아본 후에 더 자세히 다루겠다.

 간단히 int 부분은 출력의 형태, main 부분은 함수명, 괄호에 씌여진 void 는 입력의 형태라고 보면 된다.

 

 함수명은 중복되지 않게 여러 함수를 만들 수 있지만, main 이라는 이름을 가진 함수는 특별하다.

 소스 파일에 무조건 하나만 존재할 수 있으며 소스 코드의 근간이 되는 함수라고 보면 된다.

 따라서 우리가 작성할 코드는 모두 main 함수의 괄호 내에 작성된다.

 우리는 이 때 main 함수를 정의하고 있다고 한다.

 

 

 3. 구문

printf("Hello World!");
return 0;

 

 마지막으로 구문이다.

 우리가 주로 작성할 소스 코드들에 해당하는 부분이다.

 참고로 중괄호 내에서 문장 앞 공백을 확인할 수 있는데 이는 Tab키통상적으로 띄어쓰기 4칸 정도이다.

 두 줄에서 볼 수 있듯이 구문 부분에서 문장의 끝에는 세미콜론(;)이 붙어야 컴파일러가 문장이 끝났다고 인식한다.

 

 우리는 printf ~ 부분이 Hello World 라고 출력되게끔 하는 문장임을 눈치챌 수 있다.

 printf 부분 또한 괄호 안에있는 "Hello World!" 가 입력값으로 들어간 함수이다!!

 printf() 라는 함수가 바로 지시문에 있던 <stdio.h> 라는 C언어 표준 입출력 라이브러리에 포함된 함수이다.

 만약 처음의 지시문 없이 이 문장을 작성했다면, 오류가 발생할 것이다.

 

우린 이렇게 정의된 함수를 사용하는 것을 호출이라고 한다.

 코드가 실행될 때 가장 먼저 main 함수 호출되는 원리이다.

 

 return 0; 의 return 은 말 그대로 반환을 뜻하는 키워드이다.

 그대로 해석하면 '0 이라는 녀석을 반환해라' 라는 뜻이다.

 각 문장이 끝났을 때 세미콜론(;)을 붙이는 것처럼 모든 함수는 마지막 부분에 return문을 통해 함수의 결괏값을 호출한 곳으로 반환한다.

 


 

간단한 도식화

hello.c 가 실행되는 원리

 

 이렇듯 C 프로그래밍은 다음과 같은 과정이 다중적으로 이루어진다고 보면 된다.

 ② 함수를 정의 -> ③ 함수를 호출 -> ⑤ 절차적 실행 -> ⑥ 함수의 결과 반환

 

 우린 이렇게 함수를 정의하고 호출하며 재사용성을 늘려 효율적인 명령 수행을 시키도록 코딩 작업을 해야하는 것이다.

 이러한 함수를 메소드(method), 루틴(routine), 서브루틴(subroutine) 이라고도 하며 이러한 작업 개념을 통틀어 프로시저(Procedure) 라고 한다.

 C언어는 프로시저(Procedure) 를 활용하는 것이 본질이기에 C언어를 명령형 프로그래밍 패러다임(Procedural Programming Paradigm) 언어라고 하는 것이다.

 

[Lang] 프로그래밍 언어란?

프로그래밍 언어(Programming Langauge) 란?: 컴퓨터(기계)에게 명령하거나 의사소통을 할 수 있게 해주는 언어이자 도구  프로그래밍 언어는 다음과 같이 구분되며 보통 컴파일러(Compiler)나 인터프리

devcrl.tistory.com

C언어 소개 참고

 


 

 깊다면 깊게 간단하다면 간단하게 설명한 것 같아요.

 이해하기 힘든 부분도 많겠지만 매커니즘을 이해하는 것이 중요하다고 봅니다.

 후에 다룰 내용도 유기적으로 이어질 것입니다~!

728x90

'언어 > C' 카테고리의 다른 글

[C-2] C 프로그램의 구조  (0) 2025.02.20
[C-1] 개발 환경 구축  (2) 2025.01.20
728x90

보수와 사칙연산

 컴퓨터가 데이터를 처리하는데 2진수를 사용한다고 앞서 설명했듯, 연산에는 2진수 연산을 빼놓을 수 없다.

 2진수와 관련된 개념으로 음수를 표현하는 보수(Complement) 표현과 사칙연산에 대해 알아보자.

 


 

보수 (Complement)

 보수는 2진수 계산, 특히 음수 표현이나 뺄셈을 쉽게 수행하기 위해 사용된다. 주요 보수는 두 가지가 있다.

 보수 표현을 취했을 때에는 부호 ( + / - ) 가 변했다고 보면 된다.

 

  1. 1의 보수
    • 모든 비트를 반전 (0 -> 1 , 1 -> 0)
    • 예시 : 1010 의 1의 보수는 0101
  2. 2의 보수
    • 1의 보수에서 1을 더함
    • 예시 : 1010 의 2의 보수는 0101 + 1 = 0110
    • 컴퓨터에서 음수 표현에는 2의 보수가 주로 사용됨

 

 기본적으로 4비트는 2^4 = 16 가지의 데이터를 나타낼 수 있다.

 음수를 고려하지 않는다면 0~15 로 16가지의 수를 나타낼 수 있지만, 우린 이제 보수 표현을 안다.

 

 따라서 이제는 음수를 고려하여 나타낼 수 있는 16가지의 수는 양수에만 국한되지 않는다.

4비트로 나타낼 수 있는 수 (2의 보수 표현)

다음 이미지를 보면 이해가 편할 것이다.

 


 

2진수 사칙연산

  1. 덧셈 (Addition)
    • 기본적으로 10진수 덧셈과 유사
    • 자리 올림(Carry) 가 발생할 수 있음
    • 예시 : 1010 (10) + 0110 (6) = 10000 (16)
  2. 뺄셈 (Subtraction)
    • 감수를 보수화하여 덧셈
    • 예시 : 1010 (10) - 0110 (6) = 1010 (10) + 1010 (-6) = 10100 이지만 Carry를 무시하면 0100 (4)
  3. 곱셈 (Multiplication)
    • 10진수 곱셈과 아주 유사
    • 자릿수를 생각하여 계산
    • 예시 : 1010 (10) x 0011 (3) = 11110 (30)
  4. 나눗셈 (Division)
    • 10진수 나눗셈과 유사
    • 비트를 이동시키며 계산
    • 예시 : 1010 (10) / 0010 (2) = 0101 (5)

 

 여기서 사칙 연산을 마무리하기엔 이상한 점이 한 두가지가 아니다.

 도대체 1010 (10) 과 1010 (-6) 이 어떻게 같을 수 있는지, Carry를 무시하는 경우는 무엇인지 말이다.

 여기서 알고가야 하는 점이 언더/오버 플로우라는 것이다.

 


 

오버플로우 (Overflow)

: 연산 결과가 비트 수로 표현할 수 있는 범위를 넘어설 때 오버플로우가 발생

 

 반대로 연산 결과가 표현할 수 있는 범위보다 훨씬 적을 때 언더플로우가 발생

 보통 언더플로우보다는 오버플로우를 훨씬 빈번하게 접할 수 있기에 오버플로우를 다루겠다.

 

 다시 다음과 같은 2진수 덧셈식을 유심히 보자.

 1010 (10) + 0110 (6) = 10000 (16)

 

 휠을 위로 올려보자. 이미지로 알 수 있듯 4비트 수로는 양수 10을 표현할 수 없다.

 해당 계산을 두 가지 방법으로 정정할 수 있다.

 

오버플로우를 고려한 덧셈, 뺄셈

 하나는 4비트 덧셈, 또 다른 하나는 5비트 덧셈이다.

 자세히 설명하자면 전자는 무슨 일이 있어도 계산의 결과는 4비트를 초과하지 않도록 하는 방법이다.

 후자는 비트의 상한을 늘려 표현 가능한 수의 범위를 늘려보자는 방법인 것이다.

 [ 4비트 (-8 ~ 7) -> 5비트 (-16 ~ 15) ]

 

 전자의 방법 ( 4비트 덧셈 )으로 식을 정정한다면 다음과 같다.

 1010 (-6) + 0110 (6) = 0000 (0)   [ Carry 무시 ]

 

 후자의 방법 ( 5비트 덧셈 )으로 식을 정정한다면 다음과 같다.

 01010 (10) + 00110 (6) = 10000 (-16)

 

 눈치가 빠른 분들이라면 눈치채셨겠지만, 5비트 덧셈에서 오버플로우가 발생하였다.

 정상적인 계산이라면 16이 나와야하는 상황이지만 표현 가능한 수의 범위가 [-16 ~ 15] 이다.

 초과한 수 만큼 가장 작은 수 -16 에서 더해준다.

 * 음수 변환 과정에 1이 더해진다.

 따라서 연산 결과(16)와 표현 가능한 최대의 양수(15) 차이인 1만큼 이동한 것이라고 보면 된다. (16 -> -16)

 

 헷갈린다면 위 이미지처럼 직접 보수 표현을 확인하여 연산 결과를 확인할 수도 있다.

 더욱 확실한 방법은 6비트 덧셈을 하면 오버플로우가 발생하지 않는다.

 


 

 이렇게 2진수의 보수 표현과 사칙 연산, 오버플로우 까지 알아보았습니다.

 곱셈와 나눗셈은 어떻게 하는지 바로 감이 오실 것이라 생각합니다.

 똑같이 결과가 오버플로우라면 보수 표현을 취해주시면 됩니다.

 다음으로는 비트 연산에 대해서 알아보겠습니다~!

728x90

'분야 > CS' 카테고리의 다른 글

[CS-4] 데이터의 표현  (0) 2025.02.19
[CS-3] 컴퓨터 시스템의 구성 - 2  (2) 2025.02.02
[CS-2] 컴퓨터 시스템의 구성 - 1  (5) 2025.01.19
[CS-1] 컴퓨터 구조(CS) 란?  (10) 2025.01.15
728x90

Hello World!

 제목처럼 간단히 Hello World! 라는 문자열을 출력하는 프로그램을 짜보자.

 우선 코드를 제공할테니 분석을 해보자.

 

 다음 코드의 파일명은 hello.c 라고 하자.

 C언어로 만든 텍스트 파일이자 코드이므로 확장자명이 .c 이다.

#include <stdio.h>

int main(void)
{
	printf("Hello World!");
	return 0;
}

 

 이렇게 입력한 후 프로그램을 실행시키면 Hello World! 라는 문자열이 출력된다.

 코드를 분석하기 전에, 프로그램은 어떻게 실행시키는 걸까?

 


 

실행 과정

 실행 과정을 알아보기 전에 본인이 사용하는 개발 환경이 무엇인지 점검해보자.

 

[L2-8] C 언어 (개발 환경 구축) - 1

C 언어?: 1972년 벨 연구소의 Dennis Ritchie가 개발한 프로그래밍 언어로 현대 프로그래밍 언어의 기초 주요 특징절차적 프로그래밍 언어 : 프로시저(함수) 단위로 프로그램을 구성가벼움 : 시스템

devcrl.tistory.com

 

 본인이 사용 중인 개발환경이 Visual Studio 와 같은 통합 개발 환경이라면 실행하는데 어려움이 없을 것이다.

 하지만 Clang 이나 GCC 와 같은 기본 컴파일러 같은 경우에는 C파일을 작성 후 바로 실행시키지 못할 것이다.

 

 참조한 글에서 볼 수 있듯 컴파일을 해야한다는 것인데 사실 C파일의 실행 과정은 네 단계로 나뉜다.

 

  1. 전처리 (Preprocessing)
    • 전처리 지시자 ( # ) 로 시작하는 전처리 지시문을 처리
    • .i 확장자를 가진 전처리된 파일이 생성됨
    • 헤더 파일 포함, 매크로 확장, 조건부 컴파일 처리
  2. 컴파일 (Compilation)
    • 전처리된 파일 ( .i ) 을 받아 C 텍스트 코드를 어셈블리 코드로 변환
    • 구문 분석, 최적화 등이 이루어짐
    • .s 확장자를 가진 어셈블리 파일이 생성됨
  3. 어셈블 (Assembly)
    • 어셈블리 파일 (.s) 을 기계어(오브젝트 코드) 로 변환
    • .o 또는 .obj 확장자를 가진 오브젝트 파일 생성
  4. 링크 (Linking)
    • 여러 오브젝트 파일 (.o) 과 라이브러리 파일을 결합하여 최종 실행 파일 생성
    • 외부 참조 해결, 메모리 레이아웃 결정
    • .exe 또는 실행파일이 생성됨

 

 매우 복잡해 보인다. 무슨 소린지 모르겠는 설명도 있지만 이해하지 못해도 지금은 큰 상관이 없다.

 적어도 이런 과정을 통해 특정 언어로 작성한 텍스트 파일이 실행 파일이 된다는 것만 기억하자.

 

 기본 컴파일러를 사용할 때에는 이전 포스팅에서 확인할 수 있듯 실행파일을 만드는 명령어가 있고,

IDE를 사용한다면 실행 시 이러한 모든 과정이 자동으로 이루어지고 강력한 디버깅 기능 또한 제공된다.

 


 

디버깅 (Debugging)

: 프로그램의 오류(버그)를 찾아 수정하는 과정.

 프로그램이 의도한 대로 동작하지 않을 때 문제 원인을 파악하고 해결하는데 필수적.

 

  • 목적 : 논리적 오류, 런타임 오류, 메모리 문제 등 해결
  • 도구 : 디버거 (GDB, Visual Studio Debugger 등), printf 디버깅, Valgrind(메모리 검사)
  • 과정
    1. 문제 재현
    2. 중단점 (break point) 설정 후 단계별 실행 (Step Into/Over/Out)
    3. 변수 및 메모리 상태 확인
    4. 오류 수정 및 테스트

 강력한 기능을 제공하는 IDE 는 코드 작성 중 실시간으로 디버깅을 해주기도 한다. (런타임 제외)

 따라서 간단한 컴파일러나 편집기를 사용한다면 별도로 디버거를 사용해야 하니 IDE를 사용하는 것을 추천한다.

 


 

 C 프로그래밍의 간단한 예시와 구조에 대해 알아보았습니다.

 다음으로는 예시 코드를 자세히 분석해보겠습니다.

728x90

'언어 > C' 카테고리의 다른 글

[C-3] C 코드의 구조  (0) 2025.02.22
[C-1] 개발 환경 구축  (2) 2025.01.20

+ Recent posts