반응형

61B10F38-2C0E-4C34-B9F4-9E104BA32319.png

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

개발이나 서버 관리를 하다 보면 SSH, SFTP, Telnet 등을 지원하는 터미널 클라이언트 프로그램을 필수적으로 사용하게 됩니다. 시중에 수많은 프로그램이 나와 있지만, 요즘 가장 핫한 툴을 꼽으라면 단연 MobaXtermTermius가 아닐까 싶습니다.

두 프로그램 모두 매우 강력하고 편리한 기능을 제공하지만, 요금제를 보면 한 가지 의문이 생기곤 합니다.

‘Home 에디션이라는 명칭과 엄연히 유료 버전이 공존하는 프로그램인데, 어떻게 기업에서도 무료로 쓸 수 있다는 거지? 혹시 나중에 라이선스 위반으로 공문이 날아오는 건 아닐까?’

저 역시 이 부분이 무척 궁금했었는데요, 공식 라이선스 규정을 꼼꼼히 확인해 본 결과 특정 조건만 만족하면 기업(회사) 환경에서도 법적 문제없이 무료로 사용 가능하다는 점을 확인했습니다.

회사에서 눈치 보지 않고 당당하게 쓸 수 있도록 두 프로그램의 기업 사용 가이드와 공식 사이트, 버전별 특징을 깔끔하게 정리해 드립니다!

[꿀팁] MobaXterm vs Termius: 회사에서 무료로 쓰는 법과 특징 총정리

1. MobaXterm (모바엑스텀) 기업 사용 가이드

윈도우 환경에서 ‘끝판왕 올인원 터미널’로 불리는 MobaXterm은 회사에서도 무료로 사용할 수 있습니다. 단, 아래의 규정을 정확히 지켜야 합니다.

⚠️ 기업 내 무료 사용 조건 (핵심)

  • 개별 직접 다운로드: 반드시 사용자 본인이 공식 홈페이지에서 무료 버전(Home Edition)을 직접 다운로드하여 설치해야 합니다.

  • 사내 재배포 금지: 회사의 IT 관리자나 특정 직원이 설치 파일(.exe 또는 .msi)을 미리 다운로드해 사내 서버, 공유 폴더, 인트라넷에 올린 뒤 직원들에게 일괄 배포하는 행위는 라이선스 위반이 됩니다. 각자 알아서 받아 쓰게 해야 안전합니다.

📊 버전별 특징 비교

기능 / 특징 Home Edition (무료) Professional Edition (유료)
가격 무료 (상업적 이용 가능) 사용자당 약 $69 (영구 라이선스)
저장 가능 세션 최대 12개 제한 제한 없음
SSH 터널 개수 최대 2개 제한 제한 없음
매크로 저장 최대 4개 제한 제한 없음
네트워크 데몬 예외적 제한 (기본 기능만) 전 기능 개방 (TFTP, FTP 등 내장 서버)

💡 가야태자의 요약: 관리하는 서버가 12개 이하인 개발자나 엔지니어라면 회사 PC에서 직접 다운로드해 홈 에디션을 쓰셔도 라이선스 공문 걱정이 전혀 없습니다.

2. Termius (터미우스) 기업 사용 가이드

맥(macOS), 윈도우, 모바일(iOS/Android)을 넘나드는 트렌디하고 깔끔한 UI의 터미우스 역시 기업에서 무료로 쓸 수 있는 플랜을 제공합니다.

⚠️ 기업 내 무료 사용 조건 (핵심)

  • 터미우스의 기본 등급인 Starter 플랜(무료)은 공식 홈페이지에 "Available for commercial usage(상업적 이용 가능)"라고 명확히 명시되어 있습니다. 기업 내에서 개인이 무료 계정을 생성해 사용하는 것은 아무런 법적 문제가 없습니다.

📊 버전별 특징 비교

기능 / 특징 Starter (무료) Pro / Premium (유료)
가격 무료 (상업적 이용 가능) 월 $10 ~ $30 선 (구독형)
기기 간 데이터 동기화 불가능 (로컬 저장만 가능) 가능 (PC, 맥, 스마트폰 간 실시간 동기화)
세션(서버) 저장 제한 제한 없음 제한 없음
SFTP / 파일 전송 기본 터미널 내 지원 그래픽 기반 드래그 앤 드롭 내장 SFTP 지원
스니펫 및 AI 기능 불가능 자주 쓰는 명령어(Snippet) 저장 및 AI 자동완성 제공

💡 가야태자의 요약: 터미우스 무료 버전은 서버 등록 개수 제한은 없지만, ‘기기 간 동기화’가 안 된다는 단점이 있습니다. 회사 PC 한 곳에만 세팅해 두고 깔끔한 UI로 서버 관리를 하실 분들에게 최적입니다.

🧐 가야태자의 최종 결론: 나에게 맞는 툴은?

두 프로그램 모두 기업에서 합법적으로 무료 사용이 가능하므로, 본인의 작업 환경과 스타일에 따라 선택하시면 됩니다.

  • "나는 주로 윈도우를 쓰고, 관리할 서버가 12개 이하이며, 터미널 옆에 SFTP 폴더 트리가 바로 보이는 올인원 스타일이 좋다!" 👉 MobaXterm Home Edition 추천

  • "나는 맥(macOS)이나 리눅스를 혼용하고, UI가 스마트폰 앱처럼 깔끔하고 세련된 게 좋으며, 관리할 서버 개수가 많다!" 👉 Termius Starter 플랜 추천

내일부터 회사 PC 세팅하실 때 라이선스 눈치 보지 마시고, 공식 홈페이지에서 당당하게 무료 버전을 다운로드해 생산성을 높여보세요! 오늘 글이 도움 되셨다면 공감과 댓글 부탁드립니다. 감사합니다.

반응형
반응형

C96097B4-2298-463B-B786-3FC516461D67.png

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

정말 오랜만에 인사드리는 것 같습니다. 2010년에 상용 프로그램을 대체할 수 있는 무료 소프트웨어 리스트를 정리해서 공유해 드린 적이 있었는데요. 세월이 흐른 만큼 IT 환경도 정말 많이 바뀌었습니다.

당시 제가 추천해 드렸던 빵집, 압축시대, 오픈오피스 같은 추억의 프로그램들은 이제 대부분 개발이 중단되거나 새로운 강자들에게 자리를 내어주게 되었습니다. 반면, 기술이 발전하면서 요즘 나오는 무료·오픈소스 프로그램들은 굳이 비싼 돈을 주고 상용 프로그램을 사지 않아도 될 만큼 엄청난 완성도를 자랑합니다.

그래서 현재를 기준으로, 라이선스 걱정 없이 안심하고 사용할 수 있는 ‘최신 버전 무료 대체 소프트웨어 리스트’를 공식 다운로드 링크와 함께 새롭게 업데이트해 보았습니다.

혹시 예전에 제가 작성했던 원글이 궁금하시다면 [이전 글] 상용프로그램을 대체할 무료 프로그램 정리에서 확인하실 수 있으며, 이 외에도 제 블로그의 [무료소프트웨어 카테고리]를 방문하시면 더 다양하고 많은 무료 소프트웨어 정보를 참고하실 수 있으니 많은 방문 부탁드립니다.

개인 PC는 물론이고 기업 환경에서 세팅하실 때도 큰 도움이 되기를 바랍니다.

[추천] 비용은 줄이고 효율은 높이는 분야별 상용 프로그램 대체 무료 소프트웨어 가이드

종류 상용 프로그램 무료/오픈소스 대체 프로그램 (공식 다운로드 링크) 비고 (최신 트렌드 및 팁)
압축 프로그램 WinZip, WinRAR, 알집(기업 유료) 과거 쓰이던 '빵집', '압축시대'는 개발이 중단되었습니다. 현재는 깔끔하고 빠른 반디집과 멀티코어를 잘 활용하는 고성능 오픈소스인 7-Zip이 표준입니다.
이미지 뷰어 알씨(기업 유료), ACDSee 꿀뷰는 여전히 가볍고 만화/이미지 보기에 최고의 성능을 자랑합니다. 리스트나 디렉터리 기반 미리보기가 필요하다면 FastStone도 좋은 대안입니다.
FTP 프로그램 WS_FTP, 알FTP 알FTP는 단종되었으며 현재는 FileZilla(크로스플랫폼)와 WinSCP(윈도우 전용, 안정적인 SFTP/SCP 지원)가 전 세계 표준으로 자리 잡았습니다.
Telnet / SSH Client Xshell, SecureCRT 과거의 Putty+PuttyCM 조합보다는, 현대적인 탭 기능과 SFTP 브라우저를 내장한 올인원 터미널 MobaXterm을 강력히 추천합니다. macOS/Linux라면 기본 터미널을 써도 무방합니다.
CD 버닝 프로그램 Nero Burning ROM 최근 하드웨어에는 ODD(CD/DVD 드라이브)가 장착되지 않아 수요가 급감했습니다. 굳이 필요하다면 CDBurnerXP가 아직 유지되고 있습니다. USB 부팅 디스크 제작용으로는 Rufus를 많이 씁니다.
비트맵 이미지 처리 Adobe Photoshop GIMPPaint.NET은 여전히 건재합니다. 최근에는 설치 없이 웹 브라우저에서 포토샵 UI 그대로 사용할 수 있는 Photopea가 가볍게 편집할 때 각광받고 있습니다.
오피스 (문서, 스프레드시트) MS Office, 한컴오피스 기존 'OpenOffice'는 개발이 정체되어 현재는 그 후속 격인 LibreOffice가 오픈소스 진영을 이끌고 있습니다. 설치가 필요 없고 협업이 강력한 Google 오피스 계열이 가장 대중적으로 쓰입니다.

💡 최근 IT 트렌드를 반영한 추가 대체 프로그램

예전 글에는 없었지만, 요즘 PC 환경에서 빼놓을 수 없는 필수 카테고리도 함께 추가합니다.

반응형
반응형

7259EAFD-10AC-47D4-9B14-1988763A57BA.png

[개발/생산성] 마크다운(Markdown) 문법 총정리: 기본부터 GitHub·옵시디안 확장 문법까지

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

오랜만에 블로그 분석을 해보니 마크다운 관련 글이 여전히 인기 순위 1위를 달리고 있네요. 많은 분이 마크다운에 관심을 두시는 모습을 보며, '도대체 마크다운 문법의 끝은 어디일까? 기본 문법부터 깃허브나 옵시디안 같은 플랫폼 전용 확장 문법까지 한눈에 정리해 두면 어떨까?' 하는 궁금증과 욕심이 생겼습니다.


📝 마크다운(Markdown)이란?

마크다운은 텍스트 기반의 경량 마크업 언어입니다. 복잡한 HTML 태그를 쓰지 않고도 #, * 같은 단순한 기호 몇 개로 글을 보기 좋게 꾸밀 수 있어, 개발자 문서 문서화부터 블로그 포스팅, 개인 메모까지 폭넓게 사랑받고 있습니다. 무엇보다 텍스트 그대로 읽어도 가독성이 좋고, 플랫폼에 종속되지 않는다는 강력한 장점이 있습니다.


📌 1. 마크다운 기본 문법 (Standard Markdown)

