반응형

A13E833E-B09C-40EE-ABC1-25C95C5505A8.png

[원론 이야기] 왜 모든 개발 언어는 "Hello, World!"부터 시작할까? (환경 구축과 예제 포함)

안녕하세요, 가야태자 @talkit 입니다.

오늘은 실습보다는 다시 원론적인 이야기를 조금 해보려고 합니다.

새로운 프로그래밍 언어를 배울 때, 우리가 가장 먼저 화면에 띄우는 문장은 백이면 백 모두 "Hello, World!"입니다. 문득 '왜 개발 언어에서는 이걸 제일 처음에 가르칠까?'라는 의문이 들었습니다.

단순히 오래된 전통이라서, 혹은 귀여운 인사말이라서 따라 하는 걸까요? 제 생각과 AI의 생각을 같이 정리해 보니, 여기에는 개발 환경을 구축하는 과정에서 가장 핵심적인 '엔지니어링적 이유'가 숨어 있었습니다.

이번 글에서는 그 이유와 함께, 끝부분에 간단한 개발 환경 구축 방법과 주요 언어의 Hello World 예제도 만들어 두었으니 참고 부탁드립니다.

1. "Hello, World!"에 숨겨진 진짜 이유

생각해 보면 "Hello, World!"를 출력하는 것은 단순히 글자 몇 개를 화면에 보여주는 일이 아닙니다. 이 짧은 한 줄이 성공적으로 실행되었다는 것은, 내 컴퓨터 안에서 다음과 같은 복잡한 과정이 완벽하게 작동했다는 방증입니다.

  • 컴파일러/인터프리터 설치: 언어를 해석하는 엔진이 컴퓨터에 올바르게 깔렸는가?

  • 환경 변수(PATH) 설정: 터미널이나 IDE가 해당 언어의 실행 파일 위치를 정확히 인식하고 있는가?

  • 구문 분석(Syntax Parsing): 가장 기본적인 문법 구조를 도구가 이해하고 있는가?

  • 출력 스트림(I/O) 연결: 프로그램이 OS의 표준 출력 시스템과 제대로 상호작용하고 있는가?

즉, "내 컴퓨터에 이 언어를 위한 기초적인 개발 환경이 완벽하게 세팅되었다"라는 것을 검증하는 가장 완벽하고 최소한의 단위 테스트(Minimum Viable Test)인 셈입니다.

만약 첫 시간부터 복잡한 알고리즘 코드를 짰다가 에러가 나면, 우리는 '문법이 틀린 건지', '논리가 틀린 건지', '애초에 설치가 잘못된 건지' 원인을 찾기 힘듭니다. 하지만 문법이 틀릴 리 없는 "Hello, World!"에서 에러가 난다면 100% '개발 환경 세팅의 문제'로 원인을 좁힐 수 있습니다. 복잡한 변수를 제거하고, 오직 '환경 구축'이라는 첫 번째 관문에만 집중할 수 있도록 도와주는 마법 같은 코드인 것이죠.

2. 주요 언어별 환경 구축 및 예제 살펴보기

언어마다 개발 환경을 만들고 실행하는 방식(컴파일 vs 인터프리터)이 조금씩 다릅니다. 대표적인 4가지 언어의 핵심 요약을 정리해 두었으니 참고해 보세요.

① C 언어 (컴파일러 방식)

C 언어는 기계어로 직접 변환되는 컴파일 언어입니다. 코드를 작성한 후 실행 파일을 만드는 변환 과정이 필요합니다.

  • 환경 구축 핵심: * Windows: GCC 컴파일러(MinGW) 설치 및 시스템 환경 변수(PATH) 등록

    • macOS: 터미널에서 xcode-select --install 명령어로 Command Line Tools 설치
  • Hello, World! 코드:

      #include <stdio.h>
    
      int main() {
          printf("Hello, C World!\n");
          return 0;
      }
  • 실행 방법: 터미널에서 gcc main.c -o main으로 빌드 후, ./main으로 실행

② Java (가상 머신 방식)

Java는 OS에 종속되지 않고 JVM(자바 가상 머신) 위에서 돌아갑니다.

  • 환경 구축 핵심: * JDK(Java Development Kit) 설치 (OpenJDK 등)

    • 시스템 환경 변수에 JAVA_HOME 등록 및 PATHbin 디렉토리 추가
  • Hello, World! 코드:

      public class Main {
          public static void main(String[] args) {
              System.out.println("Hello, Java World!");
          }
      }
  • 실행 방법: 터미널에서 javac Main.java로 컴파일 후 java Main으로 실행

③ Python (인터프리터 방식)

파이썬은 컴파일 없이 코드를 한 줄씩 읽어가며 바로 실행하는 대표적인 언어입니다.

  • 환경 구축 핵심: * Python 공식 홈페이지에서 인스톨러 다운로드 및 설치

    • [중요] 설치 화면에서 "Add python.exe to PATH" 체크박스 반드시 선택
  • Hello, World! 코드:

      print("Hello, Python World!")
  • 실행 방법: 터미널에서 python main.py 입력 시 즉시 실행

④ Node.js (JavaScript 런타임)

웹 브라우저 밖(로컬 컴퓨터)에서 자바스크립트를 실행할 수 있게 해주는 환경입니다.

  • 환경 구축 핵심: * Node.js 공식 홈페이지에서 LTS(안정화) 버전 설치

    • 설치 시 node 환경 변수와 패키지 매니저인 npm이 자동으로 함께 세팅됨
  • Hello, World! 코드:

      console.log("Hello, Node.js World!");
  • 실행 방법: 터미널에서 node app.js 입력 시 즉시 실행

💡 글을 마치며

언어별 예제를 보면 아시겠지만, 파이썬이나 Node.js는 단 한 줄이면 끝나는 반면, C나 Java는 무언가 감싸고 있는 뼈대(구조)가 많습니다. "Hello, World!"를 직접 실행해 보면 '아, 이 언어는 기본적으로 이런 구조를 갖추고 시작해야 하는구나'라는 언어별 스타일을 첫눈에 파악할 수 있다는 장점도 있습니다.

"Hello, World!"는 단순한 인사가 아니라, 새로운 언어의 세계로 들어가기 전 컴퓨터와 개발자가 나누는 첫 번째 악수와 같습니다. 화면에 이 문구가 무사히 떴다면, 여러분은 이미 가장 어렵고 중요한 첫 번째 베이스캠프인 '환경 구축'을 정복하신 겁니다.

오늘도 즐거운 개발 되시기 바랍니다. 감사합니다!

반응형
반응형

B61A6C0C-01F3-4CD3-AFF5-DB742974A40A.png

안녕하세요 가야태자 @talkit 입니다.

Spring Boot 시작 방법
https://www.steemit.com/kr/@talkit/spring-boot-java-18-sts-4-helloworld--f7k0ki

위글의 실습으로

Java 1.8 설치
https://www.steemit.com/kr/@talkit/springboot-macos-openjdk-18--z3k1wk

SpringTools(STS)
https://www.steemit.com/kr/@talkit/springboot-macos-spring-toolssts--9kq2xf

자바 설치하고, STS를 설치를 진행 해서 제 맥북에는 두가지 프로그램이 잘 설치 되어 있는 상태 입니다.

이제 본격적으로 SpringBoot Hello World를 만들어 보겠습니다.

저는 주소 Spring MVC 방식으로 프로젝트를 많이 해서 SpringBoot는 주변을 서치하면서 진행하고 있습니다.

스프링부트 전체 흐름 글에서는 일단 파일을 만들고, 파일을 Import 하는 방식으로 진행을 하라고

제미나이가 이야기 해주었습니다.

그래서 우선 그렇게 진행 해보겠습니다.

지난번 글에서 저하고 동일한 STS를 설치하셨다면,

조금 메뉴가 다른 것 같습니다. 아니면 MacOS라서 다를수도 있을 것 같습니다

JDK를 설정 해주어야 합니다.

Window > Preferences > Java

로 되어 있는데

image.png

맥에서는 Spring Tools for Eclipse 프로그램 메뉴를 클릭하시고

Settings를 클릭하신 다음에

image.png

Java >> Installed JREs 에 접근하면 위와 같이

JDK가 21도 있고, 1.8.0도 있습니다.

이중에 저희는 1.8을 선택 합니다.

그리고, Apply and Close 버튼을 클릭해 주시면 됩니다.

그러면 일단 JDK는 Java 1.8을 사용하는 것으로 변경 되었습니다.

image.png

스프링 부트를 돌릴 서버를 설정 하기 위해서

해당 메뉴로 다시 접근 해서

Server > Runtime Environments > Add

를 클릭해서 Apache Tomcat 8.5 또는 9.0을 선택 합니다.