가장 기초가 되며 대부분의 편집기에서 호환되는 필수 문법입니다.

  • 제목 (Headers): #의 개수로 크기를 조절합니다 (1~6단계).

      # 제목 1 (가장 큼)
      ## 제목 2
      ### 제목 3
  • 강조 (Emphasis): 텍스트를 굵게 하거나 기울입니다.

      *기울임* 또는 _기울임_
      **굵게** 또는 __굵게__
  • 목록 (Lists): 순서가 있는 목록และ 없는 목록을 만듭니다.

      1. 첫 번째
      2. 두 번째
    
      * 순서 없는 목록
      - 대시도 가능합니다
  • 구분선 (Horizontal Rule): 하이픈 세 개(---) 혹은 별표 세 개(***)를 연속으로 입력하면 글의 섹션을 나누는 깔끔한 가로줄(구분선)이 생성됩니다.

      ---
  • 링크 & 이미지 (Links & Images): URL과 이미지를 삽입합니다.

      [구글 링크](https://google.com)
      ![이미지 설명](이미지_경로.png)
  • 인용구 (Blockquotes): > 기호를 사용합니다.

      > 이것은 인용문입니다.

🐙 2. GitHub 확장 문법 (GFM: GitHub Flavored Markdown)

개발자들의 성지인 GitHub에서 코드와 협업 관리를 편리하게 하기 위해 확장한 문법입니다.

  • 코드 블록 (Code Blocks) & 언어 강조: 백틱( ` ) 3개로 코드를 감싸고 언어 이름을 적으면 문법 하이라이팅이 적용됩니다.
      ```java
      public class HelloWorld {
          public static void main(String[] args) {
              System.out.println("Hello, World!");
          }
      }
    ```
  • 체크박스 / 작업 목록 (Task Lists): 대괄호 안에 공백이나 x를 넣어 만듭니다.
      - [ ] 해야 할 일
      - [x] 완료된 일
  • 취소선 (Strikethrough): 물결표( ~ ) 2개로 텍스트를 감싸줍니다.
      ~~이 내용은 취소되었습니다.~~
  • 표 (Tables): 파이프( | )와 대시( - )를 이용해 깔끔한 표를 그립니다.
      | 제목 | 내용 | 비고 |
      | :--- | :---: | ---: |
      | 왼쪽 정렬 | 중앙 정렬 | 오른쪽 정렬 |

💎 3. 옵시디안 확장 문법 (Obsidian Markdown)

두번째 뇌로 불리는 지식 관리 도구, 옵시디안(Obsidian)에서 주로 쓰이는 강력한 연결 문법입니다.

  • 위키 링크 / 내부 문서 연결 (Wiki Links): 대괄호 2개 [[ ]]를 사용해 노트와 노트를 번개처럼 연결합니다.

      [[마크다운 편집기 사용법]] -> 해당 이름의 내부 노트로 링크 생성
      [[마크다운 편집기 사용법|여기]] -> '여기'라는 이름으로 별칭 링크 생성
  • 텍스트 하이라이트 (Highlight): 등호( = ) 2개로 형광펜 효과를 줍니다.

      ==이 부분은 중요해서 형광펜을 칠합니다.==
  • 태그 (Tags): # 뒤에 띄어쓰기 없이 단어를 적어 분류 태그를 만듭니다. (일반 제목 문법과 달리 본문 중간에 배치)

      #마크다운 #블로그분석 #옵시디안
  • 각주 (Footnotes): 본문 중간에 보충 설명 링크를 달고 하단에 내용을 적습니다.

      이 문장 뒤에 추가 설명이 필요합니다[^1].
    
      [^1]: 여기에 각주 내용을 작성합니다.

📂 4. 내 블로그 참고글 목록

그동안 제가 블로그에 차곡차곡 정리해 두었던 마크다운의 역사, 개념, 편집기 추천 및 활용 플랫폼에 관한 연재 글입니다. 함께 읽어보시면 마크다운을 마스터하는 데 큰 도움이 됩니다!


🔗 관련 참고 링크

마크다운을 더 깊게 공부해 보시거나 유용하게 활용할 수 있는 공식 문서 링크입니다.


방문해 주시는 분들께 유익한 정리 글이 되었으면 좋겠습니다. 궁금한 점이 있다면 언제든 댓글로 남겨주세요. 감사합니다!

반응형
반응형

FAD498AA-C634-4D01-B409-BEF8EAA3A1BC.png

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

오늘에야 맥오에스 카테고리를 블로그에 만들었습니다. ^^

오늘은 원격에서 출장가서 일할일이 있어서 팀뷰어를 설치 해보겠습니다.

image.png

https://www.teamviewer.com/ko/download/macos/

위 사이트에서 맥용으로 다운 받으시면 됩니다.

저는 맥용이고 필요하시면 다른 OS 용 윈도우/리눅스 용도 있으니 다운 받으시면 됩니다.

image.png

지난번에 한 것 처럼 다운로드 클릭하고 teamviewer.dmg 파일을 클릭 하시면 됩니다.

image.png

이경우는 처음 보네요.

image.png

여튼 크릭하고 더블 클릭 했습니다.

그랬더니 위와 같이 인터넷 경고가 뜹니다. ^^

열기를 클릭 해주겠습니다.

image.png

위와 같이 뜨면 체크하시고 계속 누르시면 됩니다.

image.png

이제 패키지 타입의 인스톨러와 동일한 화면이 뜨네요.

처음부터 pkg 타입으로 제공 했으면 앞에 과정은 필요 없을텐데 ㅠ.ㅠ

아무래도 용량을 줄이려고 한 것 같습니다.

image.png

저는 맥북을 제어 할께 아니어서 필요한 켜는걸로 하고 Start로 시작하는 아이는 그대로 두었습니다.

계속 누르시면 됩니다.

image.png

설치에 어느정도 공간이 필요한지 이야기 해주네요.

설치 버튼 누르시면 됩니다.

image.png

암호를 넣으시거나 지문을 인식하시면 됩니다.

image.png

설치가 완료 되었습니다.

닫기 누르시면 설치 파일을 휴지통으로 보낼까요가 나오는데 저는 보내는 편입니다.

image.png

지원을 받으실 경우 제가 파란색 네모로 가려 놓은 것을 지원하시는 쪽에 불러 드리면 됩니다.

설치는 여기까지 하고 마치겠습니다.

감사합니다.

반응형
반응형

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

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

반응형
반응형

9EF1D508-F692-425A-836B-05AA4D69CE3C.png

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

지난 글까지 우리는 MacOS 환경에서 우여곡절 끝에 Java 1.8 엔진을 얹고, STS4 설치에 이어 감격의 스프링 부트(Spring Boot) Hello World 웹 서버를 구동하는 데 성공했습니다! 매번 익숙한 윈도우 환경에서만 개발 설정을 하다가, 맥북 터미널을 두들기며 실습해 보니 사소한 에러를 잡는 것도 아주 색다르고 재미있네요. ^^

단순히 화면에 글자 하나를 띄우는 HelloWorld 단계를 넘어서니, 이제 실무에서 사용하는 진짜 비즈니스 로직(데이터베이스 연동, 아키텍처 설계 등)을 추가하고 싶어지더군요. 그래서 본격적인 코드 작성에 앞서, 머릿속을 맴돌던 몇 가지 근본적인 궁금증들을 정리해 보았습니다.

  1. 전통적인 Spring MVC와 순수 Spring Boot 설정은 구체적으로 무엇이 다른가? (그 많던 XML들은 다 어디로 갔나?)
  2. 사람들은 왜 유독 Spring Boot를 두고 '클라우드 친화적(Cloud-Friendly)'이라고 부르는가?
  3. 그렇다면 기존 Spring MVC는 도커(Docker)나 쿠버네티스(Kubernetes) 같은 현대적인 클라우드 환경으로 전환이 불가능한가?

오늘은 본격적인 아키텍처 설계에 들어가기 전, 이 궁금증들을 아주 명쾌하고 쉽게 풀어보는 시간을 가져보겠습니다!


1. Spring MVC vs Spring Boot 설정의 차이: "설정 지옥의 해방"

전통적인 Spring MVC(예: 전자정부프레임워크 등)로 비즈니스 프로젝트를 시작하려면, 코드를 짜기도 전에 엄청난 양의 환경 설정에 지치곤 했습니다.

applicationContext.xml, spring-mvc.xml, context-datasource.xml 등 거대하고 복잡한 XML 파일들을 매번 복사해 와서 데이터베이스 커넥션 풀(DBCP)을 셋팅하고, 컴포넌트 스캔 범위를 지정해야 했죠. 오타라도 하나 나면 컴파일 시점엔 알 수도 없고 런타임 에러를 뿜어내기 일쑤였습니다.

하지만 Spring Boot는 이 패러다임을 완전히 바꿨습니다. 부트에는 스프링 관련 설정을 위한 XML 파일이 단 하나도 필요 없습니다!

스프링 부트는 "설정보다는 관례(Convention over Configuration)"를 내세웁니다.

  • 자동 설정(Auto Configuration): spring-boot-starter-web 라이브러리를 추가하는 순간, 부트가 내부적으로 "아, 이 개발자가 웹 서버를 만드는구나!" 하고 내장 톰캣 서버, JSON 변환기, 문자 필터 등을 알아서 자바 코드로 셋팅해 줍니다.
  • 프로퍼티 중심 제어: 과거 복잡했던 데이터소스(DB 접속) 설정은 이제 application.properties 파일에 딱 세 줄, 드라이버 이름과 URL, 계정 정보만 적어주면 끝납니다.
  • 개발자는 인프라 설정에 힘을 뺄 필요 없이 오직 비즈니스 로직(Controller - Service - DTO - Mapper)에만 100% 집중할 수 있게 된 것이죠.

2. Spring Boot는 왜 '클라우드 친화적'일까?

최근 실무 백엔드 인프라의 대세는 AWS 같은 클라우드 환경입니다. 그리고 클라우드 세상에서 스프링 부트는 독보적인 위치를 차지하고 있습니다. 왜 그럴까요?

① 내장 WAS를 품은 '독립 실행형 JAR' (이식성)

레거시 Spring MVC는 빌드하면 WAR 파일이 나옵니다. 이 파일은 혼자서 실행할 수 없고, 클라우드 서버마다 외부 웹 서버(Tomcat)를 따로 설치하고 설정을 맞춘 뒤에 그 안에 '주입(Deploy)'해야 구동됩니다.
반면, Spring Boot는 웹 서버(Tomcat)를 자바 패키지 내부에 아예 내장하고 있습니다. 빌드하면 웹 서버가 포함된 단 하나의 JAR 파일이 툭 떨어집니다. 클라우드 서버에 자바만 깔려 있다면 java -jar app.jar 명령어 한 줄로 즉시 어디서든 똑같이 구동됩니다. 인프라 의존성이 사라진 것입니다.

② 압도적인 구동 속도와 가벼움 (오토스케일링 최적화)

클라우드의 핵심은 사용자가 몰릴 때 서버를 순식간에 수십 대로 늘리는 오토스케일링(Auto Scaling)입니다. 레거시 시스템은 톰캣을 켜고 WAR 압축을 풀고 비대한 XML을 읽느라 서버가 준비되는 데 수십 초에서 수분이 걸렸습니다.
하지만 스프링 부트는 불필요한 인프라 구조를 걷어내고 자바 코드로 즉시 기동하므로 구동 속도가 극도로 빠릅니다. 클라우드가 명령하는 즉시 트래픽을 받아낼 준비를 마칩니다.

③ 모니터링 기능(Actuator) 기본 내장

수많은 서버가 분산되어 있는 클라우드 환경에서는 서버 상태 감시가 필수입니다. 스프링 부트는 Actuator 라이브러리를 통해 현재 서버의 메모리 상태, DB 커넥션 풀 상태 등을 확인할 수 있는 모니터링 창구를 코딩 한 줄 없이 기본으로 제공해 줍니다.


3. 그럼 Spring MVC는 도커나 쿠버네티스를 사용하지 못하나요?

결론부터 말씀드리면, 당연히 사용할 수 있습니다! 꼭 스프링 부트만 써야 도커/쿠버네티스를 쓸 수 있는 것은 아닙니다.

도커(Docker)와 쿠버네티스(Kubernetes) 입장에서는 컨테이너 안에 담긴 프로그램이 옛날 스프링인지 최신 스프링 부트인지 상관하지 않습니다. 표준 규격만 맞추면 어떤 프로그램이든 다 담아서 굴려줍니다. 실제로 수많은 기업들이 기존에 운영하던 거대한 레거시 Spring MVC 시스템을 그대로 도커 이미지로 패키징하여 쿠버네티스 환경으로 이주(Migration)시켜 운영하고 있습니다.

다만, 장점을 활용하는 효율성의 차이가 존재합니다.

  • Spring MVC를 도커에 올릴 때: 도커 이미지 안에 우분투 OS를 깔고, 외부 톰캣 서버를 설치하는 스크립트를 짜고, 거기에 WAR 파일을 복사해 넣어야 하므로 도커파일(Dockerfile)이 복잡해지고 이미지의 크기가 무거워집니다. 쿠버네티스가 컨테이너를 복제하거나 자가 치유(Heal)를 할 때도 구동 속도가 느려 굼뜨게 반응합니다.
  • Spring Boot를 도커에 올릴 때: 순수한 자바 환경 이미지에 JAR 파일 하나만 복사해 넣으면 끝납니다. 이미지 크기가 매우 가볍고, 쿠버네티스의 헬스 체크(Liveness/Readiness Probe)와 부트의 Actuator 기능이 찰떡처럼 연동되어 시스템 자가 치유 능력이 극대화됩니다.

즉, "도커와 쿠버네티스는 Spring MVC라는 옛날 자동차도 트레일러에 실어서 얼마든지 움직여줄 수 있다. 다만, 처음부터 컨테이너 비행기에 쏙 들어가도록 규격화되어 설계된 Spring Boot를 태웠을 때 훨씬 더 가볍고 안전하게 날아갈 수 있다"고 이해하시면 좋습니다!


🏁 가야태자의 요약 및 예고

결과적으로, 기존의 복잡한 인프라 환경을 다루어보신 분들이라면 스프링 부트가 제공하는 이 간결함과 클라우드 네이티브(Cloud Native)적인 특성에 감탄할 수밖에 없습니다. 과거의 자동차 조립 단계 같은 설정을 뒤에서 부트가 다 알아서 해주니까요.

궁금증이 시원하게 해결되었으니, 다음 글에서는 진짜 실무 아키텍처의 뼈대를 세워보겠습니다!
우리가 설치한 자바 1.8 환경에 딱 맞춰서 Controller - Service - DTO - Mapper - MyBatis - DB까지 이어지는 표준 5계층 아키텍처의 패키지를 쪼개고 실제 소스 코드를 채워 컴파일하는 실전 과정으로 찾아오겠습니다.

환경 설정을 진행하시면서 궁금한 점이나 의견이 있으시면 언제든 댓글로 편하게 소통해 주세요. 감사합니다! bananas 🍌

반응형
반응형

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! 🍌

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

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

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

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

감사합니다.

반응형
반응형

55259212-399B-4B9E-A2D3-9B060B2F1CA9.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

어제 글에 이어서

Spring Tools를 설치하려고 합니다.

Spring Tools는

이번에 여러가지 자바 역사를 살펴봤고 스프링 부트의 역사와 개념도 알아봤는데, 이제 본격적으로 개발 환경을 꾸려볼까 합니다. 이때 사용할 수 있는 개발 환경(IDE)이 여러가지가 있는데, 오늘부터는 무료이면서도 강력한 스프링 공식 지원 도구인 STS(Spring Tools 4)를 활용하여 환경을 구성하는 이야기를 해보고자 합니다.

지난번 제글에서 인용하면 위와 같습니다.

즉 통합 개발 환경입니다.

메모장 + JDK + Maven 등을 이용해서 단순하게 진행할수도 있겠지만 저렇게 진행하면 ^^

개발자가 해야할일이 너무 많습니다.

그래서 개발자들을 편안하게 해주는 IDE중에서 오늘은 Spring Tools(STS)를 설치해보겠습니다.

우선 첫번째 문서의 공식 사이트에서는 STS의 최신 버전만 받을 수 있네요.

https://spring.io/tools

image.png

사이트는 위와 같이 되어 있습니다. 최신 버전을 다운 받을 때는 위 프로그램을 다운로드 하시면 됩니다.

저기서 최신 맥이시면 MacOS ARM 64 버튼을 클릭히시면 됩니다.

하지만, 저희는 java 1.8에 대응하는 STS4를 다운로드해야 합니다.

보통은 친절하게 기록물 저장소(archive)를 친절하게 표시해 두는데 여기는 최신 버전만 쓰라고 없네요.

https://github.com/spring-projects/spring-tools/wiki/Previous-Versions

위 사이트에서 과거 버전을 찾을 수 있습니다.

image.png

대충 위와 같이 생겼습니다.

일단 배포된 버전중에 가장 최신 버전을 받으시면 됩니다.

인텔 맥이신 분들은 x86_64를 최신 맥이신 분들은 aarch64로 끝나는 dmg 파일을 받으시면 됩니다 .

저는 최신 맥이라서 aarch64를 받아 보겠습니다.

용량이 약 700메가 정도 됩니다.

image.png

어제 처럼 다운로드 위치에 있는 dmg 파일을 더블 클릭 합니다.

image.png

어제와는 조금 다르게 나옵니다.

pkg는 윈도우의 msi와 비슷하다고 생각하시면 되고,

오늘은 왼쪽에 있는 SpringToolsForEclipse를 Applications 폴더로 끌어다 놓으시면 됩니다.

dmg가 압축 포맷이어서 가져다 놓으면서 압축을 풀고 설치가 됩니다.

dmg로 설치한 경우 삭제는 Finder에서 응용프로그램(또는 Applications)에가서 해당 프로그램을 지워버리시면 모두 지워집니다.

끌어다 놓고 조금 있으면 뭔가 살짝 지나가고 끝입니다.

Finder(맥용 탐색기)를 켜고 응용프로그램으로 가셔서 SpringToolsForEclipse 를 찾아서 더블클릭 하시면 됩니다.

image.png

위와 같이 보이면 더블 클릭 하시면 됩니다.

image.png

인터넷에서 다운로드 한 앱이라고 경고가 뜹니다.

그러면 열기를 클릭하시면 됩니다. ^^

image.png

매번 윈도우 매뉴얼만 쓰다가 Mac용 매뉴얼 쓰니까 좋네요 ^^

일단 이번 글에서는 설치만 할꺼라서 Launch를 클릭하시면 됩니다.

다음에는 저기 있는 workspace 폴더를 변경할 껍니다. 이번에는 저대로 진행 하겠습니다.

image.png

저건 허용 안함으로 해도 될 것 같은데 저는 일반적으로 허용 합니다.

다음에 또 경고창이 하나 더 뜨네요 문서 폴더에 접근할 수 있게 해달라고 저건 허용 하셔야 합니다.

image.png

음 위와 같이 나오시면 잘 설치가 된겁니다.

이번 글에서는 여기까지만 하고 다음글에서 컴파일러 설정, Hello World 작성등을 이어서 진행 하겠습니다.

감사합니다.

반응형
반응형

0BC86AC8-E01B-4356-B28B-B0482EDF3679.png

image.png

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

https://www.steemit.com/kr/@talkit/spring-boot-java-18-sts-4-helloworld--f7k0ki

오늘은 어제글의 실습 버전입니다.

저네 과정은 위 글에서 일단 개요를 적어 두었습니다.

Java 1.8을 MacOS에 설치 해보겠습니다.

일단 보안 패치가 길게 가고 있는 이클립스 재단에서 운영하는 OpenJDK를 설치 하겠습니다.

어제 글에 있는대로

https://adoptium.net/temurin/releases/?version=8

위 사이트에 접속 합니다.

각 OS 별로 개발 환경이 존재 합니다.

그러면 MacOS용을 다운로드 받겠습니다.

확장자는 pkg 파일로 되어 있습니다.

image.png

맥오른쪽 하단에 파란색 다운로드 폴더가 보이면 그걸 클릭하면 여러가지 다운로드 파일이 보입니다.

저걸 실행 하겠습니다.

아이콘이나 파일명을 더블 클릭하시면 열립니다.

image.png

JDK를 맥에서 설치 해보는 것은 처음이라서 기대되네요.

image.png

약관을 보여주고 약관에 동의 할꺼냐고 묻습니다. 저거 동의 안하면 설치가 안되니까 동의 하겠습니다. ^^

image.png

설치 버튼을 누릅니다.

image.png

암호나 터치아이디를 누르라고 해서 저는 지문인식으로 처리 했습니다.

그러면 이제 설치를 시작 합니다.

image.png

엥 중간에 설치 과정좀 캡처 하려고 했더니 이미 설치가 다 되어 버렸네요.

이제 닫기를 누르시면 설치는 다 된 상태 입니다.

설치가 잘 되었는지 확인하기 위해서 터미널을 열겠습니다.

(base) kjh0523@kjh0523ui-MacBookPro ~ % ls -al $(/usr/libexec/java_home -v 1.8) 
total 103312
drwxr-xr-x  15 root  wheel       480  4월 26 21:04 .
drwxr-xr-x   6 root  wheel       192  4월 26 21:04 ..
-r--r--r--   1 root  wheel      1522  4월 26 21:04 ASSEMBLY_EXCEPTION
drwxr-xr-x  45 root  wheel      1440  4월 26 21:04 bin
drwxr-xr-x   3 root  wheel        96  4월 26 21:04 bundle
drwxr-xr-x   9 root  wheel       288  4월 26 21:04 include
drwxr-xr-x   7 root  wheel       224  4월 26 21:04 jre
drwxr-xr-x   9 root  wheel       288  4월 26 21:04 lib
-r--r--r--   1 root  wheel     19274  4월 26 21:04 LICENSE
drwxr-xr-x   5 root  wheel       160  4월 26 21:04 man
-rw-r--r--   1 root  wheel      2400  4월 26 21:04 NOTICE
-rw-r--r--   1 root  wheel       480  4월 26 21:04 release
drwxr-xr-x  12 root  wheel       384  4월 26 21:04 sample
-rw-r--r--   1 root  wheel  52669599  4월 26 21:04 src.zip
-r--r--r--   1 root  wheel    191545  4월 26 21:04 THIRD_PARTY_README
(base) kjh0523@kjh0523ui-MacBookPro ~ % date
2026년  7월  3일 금요일 22시 42분 43초 KST
(base) kjh0523@kjh0523ui-MacBookPro ~ % $(/usr/libexec/java_home -v 1.8)/bin/java -version
openjdk version "1.8.0_492"
OpenJDK Runtime Environment (Temurin)(build 1.8.0_492-b09)
OpenJDK 64-Bit Server VM (Temurin)(build 25.492-b09, mixed mode)
(base) kjh0523@kjh0523ui-MacBookPro ~ % java -version
openjdk version "1.8.0_492"
OpenJDK Runtime Environment (Temurin)(build 1.8.0_492-b09)
OpenJDK 64-Bit Server VM (Temurin)(build 25.492-b09, mixed mode)
(base) kjh0523@kjh0523ui-MacBookPro ~ % 

기존에 자바가 있는 것인지 일단 자바의 버전은 1.8로 확인되었습니다.

패키지의 날짜 때문인지 왜 4월 26일에 설치 된걸로 나오죠?

오늘 설치 했는데 말이죠.

그래도 패스는 지정 해야해서.

패스와 JAVA_HOME을 지정해 보겠습니다.


vi ~/.zshrc

# 파일이 열리면 맨 아래로 이동해서 i 키를 클리하고 

export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
export PATH=$JAVA_HOME/bin:$PATH

#  위 두줄을 복사해서 넣습니다. 

# Esc 키를 클릭하고 
:wq 

# 를 입력후 엔터를 칩니다.

 # 위 환경을 적용하기 위해서 source 명령어를 입력 합니다. 

source ~/.zshrc

(base) kjh0523@kjh0523ui-MacBookPro ~ % java -version
openjdk version "1.8.0_492"
OpenJDK Runtime Environment (Temurin)(build 1.8.0_492-b09)
OpenJDK 64-Bit Server VM (Temurin)(build 25.492-b09, mixed mode)

위와 같이 아까와 동일하게 패스가 잘 동작 합니다.

이제 개발을 위한 Java 컴파일러가 준비 되었습니다.

내일은 개발 환경을 설치 해보겠습니다.

감사합니다.

반응형
반응형

68F6ACC9-BD81-4ED6-BFC6-C62C246F9EF6.png

[가야태자의 Spring Boot 교실] Java 1.8 & STS 4 개발 환경 완벽 구축부터 HelloWorld 구동까지

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

이번에 여러가지 자바 역사를 살펴봤고 스프링 부트의 역사와 개념도 알아봤는데, 이제 본격적으로 개발 환경을 꾸려볼까 합니다. 이때 사용할 수 있는 개발 환경(IDE)이 여러가지가 있는데, 오늘부터는 무료이면서도 강력한 스프링 공식 지원 도구인 STS(Spring Tools 4)를 활용하여 환경을 구성하는 이야기를 해보고자 합니다.

"선생님, 지금 Java 21이 나오는 시대에 왜 굳이 Java 1.8인가요?"라고 물으실 수 있습니다. 하지만 실무에 나가보면 수많은 기존 시스템(Legacy)들이 여전히 Java 1.8 위에서 굳건히 돌아가고 있습니다. 이 환경에서 개발 환경을 완벽히 세팅하고, 프로젝트의 뼈대를 잡아 HelloWorld를 띄울 수 있다는 것은 백엔드 개발자로서 아주 강력한 무기가 됩니다.

자, 그럼 내 컴퓨터를 완벽한 스프링 부트 개발 기지로 만드는 환경 설정부터 실전 코드 구동까지 단번에 나아가 봅시다!

오늘은 일단 실습을 위한 준비 정도를 하고 실제 코딩은 주말에 해볼 계획입니다.

실제 코딩을 하면서 본 문서의 잘못된 점이나 코드 등은 바로 잡겠습니다.


1단계: Java 1.8이 품을 수 있는 스프링 부트 버전은?

가장 중요한 첫걸음은 엔진(Java)과 차체(Spring Boot)의 호환성을 맞추는 것입니다.

Java 1.8에서 사용 가능한 마지막 스프링 부트 버전은 2.x 대역입니다. 그중에서도 가장 안정적이고 최신 기능(Java 1.8 기준)을 담고 있는 2.7.x 버전을 선택해야 합니다.

  • 참고 사항: 스프링 부트 3.0부터는 Java 17이 최소 요구 사항입니다. Java 1.8로는 절대로 구동할 수 없습니다. 따라서 과거 레거시 시스템을 다루거나 Java 8 환경을 고수해야 한다면 반드시 2.7.x 대역 버전을 선택해야 합니다.
  • 참조 가이드: 스프링 부트 2.7.x 공식 시스템 요구사항 문서

2단계: OpenJDK 및 통합 개발 환경(IDE) 공식 다운로드

우리의 실제 '엔진'이 될 자바와, 우리의 '작업 공간'이 될 통합 개발 환경(IDE)인 STS 4를 공식 사이트에서 안전하게 다운로드해 줍니다.

도구 다운로드 사이트 (URL) 다운로드 및 설치 방법
OpenJDK 1.8 Adoptium 공식 홈페이지 1. 사이트 접속 후, 본인의 OS(Win/Mac/Linux)와 아키텍처(x64/aarch64 등)에 맞는 JDK 다운로드.
2. 설치 파일(Win: .msi, Mac: .pkg) 실행 후 안내에 따라 설치.
STS 4 (IDE) Spring Tools 공식 홈페이지 1. 사이트 접속 후, 본인의 OS에 맞는 Spring Tools 4 for Eclipse 다운로드.
2. 다운로드된 파일(Win/Linux: .tar.gz, Mac: .dmg)의 압축을 사용하기 편한 폴더에 풉니다.

3단계: 🚀 OS별 환경 변수 (JAVA_HOME & PATH) 완벽 설정

엔진(Java)을 컴퓨터에 깔았다면, 시스템이 어디서든 이 엔진을 찾아서 사용할 수 있도록 가리키는 이정표(환경 변수)를 세워야 합니다. 본인의 OS에 맞는 설정을 적용해 보세요.

① WINDOWS (윈도우)

  1. 시작 버튼 우클릭 -> 시스템 -> 고급 시스템 설정 -> 환경 변수를 클릭합니다.
  2. 시스템 변수에서 새로 만들기 클릭:
    • 변수 이름: JAVA_HOME
    • 변수 값: JDK 1.8이 설치된 폴더 경로 (예: C:\Program Files\Eclipse Adoptium\jdk-8.x.x.x-hotspot)
  3. 시스템 변수 목록에서 Path를 찾아 선택 후 편집 -> 새로 만들기 클릭:
    • %JAVA_HOME%\bin 입력 후 확인.
  4. 확인: 명령 프롬프트(cmd)에서 java -versionjavac 명령어가 정상적으로 버전 정보를 출력하는지 확인합니다.

② MACOS (맥킨토시 - zsh 기준)

  1. 터미널을 엽니다.
  2. vi ~/.zshrc 명령어로 설정 파일을 엽니다.
  3. 파일 맨 아래에 다음 내용을 추가합니다:
    • export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
    • export PATH=$JAVA_HOME/bin:$PATH
  4. 저장 후(:wq), 터미널에서 source ~/.zshrc를 입력하여 설정을 즉시 적용합니다.
  5. 확인: 터미널에서 java -versionjavac 명령어가 자바 1.8 버전을 잘 가리키는지 확인합니다.

③ LINUX (리눅스 - bash 기준)

  1. 터미널을 엽니다.
  2. vi ~/.bashrc 명령어로 파일을 엽니다.
  3. 파일 맨 아래에 다음 내용을 추가합니다 (JDK 실제 설치 경로 입력):
    • export JAVA_HOME=/usr/lib/jvm/jdk-8-oracle (예시 경로)
    • export PATH=$JAVA_HOME/bin:$PATH
  4. 저장 후, 터미널에서 source ~/.bashrc를 입력하여 설정을 적용합니다.
  5. 확인: 터미널에서 java -versionjavac 명령어를 확인합니다.

4단계: 💻 OS별 IDE (STS 4) 실행 방법

환경 변수까지 세팅을 끝마쳤다면, 이제 우리가 코딩할 무대인 STS 4를 켜볼 차례입니다.

  • WINDOWS: STS 압축을 푼 폴더에서 SpringToolSuite4.exe 파일을 더블 클릭하여 실행합니다.
  • MACOS: STS 압축을 풀고 애플리케이션(Applications) 폴더로 이동시킨 후, SpringToolSuite4.app 아이콘을 클릭하여 실행합니다.
  • LINUX: 터미널에서 STS 압축을 푼 폴더로 이동한 후, ./SpringToolSuite4 커맨드를 입력하여 실행합니다.

5단계: HelloWorld를 위한 스프링 부트 파일 구조

스프링 부트는 규격화된 완성차와 같아서 정해진 위치에 파일이 들어가야 똑똑하게 작동합니다. 우리는 가장 대중적인 빌드 도구인 Maven을 기준으로 프로젝트의 뼈대를 잡겠습니다. 프로젝트를 생성하거나 불러오면 아래와 같은 핵심 구조를 보게 됩니다.

📂 banana-helloworld (프로젝트 루트 폴더)
├── 📄 pom.xml                    <-- [핵심] 프로젝트의 설계도. 스프링 부트 버전, 라이브러리를 정의합니다.
└── 📂 src
    └── 📂 main
        ├── 📂 java               <-- [핵심] 실제 자바 소스 코드가 들어가는 청정 구역입니다.
        │   └── 📂 com
        │       └── 📂 talkit
        │           └── 📂 banana   <-- 우리의 '패키지' 이름입니다.
        │               ├── 📄 BananaApplication.java  <-- [핵심] 프로그램의 시작점. 스프링 부트를 켜는 스위치입니다.
        │               └── 📄 HelloController.java   <-- [핵심] 웹 요청을 받아 "HelloWorld"를 돌려주는 컨트롤러입니다.
        └── 📂 resources          <-- [핵심] 설정 파일이나 이미지 등이 들어갑니다.
            └── 📄 application.properties <-- 스프링 부트의 상세 설정을 적는 곳입니다. (이번엔 비워둡니다.)

6단계: 구조에 따른 핵심 소스 코드 작성

이제 정해진 파일 위치에 실제 생명력(코드)을 불어넣어 줄 차례입니다. 총 3개의 핵심 파일을 작성합니다.
① 📄 pom.xml: 프로젝트의 설계도 (Java 1.8 & Boot 2.7 설정)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="[http://maven.apache.org/POM/4.0.0](http://maven.apache.org/POM/4.0.0)" xmlns:xsi="[http://www.w3.org/2001/XMLSchema-instance](http://www.w3.org/2001/XMLSchema-instance)"
    xsi:schemaLocation="[http://maven.apache.org/POM/4.0.0](http://maven.apache.org/POM/4.0.0) [https://maven.apache.org/xsd/maven-maven-4.0.0.xsd](https://maven.apache.org/xsd/maven-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/> 
    </parent>

    <groupId>com.talkit</groupId>
    <artifactId>banana-helloworld</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>banana-helloworld</name>
    <description>Banana Hello World for Java 1.8</description>

    <properties>
        <java.version>1.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>

② 📄 BananaApplication.java: 프로그램의 시작점 (메인 스위치)

package com.talkit.banana;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

// [핵심] 이 클래스가 스프링 부트의 구성이자 시작점임을 알리는 마법의 어노테이션입니다.
@SpringBootApplication
public class BananaApplication {
    public static void main(String[] args) {
        // [핵심] 실제 내장 서버를 올리고 스프링 부트를 가동하는 메인 코드입니다.
        SpringApplication.run(BananaApplication.java, args);
    }
}

③ 📄 HelloController.java: 웹 요청을 처리하는 컨트롤러

package com.talkit.banana;

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

// [핵심] 이 클래스가 웹 요청을 받아 문자열 데이터를 브라우저에 전송하는 컨트롤러임을 명시합니다.
@RestController
public class HelloController {

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

7단계: STS 4에서 대시보드로 프로젝트 구동하기

이제 모든 코드가 준비되었습니다! 우리가 장착한 STS 4의 가장 큰 무기인 '부트 대시보드'를 활용하여 아주 편안하게 시동을 걸어보겠습니다.
① 프로젝트 불러오기 (Import)
1. STS 4를 실행하고 상단 메뉴에서 File -> Import...를 클릭합니다.
2. Maven 폴더 아래의 Existing Maven Projects를 선택하고 Next를 누릅니다.
3. Root Directory 옆의 Browse... 버튼을 눌러 우리가 코드를 작성해 둔 banana-helloworld 폴더를 선택합니다.
4. 중간 목록에 pom.xml 파일이 잘 체크되었는지 확인하고 Finish를 누릅니다.
5. STS 우측 하단에 인터넷에서 필요한 메이븐 빌드 라이브러리를 다운로드하는 게이지가 지나갑니다. 다운로드가 끝날 때까지 잠시만 기다려 주세요.
② 대시보드로 시동 걸기 (Run)
1. 프로젝트 빌드가 완료되면 STS 화면의 Boot Dashboard 탭을 클릭합니다.
2. local 항목을 펼쳐보면 방금 불러온 우리의 banana-helloworld 프로젝트가 예쁘게 떠 있을 것입니다.
3. 프로젝트 이름을 마우스 우클릭한 뒤, (Re)start (또는 상단의 초록색 재생 버튼 아이콘)를 클릭합니다.
③ 브라우저에서 감격의 결과 확인하기
1. STS 중앙 하단의 Console 탭에 로그가 시원하게 올라갑니다. 마지막 행에 "Started BananaApplication in X.XXX seconds"라는 문구가 나타나면 서버 구동 성공입니다!
2. 크롬 등 사용하시는 웹 브라우저를 엽니다.
3. 주소창에 http://localhost:8080을 정확히 입력하고 엔터를 탁! 칩니다.
4. 화면에 우리가 컨트롤러에 적어두었던 바나나 환영 인사가 멋지게 출력되는 것을 볼 수 있습니다!

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

🏁 가야태자의 정리 및 복습 팁

드디어 우리는 Java 1.8이라는 전통적인 환경 위에서 스프링 부트 2.7 완성차를 조립하고 첫 주행(HelloWorld)까지 훌륭하게 마쳤습니다!
스프링 부트 개발을 배울 때 가장 좋은 복습 방법은 각 파일이 왜 이 자리에 있어야 하고, 어노테이션(@)이 무슨 역할을 하는지 구조와 코드를 매칭하며 눈으로 짚어보는 것입니다. 이 기초 체력이 굳건해야 복잡한 비즈니스 로직을 짤 때 흔들리지 않습니다.
다음 시간에는 이 띄워놓은 HelloWorld 웹 페이지 위에 실제 데이터를 예쁘게 주고받는 더 흥미진진한 백엔드 이야기로 찾아오겠습니다.
실습 도중 에러가 나거나 막히는 점이 있다면 언제든 댓글 창에 질문을 남겨주세요. 같이 해결해 봅시다! 😊

실제로 실습을 진행하고 싶습 파트는 또 글을 적어 보겠습니다.

반응형
반응형

42673393-2CB9-4617-A738-607E5C9314BA.png

[테크/개발] 자바 백엔드의 날개, Spring Boot 개발 환경(IDE) 완벽 가이드: 나에게 맞는 도구는?

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

이번에 여러가지 자바 역사를 살펴봤고 스프링 부트의 역사와 개념도 알아봤는데, 이제 개발 환경을 꾸려볼려고 합니다. 이때 사용할 수 있는 개발 환경이 여러가지가 있는데 이 개발 환경들을 어떻게 구성할지에 대한 이야기를 해보고자 합니다.

스프링 부트(Spring Boot)는 과거의 복잡한 설정을 자동화해 주어 개발 생산성을 극대화해 주지만, 우리가 어떤 도구(IDE)를 손에 쥐느냐에 따라 그 개발의 '편안함'과 '작업 속도'는 천차만별로 달라집니다. 현재 자바 생태계에서 선택할 수 있는 대표적인 개발 환경들의 특징, 지원 OS, 그리고 가장 중요한 유료/무료 여부와 공식 참조 링크를 낱낱이 비교해 드리겠습니다.


🚀 [특화 섹션] 인텔리제이 커뮤니티(무료) vs 얼티밋(유료) 집중 비교

많은 초보 개발자분들이 *"인텔리제이가 대세라고 해서 다운받으려고 보니 얼티밋 버전은 너무 비싸요. 무료인 커뮤니티 버전으로 스프링 부트 개발해도 괜찮을까요?"*라는 질문을 던지십니다.

결론부터 말씀드리면 "개발은 가능하지만, 얼티밋에 비해 많은 수고로움(수동 작업)이 필요하다"입니다. 두 버전이 스프링 부트 개발 환경에서 어떤 차이를 보이는지 핵심만 비교해 드립니다.

1) 프로젝트 생성 방식의 차이

  • Ultimate (유료): IDE 내부에서 Spring Initializr를 곧바로 호출하여 몇 번의 클릭만으로 스프링 부트 프로젝트를 뚝딱 생성할 수 있습니다.
  • Community (무료): 내장 프로젝트 생성기에서 스프링 부트를 공식 지원하지 않습니다. 따라서 웹 브라우저를 켜고 스프링 공식 스타터 웹사이트(start.spring.io)에 접속하여 프로젝트를 생성한 뒤, 압축을 풀고 커뮤니티 버전에서 Import(열기)하는 번거로운 과정을 거쳐야 합니다.

2) 애플리케이션 구동 및 모니터링 (부트 대시보드)

  • Ultimate (유료): 전용 'Run Dashboard(Services)'가 존재하여 내장 톰캣 서버 제어, 액추에이터(Actuator) 연동 데이터 분석, 현재 활성화된 프로필(Profile) 변경 등을 GUI 환경에서 직관적으로 관리합니다.
  • Community (무료): 스프링 부트 전용 대시보드가 없습니다. 일반 자바 메인 클래스를 실행하듯 Application.java 파일을 직접 찾아 우클릭 후 Run을 실행해야 합니다. 여러 서버를 동시에 띄우거나 관리할 때 다소 직관성이 떨어집니다.

3) 코드 어시스트 및 설정 파일(Application.properties / yaml) 자동 완성

  • Ultimate (유료): 스프링 부트의 설정 파일들을 완벽하게 인식합니다. 예를 들어 server.port나 데이터베이스 연결 설정을 타이핑할 때 지능적인 자동 완성을 제공하고, 오타가 나면 경고해 줍니다. 또한 컨트롤러와 매핑된 URL 엔드포인트를 모아서 보는 전용 도구도 제공합니다.
  • Community (무료): 텍스트 기반의 단순 자동 완성만 지원하거나 아예 지원하지 않는 경우가 많아, 설정 파일의 키값을 개발자가 직접 공식 문서를 보며 타이핑해야 하므로 오타로 인한 삽질(?) 가능성이 커집니다.

💡 가야태자의 커뮤니티 버전 활용 팁: > 비용 부담 때문에 반드시 인텔리제이 커뮤니티 버전을 써야 한다면, 마켓플레이스에서 'Spring Boot Helper' 같은 서드파티 플러그인을 찾아서 수동으로 설치해 보세요. 완벽하진 않지만 얼티밋 버전의 갈증을 조금이나마 해소할 수 있습니다. 다만, 무료 환경에서 편안한 스프링 부트 개발을 원하신다면 커뮤니티 버전보다는 차라리 아래의 STS 4VS Code가 기능적으로 더 쾌적할 수 있습니다.


1. 실무 트렌드의 절대 강자: IntelliJ IDEA (JetBrains)

현재 전 세계 자바 및 스프링 부트 개발자들이 가장 사랑하고, 실무 표준으로 자리 잡은 통합개발환경입니다.

  • 지원 OS: Windows, macOS, Linux
  • 비용 (유료/무료): 하이브리드 (Community 버전: 무료 / Ultimate 버전: 유료)
    • 개인 및 기업에서 무료로 쓸 수 있는 커뮤니티 버전이 있지만, 스프링 부트 전용 핵심 편의 기능들은 연간 구독 형태의 Ultimate(유료) 버전에 집중되어 있습니다.
  • Spring Boot 개발 편안함: * Ultimate 버전: ⭐⭐⭐⭐⭐ (최상 - 돈값을 톡톡히 하는 완벽한 빌트인 인프라)
    • Community 버전: ⭐⭐⭐☆☆ (보통 - 자바 코딩은 훌륭하나 스프링 특화 기능이 빠져 수동 작업 필요)

2. 스프링 공식 전용 도구: STS (Spring Tools 4)

스프링의 친정인 VMware(Tanzu)에서 전통의 이클립스(Eclipse)를 기반으로 스프링 개발에 딱 맞게 최적화하여 내놓은 공식 전용 IDE입니다.

  • 지원 OS: Windows, macOS, Linux
  • 비용 (유료/무료): 100% 무료 (오픈소스)
  • Spring Boot 개발 편안함: ⭐⭐⭐⭐☆ (우수)
    • 오직 '스프링 및 스프링 부트 개발'만을 타깃으로 커스텀 되었기 때문에, 무료 도구 중에서는 최고의 안정성과 편의성을 자랑합니다.
    • 화면 우측 하단의 '부트 대시보드(Boot Dashboard)'를 통해 여러 개의 스프링 부트 애플리케이션을 직관적으로 켜고 끌 수 있으며, 런타임 상태를 쉽게 모니터링할 수 있습니다. IntelliJ Ultimate의 유료 기능 중 상당수를 무료로 누릴 수 있는 훌륭한 대안입니다.
  • 공식 다운로드 및 사용법 링크: Spring Tools 4 공식 홈페이지 및 에코시스템 가이드

3. 초경량과 커스텀의 매력: VS Code (Visual Studio Code)

마이크로소프트에서 개발한 초경량 소스코드 에디터로, 웹 프론트엔드를 넘어 백엔드 영역까지 생태계를 급격히 확장하고 있습니다.

  • 지원 OS: Windows, macOS, Linux, Web(웹 브라우저)
  • 비용 (유료/무료): 100% 무료 (오픈소스)
  • Spring Boot 개발 편안함: ⭐⭐⭐⭐☆ (양호)
    • 마켓플레이스에서 'Spring Boot Extension Pack' 확장 플러그인을 설치하면 프로젝트 생성부터 구동까지 놀라울 정도로 유려하게 지원합니다.
    • IntelliJ나 Eclipse 계열에 비해 압도적으로 가볍고 실행 속도가 빠릅니다. 메모리를 적게 차지하므로, 사양이 다소 낮은 노트북 환경이나 가벼운 코딩 환경을 선호하는 개발자들에게 최고의 편안함을 선호하는 대안으로 각광받고 있습니다.
  • 공식 확장팩 안내 링크: VS Code 공식 가이드 - Spring Boot 개발 환경 구축 및 확장팩 안내

4. 전통의 아키텍처: Eclipse (이클립스)

자바의 역사와 함께 숨 쉬어 온 전통의 오픈소스 대형 IDE입니다.

  • 지원 OS: Windows, macOS, Linux
  • 비용 (유료/무료): 100% 무료 (오픈소스)
  • Spring Boot 개발 편안함: ⭐⭐⭐☆☆ (보통)
    • 순수 이클립스에 STS 플러그인을 수동으로 설치하여 스프링 부트를 개발할 수 있습니다.
    • 하지만 플러그인 간의 버전 충돌 가능성이 있고, 과거 무거운 XML 방식의 잔재가 남아있어 초기 세팅이 다소 번거롭습니다. 만약 이클립스 기반의 개발 환경을 선호하신다면, 순수 이클립스보다는 앞서 소개해 드린 STS(Spring Tools 4)를 다운로드하여 곧바로 사용하시는 것이 정신 건강에 훨씬 이롭습니다.

5. 그 외의 틈새 선택지들

  • NetBeans (Apache): Windows/Mac/Linux 지원, 무료. 자바 표준 스펙(Jakarta EE)엔 강하나 스프링 부트 전용 플러그인 생태계가 빈약하여 추천도가 떨어집니다. (편안함: ⭐⭐☆☆☆)
  • Fleet (JetBrains): Windows/Mac/Linux 지원, 현재 프리뷰(무료) 진행 중. VS Code처럼 가벼우면서도 IntelliJ의 스마트 코드 분석 엔진을 가져와 쓸 수 있는 젯브레인의 차세대 경량 에디터입니다. (편안함: ⭐⭐⭐☆☆)
  • 클라우드 IDE (구름IDE, GitHub Codespaces 등): OS 무관, 기본 무료+유료 요금제. 웹 브라우저만 있으면 가상 컨테이너에서 스프링 부트를 띄울 수 있어 태블릿(아이패드 등) 코딩이나 외부 강의·실습용 환경 구성에 매우 편안합니다. (편안함: ⭐⭐⭐☆☆)

🏆 한눈에 보는 요약 및 추천 가이드

IDE 명 주요 추천 대상 비용 (개인/기업) Spring Boot 개발 편안함 정도
IntelliJ (Ultimate) 실무/상용 서비스 개발, 최고의 생산성을 위해 돈을 지불할 용의가 있는 분 유료 (구독제) 🔴 최상 (가장 스마트하고 편리함)
STS 4 비용 부담 없이 스프링 공식 전용 도구의 안정적인 기능을 쓰고 싶을 때 무료 (오픈소스) 🟢 우수 (무료 도구 중 가장 직관적)
VS Code 사양이 낮은 PC, 가볍고 빠른 기동성과 스타일리시한 코딩 환경 선호 무료 (오픈소스) 🟡 양호 (쾌적하고 가벼운 확장성)
IntelliJ (Community) 인텔리제이의 단축키와 코드 분석 엔진을 무료로 부드럽게 쓰고 싶을 때 무료 (오픈소스) 🟡 양호 (자바 코딩은 좋으나 스프링 수동 세팅 필요)
Eclipse 기존 금융권/공공기관의 오래된 레거시 시스템 유지보수 환경 무료 (오픈소스) ⚪ 보통 (직접 수동 플러그인 세팅 필요)

🏁 가야태자의 결론: 나에게 맞는 환경 구성은?

스프링 부트 개발 환경을 구성할 때의 핵심은 "자신의 장비 사양""비용 투자 여부"입니다.

  1. 만약 장비가 훌륭하고 생산성을 위해 비용을 투자할 의향이 있다면 IntelliJ Ultimate(유료) 환경이 최고의 정답입니다.
  2. 인텔리제이 특유의 UI와 코드 리팩토링 능력을 사랑하지만 비용이 부담된다면 조금 번거롭더라도 IntelliJ Community(무료) 버전에 수동 플러그인을 세팅해 볼 수 있습니다.
  3. 완전히 무료이면서도 장황한 수동 세팅 없이 스프링 부트 전용 기능을 안정적으로 쓰고 싶다면 STS 4가 가장 합리적인 선택입니다.
  4. 마지막으로, 컴퓨터 사양이 아쉽거나 경량화된 환경을 원한다면 VS Code 조합을 추천해 드립니다.

여러분은 어떤 IDE로 스프링 부트의 첫 발을 내딛고 싶으신가요? 여러분의 PC 환경과 목적에 맞는 최적의 환경을 꾸리시길 바라며, 다음에는 실제 프로젝트를 생성하고 구동하는 이야기로 찾아오겠습니다.

궁금한 점이나 의견이 있으시다면 언제든 댓글로 소통해 주세요! 😊

반응형
반응형

image.png

[테크/회고] 자바 웹 프레임워크 연대기: 스트럿츠(Struts)의 왕좌와 스프링(Spring)의 대혁명

자바(Java) 백엔드 생태계를 주도해 온 프레임워크의 역사를 되짚어보면, 이는 단순히 기술의 변화가 아니라 "복잡성과의 처절한 사투", 그리고 "개발자 중심의 생산성 향상"이라는 거대한 흐름의 연속이었습니다.

오늘날 자바 개발자들에게 공기처럼 당연한 존재가 된 Spring BootSpring MVC가 있기까지, 자바 웹 생태계의 패러다임을 바꾸었던 두 주인공 '스트럿츠(Struts)''스프링(Spring)'의 흥망성쇠, 그리고 자바의 표준이 된 스프링 생태계의 거대한 진화 과정을 한눈에 정리해 봅니다.


1. 태동기: EJB의 독점과 스파게티 코드의 어둠 (2000년대 초)

초기 대규모 자바 엔터프라이즈 환경은 썬 마이크로시스템즈(Sun Microsystems)가 주도한 J2EE 규격과 EJB(Enterprise JavaBeans)가 지배하고 있었습니다. 분산 환경과 트랜잭션을 컨테이너가 알아서 제어해 준다는 거창한 명분이 있었지만, 현실은 처참했습니다. 코드 한 줄을 고치거나 테스트하려면 수많은 인터페이스를 상속받아야 했고, 무거운 WAS(웹 애플리케이션 서버)를 매번 재부팅해야 했습니다. "자바의 본질인 객체지향(POJO)을 잃어버렸다"는 혹평이 쏟아졌습니다.

덮친 데 덮친 격으로 당시 웹 화면을 담당하던 JSP 영역은 HTML, 자바스크립트, 비즈니스 로직, 데이터베이스 쿼리까지 한 파일에 뒤섞여 있는 이른바 '모델 1' 방식이 흔했습니다. 조금만 프로젝트가 커져도 유지보수가 불가능한 스파게티 코드가 되기 일쑤였습니다.


2. 스트럿츠(Struts)의 등장: 최초의 웹 MVC 표준과 황금기 (2000년대 초중반)

이 어둠 속에서 자바 웹 구원의 투수로 등판한 것이 바로 아파치 재단의 스트럿츠(Struts)였습니다. 2001년 출시된 스트럿츠는 스파게티 코드처럼 엉켜있던 웹 개발 프로세스에 '모델 2 MVC(Model-View-Controller) 패러다임'을 확고하게 심어주었습니다.

  • 화면(View), 비즈니스 로직(Model), 제어 흐름(Controller)을 명확하게 분리.
  • 개발자들이 역할 분담을 할 수 있는 구조적 명확성 제공.

스트럿츠는 출시 직후 폭발적인 인기를 끌며 2003년부터 2007년 무렵까지 전 세계 자바 웹 시장을 사실상 지배했습니다. 당시 한국의 초기 대형 공공기관 프로젝트나 대기업 시스템 역시 대부분 스트럿츠를 뼈대로 구축되었습니다. 자바 웹 개발자들에게 "웹 앱은 무조건 MVC로 짜야 한다"는 공식을 각인시킨 주역이 바로 스트럿츠입니다.


3. 스프링(Spring)의 탄생: 오픈소스 혁명과 '공존'의 시대 (2000년대 중반)

스트럿츠가 앞단(웹 화면 제어)을 평정하고 있을 때, 뒤 영역(비즈니스 로직 및 객체 관리)에서는 또 다른 혁명이 시작되고 있었습니다. 2004년, EJB의 지독한 복잡성에 분노한 로드 존슨(Rod Johnson)을 필두로 스프링 프레임워크(Spring Framework) 1.0이 세상에 나왔습니다.

스프링은 무거운 컨테이너 없이도 엔터프라이즈 기능을 수행할 수 있도록 IoC/DI(의존성 주입)AOP(관점 지향 프로그래밍)를 전면에 내세웠습니다. 기술 인프라와 비즈니스 로직을 완벽히 분리하여 "다시 순수한 자바(POJO)로 돌아가자"고 외친 것입니다.

재미있는 점은, 초기 스프링은 스트럿츠의 경쟁자가 아니라 '가장 완벽한 파트너'였다는 사실입니다. 2000년대 중반 자바 웹 진영의 가장 트렌디하고 강력한 '꿀조합' 스택은 다음과 같았습니다.

  • 웹 화면 및 요청 제어(MVC): Struts
  • 비즈니스 로직 및 트랜잭션 관리(DI/AOP): Spring
  • 데이터베이스 매핑(SQL 매퍼): iBATIS (현 MyBatis)

웹 요청을 받는 앞문(Controller)은 스트럿츠가 열고, 문을 열고 들어온 데이터를 처리하는 알맹이 객체 관리는 스프링이 맡는 식으로 두 프레임워크는 아름답게 공존했습니다.


4. 세대교체: '공존'에서 '대체'로, 스프링의 왕좌 장악 (2000년대 후반)

영원할 것 같았던 스트럿츠와 스프링의 동맹은 2000년대 후반으로 넘어가며 균열이 가기 시작했고, 결국 완전한 세대교체로 이어지게 됩니다. 여기에는 몇 가지 결정적인 이유가 있었습니다.

  • Spring MVC의 대두: 스프링 진영에서 자체 웹 프레임워크인 Spring MVC를 고도화(Spring 2.5 ~ 3.0)하면서 굳이 앞단에 스트럿츠를 따로 연동할 필요가 없어졌습니다. 스프링 컨테이너와 완벽하게 네이티브로 결합하는 Spring MVC는 스트럿츠보다 훨씬 유연하고 강력했습니다.
  • 설정 지옥(XML)의 한계: 스트럿츠는 화면 하나나 액션 하나를 추가할 때마다 거대한 struts-config.xml 설정을 매번 장황하게 수정해야 하는 번거로움이 있었습니다.
  • 결정타가 된 보안 취약점 사태: 스트럿츠가 스트럿츠2(Struts2)로 버전 업을 치는 과정에서, 원격으로 코드를 실행할 수 있는 치명적인 보안 취약점(CVE)이 주기적으로 발생했습니다. 금융권과 대기업 시스템이 해커들의 표적이 되자, 안정성이 최우선인 기업들은 대대적으로 스트럿츠를 버리고 스프링 생태계로 탈출하기 시작했습니다.

5. 스프링 생태계의 거대한 양대 축: Spring Framework vs Spring Boot

스트럿츠를 흡수하고 자바 생태계를 통일한 스프링은 거대해진 몸집만큼 강력한 진화를 거듭했습니다. 현대 자바 백엔드는 크게 인프라와 기술 표준을 정의하는 'Spring Framework'와, 이를 기반으로 빠른 생산성을 제공하는 'Spring Boot'의 두 축으로 움직입니다. 각 프레임워크가 걸어온 핵심 버전을 브리핑합니다.

🧱 Spring Framework의 진화 (1.0에서 6.0까지)

  • 1.0 (2004): 순수 자바 객체(POJO) 기반의 DI/AOP 개념 증명. 무거운 XML 설정 중심.
  • 2.0 ~ 3.0 (2006~2009): 웹 계층을 위한 Spring MVC의 본격적인 강화. 점차 XML을 벗어나 @Component, @Autowired 같은 자바 어노테이션(Annotation) 기반 설정의 표준 도입.
  • 4.0 (2013): 자바 8(Java 8) 지원 개시. 람다식과 새로운 날짜 API 등을 수용하며 현대적 자바 문법과의 정합성 확보.
  • 5.0 (2017): 대규모 트래픽 처리를 위한 비동기·논블로킹 리액티브 프로그래밍 스택인 Spring WebFlux 탑재.
  • 6.0 (2022~현재): 자바 17을 최소 요구 버전으로 지정하여 구조적 최적화 단행. 가상 스레드(Project Loom) 연동 및 클라우드 환경을 위한 GraalVM 네이티브 이미지 빌드 공식 지원.

🚀 Spring Boot의 진화 (1.0에서 4.5까지)

  • 1.0 (2014): 수많은 XML/자바 설정에 지친 개발자들을 구원하기 위해 등장. "설정보다는 관례(Convention over Configuration)"를 모토로 내장 톰캣(Tomcat)과 자동 설정(starter) 개념 최초 도입.
  • 2.0 (2018): Spring Framework 5.0 기반으로 업그레이드되면서, 리액티브 웹 스택과 새로운 모니터링 툴(Actuator) 기능 대폭 강화.
  • 3.0 (2022): 자바 17 표준 탑재 및 Spring 6 기반 리프레시. 빌드 타임에 C/C++ 프로그램처럼 바이너리를 뽑아내어 구동 속도를 밀리초(ms) 단위로 줄이는 GraalVM 네이티브 컴파일 전면 수용. 클라우드 네이티브(MSA/Serverless)의 최적화 달성.
  • 4.0 ~ 4.5 (현재): 더 고도화된 자바 최신 스펙 완벽 튜닝. 대규모 언어 모델(LLM) 연동을 위한 Spring AI 프레임워크 인프라가 코어 단에 밀접하게 내장되었으며, 가상 스레드(Virtual Thread) 최적화를 통해 리액티브 코딩 없이도 초고효율 멀티스레딩을 가볍게 구동하는 완성형 아키텍처 구축.

6. 두 프레임워크의 상관관계: 엔진과 자동차

종종 신입 개발자들이 "스프링 프레임워크와 스프링 부트 중 무엇을 공부해야 하나요?" 혹은 "부트가 나왔으니 스프링 프레임워크는 끝난 건가요?"라는 질문을 하곤 합니다. 하지만 두 기술은 대체 관계가 아닌 완벽한 상호보완적 결합 관계입니다.

쉽게 비유하자면, 스프링 프레임워크는 '고성능 자동차 엔진'이고, 스프링 부트는 그 엔진을 얹고 바퀴, 시트, 내비게이션까지 완벽하게 조립해 둔 '완성차'입니다.

  • Spring Boot: 편리한 완성차 (내장 톰캣, 자동 설정, 자동 버전 관리)
  • Spring Framework: 핵심 심장 엔진 (DI/AOP Core, Spring MVC, WebFlux 테크놀로지)

스프링 부트는 독자적인 프레임워크가 아닙니다. 내부를 뜯어보면 결국 스프링 프레임워크가 핵심 심장(Core)으로 돌고 있습니다. 과거에는 엔진(Spring Framework)만 덜렁 주어졌기 때문에 개발자가 직접 차체(Tomcat 서버)를 구해서 용접하고, 연료 공급 장치(XML 파일 수백 줄)를 직접 커스텀 조립해야 했습니다.

반면, 스프링 부트는 개발자가 Boot를 실행하는 순간, 뒤편에서 스프링 프레임워크의 DI/AOP 엔진을 깨우고 필요한 라이브러리들을 관례에 맞게 알아서 조립해 줍니다. 결국 부트를 깊고 단단하게 쓴다는 것은 그 내부에서 돌아가는 스프링 프레임워크의 사상을 완벽히 이해하는 것과 같습니다.


🏁 마치며

  • 스트럿츠(Struts)는 무질서하던 자바 웹 개발에 최초로 MVC 패턴의 규격을 제시하며 웹 제어의 대중화를 이끈 선구자였습니다.
  • 스프링(Spring Framework)은 EJB의 무거움에 반대하며 순수 자바(POJO) 정신을 깨웠고, 기술을 유연하게 통합하는 포용력으로 시작해 웹 영역(Spring MVC)까지 완벽히 흡수하며 생태계를 통일했습니다.
  • 스프링 부트(Spring Boot)는 거대해진 스프링 엔진을 개발자들이 단 몇 초 만에 도로 위로 끌고 나갈 수 있게 완성차 형태로 포장해 준 혁신이었습니다.

현재 스트럿츠는 오래된 레거시 시스템의 유지보수 단계에서나 볼 수 있는 '살아있는 화석'이 되었지만, 그가 남긴 MVC 패러다임은 여전히 스프링의 심장 속에 살아 숨 쉬고 있습니다. 세월을 관통하며 다듬어진 이 견고한 생태계 덕분에, 현대의 우리는 인프라 설정에 고통받지 않고 오롯이 비즈니스 로직에만 집중할 수 있는 최고의 개발 풍요를 누리고 있습니다.

이전글

[Java 보안] 오픈 JDK 벤더별 EOS 비교 및 자바 보안 패치의 중요성 / https://www.steemit.com/kr/@talkit/java-jdk-eos--xz1g03

[Java와 AI] 자바가 AI 시대의 주역이 되지 못한 이유와 새로운 반격 / https://www.steemit.com/java/@talkit/java-ai-ai--tfzrzd

[개발 상식] 1960년대 기계어부터 현대 AI 기반 코드 최적화까지 한눈에 보기 / https://www.steemit.com/kr/@talkit/ai--px1egt

[Java] 자바 역사 가이드: SE와 EE(Jakarta EE) 통합 타임라인과 대전환 비화 / https://www.steemit.com/kr/@talkit/java-se-eejakarta-ee--p5j85z

[Java] 자바의 탄생 배경과 역사, C언어와의 차이점 총정리 / https://www.steemit.com/kr/@talkit/java-c--ji3f9j

반응형
반응형

D63B70A7-6A57-4448-AB70-C017A9D6DCA0.png

[Java 보안] Log4j 사태로 보는 패치의 중요성, 오픈 JDK 벤더별 EOS 비교 및 오라클의 상용화 비화

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

최근 자바를 다시 복습하면서, 시스템의 안정성을 책임지는 '보안 업데이트'의 중요성을 격하게 절감하고 있습니다. 전 세계 웹과 대규모 기업용 엔터프라이즈 시스템의 뼈대를 이루는 Java 환경에서 보안 패치는 단순한 버전 업그레이드가 아닌, 서비스의 생명줄과 같습니다.

오늘 포스팅에서는 전 세계 IT 백엔드를 뒤흔들었던 Log4j 사태를 통해 왜 우리가 보안 업데이트에 민감해야 하는지 알아보고, Oracle의 공식 JDK와 Eclipse 재단, Red Hat, Azul Systems 등 다양한 진영의 오픈 JDK가 제공하는 보안 업데이트 종료(EOS) 일자를 명확하게 비교해 보겠습니다. 더불어 오라클이 자바 업데이트를 상용(구독 모델)으로 전환한 배경과 비화까지 함께 정리해 드립니다.


1. Java 보안 업데이트가 왜 중요한가: Log4j 사태의 교훈

Java 환경에서 보안 업데이트가 기업의 생존과 직결된다는 것을 증명한 가장 대표적인 사건이 바로 2021년 말 발생한 Log4j 취약점 사태(Log4Shell)입니다. Log4j는 거의 모든 Java 기반 애플리케이션과 대형 기업 웹 서버에서 로그를 기록하기 위해 공통으로 사용하는 핵심 라이브러리였습니다.

이 라이브러리에서 발견된 취약점은 공격자가 서버에 원격으로 접속해 악성 코드를 무조건 실행할 수 있는 원격 코드 실행(RCE) 취약점이었습니다. 해커가 마음만 먹으면 기업의 핵심 DB를 탈취하거나 시스템을 마비시킬 수 있는, 보안 등급 최악의 치명적인 약점이었습니다.

당시 전 세계 수많은 대기업과 금융권의 개발자들이 이 약점을 막기 위해 최신 보안 버전으로 긴급 업데이트 패치를 적용하느라 사상 초유의 비상사태를 겪었습니다. 만약 사용 중인 JDK나 라이브러리의 보안 업데이트 지원이 이미 종료된 상태였다면, 기업들은 이 무시무시한 취약점을 알고도 방어막을 치지 못해 고스란히 무방비로 당했을 것입니다.

이처럼 알려진 보안 취약점(CVE)을 빠르게 봉쇄하고 시스템의 대외 신뢰도를 유지하기 위해서, 기업이 어떤 JDK를 사용하든 공식적인 보안 업데이트 지원 기간(LTS)을 명확히 확인하고 추적하는 것은 필수적입니다.


2. 주요 진영별 Java LTS 버전 보안 업데이트 종료(EOS) 비교

오라클이 제공하는 무료 OpenJDK 빌드는 새로운 메이저 버전이 출시되면 이전 버전의 무료 지원을 몇 개월 내로 빠르게 중단합니다. 반면 기업용 시스템의 장기 안정성을 위해 오픈소스 커뮤니티와 다른 전문 벤더사들은 자체적인 LTS(Long-Term Support) 일정을 길게 확보해 두고 있습니다.

각 진영의 공식 가이드라인을 기반으로 정리한 버전별 최소 지원 종료(End of Support) 마일스톤입니다.

Java LTS 버전 Oracle OpenJDK (무료 빌드) Eclipse Adoptium (Temurin) [1] Red Hat OpenJDK [2] Azul Zulu (Core 기준) [3]
Java 8 지원 종료 최소 2030년 12월까지 완전지원 종료: 2026년 11월 30일
ELS-1 종료: 2030년 12월 31일
2030년 12월까지
Java 11 지원 종료 최소 2027년 10월까지 완전지원 종료 (2024년 10월 31일)
ELS-1 종료: 2027년 10월 31일
2032년 1월까지
Java 17 지원 종료 최소 2027년 10월까지 완전지원 종료: 2027년 12월 31일 2029년 9월까지
Java 21 2026년 9월까지 (예정) 최소 2029년 12월까지 완전지원 종료: 2029년 12월 31일 2031년 9월까지

3. 오라클은 왜 자바 업데이트를 상용(유료)으로 전환했는가?

자바의 소스 코드 자체는 오픈소스(OpenJDK) 프로토콜로 풀려있지만, 오라클은 기업들이 실제 운영 서버에서 가장 신뢰하며 사용하는 자사 브랜드의 Oracle JDK 기술 지원을 유료화(상용 전환)했습니다. 여기에는 오라클의 철저한 비즈니스 수익 모델 체질 개선 전략이 숨어 있습니다.

① 상표권의 독점과 기술 지원의 자산화

오라클은 과거 선 마이크로시스템즈를 인수하면서 자바의 소스 코드는 커뮤니티에 기증(Jakarta EE 등)했으나, 'Java'라는 브랜드 상표권과 독점 기술 스펙은 끝까지 유지했습니다. 즉, '가장 순수하고 최적화된 오라클의 자바 기술 지원과 긴급 패치를 받고 싶다면 정당한 비용을 지불하라'는 비즈니스적 판단입니다.

② 라이선스에서 구독(Subscription) 모델로의 체질 개선

오라클은 과거 일회성으로 소프트웨어 라이선스를 판매하던 방식에서 완전히 탈피하여, 매달 서버 혹은 프로세서 수(또는 전사 직원 수) 기준으로 비용을 청구하는 'Java SE Subscription' 모델을 정착시켰습니다. 클라우드 시대에 인프라의 핵심인 자바 보안 패치를 정기적으로 공급하는 행위 자체를 거대한 고정 구독 수익원(Cash Cow)으로 만든 것입니다.

결국 장기적인 보안 거버넌스와 면책 조항이 필수적인 글로벌 대기업이나 대형 금융권들이 비용을 지불하더라도 오라클의 밀착 기술 지원을 선택할 수밖에 없도록 비즈니스 환경을 설계한 결과입니다.


4. 요약 및 시사점

자바 생태계에서 보안 업데이트는 인프라의 생명줄과 같습니다. 오라클이 자사 공식 JDK를 상용 구독 모델로 전환하며 장벽을 세우자, 시장은 오히려 Eclipse Adoptium이나 Red Hat, Azul 같은 대체 오픈 JDK 진영의 무상 장기 지원(LTS)을 적극적으로 수용하는 방향으로 건강하게 파편화되었습니다.

따라서 개발자와 아키텍트는 서비스의 특성에 맞춰 오라클의 유료 구독 모델을 선택할지, 혹은 무료로 장기 지원을 제공하는 타 진영의 오픈 JDK로 마이그레이션할지 명확한 EOS 로드맵을 바탕으로 인프라 이주 전략을 세워야 할 것입니다.


💡 각주: Red Hat의 Full Support와 ELS-1 안내

  • 완전지원 종료(End of Full Support): 레드햇의 일반 서브스크립션(구독) 고객 모두에게 무상으로 정기적인 보안 패치와 버그 수정 업데이트를 제공하는 마감일입니다. 만약 이 기간이 종료되면 일반 RHEL 가입자 대상의 무상 패치 배포가 중단됩니다. (예: OpenJDK 11은 2024년 10월 31일부로 완전지원이 종료되었습니다.)
  • ELS-1 종료(End of Extended Life Cycle Support Phase 1): 완전지원이 끝난 후, 마이그레이션 시간을 벌어야 하는 기업들을 위해 운영되는 유료 연장 보안 지원 단계입니다. 별도의 'OpenJDK ELS 서브스크립션'을 구매한 고객에 한해, 새로운 기능 추가 없이 시스템에 치명적인 영향을 미치는 핵심 보안 취약점(Critical/Important CVE) 패치만 제한적으로 백포팅하여 제공합니다.

이전글

[Java와 AI] 자바가 AI 시대의 주역이 되지 못한 이유와 새로운 반격 / https://www.steemit.com/java/@talkit/java-ai-ai--tfzrzd

[개발 상식] 1960년대 기계어부터 현대 AI 기반 코드 최적화까지 한눈에 보기 / https://www.steemit.com/kr/@talkit/ai--px1egt

[Java] 자바 역사 가이드: SE와 EE(Jakarta EE) 통합 타임라인과 대전환 비화 / https://www.steemit.com/kr/@talkit/java-se-eejakarta-ee--p5j85z

[Java] 자바의 탄생 배경과 역사, C언어와의 차이점 총정리 / https://www.steemit.com/kr/@talkit/java-c--ji3f9j


🔗 공식 홈페이지 출처 및 EOS 확인 링크

[1] [Eclipse Adoptium (Temurin) 공식 지원 로드맵]

[2] [Red Hat 고객 포털 OpenJDK 라이프 사이클 및 지원 정책]

[3] [Azul Systems Java Support Roadmap]

감사합니다.

반응형
반응형

179A819C-2B20-43E4-AF45-0CCB54AE2CB7.png

[Java와 AI] 자바가 AI 시대의 주역이 되지 못한 이유와 새로운 반격

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

요즘 Java를 다시 정리 겸 공부하고 있는데, 문득 한 가지 깊은 의문이 생겼습니다. "Java는 명실상부 웹과 기업용 시스템 시대를 지배한 대표 언어인데, 왜 정작 지금의 AI(인공지능) 시대에서는 주인공이 되지 못했을까?" 여러분도 'AI 시대의 언어'라고 하면 자바보다는 파이썬(Python)이 가장 먼저 떠오르실 텐데, 대체 어떤 기술적·인간적 배경이 이런 차이를 만들었는지 무척 궁금해졌습니다.

그래서 오늘 포스팅에서는 자바가 왜 AI의 주역 자리를 내주어야 했는지 그 이유를 날카롭게 파헤쳐 보고, 반대로 자바 진영이 AI 시대를 집어삼키기 위해 뒤에서 칼을 갈며 준비해 온 놀라운 최신 기술들과 미래 비전까지 함께 자세히 알아보겠습니다.


1. 웹/기업 시대의 절대 강자, Java

자바(Java)는 1990년대 후반 웹의 폭발적인 성장과 함께 기업용 시스템(Enterprise) 시장의 절대 강자로 자리매김했습니다. 거대하고 복잡한 금융권 인프라나 대기업의 백엔드 시스템에서 자바가 표준으로 선택된 이유는 타의 추종을 불허하는 '안정성'과 '확장성' 덕분이었습니다.

자바는 컴파일 시점에 타입을 엄격하게 검사하는 강력한 타입 시스템을 갖추고 있어, 대규모 협업 시 발생할 수 있는 휴먼 에러를 사전에 차단합니다. 또한 가상 머신(JVM) 아키텍처를 기반으로 하여 "한 번 작성하면 어디서나 실행된다"는 이식성을 보장했고, 가비지 컬렉터(GC)가 메모리를 자동으로 관리해 주어 개발자가 비즈니스 로직에만 집중할 수 있게 했습니다. 여기에 대용량 트랜잭션 처리에 특화된 Java EE(현 Jakarta EE) 스펙과 스프링(Spring) 프레임워크 생태계가 결합하면서, 자바는 수십 년간 엔터프라이즈 아키텍처의 견고한 뼈대로 군림해 왔습니다.


2. Java가 AI 시대의 주 언어가 되지 못한 이유

반면 AI와 머신러닝 시대의 주도권은 자바가 아닌 파이썬(Python)이 가져갔습니다. 여기에는 AI 학계의 독특한 인적 구성과 언어의 '타입(Type) 선언 방식'이 자아낸 결정적인 차이가 있었습니다.

초기 AI 및 데이터 과학 생태계를 구축한 주역들은 전통적인 컴퓨터공학과나 전산학과 출신의 소프트웨어 엔지니어보다는 수학, 통계학, 물리학, 뇌과학 등을 전공한 데이터 과학자 및 연구원(Researcher)들이 주류를 이뤘습니다. 이들의 주 목적은 완벽한 소프트웨어를 빌드하는 것이 아니라, 가설을 세우고 수식을 코드로 구현해 빠르게 데이터를 검증(Prototyping)하는 것이었습니다.

이 지점에서 자바와 파이썬의 생산성 격차가 벌어졌습니다. 물론 파이썬 역시 들여쓰기(Indentation) 규칙 등 문법적 엄격함이 존재하지만, 자바에 비하면 변수와 함수의 '형 선언(Type Declaration)'이 완전히 자유로운 동적 타입(Dynamic Typing) 언어입니다.

자바에서는 데이터 하나를 다루려 해도 데이터의 형태(int, String 등)를 엄격하게 미리 정의해야 하고, 클래스와 메서드를 장황하게 감싸는 보일러플레이트 코드를 작성해야 합니다. 반면 파이썬은 형 선언 없이 x = 10처럼 변수를 바로 만들어 쓰고, 함수도 유연하게 주고받을 수 있어 수학적 아이디어를 즉석에서 코드로 실험하기에 최적의 자유도를 제공했습니다.

또한, AI 연산의 핵심은 C/C++로 작성된 하드웨어 가속 라이브러리를 얼마나 매끄럽게 연결하느냐에 있었습니다. 파이썬은 이른바 '글루(Glue) 언어'로서 외부 로우레벨 라이브러리와의 결합이 매우 쉬웠고, 이를 바탕으로 연구원들이 넘파이(NumPy), 판다스(Pandas), 텐서플로우, 파이토치 등 독점적인 AI 생태계를 빠르게 선점해 나갔습니다. 반면 자바는 복잡한 JNI 아키텍처 한계와 장황한 문법 탓에, 속도가 생명이었던 초기 AI 연구원들의 선택을 받지 못하며 트렌드에서 뒤처지게 되었습니다.


3. Java가 AI 시대의 언어로 변신하기 위해 준비하는 기술들

현재 자바 진영의 AI 전략은 파이썬처럼 거대 언어 모델(LLM)을 바닥부터 직접 학습시키는 스크립트를 짜는 것이 아닙니다. 자바의 진정한 강점은 전 세계 기업들이 이미 구축해 놓은 거대한 엔터프라이즈 인프라 위에서, 오픈AI나 구글 제미나이(Gemini) 같은 외부 LLM을 가장 안정적으로 연결, 제어, 오케스트레이션하는 인터페이스 표준을 확립하는 것에 있습니다.

이 중심에 있는 기술이 바로 '스프링 AI(Spring AI)''LangChain4j' 같은 엔터프라이즈급 AI 프레임워크입니다. 이들은 타사 LLM과의 연동 인터페이스를 고도로 추상화하여, 개발자가 코드 한 줄만 바꾸면 다양한 진영의 AI 모델을 스왑(Swap)할 수 있도록 돕습니다. 또한, 기업 내부 데이터를 안전하게 결합하는 RAG(검색 증강 생성) 아키텍처와 벡터 데이터베이스 연동을 자바 특유의 유연한 인터페이스 구조로 표준화했습니다.

여기에 하드웨어 레벨의 성능을 내기 위한 오라클 주도의 로우레벨 혁신이 뒷받침되고 있습니다. '프로젝트 파나마(Project Panama)'는 기존의 무거웠던 JNI를 완전히 대체하여, C/C++ 기반의 고성능 외래 AI 엔진(예: llama.cpp 등)과 메모리에 직접 접근할 수 있는 표준 API를 제공합니다. 또한 '벡터 API(Vector API)'는 최신 CPU의 SIMD(단일 명령 다중 데이터) 아키텍처를 활용해 행렬 연산 속도를 네이티브급으로 끌어올렸습니다.

더불어 자바는 로봇, 가전, 팩토리 자동화 등 하드웨어와 결합하는 피지컬 AI(Physical AI)와 IoT 생태계에서도 강력한 미래를 준비하고 있습니다. 당초 가전제품 제어를 위해 탄생했던 자바의 모태(Oak)답게, 기기 독립적인 가상 머신 환경은 피지컬 에이전트를 구동하기에 최적입니다. 최근 자바는 메모리를 극도로 아끼면서 수만 개의 동시 대량 요청을 처리할 수 있는 가상 스레드(Virtual Threads) 기술을 도입했습니다. 이를 통해 수많은 센서와 액추에이터가 실시간으로 통신하는 피지컬 AI 환경에서 자바는 고성능 프레임워크와 결합해 강력한 실시간 제어 능력을 발휘하고 있습니다. 자바는 단순한 언어적 변신을 넘어, 엔터프라이즈 안정성과 최신 자율형 AI 에이전트 아키텍처를 아우르는 견고한 통합 AI 플랫폼으로 진화하는 중입니다.


4. 요약: 엔터프라이즈의 무기를 쥔 자바의 AI 역습

요약하자면 자바가 초기 AI 시대의 주역이 되지 못한 것은, 완벽함보다는 빠른 실험과 유연성이 중요했던 수학·통계학 기반 연구원들의 니즈와 자바의 엄격한 정적 타입 문법이 맞지 않았기 때문입니다.

하지만 AI 기술이 연구실을 넘어 '실제 기업 서비스(Production)' 단계로 진화하면서 판도가 바뀌고 있습니다. 자바 진영은 직접 모델을 만드는 대신, 프로젝트 파나마와 벡터 API를 통해 로우레벨 연산 속도를 확보하고, 스프링 AI를 앞세워 다양한 외부 LLM을 안전하게 통제·결합하는 최강의 인터페이스 전략을 취하고 있습니다. 여기에 가상 스레드를 무기로 하드웨어를 직접 제어하는 피지컬 AI 영역까지 영토를 확장하고 있습니다.

Java를 다시 복습하며 느낀 점은, 자바는 결코 낡은 언어가 아니라 시대의 요구에 맞춰 자신의 가장 강력한 무기인 '신뢰성과 구조화'를 바탕으로 AI를 흡수하고 있다는 점입니다. 기업용 대형 시스템에 AI를 이식해야 하는 순간이 오면, 결국 다시 자바가 주인공이 될 날이 머지않은 것 같습니다.


이전글

[개발 상식] 1960년대 기계어부터 현대 AI 기반 코드 최적화까지 한눈에 보기 / https://www.steemit.com/kr/@talkit/ai--px1egt

[Java] 자바 역사 가이드: SE와 EE(Jakarta EE) 통합 타임라인과 대전환 비화 / https://www.steemit.com/kr/@talkit/java-se-eejakarta-ee--p5j85z

[Java] 자바의 탄생 배경과 역사, C언어와의 차이점 총정리 / https://www.steemit.com/kr/@talkit/java-c--ji3f9j

🔗 관련 글 및 참고 자료 (공식 문서)

본 포스팅을 준비하며 참조한 자바 진영의 공식 기술 문서와 로드맵입니다. 더 깊은 내용이 궁금하신 분들은 아래 링크를 참고해 보세요!

  • [OpenJDK Project Panama] C/C++ 네이티브 라이브러리와의 고성능 연결 인터페이스 표준화 프로젝트
  • [OpenJDK Vector API (JEP 438)] 최신 CPU 아키텍처를 활용한 자바 내부의 고성능 벡터/행렬 연산 지원 스펙
  • [Spring AI 공식 레퍼런스] 엔터프라이즈 자바 환경에서 다양한 LLM 및 벡터 DB 인터페이스를 연동하는 표준 프레임워크
  • [LangChain4j GitHub] 자바 생태계에서 LLM 애플리케이션 및 AI 에이전트를 구축하기 위한 대표적인 오픈소스 라이브러리
반응형
반응형

5CE33409-9443-401B-BC66-2E4FC539B4F5.png

[Java] JDK 버전별 AES 256 암호화 적용 방법과 "Illegal key size" 에러 해결책

안녕하세요 가야태자 @talkit 입니다. Java관련된 글을 계속 적고 있는데, 해당글들에 이어서 그리고, 제가 이번 프로젝트를 를 진행하면서 겪었던 Java 1.7에서 AES256 암호화 시에 여러분은 오류가 발생하지 않았으면 하는 바램에 이글을 적습니다. 해당 글은 1.6, 1.7에서 AES 256 암호화시 겪게 되는 오류와 해결책, 그리고 JDK 각 버전별 예제를 담고 있습니다.

Java로 보안 관련 기능을 개발하다 보면 가장 흔하게 접하는 암호화 알고리즘이 바로 AES 256입니다. 하지만 분명 로컬(최신 JDK)에서는 잘 돌아가던 코드가 운영 서버(구버전 JDK)에만 올라가면 마법처럼 에러를 뿜어내는 경우가 있습니다.

오늘 그 원인과 JDK 버전별 차이점, 그리고 레거시 환경에서의 해결책까지 완벽하게 정리해 보겠습니다.


🚨 왜 구버전 Java에서는 AES 256이 실패할까?

AES 256 암호화를 적용하고 구버전 자바 환경에서 구동하면 높은 확률로 아래와 같은 치명적인 예외를 만나게 됩니다.

java.security.InvalidKeyException: Illegal key size

이 에러가 발생하는 이유는 과거 미국의 암호화 기술 수출 통제법 때문입니다. 미국은 강력한 암호화 기술이 해외로 유출되는 것을 막기 위해, 기본적으로 Java에 128비트(16바이트)를 초과하는 키를 사용할 수 없도록 제한을 걸어두었습니다. AES 256은 256비트(32바이트) 키를 사용하기 때문에 "키 사이즈가 불법(Illegal)"이라며 거부하는 것입니다.


📅 JDK 버전별 AES 256 지원 차이점

자바가 발전하면서 이 규제와 내부 정책도 많이 변했습니다. 내가 쓰는 JDK 버전이 어디에 속하는지 확인해 보세요.

JDK 버전 AES 256 지원 상태 특징
JDK 1.6 / 1.7 기본 차단 기본 128비트 제한. AES 256 사용 시 수동 패치 필수.
JDK 1.8 ⚠️ 버전별 상이 - 8u151 미만: 수동 패치 필요
- 8u151 이상: 설정 파일로 활성화 가능
- 8u161 이상: 기본 활성화
JDK 11 / 17 / 21 기본 활성화 제약 없음. 성능 최적화 및 최신 암호화 모드(GCM) 권장.

⚠️ Java 1.6 & 1.7 환경에서의 핵심 주의사항 및 해결책

제가 이번에 Java 1.7 프로젝트를 진행하며 깊게 겪었던 부분입니다. 구버전 환경에서 이 에러를 해결하려면 반드시 아래 사항을 숙지하고 조치해야 합니다.

1. 무제한 강도 정책(JCE) 파일 수동 패치 (올바른 해결책)

Oracle 공식 홈페이지에서 버전에 맞는 'Unlimited Strength Jurisdiction Policy Files'를 직접 다운로드받아 서버의 Java 경로에 덮어씌워야 합니다.

  • Oracle 공식 다운로드 링크 검색 키워드: Java Cryptography Extension (JCE) Unlimited Strength
  • 파일을 덮어쓸 경로: ${JAVA_HOME}/jre/lib/security/
  • 교체할 파일: local_policy.jar, US_export_policy.jar

💡 Tip: 만약 운영 환경이 Oracle JDK가 아닌 OpenJDK라면, 오픈소스 특성상 이 수출 규제 파일이 적용되지 않아 수동 패치 없이도 바로 AES 256이 작동할 수 있습니다. 서버의 Java 벤더사를 먼저 확인해 보세요!

2. 리플렉션(Reflection) 우회 꼼수 코드는 금물!

인터넷을 찾아보면 JCE 다운로드가 귀찮아서 Java 내부의 isRestricted 필드를 리플렉션 코드로 강제로 false로 바꾸는 팁이 공유되곤 합니다.
하지만 실무 운영 환경에서는 절대 사용하시면 안 됩니다. JVM 내부 보안 구조를 강제로 비트는 행위라, 자바 마이너 업데이트나 환경 변화에 따라 갑자기 애플리케이션이 뻗어버릴 수 있는 시한폭탄 같은 코드입니다. 반드시 위의 1번 방법(JCE 패치)으로 해결하셔야 합니다.

🔒 3. 가장 중요한 보안 규칙: 암호화 키 관리 (필독!)

코드 구현보다 더 중요한 것은 암호화 키를 안전하게 다루는 것입니다. 실무에 적용하실 때 다음 규칙을 반드시 지켜주세요.

  • 예제 키 사용 금지: 암호화키는 여러분의 키를 직접 만들어서 쓰셔야 합니다. 제가 아래 예제 코드에서 사용한 키나, 다른 인터넷 블로그 등에서 샘플로 받은 키를 그대로 사용하시면 심각한 보안상 문제가 발생합니다. 예제 키는 누구나 알 수 있기 때문에 암호화의 의미가 완전히 사라집니다.
  • 소스코드와 키 분리 보관: 암호화 키는 절대 소스코드 내에 하드코딩하면 안 됩니다. 해당 키는 소스와 완전히 분리되어 OS 환경 변수(Environment Variable), 외부 설정 파일(Properties, YAML), 혹은 AWS Secrets Manager나 HashiCorp Vault 같은 전문 키 관리 시스템(KMS)에 보관되어야 합니다.
  • 외부 노출 절대 금지: 키가 담긴 설정 파일을 실수로 GitHub 같은 공용 저장소에 업로드하는 일이 없도록 .gitignore 설정을 철저히 하셔야 합니다. 절대로 키를 외부에 공개하시면 안 됩니다.

💻 JDK 버전별 AES 256 구현 예제

1️⃣ JDK 1.6, 1.7, 1.8 (레거시 환경 - AES/CBC/PKCS5Padding)

구버전 환경에서 가장 범용적으로 쓰이는 CBC 모드 예제입니다. (※ 1.6, 1.7은 위에 설명한 JCE 패치가 완료된 상태여야 작동합니다.)

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64; // JDK 1.8 미만은 별도의 Base64 라이브러리(Apache Commons 등) 필요

public class Aes256Legacy {
    // ⚠️ 주의: 아래 키와 IV는 예시일 뿐입니다. 실무에서는 소스코드와 분리하여 고유한 키를 사용하세요!
    private static final String KEY = "abcdefghijklmnopqrstuvwxyz123456"; // 32바이트 키 (256비트)
    private static final String IV = "1234567890123456"; // 16바이트 IV (CBC 모드 필수)

    public static String encrypt(String text) throws Exception {
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        SecretKeySpec keySpec = new SecretKeySpec(KEY.getBytes("UTF-8"), "AES");
        IvParameterSpec ivSpec = new IvParameterSpec(IV.getBytes("UTF-8"));

        cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);
        byte[] encrypted = cipher.doFinal(text.getBytes("UTF-8"));

        // JDK 1.8 기준 Base64Encoder 사용 (1.7 이하는 외부 라이브러리 활용)
        return Base64.getEncoder().encodeToString(encrypted);
    }
}

2️⃣ JDK 11, 17, 21 (최신 환경 - AES/GCM/NoPadding)

최신 자바 버전에서는 단순 CBC 모드보다 무결성 검증까지 함께 수행하여 보안성이 훨씬 강력한 GCM 모드 사용을 강력히 권장합니다. 별도의 JCE 설정 없이 즉시 실행됩니다.

import javax.crypto.Cipher;
import javax.crypto.spec.GCMParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;
import java.util.Base64;

public class Aes256Modern {
    // ⚠️ 주의: 아래 키는 예시일 뿐입니다. 실무에서는 소스코드와 분리하여 고유한 키를 사용하세요!
    private static final String KEY = "abcdefghijklmnopqrstuvwxyz123456"; // 32바이트
    private static final int GCM_IV_LENGTH = 128; // IV bits
    private static final int GCM_TAG_LENGTH = 16; // Tag bytes (128 bits)

    public static String encrypt(String text) throws Exception {
        // GCM 모드는 매번 새로운 IV 사용을 강력히 권장
        byte[] iv = new byte[GCM_IV_LENGTH / 8];
        new SecureRandom().nextBytes(iv);

        Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
        SecretKeySpec keySpec = new SecretKeySpec(KEY.getBytes("UTF-8"), "AES");
        GCMParameterSpec gcmSpec = new GCMParameterSpec(GCM_TAG_LENGTH * 8, iv);

        cipher.init(Cipher.ENCRYPT_MODE, keySpec, gcmSpec);
        byte[] ciphertext = cipher.doFinal(text.getBytes("UTF-8"));

        // IV와 암호문을 함께 저장/전송해야 복호화가 가능합니다.
        byte[] cipherWithIv = new byte[iv.length + ciphertext.length];
        System.arraycopy(iv, 0, cipherWithIv, 0, iv.length);
        System.arraycopy(ciphertext, 0, cipherWithIv, iv.length, ciphertext.length);

        return Base64.getEncoder().encodeToString(cipherWithIv);
    }
}

📝 마치며

오래된 시스템을 유지보수하거나 레거시 환경으로 마이그레이션할 때, 자바의 버전별 보안 정책 차이를 모르면 뜬금없는 에러에 며칠을 허비하게 됩니다.
특히 Java 1.6이나 1.7 환경에서 AES 256을 구현하실 때는 서버의 JCE 정책 파일 확인 단계를 거치셔서, 저처럼 삽질(?)하지 않고 한 번에 성공하시길 바라는 마음입니다. 아울러 아무리 코드가 완벽해도 암호화 키가 노출되면 무용지물이 되니 키 관리도 꼭 신경 써주세요!
궁금한 점이 있으시다면 언제든 댓글로 남겨주세요. 감사합니다!

반응형
반응형

0D80A10E-0323-4E5E-99E8-0FCA2C4B5BC5.png

[프로그래밍 역사] 천공카드부터 AI까지, 컴퓨터 언어의 위대한 연대기

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

요즘 Java를 다시 정리겸 공부하고있는데, Java의 역사를 공부하다 보니 다른 언어의 역사와 프로그래밍의 발전이 궁금 해졌습니다. 기계어와 천공카드라는 거친 환경에서 출발해, 현대의 자바와 AI 협업 코딩에 이르기까지 우리가 사용하는 컴퓨터 언어들이 어떻게 발전해 왔는지 각 연대 별로 정리하면 아래와 같습니다.


1. 1950년대 이전~1960년대: 프로그래밍의 새벽과 하드웨어 제어

초기의 컴퓨터 프로그래밍은 인간의 언어와는 거리가 먼, 철저히 기계 중심적인 작업이었습니다. 1940년대 코딩은 전선을 직접 꽂고 뽑는 하드웨어 재배치나 0과 1로 구성된 정교한 기계어를 직접 입력하는 방식이었습니다. 이 지독한 복잡함을 개선하기 위해 기계어와 일대일 대응하는 어셈블리어가 등장했고, 데이터를 입력하기 위해 종이에 구멍을 뚫어 표현하는 천공카드(Punch Card) 시스템이 널리 활용되었습니다.

1950년대 후반을 지나 1960년대에 접어들면서 비로소 인간이 이해할 수 있는 '고급 언어'의 기틀이 마련됩니다. 수학적 계산을 위해 설계된 최초의 고급 언어 포트란(Fortran), 대규모 기업 비즈니스 데이터 처리를 위해 탄생하여 미 국방부 표준으로 자리 잡은 코볼(COBOL)이 이 시기를 지배했습니다. 당시 프로그래머들은 천공카드 한 장에 코드 한 줄을 정성껏 컴퓨터에 입력하며, 기계 제어 중심에서 인류의 비즈니스 문제를 소프트웨어로 해결하는 첫 패러다임의 전환을 맞이했습니다.


2. 1970년대: 구조적 프로그래밍과 C언어의 탄생

1970년대는 전산학 역사상 가장 위대한 유산이 탄생한 시기입니다. 60년대까지의 고급 언어들은 코드의 실행 흐름이 중구난방으로 튀는 'GOTO' 문을 남발하여 시스템이 거대해질수록 유지보수가 불가능한 '스파게티 코드' 양산이라는 고질적인 문제를 안고 있었습니다. 이를 해결하기 위해 프로그램을 순차, 선택, 반복이라는 명확한 구조로 나누어 작성하는 구조적 프로그래밍(Structured Programming) 패러다임이 확립되었습니다.

이 철학의 정점에서 탄생한 것이 바로 1972년 데니스 리치와 켄 톰슨이 개발한 C언어입니다. C언어는 하드웨어를 직접 제어할 수 있는 강력한 로우레벨(Low-level) 제어 능력을 갖추면서도, 인간이 읽기 쉬운 하이레벨(High-level) 언어의 이점을 완벽하게 결합한 혁명적인 언어였습니다. UNIX 운영체제 개발과 맞물려 C언어는 폭발적인 인기를 얻었고, 소프트웨어의 이식성(Portability)을 극적으로 끌어올리며 현대 운영체제와 시스템 프로그래밍의 굳건한 표준으로 자리 잡았습니다.


3. 1980년대: 복잡성과의 전쟁, 객체 지향 프로그래밍(OOP)의 부상

1980년대는 개인용 컴퓨터(PC)의 보급과 함께 소프트웨어의 규모와 복잡도가 상상할 수 없을 정도로 거대해진 시기입니다. 기존의 구조적 프로그래밍과 데이터 중심의 접근 방식으로는 대규모 시스템을 안정적으로 구축하는 데 한계가 찾아왔고, 이를 타개하기 위해 객체 지향 프로그래밍(OOP)이 핵심 패러다임으로 부상했습니다.

현실 세계의 개념을 데이터와 기능이 묶인 '객체(Object)'로 모델링하여 재사용성과 유지보수성을 극대화하자는 이 철학은 시장을 완전히 바꾸어 놓았습니다. 1983년 비아네 스트롭스트룹은 C언어에 객체 지향 개념을 얹은 C++을 발표하며 고성능 시스템과 대규모 애플리케이션 개발의 지배자로 우뚝 섰습니다. 또한, 애플 매킨토시의 기반이 된 Objective-C가 주목받기 시작했고, 소프트웨어를 컴포넌트 조립식으로 개발하는 시대가 본격적으로 열렸습니다.


4. 1990년대: 인터넷의 폭발과 Java의 등장

1990년대는 월드 와이드 웹(WWW)의 보급과 함께 '네트워크 분산 환경'이 소프트웨어 개발의 핵심 화두로 떠오른 격동의 시기였습니다. 기존의 C/C++은 운영체제와 하드웨어 아키텍처가 바뀌면 프로그램을 매번 다시 컴파일해야 하는 심각한 파편화 문제를 겪고 있었습니다. 이러한 시대적 한계를 해결하기 위해 1995년 선 마이크로시스템즈는 "Write Once, Run Anywhere"를 슬로건으로 내건 Java(자바)를 출시합니다.

자바는 가상 머신(JVM)을 도입하여 하드웨어 종속성을 완벽히 극복했고, 메모리를 자동으로 관리해 주는 가비지 컬렉터 덕분에 안정적인 대형 웹 서버 구축의 독점적인 표준이 되었습니다. 한편, 웹 브라우저 안에서 역동적인 화면을 구현하기 위해 탄생한 JavaScript(자바스크립트)가 급부상했으며, 쉬운 문법과 빠른 개발 속도를 무기로 삼은 인터프리터 언어 Python(파이썬)과 웹 전용 언어인 PHP 등이 등장하여 웹 생태계의 대폭발을 이끌었습니다.


5. 2000년대: 엔터프라이즈의 다각화와 웹 생태계의 정착

2000년대는 90년대에 구축된 웹 기술이 고도화되고, 대규모 기업용 시스템(Enterprise) 시장이 성숙기에 접어든 시기입니다. 마이크로소프트는 자바의 독주를 견제하고 윈도우 생태계를 공고히 하기 위해 2000년 넷(.NET) 프레임워크와 함께 C# 언어를 발표했습니다. 이로 인해 시장은 자바 기반의 진영과 윈도우 기반의 C# 진영으로 양분되며 대형 아키텍처 경쟁이 심화되었습니다.

동시에 웹 표준과 비동기 통신 기술(AJAX)의 발전으로 단순한 문서 전달자에 불과했던 웹 페이지가 '웹 애플리케이션'의 형태로 진화하기 시작했습니다. 브라우저의 한계를 극복하려는 자바스크립트의 고도화가 진행되었고, 루비 온 레일즈(Ruby on Rails) 프레임워크의 성공과 함께 Ruby 같은 생산성 중심의 다이나믹 언어들이 주목받았습니다.


6. 2010년대: 모바일 혁명과 모던 언어의 세대교체

2010년대는 스마트폰의 폭발적인 보급으로 인한 모바일 혁명과 클라우드 컴퓨팅, 그리고 빅데이터/인공지능의 급부상이 프로그래밍 언어의 판도를 완전히 바꾸어 놓은 시기입니다. 스마트폰 앱 개발을 위해 구글의 안드로이드는 자바를, 애플의 iOS는 Objective-C를 채택하며 자바의 위상은 한층 더 공고해졌습니다. 하지만 기존의 오랜 언어들이 가진 무겁고 복잡한 문법을 탈피하기 위해 대기업 주도의 신생 '모던 프로그래밍 언어'들이 대거 등장했습니다.

애플은 iOS 개발을 위해 안전하고 직관적인 Swift를, 구글은 안드로이드 공식 언어로 Kotlin(코틀린)을 채택했으며, 사내 인프라 고도화를 위해 동시성 처리가 강력한 Go(고랭) 언어를 발표했습니다. 또한, 웹 생태계에서는 자바스크립트에 타입 시스템을 도입해 안정성을 높인 TypeScript(타입스크립트)가 대세로 부상했습니다. 한편, 방대한 데이터 처리와 머신러닝 생태계를 독점한 파이썬은 단숨에 전 세계에서 가장 인기 있는 언어의 자리에 올랐습니다.


7. 2020년대: 클라우드 네이티브와 에이전틱 AI(Agentic AI), 그리고 MCP의 시대

현재 2020년대의 프로그래밍 세계는 클라우드 네이티브(Cloud-Native) 인프라의 완전한 정착과 더불어, 단순한 코드 추천을 넘어 개발의 전 과정을 스스로 수행하는 자율형 AI 에이전트(Agentic AI)의 등장으로 유례없는 대격변을 맞이하고 있습니다. 마이크로서비스 아키텍처(MSA) 환경에 맞춰 메모리 안정성과 가공할 성능을 지닌 Rust(러스트)가 핵심 인프라 언어로 급부상했고, 자바 역시 가상 스레드(Virtual Threads)를 도입하며 클라우드 최적화 혁신을 이어가고 있습니다.

그러나 가장 파괴적인 변화는 '개발 패러다임' 그 자체에 있습니다. 초기의 단순 텍스트 완성형 어시스턴트를 넘어, 스스로 판단하고 코드를 작성 및 디버깅하는 에이전틱 AI(Agentic AI)가 개발 프로세스의 중심에 섰습니다. 특히 다양한 인공지능 모델들이 개발자의 로컬 개발 환경, 소스 코드 저장소, 개발 도구(IDE)의 컨텍스트를 안전하고 표준화된 방식으로 연결할 수 있도록 돕는 MCP (Model Context Protocol, 모델 컨텍스트 프로토콜)가 핵심 기술 표준으로 정착했습니다.

이제 프로그래머는 고립된 환경에서 타이핑하는 것을 넘어, MCP를 통해 프로젝트 전체의 맥락을 완벽히 이해하고 있는 AI 에이전트(예: 제미나이 기반 도구)에게 복잡한 설계와 아키텍처 리팩토링 작업을 지시하고 오케스트레이션(통제 및 조율)하는 고차원적 아키텍트의 역할을 수행하고 있습니다.


8. 요약: 프로그래밍 언어 발전을 돌아보며

돌아보면 컴퓨터 프로그래밍의 역사는 '인간 중심의 추상화''생산성 극대화'를 향한 끊임없는 여정이었습니다.

0과 1의 기계어와 천공카드라는 투박한 물리적 제약에서 출발한 언어는, 하드웨어를 지배한 C언어의 구조적 패러다임을 거쳐, 거대한 시스템을 조립식으로 만드는 C++의 객체 지향 세계로 발전했습니다. 인터넷의 폭발과 함께 등장한 Java는 가상 머신(JVM)을 통해 하드웨어의 종속성을 무너뜨렸고, 2020년대에 이르러서는 MCP(Model Context Protocol)에이전틱 AI(Agentic AI) 생태계가 결합하면서 개발자가 반복적인 코드 구현에서 벗어나 오직 '비즈니스 논리와 고도화된 아키텍처 설계'에만 집중할 수 있는 진정한 추상화의 정점에 도달했습니다.

Java를 다시 공부하며 시작된 이 역사 탐구를 통해, 우리가 지금 당연하게 사용하는 문법과 도구들 속에 수많은 선배 개발자들의 치열한 고민과 격변의 비화가 녹아있음을 다시금 느끼게 됩니다. 앞으로 자바 공부를 이어가면서 마주할 다양한 기술적 아키텍처들도 이 거대한 역사의 흐름 속에서 한층 더 깊이 있게 이해할 수 있을 것 같습니다.

관련글 / 이전글 :

[Java] 자바 역사 가이드: SE와 EE(Jakarta EE) 통합 타임라인과 대전환 비화 / https://www.steemit.com/kr/@talkit/java-se-eejakarta-ee--p5j85z

[Java] 자바의 탄생 배경과 역사, C언어와의 차이점 총정리 / https://www.steemit.com/kr/@talkit/java-c--ji3f9j

Posted using [SteemX](https://steemx.org/)
반응형
반응형

266753F3-544E-4AEC-A6AA-FC0B69E94F02.png

저도 정리도 할겸 해서 Java에 대해서 글을 써보고 있습니다.

재미가 있으실지는 모르겠지만, 읽으시는 분들이 재미가 있어야 할텐데요 ^^

저는 정리하면서 오 그랬지를 외치고 있습니다.

그럼 본격적으로 글을 시작합니다.

[Java] 자바의 탄생 배경과 역사, C언어와의 차이점 총정리 / https://www.steemit.com/kr/@talkit/java-c--ji3f9j

1. 서론: 가전제품 제어에서 전 세계 웹의 표준이 되기까지

오늘날 자바(Java)는 단순한 프로그래밍 언어를 넘어 전 세계 거대한 IT 인프라를 지탱하는 거대한 플랫폼입니다. "한 번 작성하면, 어디서나 실행된다(Write Once, Run Anywhere)"라는 강력한 철학을 바탕으로 지난 30년간 수많은 격변을 겪으며 발전해 왔습니다.

자바의 역사를 이해하는 것은 단순히 과거의 기록을 보는 것을 넘어, 현대 엔터프라이즈 소프트웨어 아키텍처가 왜 지금과 같은 모습으로 자리 잡았는지 이해하는 핵심 열쇠입니다. 개인용 개발을 위한 표준 에디션(Java SE)과 대규모 기업 시스템을 위한 에디션(Java EE)이라는 두 축이 시대의 흐름에 따라 어떻게 발맞추어 성장하고 변천해 왔는지, 그 흥미진진한 역사의 타임라인과 숨겨진 비화를 정리해 드립니다.


2. 본론

① Java SE & Java EE 통합 연혁 타임라인

자바의 표준 스펙(SE)과 기업용 분산 환경 스펙(EE)은 기술의 발전과 패러다임의 변화에 맞춰 유기적으로 결합하며 진화해 왔습니다. 최초의 버전부터 현재에 이르기까지의 핵심 마일스톤입니다.

  • JDK 1.0 (1996): 최초의 공식 버전, 제임스 고슬링의 '오크(Oak)' 프로젝트에서 시작된 자바 언어의 탄생
  • JDK 1.1 (1997): 내부 클래스, 데이터베이스 연동을 위한 JDBC, 컴포넌트 모델인 JavaBeans 도입
  • J2SE 1.2 / J2EE 1.2 (1998~1999): 스윙(Swing) GUI 및 컬렉션 프레임워크 추가 / 최초의 기업용 스펙(Servlet, JSP 1.1) 표준화
  • J2SE 1.4 / J2EE 1.4 (2002~2003): 정규표현식 및 비동기 NIO 지원 / 웹 서비스(Web Services) 기본 프로필 지원
  • Java SE 5 / Java EE 5 (2004~2006): 제네릭, 열거형(Enum), 어노테이션 도입 / EJB 3.0 도입으로 기업용 개발의 복잡성 대폭 완화
  • Java SE 6 / Java EE 6 (2006~2009): JVM 가비지 컬렉션 성능 향상 및 스크립트 지원 / 웹 프로필(Web Profile) 개념 및 CDI(의존성 주입) 최초 도입
  • Java SE 7 / Java EE 7 (2011~2013): 다이아몬드 연산자 및 try-with-resources 추가 / HTML5 지원 파이프라인 구축 및 WebSocket 표준 채택
  • Java SE 8 / Java EE 8 (2014~2017): 람다식, 스트림(Stream) API 혁신 / 오라클 주도의 마지막 기업용 버전, HTTP/2 지원 및 JSON-B 추가
  • Java SE 11 / Jakarta EE 8 (2018~2019): 6개월 정기 출시 주기 정착 / 이클립스 재단으로 이관 후 첫 버전 (기능은 Java EE 8과 동일)
  • Java SE 17 / Jakarta EE 9 (2021~2020): 봉인된 클래스 정식 추가 / 패키지 명칭 대전환 (javax.* -> jakarta.* 변경)
  • Java SE 21 / Jakarta EE 10 (2023~2022): 가상 스레드(Virtual Threads) 도입으로 동시성 혁신 / 클라우드 네이티브 아키텍처 공식 지원
  • Java SE 25 / Jakarta EE 11 (2025~2024): 최신 장기 지원(LTS) 버전으로 안정성 확보 / 가상 스레드 기술을 기업용 스펙에 본격 통합
  • Java SE 26 (2026): 최신 버전, HTTP/3 지원 및 런타임 성능의 지속적인 개선

② Java EE에서 Jakarta EE로의 대전환과 상표권 분쟁 비화

자바가 전 세계 금융권과 대기업 시스템의 백엔드를 독점할 수 있었던 원동력은 Java EE였습니다. 하지만 2010년 오라클(Oracle)이 선 마이크로시스템즈를 인수하면서 자바 생태계에는 거대한 제약과 격변이 일어납니다. 오라클 체제 하에서 기업용 자바 표준의 발전이 정체되자, 오픈소스 커뮤니티는 더 개방적인 혁신을 요구했습니다. 결국 2017년, 오라클은 Java EE의 소스 코드와 운영 권한을 오픈소스 재단인 이클립스 재단(Eclipse Foundation)에 완전히 넘겨주기로 결정합니다.

그러나 이 아름다운 이관 과정 뒤에는 거대한 상표권 갈등이 숨어 있었습니다. 오라클이 소스 코드는 넘겼지만, 'Java'라는 브랜드 상표권만큼은 자신들의 소유라며 양도하지 않은 것입니다. 이로 인해 이클립스 재단은 기존의 명칭인 'Java EE'를 더 이상 사용할 수 없게 되었고, 소스 코드 내부에서 수십 년간 표준으로 사용되던 핵심 패키지 명칭인 java.*javax.* 역시 새로 업데이트하는 코드에 사용할 수 없게 되는 사상 초유의 제약을 받게 됩니다.

결국 이클립스 재단은 커뮤니티 투표를 거쳐 Java EE의 새 이름으로 Jakarta EE(자카르타 EE)를 공표합니다. 그리고 명칭만 바꾼 것에 그치지 않고, Jakarta EE 9에 이르러 소스 코드 내부의 핵심 API 경로를 javax.servlet.*에서 jakarta.servlet.* 형태로 통째로 바꾸는 대대적인 이주(Migration) 작업을 단행합니다.

이 변화는 초기에 전 세계 수많은 라이브러리와 프레임워크(대표적으로 스프링 부트 3.0 이상 버전)가 코드를 완전히 리팩토링해야 하는 극심한 호환성 진통을 유발했습니다. 하지만 결과적으로 오라클이라는 단일 기업의 독점적 제약에서 완전히 벗어나, 전 세계 개발자와 기업들이 함께 주도하는 진정한 의미의 '개방형 클라우드 네이티브 기업용 자바 표준'으로 완벽하게 재탄생하는 위대한 계기가 되었습니다.


3. 요약: 독점에서 개방으로, 쉼 없이 진화하는 자바 생태계

자바의 역사는 단순히 소프트웨어 버전 업그레이드의 기록이 아니라, 하드웨어의 한계와 기업의 독점 시도를 기술적 아키텍처와 커뮤니티의 힘으로 우아하게 해결해 온 투쟁의 역사입니다.

C/C++의 메모리 관리 한계를 극복하기 위해 가전제품 제어용 '오크' 언어로 출발한 자바는 웹의 폭발적인 성장과 함께 표준 스펙(SE)을 다져왔으며, 대규모 기업 환경을 겨냥한 EE 스펙을 통해 시장의 절대 강자로 군림했습니다. 비록 오라클 인수 이후 상표권 분쟁이라는 초유의 진통을 겪으며 javax 패키지를 jakarta로 통째로 바꾸는 아픔을 겪었지만, 이 계기를 통해 자바는 특정 기업의 전유물이 아닌 진정한 오픈소스 커뮤니티 중심의 '개방형 표준'으로 거듭날 수 있었습니다.

탄생한 지 30년이 넘은 지금도 최신 가상 스레드 기술(Virtual Threads)과 클라우드 네이티브 아키텍처를 적극 흡수하며 진화하고 있는 자바는, 앞으로도 오랫동안 전 세계 백엔드 생태계의 견고한 표준으로 자리를 지킬 것입니다.

관련글 :

[Java] 자바의 탄생 배경과 역사, C언어와의 차이점 총정리 / https://www.steemit.com/kr/@talkit/java-c--ji3f9j 🔗

반응형
반응형

1. Java 소개

자바(Java)는 전 세계 수많은 개발자가 사용하고 있는 현대 소프트웨어 개발의 핵심 프로그래밍 언어입니다. 1990년대 중반에 처음 등장한 이후, 가전제품부터 시작하여 웹 애플리케이션, 거대한 기업용 시스템, 그리고 스마트폰 앱에 이르기까지 거의 모든 IT 영역에서 중추적인 역할을 담당해 왔습니다.

자바를 관통하는 가장 중요한 철학은 "한 번 작성하면, 어디서나 실행된다(Write Once, Run Anywhere)"입니다. 이는 기존의 언어들이 특정 운영체제나 하드웨어에 종속되어 코드를 매번 다시 작성하거나 수정해야 했던 한계를 정면으로 돌파한 혁신이었습니다. 자바는 강력한 안정성과 보안성, 그리고 객체 지향 프로그래밍이라는 직관적인 개념을 바탕으로 설계되어 복잡한 시스템도 안정적으로 유지보수할 수 있는 기반을 제공합니다.

특히 인터넷의 폭발적인 성장과 궤를 같이하며 네트워크 기능이 기본적으로 내장되어 있어, 분산 환경에서 데이터를 주고받는 프로그램을 개발하는 데 최적의 효율을 발휘합니다. 오늘날 자바는 단순히 하나의 언어를 넘어, 방대한 생태계와 표준을 제시하는 거대한 플랫폼으로 자리 잡고 있습니다.


2. 컴퓨터 언어의 종류

컴퓨터가 이해하는 근본적인 언어는 0과 1로 이루어진 기계어입니다. 하지만 사람이 직접 기계어를 작성하는 것은 불가능에 가깝기에, 이를 사람이 읽을 수 있는 문자 형태로 일대일 대응시킨 어셈블리어가 등장했습니다. 이후 기술이 발전하면서 인간의 언어와 유사한 고급 프로그래밍 언어들이 개발되었습니다.

고급 언어는 크게 두 가지 방식으로 실행됩니다. C언어와 같은 컴파일러 언어는 작성한 소스 코드를 실행하기 전에 컴퓨터가 이해할 수 있는 기계어로 한 번에 번역해 둡니다. 번역 과정이 미리 끝나 있기 때문에 실행 속도가 매우 빠르다는 장점이 있습니다.

반면, 베이직(Basic)과 같은 인터프리터 언어는 코드를 한 줄씩 읽어가며 즉석에서 번역하고 실행합니다. 빌드하는 과정이 없어 개발자가 코드를 수정하고 바로 확인하기에 편리하지만, 실행 속도는 컴파일러 언어에 비해 상대적으로 느립니다.


3. Java의 역사

자바는 1991년 선 마이크로시스템즈(Sun Microsystems)의 제임스 고슬링이 이끄는 그린 프로젝트(Green Project)에서 시작되었습니다. 당초 연구원들의 목표는 가전제품이나 셋톱박스 등 다양한 임베디드 장치에서 동작하는 소프트웨어를 만드는 것이었습니다. 당시 지배적이었던 C나 C++ 언어는 하드웨어와 운영체제에 맞춰 코드를 일일이 변경해야 했고, 메모리를 잘못 관리하면 시스템이 쉽게 다운되는 치명적인 문제가 있었습니다. 가전제품은 컴퓨터보다 메모리 환경이 열악하고 오작동이 용납되지 않기에, 제임스 고슬링은 C++의 강력한 기능을 유지하면서도 더 안전하고 이식성이 높은 새로운 언어를 개발하게 되었는데 이것이 바로 자바의 모태인 '오크(Oak)'였습니다.

이후 이 언어는 인터넷의 가능성을 발견하고 웹 브라우저에서 실행 가능한 기술로 발전하며 1995년에 'Java'라는 이름으로 공식 발표됩니다. 웹의 대중화와 함께 자바는 폭발적인 인기를 얻었으며, 2010년 오라클(Oracle)이 선 마이크로시스템즈를 인수하면서 현재는 오라클의 주도 하에 지속적인 성능 개선과 오픈소스 생태계 확장을 이어가고 있습니다.


4. Java의 에디션 차이: Standard Edition vs Enterprise Edition

자바는 사용 목적과 규모에 따라 여러 가지 에디션(Edition)으로 나뉘어 제공됩니다. 가장 기본이 되는 자바 SE(Java Standard Edition)는 자바 언어의 핵심 기능을 담고 있습니다. 변수, 데이터 타입, 객체 지향 프로그래밍 문법을 비롯하여 파일 입력과 출력, 네트워크 통신 등 일반적인 컴퓨터 애플리케이션을 개발하는 데 필요한 표준 API를 제공합니다.

반면 자바 EE(Java Enterprise Edition, 현재 명칭 Jakarta EE)는 SE를 기반으로 하여 대규모 기업용 시스템 개발에 특화된 기능을 확장한 버전입니다. 대형 웹사이트를 구축하기 위한 서블릿(Servlet)과 JSP, 분산 환경을 위한 엔터프라이즈 기술, 그리고 복잡한 데이터베이스 연동과 대용량 트랜잭션 처리를 안정적으로 지원하는 사양들이 포함되어 있습니다. 일반적인 개발은 SE로 충분하지만, 거대한 백엔드 서버나 금융권 시스템 등을 다룰 때는 EE의 생태계가 필수적으로 활용됩니다.


5. Java 가상 머신(JVM)과 개발 키트(JDK)

자바 개발과 실행 환경을 이해하기 위해서는 JVM과 JDK의 관계를 아는 것이 중요합니다.

먼저 JVM(Java Virtual Machine, 자바 가상 머신)은 자바 프로그램이 운영체제 종류에 상관없이 실행될 수 있도록 돕는 핵심 장치입니다. C언어는 특정 OS용 기계어로 컴파일되지만, 자바는 중간 형태인 '바이트코드'로 변환된 후 각 OS에 설치된 JVM 위에서 실시간으로 해석되어 실행됩니다. JVM 덕분에 개발자는 운영체제마다 코드를 새로 짤 필요가 없습니다.

그리고 이 JVM을 포함하여 자바 프로그램을 실제로 개발하는 데 필요한 모든 도구를 모아둔 종합 패키지가 바로 JDK(Java Development Kit, 자바 개발 키트)입니다. JDK 안에는 자바 소스 코드를 바이트코드로 바꾸어 주는 컴파일러(javac)와 디버깅 도구, 그리고 코드를 실행할 수 있는 환경(JRE/JVM)이 모두 포함되어 있습니다. 결론적으로 개발자는 JDK를 설치하여 프로그램을 만들고, 완성된 프로그램은 JVM을 통해 사용자 환경에서 돌아가게 됩니다.


6. 요약

결론적으로 자바는 C언어의 강력한 제어 능력과 베이직 같은 인터프리터 언어의 유연함, 그리고 기계어와 어셈블리어가 가진 하드웨어 종속성을 극복하기 위해 탄생한 스마트한 고급 언어입니다.

C언어처럼 JDK의 컴파일러를 거쳐 바이트코드를 생성하므로 실행 효율을 높이면서도, JVM이라는 가상 머신을 통해 인터프리터처럼 실시간으로 환경에 맞춰 실행되는 독특한 하이브리드 방식을 취하고 있습니다. 또한 개인용 앱을 위한 표준 SE부터 대규모 기업 시스템을 위한 EE까지 용도별 맞춤 표준을 제시하여 확장성까지 확보했습니다.

메모리를 자동으로 관리해 주는 편리함과 플랫폼 독립성이라는 무기를 바탕으로 출발한 자바는, 하드웨어와 운영체제의 한계를 소프트웨어적 아키텍처로 우아하게 해결하며 오늘날 전 세계 소프트웨어 산업의 견고한 표준으로 자리 잡았습니다.

반응형
반응형

마크다운을 기본으로 제공하는 플랫폼 총정리: 블로그, SNS, 협업 도구까지

마크다운은 단순한 메모 앱을 넘어, 현대적인 웹 플랫폼들의 '기본 표준'으로 완전히 자리 잡았습니다. 마우스에 손을 대지 않고도 깔끔한 글을 발행하고, 소통하고, 협업할 수 있도록 마크다운을 기본(Native) 편집기로 채택한 대표적인 서비스들과 각 플랫폼만의 독특한 '커스텀 마크다운' 기능을 함께 소개합니다.


1. 블로그 및 콘텐츠 발행 플랫폼 (Blogging)

글의 가독성과 플랫폼 간 이사(마이그레이션)가 중요한 블로그 생태계에서 마크다운은 필수 무기입니다.

  • 벨로그 (Velog): 국내 개발자 및 기술 블로거들에게 가장 사랑받는 플랫폼입니다. 왼쪽에는 마크다운 에디터, 오른쪽에는 실시간 미리보기(Preview) 창이 기본으로 분할되어 작동합니다.
    • 💡 커스텀 기능 (수식 지원): 벨로그는 수학 공식이나 통계 표현을 위해 LaTeX(레이텍) 문법을 내장 지원합니다. 문장 앞뒤를 $ 기호로 감싸면 웹 화면에 깔끔한 수학 수식이 렌더링됩니다.
  • 티스토리 (Tistory): 전통적인 WYSIWYG 에디터 외에도, 글쓰기 모드에서 '마크다운 모드'를 기본 기능으로 내장하고 있습니다.
    • 💡 커스텀 기능 (HTML 혼용): 기본 마크다운 외에도 본문 내에 직접 HTML 태그(예: <br>을 통한 다중 줄바꿈, 스타일 지정 태그)를 자유롭게 혼용해 복잡한 스킨 레이아웃을 직접 제어할 수 있습니다.
  • Ghost (고스트): 글로벌 프리미엄 블로그 및 뉴스레터 플랫폼입니다. 에디터에서 /markdown을 입력하면 완벽한 마크다운 전용 입력 블록이 생성됩니다.

2. 소셜 네트워크 서비스 (SNS) 및 커뮤니티

텍스트 기반 소통이 중심인 프로그래밍 커뮤니티와 차세대 SNS들은 데이터 경량화와 빠른 소통을 위해 마크다운을 씁니다.

  • 디스코드 (Discord): 전 세계 게이머와 개발자들이 쓰는 채팅 앱입니다.
    • 💡 커스텀 기능 (스포일러 방지 & 언어별 하이라이팅): 텍스트 앞뒤를 파이프 라인 두 개(||텍스트||)로 감싸면 클릭하기 전까지 숨겨지는 스포일러 태그가 작동합니다. 또한 백틱 세 개(```javascript) 뒤에 언어 이름을 적으면 채팅창 내에서 코드 색상이 바뀌는 강력한 문법 강조 기능을 기본 제공합니다.
  • 레딧 (Reddit): 글로벌 최대 커뮤니티인 레딧은 댓글과 본문 작성 시 'Markdown Mode'를 기본으로 지원하여, 유저들이 정돈된 링크와 인용구를 사용해 깊이 있는 토론을 할 수 있도록 돕습니다.
  • 스팀잇 (Steemit): 텍스트 용량을 줄이고 블록체인에 영구 기록하기 위해 초기부터 마크다운을 기본 에디터 포맷으로 채택했습니다.

3. 업무 및 협업 도구 (Collaboration Tools)

현대 비즈니스 협업의 핵심은 '문서화(Documentation)'와 '빠른 소통'입니다. 마크다운은 업무 효율을 극대화하는 핵심 에디터입니다.

  • 노션 (Notion): 설명이 필요 없는 최고의 생산성 도구입니다. 노션의 모든 블록은 마크다운 문법과 100% 호환됩니다.
    • 💡 커스텀 기능 (Notion-flavored Markdown): 노션은 표준 문법을 바탕으로 고유의 확장 기능을 제공합니다. 예를 들어 서두에 >를 입력하면 인용구가 아닌 접고 펼칠 수 있는 '토글(Toggle) 목록'이 생성되며, []를 입력하면 체크할 수 있는 '할 일 목록(To-do)' 블록으로 자동 변환됩니다.
  • 슬랙 (Slack): 글로벌 업무용 협업 메신저입니다.
    • 💡 커스텀 기능 (텍스트 인라인 서식): 대화창 내에서 굵게 만들기(*텍스트*), 취소선(~텍스트~), 인라인 코드(`코드`) 등의 서식을 지원하여 개발팀과 기획팀 간의 오해 없는 명확한 소통을 돕습니다.
  • 지라 & 컨플루언스 (Jira & Confluence): 아틀라시안(Atlassian)사의 대표적인 프로젝트 관리 및 기업 위키 툴입니다. 업무 티켓을 발행하거나 기업 문서를 작성할 때 표준 마크다운 문법을 완벽하게 지원하여 기획서나 버그 리포트를 구조적으로 작성할 수 있습니다.

💡 요약: 한 번 배워서 어디서나 쓰는 마크다운

이처럼 마크다운은 "한 번 익혀두면 내 개인 메모장(노션)에서 작성한 글을 블로그(벨로그/티스토리)에 그대로 올리고, 동료들과 메신저(슬랙/디스코드)로 소통하며, 업무 티켓(지라)까지 처리할 수 있는" 강력한 생산성 치트키입니다.

플랫폼의 경계를 허무는 것은 물론, 각 플랫폼 고유의 편리한 커스텀 기능까지 더해진 마크다운 글쓰기! 아직 시작하지 않으셨다면 지금 바로 도전해 보세요!

반응형
반응형

윈도우, 맥, 리눅스를 모두 지원하는 유명 마크다운 편집기 추천

마크다운을 지원하는 수많은 도구 중에서도, 윈도우(Windows), 맥(macOS), 리눅스(Linux) 크로스 플랫폼을 완벽하게 지원하여 어떤 OS 환경에서든 이어서 작업할 수 있는 대표적인 독립형(Standalone) 에디터 4가지를 소개합니다.


1. Typora (타이포라) – 미니멀 글쓰기의 표준

마크다운 문법을 입력하는 순간 실시간으로 최종 화면을 보여주는 '실시간 렌더링(WYSIWYM)' 에디터의 원조격인 앱입니다. 왼쪽에는 소스코드, 오른쪽에는 미리보기 창을 두는 번거로움 없이 한 창에서 타이핑과 동시에 서식이 적용됩니다. 군더더기 없는 극도의 미니멀리즘 인터페이스로 글쓰기 몰입도가 매우 높으며, 이미지 드래그 앤 드롭이나 표(Table) 삽입 기능이 매우 직관적입니다. (유료, 일회성 구매)

📌 타이포라(Typora)의 매력과 사용법이 더 궁금하다면?
아래 링크에서 상세한 소개와 특징을 확인해 보세요!

👉 타이포라(Typora) 마크다운 에디터 소개 바로가기


2. MarkText (마크텍스트) – 최고의 오픈소스 무료 에디터

타이포라(Typora)가 유료화되면서 가장 강력한 대안으로 떠오른 완전 무료 오픈소스 에디터입니다. 타이포라와 마찬가지로 실시간 렌더링을 지원하여 깔끔한 화면을 제공합니다. 현재 작성 중인 단락만 강조하는 포커스 모드, 줄바꿈 시 커서가 늘 중앙에 위치하는 타자기 모드 등 글쓰기에 최적화된 환경을 아낌없이 제공합니다. 비용 부담 없이 강력한 독립형 에디터를 원하는 분들에게 최고의 선택입니다.

📌 마크텍스트(MarkText) 다운로드 및 자세한 설치 방법
윈도우 환경에서 쉽고 빠르게 설치하는 과정이 상세히 정리되어 있습니다.

👉 마크텍스트(MarkText) 다운로드 및 설치 가이드 바로가기


3. Obsidian (옵시디언) – 나만의 거대한 지식 저장소

단순한 텍스트 편집기를 넘어 '개인 지식 관리(PKM)'의 끝판왕으로 불리는 도구입니다. 모든 데이터가 내 컴퓨터에 실제 .md 파일 형태로 저장되어 안전하며, 노트와 노트 사이를 링크([[문서명]])로 연결하면 지식이 그물망처럼 연결되는 '그래프 뷰(Graph View)'를 제공합니다. 수천 개의 커뮤니티 플러그인을 통해 마인드맵, 칸반보드 등 원하는 대로 무한한 확장이 가능합니다. (개인 사용 시 무료)

📌 노트들을 연결해 지식 지도를 만드는 옵시디언(Obsidian)
강력한 지식 관리 툴인 옵시디언의 자세한 소개는 아래 글에서 확인할 수 있습니다.

👉 옵시디언(Obsidian) 마크다운 편집기 소개 바로가기


4. Visual Studio Code (VS Code) – 개발자를 위한 만능 편집기

본래 세계 최고 인기의 개발용 소스코드 편집기이지만, 마크다운 작성용으로도 전 세계 개발자들이 가장 애용하는 툴입니다. 기본적으로 강력한 마크다운 분할 미리보기(Split View) 창을 내장하고 있으며, 다양한 확장 프로그램(Extension)을 설치하면 문서 자동 목차(TOC) 생성, 수식 입력 등을 자유롭게 커스텀할 수 있습니다. 기술 블로그를 운영하거나 코드 블록이 많이 들어가는 글을 쓸 때 가장 파워풀합니다. (완전 무료)


💡 한눈에 보는 추천 가이드

사용 목적 추천 앱 주요 특징 가격
"깔끔하고 예쁜 창에서 글에만 몰입하고 싶다" Typora 실시간 렌더링, 미니멀 UI 유료
"타이포라 같은 실시간 에디터를 무료로 쓰고 싶다" MarkText 실시간 렌더링, 오픈소스 무료
"생각과 메모를 연결해 나만의 위키를 만들고 싶다" Obsidian 문서 간 링크, 그래프 뷰 무료
"코드 작성과 블로그 포스팅을 한곳에서 끝내고 싶다" VS Code 개발자 친화적, 강력한 확장성 무료
반응형
반응형

[개발/생산성] 왜 모두가 마크다운(Markdown)에 열광할까? 개요부터 역사까지 총정리

최근 개발자뿐만 아니라 기획자, 작가, 그리고 블로거들 사이에서 가장 핫한글쓰기 도구를 꼽으라면 단연 '마크다운(Markdown)'입니다. 노션(Notion), 옵시디언(Obsidian), 깃허브(GitHub) 등 우리가 자주 쓰는 생산성 툴의 중심에는 항상 마크다운이 자리 잡고 있는데요.

도대체 마크다운이 무엇이길래 이렇게 많은 사람이 찾는 걸까요? 오늘은 마크다운의 개념부터 흥미로운 역사, 그리고 처음 시작하는 분들을 위한 훌륭한 무료 마크다운 에디터 추천까지 한 번에 풀어보겠습니다.


1. 마크다운(Markdown)이란 무엇인가요?

마크다운은 텍스트 기반의 경량 마크업 언어(Lightweight Markup Language)입니다.

쉽게 말해, 복잡한 태그나 마우스 클릭 없이 몇 가지 간단한 기호만으로 텍스트의 구조와 서식을 지정할 수 있는 규칙입니다. 예를 들어, 글씨를 굵게 만들기 위해 마우스로 드래그하고 'B' 버튼을 누르는 대신, 단어 앞뒤에 별표 두 개(**텍스트**)를 붙이는 식입니다.

마크업(Markup)인데 왜 이름은 마크다운(Markdown)일까?

원래 웹페이지를 만들 때 쓰는 HTML(HyperText Markup Language)처럼 서식을 지정하는 언어를 '마크업' 언어라고 합니다. 마크다운의 창시자는 복잡하고 무거운 HTML 마크업에 반대하여, "더 가볍고, 읽기 쉽고, 단순하게 내린(Down) 언어"라는 위트 있는 의미를 담아 이름을 '마크다운'이라고 지었습니다.


2. 마크다운의 역사: "읽기 쉬운 글을 쓰자"

마크다운은 2004년, 미국의 유명 IT 블로거인 존 그루버(John Gruber)와 천재 프로그래머이자 인터넷 활동가였던 고(故) 아론 슈워츠(Aaron Swartz)가 공동으로 개발했습니다.

개발 배경: 이메일에서 얻은 힌트

당시 존 그루버는 웹에 글을 올리기 위해 복잡한 HTML 태그(<h1>, <p>, <strong>)를 일일이 입력하는 과정이 너무 번거롭다고 느꼈습니다. 코드가 글을 가려 정작 작성 중인 글의 내용을 한눈에 알아보기 어려웠기 때문이죠.

그는 사람들이 이메일을 쓸 때 강조하고 싶은 단어 좌우에 *별표*를 치거나, 언더바(_)를 긋는 아날로그적인 습관에 주목했습니다.

"굳이 변환하지 않아도, 텍스트 그 자체만으로 읽기 좋은 글을 쓸 수는 없을까?"

이 고민에서 출발한 마크다운은 '쓰기 쉽고, 무엇보다 그냥 읽어도 사람이 이해하기 가장 편한 문법'을 목표로 세상에 나오게 되었습니다.


3. 왜 지금 마크다운이 대세가 되었을까?

2004년에 나온 기술이 왜 최근 들어 더욱 폭발적인 인기를 끌고 있을까요? 이유는 크게 세 가지입니다.

  • 손이 키보드를 떠나지 않는 속도 (생산성): 마우스로 서식 버튼을 누르거나 단축키를 헤맬 필요가 없습니다. 타이핑을 하는 흐름 그대로 서식까지 지정할 수 있어서 글쓰기의 몰입도가 극대화됩니다.
  • 플랫폼을 초월하는 호환성: 워드(.docx)나 한글(.hwp) 파일은 프로그램이 없으면 열지 못하거나 서식이 깨집니다. 하지만 마크다운은 순수한 텍스트 기반의 .md 파일이기 때문에, 20년 뒤에도 어떤 기기에서든 완벽하게 열립니다.
  • Modern 도구들의 기본 표준: 요즘 가장 잘나가는 지식 관리 툴인 노션, 옵시디언뿐만 아니라 개발자들의 성지인 깃허브, 그리고 최신 블로그 플랫폼들이 모두 마크다운을 기본 언어로 채택하고 있습니다.

4. 초보자를 위한 추천 마크다운 에디터: MarkText

마크다운을 처음 시작할 때 가장 중요한 것은 "텍스트 기호들이 실시간으로 깔끔하게 변환되어 보이는가"입니다. 문법을 다 외우지 못했더라도 시각적으로 바로 확인하며 쓸 수 있어야 지치지 않기 때문입니다.

이런 조건에 딱 맞는 훌륭한 오픈소스 무료 프로그램이 바로 마크텍스트(MarkText)입니다.

  • 실시간 렌더링 지원: 기호를 입력하자마자 예쁜 서식으로 바로 바뀝니다.
  • 미니멀하고 깔끔한 디자인: 오롯이 글쓰기에만 집중할 수 있는 깔끔한 UI를 자랑합니다.
  • 완전 무료 & 오픈소스: 광고나 유료 결제 유도 없이 윈도우, 맥, 리눅스 어디서나 무료로 쓸 수 있습니다.

📌 마크텍스트(MarkText) 다운로드 및 자세한 설치 방법이 궁금하시다면 아래 링크를 참고해 보세요! 윈도우 환경에서 설치하는 과정을 아주 쉽게 정리해 두었습니다.

👉 마크텍스트(MarkText) 다운로드 및 설치 가이드 바로가기


맺음말: 글쓰기의 본질로 돌아가다

화려한 효과나 복잡한 기능에 눈이 팔려 정작 '글의 내용'에 집중하지 못할 때가 많습니다. 마크다운은 그런 복잡함을 걷어내고 오롯이 텍스트와 생각에만 집중할 수 있도록 돕는 최고의 미니멀리즘 도구입니다.

오늘 소개해 드린 에디터와 함께 가벼운 마음으로 첫 #을 입력해 보는 건 어떨까요? 글쓰기의 속도와 즐거움이 완전히 달라질 것입니다.


혹시 마크다운을 쓰시면서 어려웠던 문법이나 나만의 최애 에디터가 있다면 댓글로 함께 공유해 주세요!

반응형
반응형

📊 데일리 IT 뉴스 브리프 (2026-03-17)

최근 24시간 동안 전 세계에서 발생한 주요 IT 뉴스를 6개 섹션으로 나누어 브리핑합니다.


1. 일반 아이티

오늘의 일반 IT 분야는 글로벌 스마트폰 제조사들의 전략적 변화와 물류 혁신이 주요 화두였습니다. 삼성전자는 출시 3개월 만에 '갤럭시 Z 트리폴드'의 단종과 재고 소진 절차를 밟고 있으며, 이는 고가 폴더블 기기의 시장 수용성과 생산 비용 간의 균형 잡기에 대한 과제를 시사합니다. 한편, 아마존은 미국 전역 수백 개 도시에서 1~3시간 초고속 배송 옵션을 확대하며 커머스 시장의 지배력을 공고히 하고 있습니다. 또한, Sears의 AI 챗봇 데이터 노출 사고는 기업들이 신기술을 도입할 때 보안과 프라이버시 보호가 기술력만큼이나 중요하다는 점을 다시 한번 일깨워 주었습니다.

🔗 추천 기사

  • Oppo의 Find N6 유럽 출시 취소 및 아시아 전략 집중

    • Oppo가 최신 폴더블폰 'Find N6'의 유럽 출시를 포기하고 아시아 및 오세아니아 시장에 집중하기로 결정했습니다.
    • 유럽의 엄격한 IP 등급 기준 미달과 AI 펜 스타일러스 부재가 주요 원인으로 분석됩니다.
    • 폴더블 시장에서 지역별 맞춤형 스펙 구성과 마케팅 전략의 중요성이 부각되고 있습니다.
  • 아마존, 미국 내 1~3시간 초고속 배송 서비스 확대

    • 아마존이 약 9만 개 품목에 대해 1시간 및 3시간 내 배송 서비스를 로스앤젤레스, 시카고 등 주요 도시로 확장했습니다.
    • 기존 동일일 배송 인프라를 고도화하여 경쟁사 대비 압도적인 편의성을 제공하려는 전략입니다.
    • 물류 기술과 인프라 투자가 이커머스 경쟁력의 핵심임을 보여주는 사례입니다.

2. 반도체 분야

반도체 분야에서는 엔비디아가 하드웨어와 소프트웨어의 경계를 허무는 혁신을 이어가고 있습니다. 특히 GTC 컨퍼런스에서 발표된 DLSS 5는 생성형 AI 기술을 게임 그래픽에 직접 이식하여, 실시간으로 조명과 재질을 재창조하는 수준에 도달했음을 입증했습니다. 이는 반도체가 단순히 연산 유닛을 넘어 '창조적 기능'을 수행하는 고도화된 인프라로 진화하고 있음을 보여줍니다. 또한, 엔터프라이즈 AI 보안 강화를 위한 플랫폼 'NemoClaw'의 발표는 하드웨어 주도권을 소프트웨어 생태계로 확장하려는 엔비디아의 야심을 드러내고 있습니다.

🔗 추천 기사

  • NVIDIA DLSS 5: 실시간 생성형 AI 필터로 게임 그래픽 혁신
    • 엔비디아가 생성형 AI를 활용해 게임 내 조명과 텍스처를 실시간으로 재구성하는 DLSS 5 기술을 공개했습니다.
    • 단순한 해상도 개선을 넘어 AI가 그래픽의 사실감을 한 차원 높이는 새로운 패러다임을 제시합니다.
    • 게임 개발자들에게는 더 세밀한 제어권을, 사용자들에게는 압도적인 시각적 경험을 제공할 것으로 기대됩니다.

3. 로봇 분야

가장 눈길을 끈 소식은 게임 데이터가 로봇의 '눈'이 되는 데이터 융합 사례입니다. 니안틱(Niantic)과 코코 로보틱스(Coco Robotics)의 협력을 통해, 포켓몬 고 플레이어들이 5년 넘게 성실히 스캔한 도심 3D 지도 데이터가 배송 로봇의 정밀 내비게이션 학습에 활용되기 시작했습니다. 이는 GPS가 무력해지는 빌딩 숲에서 로봇이 자신의 위치를 파악하는 강력한 수단이 됩니다. 게이미피케이션이 실질적인 로봇 자율주행의 난제를 해결하는 혁신적인 데이터 파이프라인으로 작동하고 있는 흥미로운 국면입니다.

🔗 추천 기사

  • 포켓몬 고 데이터를 활용한 자율 배송 로봇의 진화
    • 수백만 플레이어의 지도 스캔 데이터가 자율 배송 로봇의 시각적 위치 추적 시스템(VPS) 학습에 사용됩니다.
    • 도심 내 GPS 음영 지역 문제를 게임 데이터를 통해 극복하는 혁신적인 협업 사례입니다.
    • 다만, 사용자 데이터 활용에 대한 윤리적 논란과 투명한 고지 절차에 대한 과제도 남겨두고 있습니다.

4. 가상화폐

비트코인이 7만 5천 달러 선을 돌파하며 강력한 상승 모멘텀을 보여주고 있습니다. 특히 미국 내 비트코인 ETF로 6거래일 연속 대규모 자금이 유입되며 기관 투자자들의 신뢰가 하락 압력을 이겨내는 모습입니다. 이더리움 또한 3,000달러 돌파 확률이 54%까지 상승하며 긍정적인 전망이 지배적입니다. 다만, 아르헨티나 법원의 폴리마켓 차단 명령이나 전직 경찰이 연루된 가상화폐 협박 사건처럼 규제 리스크와 보안 사고 소식도 적지 않아 시장 참여자들의 주의가 요구됩니다.

🔗 추천 기사

  • 미국 비트코인 ETF 6일 연속 순유입 및 가격 상승
    • 블랙록과 피델리티의 비트코인 ETF를 중심으로 자금이 지속 유입되며 시장 하방을 지지하고 있습니다.
    • 중동의 지정학적 긴장과 원유 시장 변동성 속에서도 비트코인이 위험 자산으로서의 매력을 유지하고 있습니다.
    • 제도권 자금의 대거 유입이 비트코인의 주류 자산 편입을 가속화하고 있음을 시사합니다.

5. 인공지능 분야

인공지능 분야는 '선택과 집중'과 '사회적 책임'이라는 두 갈래 메시지가 있었습니다. OpenAI는 방대한 제품 확장보다는 코딩 도구와 기업 고객 전용 서비스에 자원을 집중하기로 하며 실질적인 수익성 확보와 기술 경쟁력 강화에 나섰습니다. 반면, 엘론 머스크의 xAI를 상대로 한 미성년자들의 딥페이크 소송은 생성형 AI 기술이 가진 파괴적인 부작용과 이에 대응하는 기업의 강력한 안전장치 의무를 강조하고 있습니다.

🔗 추천 기사

  • OpenAI, 코딩 도구 및 기업 시장 집중 전략으로 선회
    • 프로젝트의 파편화를 막고 핵심 경쟁력인 코딩 지원과 B2B 서비스에 역량을 결집하려는 움직임입니다.
    • Anthropic 등 강력한 라이벌들과의 경쟁에서 우위를 점하기 위한 전략적 선택으로 보입니다.
    • AI 산업이 단순한 기술 과시를 넘어 본격적인 상용화 및 수익 창출 단계로 진입했음을 뜻합니다.

6. 소프트웨어/개발 분야

개발 생태계는 AI 에이전트를 안전하게 배포하고 관리하는 프레임워크 구축에 집중하고 있습니다. 특히 엔비디아가 공개한 'NemoClaw'는 오픈 소스인 OpenClaw를 기반으로 하여, 개발자들이 보안 우려 없이 기업 내부 데이터를 AI 에이전트와 연동할 수 있도록 돕습니다. 이는 개발 프로세스 자체에 AI가 깊숙이 침투하면서 발생하는 보안 취약점을 해결하려는 시도입니다. 또한, 실시간 데이터 분석 기술이 클라우드 서비스의 가격 정책에 대응하는 NAS 구축 가이드 등으로 이어지며 개인 개발 환경의 변화도 포착되었습니다.

🔗 추천 기사

  • NVIDIA NemoClaw: 오픈 소스 기반 보안 강화 AI 플랫폼
    • 기업들이 AI 에이전트를 도입할 때 가장 큰 걸림돌인 '보안' 문제를 해결하기 위한 기술적 프레임워크입니다.
    • 개발자와 기업 모두에게 유연한 개인정보 보호 기능을 제공하며 AI 도입의 진입 장벽을 낮춥니다.
    • 미래의 소프트웨어 개발은 이러한 보안 플랫폼 위에서 AI 에이전트를 조립하는 형태가 될 것임을 예고합니다.

#kr #kr-dev #talkit #it news #it brief #tech #daily #korea #가야태자 #it뉴스 #데일리브리프

반응형
반응형

image

Google Colab & ngrok 활용 가이드: 나만의 원격 AI 서버 구축하기

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

요즘 AI 공부에 푹 빠져서 열심히 AI를 돌려보고 깊이 파고 들기도 하고 있습니다.
그런데, 자원이 문제 입니다.

제가 가진 맥북을 이용해서 작업을 하고 있는데 이 부분도 너무 좋은데 발열이 문제네요. 팬소음과 발열만 아니면 정말 좋은 것 같은데 말이죠.

그리고, 지난 번에도 말씀 드렸지만, Mac 스튜디오 울트라가 눈에 아른거리고 있습니다.
돈이 비싸서 그렇지 발열과 자원은 신켱 안쓰고 할 수 있을 텐데라는 생각을 하고 있구요.

2년 무이자 할부로 하면, 약 70만원 정도를 2년동안 매달 내야 해서, 요즘 이 생각도 하고 있습니다.

"그냥, 클러드 코드나 Google AI API를 돈을 주고 써볼까?"

그런데, 최대한 무료로 먼저 자원을 찾아 보자. 하고 찾은 것이 옛날에 잠깐 공부 했던 Google Colab 입니다.

그래서 오늘은, 고성능 GPU가 없어도 웹브라우저만으로 최신 AI 모델을 돌리고, 이를 원격 서버로 활용하는 방법을 정리해 드립니다.


1. Google Colab 시작하기 (기초 설정)

구글 코랩(Google Colab)은 설치 없이 파이썬 코드를 실행할 수 있는 클라우드 기반 서비스입니다.

https://colab.research.google.com/

위 주소에서 사용할 수 있습니다.

처음 접속 하셔서 몇가지 동의를 하시고, 아래와 같이 설정 하시면 됩니다.

필수 환경 설정: GPU 활성화

비용 없이 강력한 성능을 내려면 T4 GPU를 활성화해야 합니다.

  1. 상단 메뉴에서 [런타임] > [런타임 유형 변경]을 클릭합니다.
  2. 하드웨어 가속기에서 T4 GPU를 선택하고 저장합니다.
  3. 오른쪽 상단의 [연결] 버튼을 눌러 자원을 할당받습니다.

무료로 사용할 때는 기본이 CPU 입니다.

그래서 CUDA라고 그래픽 카드를 이용한 연산을 하려면 위와 같이 T4 GPU를 꼭 선택해주셔야 합니다.

연습용으로 하겠다 하시면 그냥 기본으로 사용하셔도 됩니다.

저도 아직은 코랩을 약간의 시간동안 서버로 사용하기는 성공 했지만,

서버 프로그램이 오류를 일으키고 있습니다. ㅎㅎㅎ

그래서 수정할 계획입니다.


2. 간단한 파이썬 프로그램 실행 방법

코랩에서 새 노트를 만드시면 셀이라는 곳에 커서가 깜빡입니다.

코랩의 '셀(Cell)' 단위 실행 방식을 이용하면 코드를 직관적으로 테스트할 수 있습니다.

# 1. 텍스트 셀에 제목을 적고, 코드 셀에 아래 내용을 입력해 보세요.
name = "가야태자"
print(f"안녕하세요, {name}님의 코랩 실험실에 오신 것을 환영합니다!")

# 2. 실행은 셀 왼쪽의 [▶️] 버튼을 누르거나 [Shift + Enter]를 입력합니다.
import torch
print(f"GPU 가용 여부: {torch.cuda.is_available()}")

위소스를 입력하시고,

왼쪽 위에 플레이 버튼을 누르시면 파이썬이 잘 실행 되는 것을 볼 수 있습니다.

장비에 2 CORE CPU 와 T4 GPU(with 12GB RAM)을 사용할 수 있어서.

8b는 테스트했을 때무리였고, ㅠ.ㅠ 3B 정도의 모델은 잘 돌아 갑니다.


그리고 여기서 Colab의 아쉬운 점이 있습니다.
바로 외부에서 해당 서버에 접근 할 수 없다는 점인데요.
이부분을 해결 해주는 서비스가 ngrok.com 입니다.

저는 집에 있는 컴퓨터에 번역기가 사용할 AI API를 만들고 있는데 ^^

일단 제미나이 무료 API를 사용하고 잇습니다.

그리고, 바로 코렙에 번역 API를 띄워놓고 사용하고 싶어서 시도 하고 있습니다.

그래서 번역용 파이썬이 코렙에 있는 번역 API를 호출 하면, 동작하도록 만들고 싶어서 찾아 본 서비스가 ngrok 입니다.

제게는 너무 고마운 서비스네요 ^^

3. ngrok.com을 활용한 외부 연결 방법

내 코랩 서버를 집 밖에서도 접속 가능한 API 서버로 만들려면 ngrok이 필요합니다.

ngrok 가입 및 토큰 발급

  1. ngrok.com에 가입합니다.
  2. Dashboard에서 'Your Authtoken' 메뉴로 들어가 토큰을 복사합니다.

보안 주의사항 (토큰 관리)

  • 위에서 받은 토큰은 무조건 본인만 사용하셔야 합니다. - 예시: 2Aul...XXXX...REs

연결 코드 예시

코랩 셀에 아래 코드를 입력하여 외부 URL을 생성합니다.

!pip install pyngrok

from pyngrok import ngrok

# 보안을 위해 토큰은 마스킹 처리된 본인의 토큰을 입력하세요
NGROK_TOKEN = "2AulC*****************************S"  # 예시
ngrok.set_auth_token(NGROK_TOKEN)

# 8000번 포트로 터널 생성
public_url = ngrok.connect(8000)
print(f"공개된 서버 주소: {public_url}")

서버가 켜지면, 공개된 서버 주소 URL 다음에 나오는 주소를 브라우저에 입력하면 필요한 서비스를 웹으로 활요할 수 있습니다.


4. 실전! 하이브리드 번역 서버 가동

저는 이 방식을 활용해 Qwen 2.5 3B 모델을 코랩에 올리고, 제 맥북에서 API로 호출하는 3원 하이브리드(Gemini + Colab + Local) 번역 시스템을 운영 중입니다.

  • 장점: 맥북의 발열 감소, 무료 GPU 활용, 언제 어디서든 나만의 AI 비서 가동!

추후에 실제 코드는 정리가 되면 한번 같이 공유할 기회가 있을 것 같습니다.

지금은 열심히 작성하고 공부해서 서비스를 만들어 보려고 합니다.

공부하는 부분에 대해서 어떤 점이 잘 못 되었었는지 또 공유 드리겠습니다.

감사합니다.

#GoogleColab #ngrok #AI서버 #파이썬 #GPU #가야태자 #IT지식공유

반응형
반응형

image

📰 주간 글로벌 IT 뉴스 트렌드 리포트

2026년 3월 8일 ~ 15일 (2주차)

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

이번주도 에이아이와 함께 일주일간 기사를 분석해서 가져왔습니다.

영문 뉴스들과 한글 뉴스들도 함께 있습니다.

수집 기사 DB + 구글 뉴스 종합 분석 | 5개 주요 섹션


🔬 1. 반도체 (Semiconductor)

AI 인프라 수요 확대에 힘입어 반도체 업계는 구조적 변화의 중심에 있다. 가장 주목받는 이슈는 엔비디아의 GTC 2026 컨퍼런스로, 차세대 AI 반도체 '베라 루빈(Vera Rubin)'의 상세 사양이 공개될 예정이다. 베라 루빈은 TSMC 1.6나노(A16) 공정을 활용, 인류 역사상 최초 1나노급 AI 칩이 될 가능성이 제기된다. 엔비디아는 이미 TSMC 최대 고객사로 올라선 상태로, 매출 기여도가 12%에서 19%로 급증하며 애플을 추월했다.

메모리 분야에서는 'RAMaggedon' 경보가 현실화되고 있다. AI 데이터센터가 LPDDR5 RAM을 대량 흡수하면서 공급 부족 우려가 높아졌고, 게이밍·PC용 메모리 가격이 동반 상승할 전망이다. SK하이닉스는 HBM3E 공급을 주도하고 있으며, HBM4 경쟁에서 삼성전자와의 격차가 초점이 되고 있다. 삼성은 2나노 양산에 집중 중이지만 TSMC와의 기술 격차를 좁히는 것이 관건이다.

또한 애플의 맥북 네오(MacBook Neo)가 iFixit 분해 테스트에서 10년 만에 가장 수리하기 쉬운 맥북이라는 평가를 받았다. 배터리를 18개 볼트로 탈착 가능하게 설계했지만, RAM·저장장치는 여전히 납땜 처리되어 수리 점수 6/10점을 기록했다.

🔗 원문 기사 링크


💰 2. 가상화폐 (Cryptocurrency)

트럼프 행정부가 약 100억 달러 규모의 암호화폐를 전략 보유 자산(Strategic Reserve)으로 공식화하면서 기관 투자자들의 관심이 폭발적으로 높아지고 있다. 기존 정부 몰수 자산 활용 방안으로 시작된 이 계획은 비트코인과 기타 알트코인을 포함한 복합 포트폴리오가 될 가능성이 높으며, 민간 기관의 도입 신호로 해석된다.

규제 측면에서는 미국 SEC와 CFTC가 '공동 조화 이니셔티브'를 발표하며 첫 번째 통합 규제 프레임워크를 예고했다. 특히 스테이블코인 발행에 대한 은행 허용 방침은 JP모건, 뱅크오브아메리카 등 대형 은행의 시장 진입 가능성을 열었다. 한국에서도 가상자산기본법 2단계 입법에 스테이블코인 규율 조항이 포함될 예정이다.

바젤 III 규제 완화도 주목받는다. 바젤 III 규정 완화가 비트코인을 포함한 디지털 자산에 대한 은행권 유동성 공급을 크게 늘릴 수 있다는 분석이 나왔다. 카자흐스탄 중앙은행은 2026년 4월부터 3억 5천만 달러 규모의 암호화폐 자산 투자를 시작할 계획이다.

🔗 원문 기사 링크


⚔️ 3. 전쟁 / 지정학 (War & Geopolitics)

트럼프 2기 행정부의 관세 포화가 IT 산업 전방위를 강타하고 있다. 반도체·가전·스마트폰에 최대 25% 상호 관세가 부과될 경우 글로벌 공급망 재편은 불가피하다. 특히 애플, 삼성 등 주요 하드웨어 업체는 중국 탈출 속도를 높이고 있으며 인도·베트남으로 생산 거점을 이전 중이다. 클라우드 인프라 건설 비용 상승으로 마이크로소프트·아마존 등의 데이터센터 투자도 영향을 받을 전망이다.

우크라이나 전선에서는 AI 무기화 트렌드가 가속화되고 있다. 드론 스웜·자율 타격 체계에 AI가 접목되며 전쟁의 모습이 근본적으로 바뀌고 있다. 동시에 러시아의 사이버 공세도 거세져 우크라이나뿐 아니라 NATO 회원국 기반시설이 지속적으로 표적이 되고 있다. 전쟁 종료 시 '제2 마셜플랜'으로 불리는 디지털 재건 투자가 예상되며, 글로벌 IT 기업들의 우크라이나 진출 가능성도 높아지고 있다.

중동 분쟁 장기화와 AI 데이터센터의 전력 소비 급증이 에너지 공급망 압박으로 이어지는 지정학적 연결 고리도 부각되고 있다.

🔗 원문 기사 링크


💻 4. IT 일반 (General IT)

게임 업계에는 먹구름이 드리우고 있다. Xbox 창립자 시머스 블랙리(Seamus Blackley)가 Xbox의 쇠퇴를 경고하는 발언을 내놓으며 커뮤니티를 충격에 빠뜨렸다. AI 확산에 따른 개발 일자리 감소, 콘솔 단종, 하드웨어 원가 상승이 삼중고로 작용하고 있다. 특히 Xbox Series X|S 일부 모델의 단종이 공식화되며 마이크로소프트의 게임 전략 전환이 현실화됐다는 해석이 나온다.

스마트폰 분야에서는 삼성 갤럭시 S26 울트라가 최대 관심사다. 하드웨어 내장형 프라이버시 디스플레이 기능을 탑재해 물리적 화면 보호막 없이도 어깨너머 시선 차단이 가능하다. 다만 1,300달러라는 가격에 비해 이전 세대 대비 혁신성이 부족하다는 평가도 있다. Facebook(메타)은 창작자 대상 사칭 계정 신고 기능을 대폭 강화하며 플랫폼 신뢰도 회복에 나섰다.

🔗 원문 기사 링크


🤖 5. 인공지능 (Artificial Intelligence)

AI 업계의 판도를 바꾸는 소식이 연이어 터졌다. 구글은 Gemini 2.0 Flash를 API로 정식 출시하며 멀티모달 기능과 추론 속도를 대폭 향상시켰다. 특히 1초 이내 응답 속도를 달성하며 엣지 디바이스 적용 가능성을 열었고, 기업 LLM 시장의 경쟁이 한층 격화됐다. OpenAI는 GPT-4o 기반 '딥 리서치(Deep Research)' 기능을 유료 사용자에게 확대 적용해 복잡한 정보 조사 자동화 수준을 끌어올렸다.

AI 고용 충격은 더 이상 예측이 아닌 현실이 됐다. 글로벌 IT 기업들의 채용 공고에서 '주니어 소프트웨어 엔지니어' 자리가 줄고, AI 운영·프롬프트 엔지니어링 직군이 늘어났다. 특히 콜센터·데이터 입력·일부 QA 직군의 AI 대체율이 60%를 넘었다는 조사가 발표됐다.

오픈소스 진영도 약진 중이다. DeepSeek R2, Llama 4가 임박했다는 소식이 들리며 오픈소스와 상용 모델 간의 성능 격차가 빠르게 좁혀지고 있다. AI 에이전트 분야에서는 Anthropic Claude가 자율 웹 브라우징·파일 조작 기능으로 주목받고 있다.

🔗 원문 기사 링크


🏷️ 태그 (Tags)

영문 태그:
#technology #semiconductor #blockchain #crypto #bitcoin #artificialintelligence #AI #geopolitics #gaming #weekly #ittrends #nvidia #tsmc #korea

한글 태그:
#기술 #반도체 #가상화폐 #비트코인 #인공지능 #AI #지정학 #전쟁 #게이밍 #주간IT뉴스 #엔비디아 #TSMC #삼성 #IT트렌드


반응형
반응형

image

에이전트 시대의 자동화 엔진: Google Opal, n8n, 그리고 Make.com 심층 분석

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

최근 AI 에이전트 기술이 급격히 발전하면서, 단순히 정해진 워크플로우를 따라가는 '자동화'를 넘어 AI가 스스로 판단하고 도구를 사용하는 '자율화'의 시대로 접어들고 있습니다.

저는 그동안 리눅스의 crontab부터 자바 기반의 Spring Batch, 그리고 제가 직접 코딩해서 만든 자체 도구들을 주로 사용해 왔습니다. 그러다 최근 n8n이라는 도구를 접했는데, 이건 정말 '신세계'더군요. 오늘은 제가 매료된 n8n을 포함해, 에이전트 시대를 이끌 세 가지 플랫폼 Google Opal, n8n, 그리고 Make.com을 심층 비교해 보고자 합니다.


1. 플랫폼별 특징 및 비교 (Google Opal vs n8n vs Make)

n8n: 에이전트와 워크플로우의 완벽한 결합 (추천!)

  • 핵심 철학: "강력한 유연성과 확장성." 오픈소스 기반으로 노드 구성과 코드(Python/JS) 작성을 자유롭게 할 수 있습니다.
  • 특징: MCP(Model Context Protocol) 지원에 가장 적극적입니다. 에이전트가 n8n 워크플로우를 도구처럼 사용하게 하거나, 내부의 LangChain 노드를 통해 Memory(기억)Vector Store(벡터 DB)를 시각적으로 조립할 수 있습니다.
  • 사용 후기: 직접 코드를 짜던 저에게 시각적 자유도와 제어권을 동시에 주는 아주 훌륭한 툴입니다. 보안이 중요한 환경에서 Self-hosted로 운영할 수 있다는 점이 큰 매력입니다.

Google Opal: AI-First 노코드 플랫폼

  • 핵심 철학: "말하면 이루어진다." 사용자가 자연어로 의도를 설명하면 AI(Gemini)가 최적의 워크플로우를 자동으로 구성합니다.
  • 특징: 2026년 업데이트된 'Agent Step' 기능이 핵심입니다. 에이전트가 목표를 이해하고 필요한 도구를 스스로 선택해 실행하며, 구글 워크스페이스(문서, 메일 등)와 한 몸처럼 움직입니다.
  • 기대감: n8n을 쓰면서 만족하고 있지만, 구글 생태계의 '생각하는 허브'인 Opal도 조만간 직접 써보고 그 후기를 전해드릴 예정입니다.

Make (구 Integromat): 비주얼 자동화의 정석

  • 핵심 철학: "직관적인 연결." 방대한 앱 생태계를 시각적인 버블 형태로 가장 이해하기 쉽게 구현합니다.
  • 특징: 수천 개의 앱 연동이 필요하고 시각적인 직관성을 중시하는 마케터나 운영팀에 최적화되어 있습니다. 다만, 에이전트의 자율성이나 MCP 수준의 깊은 연동은 현재 발전 중인 단계입니다.

2. 에이전트 통신을 위한 준비: CLI와 MCP

AI 에이전트(Claude, Gemini 등)가 이러한 시스템들과 대화하려면 표준화된 인터페이스가 필요합니다.

  • CLI (Command Line Interface): 에이전트가 터미널 명령어를 통해 프로그램을 직접 실행합니다. tjks와 같은 전용 CLI 도구를 활용하면 에이전트의 활동 반경이 넓어집니다.
  • MCP (Model Context Protocol): 에이전트와 외부 도구를 잇는 'USB-C 포트' 같은 공통 규격입니다. n8n 같은 시스템에서 MCP 서버를 활성화하면 코딩 없이도 에이전트에게 내 도구를 학습시킬 수 있습니다.

3. Google Anti-gravity(안티 그래비티)와의 연동 시나리오

요즘 구글의 Anti-gravity(AG) 환경을 사용 중인데, 여기에 n8n과 Opal을 엮으면 진정한 '초자동화'가 가능해집니다.

  1. n8n + Anti-gravity (외부 확장):
    안티 그래비티 에이전트가 구글 외부의 데이터(예: Steemit, 개인 DB)가 필요할 때, n8n을 'Web-hook Gateway'로 활용해 데이터를 안전하게 주고받을 수 있습니다.
  2. Opal + Anti-gravity (네이티브 엔진):
    안티 그래비티 내에서 Opal의 'Agent Step'을 활성화하면, 에이전트가 분석한 내용을 바탕으로 실시간 파일 생성이나 일정 조율 등의 Sub-tasks를 완벽하게 수행합니다.

4. 마치며

단순한 비주얼 연동이 필요하다면 Make를, 구글 생태계 안에서 AI로 자동 워크플로우를 생성하고 싶다면 Google Opal을 추천합니다. 하지만 저처럼 개발자적 마인드로 '나만의 에이전트 시스템'을 정교하게 구축하고 싶다면 MCP를 지원하는 n8n이 현시점 가장 강력한 대안입니다.

조만간 Google Opal도 직접 연동해 보고 n8n과 비교해서 어떤 점이 다른지 상세히 공유해 드리겠습니다. 여러분은 어떤 도구로 미래의 자동화를 준비하고 계신가요?


음 일단, 재밌네요. 요즘 AI 관련 공부를 하면서 필요한 도구들을 정리하고 있습니다.

오늘 소개해 드린 툴은 일단 자동 실행 도구들입니다.

일단 Opal을 사용하고 싶어서 조사하던 중에 AI와 함께 글을 작성 했습니다.

감사합니다.

https://steemit.com/@talkit

반응형
반응형

image

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

Jenkins Installation & Setup on macOS

1. Jenkins란 무엇인가요? (What is Jenkins?)

Jenkins는 소프트웨어 개발 과정에서 CI/CD(지속적 통합 및 지속적 배포)를 자동화해주는 가장 대중적인 오픈소스 자동화 서버입니다. 수백 개의 플러그인을 통해 빌드, 테스트, 배포 등 개발 사이클의 모든 단계를 자동화하여 개발 효율을 극대화해 줍니다.

2. Jenkins의 주요 기능 카테고리

지속적 통합 (Continuous Integration, CI)

개발자들이 변경한 코드를 정기적으로 공유 저장소에 통합하고, 이를 자동으로 빌드 및 테스트하는 기능입니다. 이를 통해 코드 오류를 조기에 발견하고 개발 품질을 상시 유지할 수 있도록 돕습니다.

지속적 배포 (Continuous Delivery/Deployment, CD)

빌드와 테스트가 완료된 소프트웨어를 스테이징이나 운영 환경에 자동으로 배포하는 프로세스입니다. 수동 개입을 최소화하여 고객에게 새로운 기능을 더 빠르고 안정적으로 전달할 수 있게 합니다.

워크플로우 자동화 (Automation)

단순 반복적인 개발 업무부터 복잡한 파이프라인 구성까지 코드로 관리(Pipeline as Code)할 수 있습니다. 스케줄링이나 특정 이벤트 트리거를 통해 24시간 중단 없는 자동화 환경을 구축합니다.

방대한 플러그인 생태계 (Plugin Ecosystem)

Git, Docker, Kubernetes, Slack 등 수천 개의 외부 도구와 손쉽게 연동할 수 있는 플러그인을 제공합니다. 사용자의 환경에 맞춰 기능을 무한히 확장할 수 있는 것이 Jenkins의 가장 큰 장점입니다.

3. 사전 준비 (Prerequisites)

  • Homebrew: 패키지 관리자가 설치되어 있어야 합니다.
  • Java (JDK): Jenkins 실행을 위해 JDK 17 또는 21이 권장됩니다.

2. 설치 단계 (Installation)

JDK 및 Jenkins 설치

터미널에서 아래 명령을 실행합니다.

# OpenJDK 21 설치
brew install openjdk

# Jenkins LTS(Long Term Support) 버전 설치
brew install jenkins-lts

환경 변수 설정 (Optional)

시스템이 OpenJDK를 찾을 수 있도록 심볼릭 링크를 설정합니다.

sudo ln -sfn /opt/homebrew/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk

3. 서비스 실행 및 접속

서비스 시작

# Jenkins 서비스 시작 (재부팅 시 자동 실행)
brew services start jenkins-lts

# (참고) 서비스 중지
# brew services stop jenkins-lts

웹 인터페이스 접속

브라우저에서 아래 주소로 접속합니다.

4. 초기 설정 (Initial Setup)

관리자 비밀번호 확인

설치 직후 터미널에서 다음 명령을 통해 초기 비밀번호를 확인합니다.

cat ~/.jenkins/secrets/initialAdminPassword

(예: 67f73****************************)

숫자와 영문으로 이루어져 있습니다.

플러그인 설치 및 계정 생성

  1. 'Install suggested plugins'를 클릭하여 기본 플러그인을 설치합니다.
  2. 관리자(Admin) 계정 정보를 입력하여 생성을 완료합니다.
  3. Jenkins URL 설정을 확인하고 완료합니다.

5. tjks 연동을 위한 API 토큰 발급

CLI 도구인 tjks가 Jenkins와 통신하려면 API 토큰이 필요합니다.

  1. [사용자] -> [사용자명(관리자)] 클릭
  2. 왼쪽 메뉴의 [설정(Configure)] 클릭
  3. API Token 섹션에서 [Add new Token] 클릭
  4. 이름 입력 후 [Generate] 버튼 클릭
  5. 중요: 생성된 토큰은 단 한 번만 표시되므로 반드시 안전한 곳에 기록해 두십시오.

지속적인 통합 이라는 주제를 이야기 할때 여러가지 CI/CD 도구들 중에 가장 많이 이야기 되는 녀석 입니다.

일단 제 맥북에 설치하면서 매뉴얼을 작성해 둡니다.

요즘은 AI가 설치해달라고 하면 해줍니다.

심지어 도커로 구성하게 해달라고 해도 해줍니다.

너무 편리해서 좋은지 무서운지 잘 모르겠습니다. ㅠ.ㅠ


그리고 또 조금 재밌는 툴을 만들어 보려고 합니다.

https://www.steemit.com/kr/@bomspring/jenkins-mcp

@bomspring 님 글에서 아이디어를 얻어서 저는 AI와 사용자가 활요할 수 있는

CLI를 구현해 보려고 합니다.


내일 이 주제로 글을 작성하겠지만, 이름 하여 tjks 입니다.

Talkit Jenkins 의 약자 입니다.

이제 오픈도 했겠다 신나게 글을 작성해 보겠습니다.

감사합니다.

https://steemit.com/@talkit 에서도 연재 중입니다.

반응형
반응형

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

오랫만에 무료 소프트웨어 카테고리에 글을 작성 합니다.

최근에 맥을 사용하면서 소프트웨어로 잘사용하고 있는데 제 블로그의 노트패드 관련글에 댓글로 알려주셔서 알게 된 소프트웨어 입니다

맥(Mac)과 리눅스에서도 Notepad++를? 크로스 플랫폼 에디터 'NotepadNext' 소개 및 설치 방법

윈도우(Windows) 환경에서 개발을 하시거나 간단한 텍스트 편집을 하실 때 Notepad++는 빠르고 가벼우며 강력한 기능으로 많은 사랑을 받는 에디터입니다. 하지만 맥(Mac)이나 리눅스(Linux) 환경으로 넘어오게 되면 Notepad++가 기본적으로 지원되지 않아 아쉬움을 느끼는 분들이 많습니다.

오늘 소개해 드릴 프로젝트는 바로 이러한 아쉬움을 완벽하게 달래줄 NotepadNext 입니다!

NotepadNext 스크린샷


🚀 NotepadNext란?

NotepadNext GitHub 바로가기

NotepadNext는 Notepad++를 크로스 플랫폼(Windows, Linux, macOS) 환경에서 구동될 수 있도록 새롭게 구현한(reimplementation) 오픈소스 프로젝트입니다. 기존 Notepad++의 친숙한 UI와 기능들을 다른 운영체제에서도 동일하게 활용할 수 있도록 개발되었습니다.

C++와 Qt 프레임워크를 기반으로 개발되어 네이티브에 가까운 성능을 보여주며, 가벼운 텍스트 에디터가 필요한 분들에게 아주 유용한 선택지입니다.


💻 설치 방법 (OS별 가이드)

NotepadNext는 각 운영체제에 맞는 다양한 설치 방식을 지원합니다.

1.  macOS (맥북)

가장 추천하는 방법은 Homebrew를 이용한 설치입니다. 터미널을 열고 아래 명령어를 입력하세요.

brew tap dail8859/notepadnext
brew install --no-quarantine notepadnext

Tip для Mac 사용자: Mac의 기본 폰트 스무딩 기능 때문에 윈도우와 글꼴이 다르게 보일 수 있습니다. 윈도우와 비슷한 느낌을 원하신다면 터미널에서 다음 명령어를 입력 후 재부팅해보세요.
defaults -currentHost write -g AppleFontSmoothing -int 0

2. Linux (리눅스)

리눅스에서는 Flatpak을 이용하거나 AppImage를 다운로드하여 바로 실행할 수 있습니다.

# Flatpak을 이용한 설치
flatpak install flathub com.github.dail8859.NotepadNext

3. Windows (윈도우)

윈도우 환경에서는 일반적인 패키지 인스톨러나 무설치(Zip) 버전을 지원합니다. Winget을 사용하신다면 터미널에서 간편하게 설치할 수 있습니다.

winget install dail8859.NotepadNext

모든 운영체제의 설치 파일은 공식 GitHub 릴리즈 페이지에서도 직접 다운로드할 수 있습니다.


활용법 및 주의사항

  • 친숙한 단축키와 UI: NotepadNext 실행해 보면 아시겠지만, 상단 탭, 화면 분할, 검색/바꾸기(정규식 지원), 구문 강조(Syntax Highlighting) 등 Notepad++의 핵심적인 매력을 그대로 가져왔습니다. 기존에 사용하던 단축키나 방식 그대로 활용하시면 됩니다.
  • 아직은 완벽하지 않을 수 있어요: 개발자 노트에 따르면 현재 전반적으로 안정적이고 사용 가능하지만, 아직 구현 중이거나 버그가 존재할 수 있어 매우 중요하고 치명적인 작업에는 주의를 당부하고 있습니다. 가벼운 코드 편집이나 로그 텍스트 분석 등에 우선적으로 활용해 보시는 것을 추천합니다.

맥이나 리눅스 환경에서 가볍게 쓸 수 있는 텍스트 에디터를 찾고 계셨다면, 익숙함과 편리함을 모두 갖춘 NotepadNext를 한 번 설치해 보세요!

노트패드++ 대신에 저도 잘 사용하고 있습니다.

감사합니다.

반응형
반응형

주간 IT 동향 리포트 (최근 1주 요약본)

안녕하세요, 가야태자 @talkit 입니다. 최근 1주일간 (2026년 3월 초) 구글 뉴스 및 글로벌 IT 뉴스 데이터를 깊이 있게 분석하여, 여러분이 놓치지 말아야 할 IT 업계 핵심 트렌드 4가지를 정리했습니다. 이번 주는 글로벌 지정학적 갈등의 심화와 함께 끊임없이 진화하는 인공지능(AI), 그리고 그 기반이 되는 반도체(RAM) 시장 및 애플의 신제품 소식들이 복합적으로 맞물려 기술 시장의 큰 흐름을 만들어냈습니다.


1. 전쟁 및 지정학적 리스크 (글로벌 파급효과)

상세 분석 (Market Insights)
최근 미국과 이스라엘의 이란 대규모 공습으로 시작된 중동 지역의 군사적 긴장감은 단순한 지역 분쟁을 넘어 글로벌 경제 및 IT 산업 생태계 전체를 흔들고 있습니다. 전쟁과 사이버 안보의 경계가 무너지고 있으며, 일각에서는 군사 목적의 AI 활용(가상전쟁 자동화 등)에 대한 우려까지 현실화되고 있습니다. 지정학적 불안감이 극에 달하면서 글로벌 투자 심리는 위축되었으며, 통신 인프라 및 핵심 원자재 물류 차질 리스크가 하드웨어 기업들의 심각한 잠재적 위협 요소로 대두되고 있습니다. 기술 패권 경쟁이 "안보"라는 이름 아래 더욱 노골화되는 양상입니다.

** 관련 참고 기사**


2. 인공지능 (AI 최신 동향 및 응용)

상세 분석 (Market Insights)
AI 기술은 이제 연구 단계를 넘어 산업 현장과 국가 안보 시스템 깊숙이 침투하고 있습니다. 삼성전자는 2030년까지 제조 현장을 'AI 자율공장'으로 전면 전환하겠다는 대담한 계획을 발표하며 스마트팩토리 혁신을 주도하고 있으며, 의료 부문에서는 예일대가 머신러닝 기반 맞춤형 암 백신 설계 모델을 오픈소스로 공개하는 등 파격적인 성과를 내고 있습니다. 한편으로는 트럼프 미 대통령이 군사적 활용을 둘러싼 갈등으로 특정 AI 서비스('앤트로픽') 사용 중단을 지시하는 등, 막강해진 AI 권력을 통제하려는 국가 차원의 견제와 윤리적 고민도 동시에 깊어지는 한 주였습니다.

** 관련 참고 기사**


3. 하드웨어 및 램(RAM/HBM) 공급망 동향

상세 분석 (Market Insights)
AI 수요의 급증으로 고대역폭 메모리(HBM) 및 반도체 수출은 역대급 호조를 그리고 있으나, 정작 1월 산업생산 통계에서는 반도체 생산이 4.4% 감소하는 기현상이 관찰되었습니다. 이는 최첨단 고부가가치 칩셋(HBM 등)에 생산 라인이 쏠리면서 범용 메모리(RAM) 쪽의 생산 라인이 조정되거나, 중동 리스크 여파로 팹(Fab) 운영 및 물류가 부분적인 차질을 빚고 있기 때문으로 분석됩니다. 즉, 수출 단가는 크게 올랐으나 전체적인 '물량' 측면에서의 하드웨어 공급망은 다소 삐걱거리고 있으며, 향후 로컬 제조사들의 설비투자와 안정적인 수율 확보가 하드웨어 시장의 핵심 과제가 될 것입니다.

** 관련 참고 기사**


4. 맥북 및 애플 생태계 (신제품 및 시장 반응)

상세 분석 (Market Insights)
애플은 정체된 하드웨어 폼팩터 시장을 자체 실리콘 파워로 돌파구 삼고 있습니다. 최신형 MacBook Pro에 탑재될 'M5 Pro' 및 'M5 Max' 칩을 전격 공개하며, 온디바이스(On-device) AI 구동 성능을 비약적으로 끌어올렸습니다. 특히 외부 클라우드 연결 없이 기기 자체에서 무거운 AI 연산을 매끄럽게 처리할 수 있는 구조적 혁신을 이뤄냈다는 평가입니다. 아울러 미니 LED 기술을 적용한 'Studio Display XDR' 발매 소식까지 겹치며, 전문가 대상의 프리미엄 하드웨어 생태계를 더욱 확고히 다졌습니다.

** 관련 참고 기사**


5. 블록체인 및 가상자산 시장 (지정학적 리스크와 시장 변동성)

상세 분석 (Market Insights)
최근 지정학적 위기(비트코인 수혜론 대두)와 연준의 경제 지표 발표 기대감이 얽히며 가상자산 시장은 극심한 변동성을 겪고 있습니다. 미·이스라엘발 중동 분쟁이 격화되면서 일부 국가(이란 등)에서는 자국 통화 붕괴 우려로 암호화폐 거래량이 폭증하는 등 피난처(Safe Haven) 성격의 수요가 발생하고 있습니다. 한편 국내에서는 하나카드의 스테이블코인 국내 결제 협업 추진이나, 가상자산 '시장조성자' 도입 검토 등 코인 시장을 주류 금융권으로 편입시키기 위한 제도적, 인프라적 움직임이 매우 활발하게 전개되고 있어 블록체인의 실생활 적용 기대감을 한층 끌어올리고 있습니다.

** 관련 참고 기사**


종합 요약 및 향후 전망

[일주일 요약]
이번 주 IT 업계는 '극단의 하이브리드'를 경험했습니다. 첨단 산업인 AI와 고성능 반도체 수출은 폭발적으로 성장하고 있으나, 그 이면에는 전쟁이라는 물리적 파괴 행위와 지정학적 리스크가 기술 공급망을 집어삼키려는 모순된 상황이 전개되었습니다. 특히 미국 연방 정부 차원에서 특정 AI 기업을 제재하기 시작한 점, 그리고 전쟁 공포 속에서 블록체인 기반의 가상자산이 대체 자산으로 급부상하는 모습은 기존의 경제 시스템이 크게 요동치고 있음을 시사합니다.

[앞으로의 전망]
앞으로는 '기술의 안보화''자산의 디지털화'가 IT 시장의 가장 큰 화두가 될 전망입니다. AI 인프라와 첨단 램(HBM), 그리고 자체 생태계를 구축한 애플처럼 위기에 흔들림 없는 기업들만이 가치를 인정받을 것입니다. 또한 글로벌 금융 불확실성이 지속됨에 따라, 제도권에 점차 편입되고 있는 스테이블코인과 가상자산 시장으로 자산이 쏠리는 '헤지(Hedge)'성 자금 이동 현상이 더욱 뚜렷해질 것으로 예상됩니다. 기기 자체적인(On-device) 성능을 끌어낸 엣지 기술과 탈중앙화 핀테크가 향후 성장을 이끌 핵심 동력으로 자리 잡을 것입니다.

가야태자의 스팀잇

반응형
반응형

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

최근에 postgreSQL을 설치할일이 있어서 참고한 블로그들을 간단하게 정리 해봅니다. 

[DB] postgreSql Centos7에 설치 및 설정하기 :: hyeoneee's blog (tistory.com)

 

[DB] postgreSql Centos7에 설치 및 설정하기

postgresql을 Centos7에 설치해보겠당 근데 서버가 yum이나 library를 인터넷에서 받아오는 환경이 아니어서 tar 파일을 postgresql에서 받아주었다. https://www.postgresql.org/ftp/source/v12.0/ PostgreSQL: File Browser www.

hyeonyeee.tistory.com

설치 문서는 위 글을 참고 했습니다. 

wget https://ftp.postgresql.org/pub/source/v12.5/postgresql-12.5.tar.gz

저도 위 글을 저자 분과 비슷하게 계정에 설치 할일이 있어서 거의 그대로 따라 했습니다. 

단, wget로 받은 프로그램은 위 주소를 사용했습니다. 

https://devlog.jwgo.kr/2018/05/25/getting-start-postgres/#:~:text=%EC%82%AC%EC%9A%A9%EC%9E%90%20%EC%83%9D%EC%84%B1%20psql%20%EC%A0%91%EC%86%8D%20%ED%9B%84%20%EC%8B%A4%ED%96%89%20create%20user,%EC%82%AC%EC%9A%A9%EC%9E%90%EB%AA%85%20with%20superuser%3B%20alter%20user%20%EC%82%AC%EC%9A%A9%EC%9E%90%EB%AA%85%20with%20createrole%3B

 

postgresql을 처음 시작할 때 필요한 간단 명령어 · Tonic

사이트 운영에 도움을 주실 수 있습니다. 고맙습니다. --> postgresql을 처음 시작할 때 필요한 간단 명령어 2018년 05월 25일 초기 설정 postgresql 위치 확인 이 명령으로 경로가 나오지 않으면 여기를

devlog.jwgo.kr

설치후에 실행해야할(?) 몇가지 문제는 위 문서를 따라서 해결 했습니다. 

https://sujinisacat.tistory.com/9

위 문서에서는 postgreSQL과 개발 PC가 서로 달라서 원격에서 접속 할 수 있도록 위 문서를 따라서 수행을 했습니다. 

디비버로 서버 외부에서 접속이 되도록 해 놓은 상태 입니다. 

여러분들도 따라하시면 충분히 하실 수 있을 것으로 생각 됩니다. 

그리고, 혹시나 안되시는 부분이 있으면, 댓글 남겨 주시면 도와 드리겠습니다.

감사합니다. 

반응형
반응형

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

오늘은 카프카라는 프로그램을 설치 해보겠습니다. 

카프카에 대한 설명은 조금 안바빠지면 달고, 까먹지 않도록 카프카를 설치 하는 과정을 글에 담을 예정입니다. 

그래도 간단하게 카프카를 이야기 하면,

소스와 타겟을 연계해주는 프로그램 또는 링크드인에서 개발한 Message Queue 정도로 생각 됩니다. 

Apache Kafka 카프카는 아파치의 메인 프로젝트 중에 하나 입니다. Linkedin에서 개발 후에 아파치 재단에 기부 했습니다. 

그럼 본격적으로 설치를 시작 해보겠습니다. 

Java가 리눅스에 설치 되어 있다고 생각하고 설치를 시작 하겠습니다.

 

https://kafka.apache.org/quickstart

 

Apache Kafka

Apache Kafka: A Distributed Streaming Platform.

kafka.apache.org

저는 우선 저문서를 보고 따라해 보겠습니다. 

그런데 약간 변경 해야할 부분이 있어서 변경 하면서 진행 하겠습니다. 

카프카를 다운로드 해야 하는데 저기서는 최신 버전을 다운로드 하고 있습니다. 

제가 다운로드 해야할 버젼은 2.13-3.40 이라서 위에서 현재 링크 걸려 있는 링크를 변경 해야 합니다. 

https://kafka.apache.org/downloads

 

Apache Kafka

Apache Kafka: A Distributed Streaming Platform.

kafka.apache.org

위 페이지로 이동 합니다. 

Scala의 버전이 뭔지는 모르겠지만, 설치 해야 할 버전이 2.13 즉 앞에 것이고 뒤에 것이 실질적으로 카프가 버전 입니다. 

3.4.0

Kafka 3.4.0 includes a significant number of new features and fixes. For more information, please read our blog post and the detailed Release Notes.

위 부분에 있는 두번째 파일을 다운로드 합니다. 

cd /opt
mkidr kafka
cd kafka
wget https://archive.apache.org/dist/kafka/3.4.0/kafka_2.13-3.4.0.tgz

저는 /opt 폴더에 요즘은 설치를 하고 있스니다. 예전에는 /usr/local 에 설치를 많이 했었습니다. 

다운로드 끝났으면 다운로드 받은 파일을 압축을 해제 합니다. 

tar xzvfp kafka_2.13-3.4.0.tgz

압축이 잘 해제 되었으면

해당 폴더로 이동 합니다. 

cd kafka_2.13-3.4.0
 # Start Zookeeper
 bin/zookeeper-server-start.sh config/zookeeper.properties

주키퍼를 우선 실행 합니다. 

실행 방법은 위에서 두번째 줄을 복사 붙여 넣기 하시면 됩니다. ^^

위아 같이 실행 하시면 실행은 됩니다만, 해당 창을 계속 띄워 두고 있어야 합니다. 

우선은 띄우두고 ^^

카프카를 실행 해보겠습니다. 

새로운 콘솔창을 하나 더 여십시오 Putty로 한번더 연결 하셔도 됩니다. 

cd /opt/kafka/kafka_2.13-3.4.0

# Start Kafka
bin/kafka-server-start.sh config/server.properties

요렇게 하시면 잘 실행이 될 것입니다. 

단, 디렉토리는 직접 설치한 디렉토리로 이동 하셔야 합니다. 

창을 하나 띄워서 간단하게 실제로 카프카에 토픽을 하나 만들어 보겠습니다. 

그리고, 오늘 글은 마치도록 하겠습니다. 

cd /opt/kafka/kafka_2.13-3.4.0
# Create topic
bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092

위와 같이 토픽을 만드실 수 있습니다. 

이번에도 Putty를 그대로 두시고 새 Putty를 여서서 접속 하신 다음에 위 명령어를 입력해 주셔야 합니다. 

저는 순서대로 실행 했더니 ^^

Created topic quickstart-events.

위와 같은 결과가 나왔습니다.

이왕 토픽을 만들었으니, 토픽 리스트도 한번 보겠습니다. 

# Show topic information
bin/kafka-topics.sh --describe --topic quickstart-events --bootstrap-server localhost:9092

위 명령어를 입력 했더니 아래와 같이 잘 실행 되었습니다. 

Topic: quickstart-events        TopicId: N8Ymu4GGTNiCgSp63YK_cw PartitionCount: 1       ReplicationFactor: 1    Configs:
        Topic: quickstart-events        Partition: 0    Leader: 0       Replicas: 0     Isr: 0

앗 위에서 설명 드린다고 한 것을 하나 못한게 있어서 

이어서 작성 하겠습니다. 

우선, 여러분들이 띄워 둔 zookeeper, kafka 실행 창을  콘트롤(Ctrl) + C 키를 눌러서 중단 하십시오.

systemctl형식으로 만들어도 좋습니다. 

하지만, 이번에는 그냥 백그라운로드로 실행하는 방법을 알려 드리겠습니다. 

 cd /opt/kafka/kafka_2.13-3.4.0
 # Start Zookeeper
nohup bin/zookeeper-server-start.sh config/zookeeper.properties &
 
 # Start Kafka
nohup bin/kafka-server-start.sh config/server.properties &

위와 같이 실행 하시면 됩니다. 

아까는 중단 할 때 콘트롤(Ctrl) C를 이용해서 했는데 백그라운드로 떠있는 아이들은 어떻게 죽이나요?

종료 하는 방법은 켜실때와 반대로 카프카 먼저 죽이고,

주키퍼를 죽이는 것이 좋습니다. 

cd /opt/kafka/kafka_2.13-3.4.0
#Stop kafka
bin/kafka-server-stop.sh

#Stop zookeeper
bin/zookeeper-server-stop.sh

위 명령어를 수행 해서 죽일 수 있습니다. 

[2]+  Exit 143                nohup bin/kafka-server-start.sh config/server.properties
[1]+  Exit 143                nohup bin/zookeeper-server-start.sh config/zookeeper.properties

백그라운드로 실행 되었던 2가지 명령어가 종료 된 것을 볼 수 있습니다. 

감사합니다. 

 

 

반응형

+ Recent posts