저는 앞에 글에서 선택한대로 8.5를 선택 하겠습니다.

image.png

Download and Install ...

을 클릭하십시오.

image.png

GPL 동의 하시고 Finish 누르시면 됩니다.

image.png

설치할 폴더를 선택해달라고 합니다.

저는 계정 폴더내에 dev로 하겠습니다.

/Users/kjh0523/dev/apache-tomcat-8.5.99

없으면 폴더는 만드시면 되고 위와 비슷하게 설치가 됩니다.

조금 기다리시면, Finish가 활성화 됩니다.

image.png

Finish를 누르시면 됩니다.

image.png

Apply and Close 누르십시오.

일단 톰켓 서버 설치까지 끝났습니다.

https://start.spring.io/

위 사이트에 접속 합니다.

image.png

사이트에 적당하게 적습니다.

도메인을 가지고 계시면 해당 도메인을 꺼꾸로 하시면 됩니다. ^^

저는 티스토리 도메인으로 했습니다.

그리고 아티펙트는 프로젝트 명이어서 적당하게 영어로 만들어 줍니다.

나중에 Jar나 War파일명이 되므로 적당한 명칭을 하면 됩니다.

저는 이번에 HelloWorld여서 HelloWolrd로 했습니다.

그리고 저희는 2.7x를 사용할 예정이어서 일단 3.5를 선택 합니다.

현재 상태로요 ^^

그리고 Jar나 War는 설정으로 변경할 수 있어서 일단 Jar로 했습니다.

저는 Maven이 편해서 Maven으로 했습니다.

그리고 자바는 어쩔수 없이 17로 했습니다.

사이트에서 제일 낮은 버전이 17이어서요.

그리고 하단의 GENERATE 버튼을 클릭하시면 파일이 하나 다운로드 됩니다.

해당 파일을 임포트 해보도록 하겠습니다.

image.png

File >> Import 를 선택 합니다.

image.png

Project from Folder or Archive 를 선택 하시고

Next를 클릭 합니다.

image.png

압축 파일로 다운로드 되어서 Archive를 선택 합니다.

image.png

아까 다운로드 받은 zip파일을 선택 합니다.

image.png

Finish를 클릭하십시오.

그러면, 메이븐이 여러가지 일들을 해줍니다.

image.png

왼쪽의 Project Explore 에서 pom.xml을 찾습니다.

저희는 아까 말씀 드린대로,

JDK 1.8

SpringBoot는 2.7.x를 사용합니다.

그래서 수정 해주어야 합니다.

수정하고 저장하면 2.7.18로 잘 변경 됩니다.

그런데 몇몇 오류가 발생하는데

우선 Spring Tools for Eclipse >> XML

image.png

Download external resources like referenced DTD, XSD에 체크합니다. 저는 체크가 되어 있지만 처음에는 체크가 풀려 있습니다.

그리고, Apply and Close

그러면 Pom.xml은 정상적으로 돌아왔을 겁니다.

워닝이 조금 있기는 하겠지만 무시 합니다. ^^

그리고 이제 웹 화면을 보기 위해서 pom.xml과 Java 소스를 약간 수정하고 추가해 보겠습니다.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.18</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.tistory.talkit</groupId>
    <artifactId>HelloWorldProject</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name/>
    <description/>
    <url/>
    <licenses>
        <license/>
    </licenses>
    <developers>
        <developer/>
    </developers>
    <scm>
        <connection/>
        <developerConnection/>
        <tag/>
        <url/>
    </scm>
    <properties>
        <java.version>8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

pom.xml을 위와 같이수정 합니다.
spring-boot-starter => spring-boot-starter-web

starter 가 -web으로 되어 있어야 합니다.

그리고 이제 접속하면 브라우저에 HelloWorld가 보이도록 하기 위해서 Java 파일을 하나 만듭니다.

/HelloWorldProject/src/main/java/com/tistory/talkit/HelloWorldProject/HelloWorldController.java

프로젝트내에 위와 같이 작성하시면 됩니다.

package com.tistory.talkit.HelloWorldProject;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

// 🚨 [핵심 수정] 이 클래스가 웹 컨트롤러임을 스프링에게 알려주는 스위치입니다!
@RestController
public class HelloWorldController {

    // [핵심] 사용자가 웹 브라우저에서 "/" (기본 경로)로 접속하면 이 메서드를 연결합니다.
    @GetMapping("/")
    public String helloBanana() {
        return "🍌 가야태자의 바나나 교실에 오신 것을 환영합니다! Hello World for Java 1.8 & Spring Boot 2.7! 🍌";
    }

}

위와 같이 생성 합니다.

저기 글자는 여러분들이 원하는 글자로 변경 하시면 됩니다.

그리고, HelloWorldProject 프로젝트 명 누르고 오른쪽 마우스로 Run As >> SpringBoot App

image.png

하시면 스프링 부트 프로그램이 시작 합니다.

이때 오류나면 댓글 주세요.

도와 드리겠습니다.

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::               (v2.7.18)

2026-07-04 12:43:34.846  INFO 10718 --- [           main] c.t.t.H.HelloWorldProjectApplication     : Starting HelloWorldProjectApplication using Java 1.8.0_492 on kjh0523ui-MacBookPro.local with PID 10718 (/Users/kjh0523/Documents/workspace-spring-tools-for-eclipse-4.32.2.RELEASE/HelloWorldProject.zip_expanded/HelloWorldProject/target/classes started by kjh0523 in /Users/kjh0523/Documents/workspace-spring-tools-for-eclipse-4.32.2.RELEASE/HelloWorldProject.zip_expanded/HelloWorldProject)
2026-07-04 12:43:34.847  INFO 10718 --- [           main] c.t.t.H.HelloWorldProjectApplication     : No active profile set, falling back to 1 default profile: "default"
2026-07-04 12:43:35.434  INFO 10718 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2026-07-04 12:43:35.439  INFO 10718 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2026-07-04 12:43:35.439  INFO 10718 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.83]
2026-07-04 12:43:35.506  INFO 10718 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2026-07-04 12:43:35.506  INFO 10718 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 629 ms
2026-07-04 12:43:35.767  INFO 10718 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2026-07-04 12:43:35.775  INFO 10718 --- [           main] c.t.t.H.HelloWorldProjectApplication     : Started HelloWorldProjectApplication in 1.187 seconds (JVM running for 1.557)

위와 같이 되어 있으면 이제 접속이 가능하다는 소리 입니다.

저희는 / 만 만들어두었기 때문에 ^^

http://localhost:8080 으로 접근 하시면 됩니다.

🍌 가야태자의 바나나 교실에 오신 것을 환영합니다! Hello World for Java 1.8 & Spring Boot 2.7! 🍌

기능적으로 아무것도 없이 해당 메시지를 출력하는 프로그램이지만,

일단 스프링 부트의 기초를 느낄 수있는 프로젝트입니다.

이번에는 여기까지 진행 합니다.

다음에는 디비도 붙여 보고 여러가지 작업을 진행 해보겠습니다.

감사합니다.

반응형
반응형

안녕하세요 가야태자 @talkit 입니다. 제 이전글들을 살펴 보시면, 파이선 개발 환경 구축 관련 이야기들을 적어 두었습니다.

오늘은 제가 파이썬을 공부한지 6일차 입니다.

개발 환경을 구축을 했으니 개발을 해봐야겠지요 ^^

print("안녕 파이썬 세계야!")

우선은 Hello World 프로그램 부터 만들어 봤습니다.

위와 같습니다.

개발환경을 잘 구축 하셨다면 아무 개발 환경에서나 저소스를 복사 붙여 넣기를 하시구요.

python 06.hello.py

요렇게 하시면 실행이 됩니다.

python 06.hello.py
안녕 파이썬 세계야!

저는 위와 같이 실행이 되었습니다.

그런데 ^^ 이상하게 VS Code에서 Play 버튼으로 실행이 좀 이상해서 한번 살펴 봐야겠습니다.

한글이 잘 출력 되므로 영문도 잘 출력 됩니다.

다음 코드로 "" 큰 따옴표를 붙여서 출력 해보겠습니다.

안녕 "파이썬" 세계야!

저도를 출력하시면 어떻게 해야 할까요?

print('안녕 "파이썬" 세계야')

위와 같이 하시면 됩니다.

python 06.hello.py
안녕 "파이썬" 세계야

저는 잘 출력이 되었습니다.

일반적으로 다른 프로그래밍 언어에서는 " 앞에 \를 넣어 주시면 출력이 됩니다.

파이썬에서도 해보겠습니다.

print("안녕 \"파이썬\" 세계야")

위와 같이 하셔도 됩니다. ^^

python 06.hello.py 
안녕 "파이썬" 세계야

변수 출력 관련은 또 공부 해 가면서 글을 적도록 하겠습니다.

감사합니다. 

 

반응형
반응형

안녕하세요 가야태자 @talkit 입니다. 

오늘은 지난 번에 글에서 사용하다가 나온 echo에 대해서 말씀 드리겠습니다. 

ECHO(1)                                                                                                                                                                   User Commands                                                                                                                                                                   ECHO(1)

NAME
       echo - display a line of text

SYNOPSIS
       echo [SHORT-OPTION]... [STRING]...
       echo LONG-OPTION

DESCRIPTION
       Echo the STRING(s) to standard output.

       -n     do not output the trailing newline

       -e     enable interpretation of backslash escapes

       -E     disable interpretation of backslash escapes (default)

       --help display this help and exit

       --version
              output version information and exit

       If -e is in effect, the following sequences are recognized:

       \\     backslash

       \a     alert (BEL)

       \b     backspace

       \c     produce no further output

       \e     escape

       \f     form feed

       \n     new line

       \r     carriage return

       \t     horizontal tab

       \v     vertical tab

       \0NNN  byte with octal value NNN (1 to 3 digits)

       \xHH   byte with hexadecimal value HH (1 to 2 digits)

echo 를 man 페이지에서 보면 위와 같이 나옵니다. ^^

man echo

위와 같이 Linux에 접속해서 입력해보시면 됩니다. ^^

한글로 셋팅된 리눅스에서는 한글로 나옵니다. 

텍스트를 출력한다고 되어 있습니다. 

echo [옵션들] "원하는문장|원하는변수"

또한, 특수 문자를 지원을 하네요 ^^

간단하게 매일 언어 공부하는 책에서 본 Hello World를 찍어 보겠습니다. Hello echo world!! 정도를 찍어 볼까요 ^^

echo "Hello echo world."

위 명령어를 리눅스에 입력해 보십시오 ^^

echo "Hello echo world."
Hello echo world.

위와 같이 나옵니다. ^^ 잘 찍혔네요 

그런데 단순히 echo는 리눅스에서 출력만한다.

저건 일반적으로 필요가 없을 것 같습니다. 

그렇습니다. echo는 저희가 컴퓨터를 사용하게 되면 알아야 하는 PATH라던지 여러가지 환경 변수들을 알아 볼때 출력해 볼 수 있습니다. 

음 글을 적다 보니 많은 글쓸 꺼리가 튀어 나오네요 ^^

리눅스의 환경 변수 설정도 한번 적어 보겠습니다. 

env
HOME=/home/ubuntu
USER=ubuntu
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

여러분들은 더 나올껀데 공개해도 되는 것만 일단 공개해 봅니다. 

Oracle 클라우드를 사용하시면 동일하게 보일 수 있습니다. 

저기 젤앞에 대문자로 적혀 있는 아이들이 환경 변수 입니다. 이 환경 변수 앞에 echo를 하면서 $를 붙여 주면 개별적으로 출력해 줍니다. 

그럼 저 세가지하고 저기는 안나오지만, SHELL이라는 환경변수를 한번 찍어 보겠습니다. 

echo $HOME
echo $PATH
echo $USER
echo $SHELL

위와 같이 리눅스에 치시면 됩니다. ^^

echo $HOME
echo $PATH
echo $USER
echo $SHELL
/home/ubuntu
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
ubuntu
/bin/bash

저는 실행 했더니 위와 같이 나왔씁니다. ^^

여러분들은 다르게 나오시나요?

저 아이들은 기본적으로 환경 변수이구요.

쉘 스크립트를 작성할때 변수를 정의 할 수 있습니다. 

저희는 말씀은 안드렸지만, 저기 있는 bash 쉘입니다. ^^

그래서 

변수를 만들어 보겠씁니다. 

VAR1="111"

위와 같이 리눅스에 치십시오 ^^

이제 아시겠죠 저 = 앞에 있는 아이 앞에다가 $를 붙이면 출력 된다는 것을 ^^

echo $VAR1
 echo $VAR1
111

실행하면 위와 같이 나오네요 ^^

변수 설정이 잘되고 출력도 잘 됩니다.

오늘은 변수와 출력으로서 만들었지만, 다음에는 조금 다른 방법으로 변수를 활용해 보겠습니다. 

감사합니다. 

 

반응형

+ Recent posts