반응형
반응형

 

1. 웹 애플리케이션, WAS, 서버의 기본 구조

웹 서비스는 클라이언트(사용자)의 요청을 받아 처리하고 응답을 보내는 과정으로 이루어집니다. 이 과정에는 주로 클라이언트, 웹 서버(Web Server), WAS(Web Application Server), **데이터베이스(Database)**라는 핵심 구성 요소들이 참여합니다.

1.1. 클라이언트 (Client)

  • 역할: 사용자가 서비스를 이용하는 접점으로, 웹 브라우저, 모바일 앱 등이 해당됩니다. 사용자의 요청을 웹 서버나 WAS로 보냅니다.

1.2. 웹 서버 (Web Server)

  • 역할:
    • 정적 콘텐츠 제공: HTML, CSS, JavaScript, 이미지 파일 등 고정된(변하지 않는) 파일을 클라이언트에게 직접 전달합니다.
    • 동적 요청 위임: 클라이언트의 요청 중 서버에서 처리해야 할 동적인 콘텐츠(예: 로그인, 데이터 조회/수정 등)는 WAS(Web Application Server)에 전달합니다.
    • 로드 밸런싱: 여러 WAS에 요청을 효율적으로 분산하여 서버의 부하를 줄이고 안정성을 높이는 역할도 수행할 수 있습니다.
  • 예시: Apache HTTP Server, Nginx 등

1.3. WAS (Web Application Server - 웹 애플리케이션 서버)

  • 역할:
    • 동적 콘텐츠 처리 및 비즈니스 로직 실행: 웹 애플리케이션의 핵심 로직을 수행합니다. 데이터베이스 연동, 복잡한 계산, 사용자 인증, 세션 관리 등 동적인 처리를 담당합니다.
    • 웹 서버 기능 포함: WAS 자체적으로도 정적 콘텐츠를 제공하는 기능이 있지만, 대규모 서비스에서는 웹 서버와 WAS를 분리하여 효율성을 높입니다.
    • 미들웨어: 클라이언트와 데이터베이스 사이에서 애플리케이션의 핵심 기능을 수행하는 중간 소프트웨어입니다.
  • 예시: Apache Tomcat, JBoss(WildFly), WebLogic, WebSphere 등 (자바 기반 웹 애플리케이션에서는 '서블릿 컨테이너' 역할을 합니다.)

1.4. 데이터베이스 (Database)

  • 역할: 웹 애플리케이션에서 필요한 데이터를 저장하고 관리합니다.
  • 예시: MySQL, PostgreSQL, Oracle, MongoDB 등

일반적인 요청 처리 흐름:

  1. 클라이언트가 웹 서버로 요청을 보냅니다.
  2. 웹 서버는 요청이 정적 콘텐츠인지 동적 콘텐츠인지 판단합니다.
    • 정적 콘텐츠인 경우 웹 서버가 직접 클라이언트에게 응답합니다.
    • 동적 콘텐츠인 경우 요청을 WAS로 전달합니다.
  3. WAS는 비즈니스 로직을 수행하고, 필요에 따라 데이터베이스와 연동하여 데이터를 처리합니다.
  4. WAS는 처리 결과를 웹 서버로 다시 전달합니다.
  5. 웹 서버는 WAS로부터 받은 응답을 최종적으로 클라이언트에게 보냅니다.

2. Spring Boot 구조일 때의 차이점 (표로 설명)

전통적인 웹 애플리케이션 구조와 Spring Boot 기반 웹 애플리케이션 구조는 WAS의 존재 방식과 배포 방식에서 가장 큰 차이를 보입니다.

구분전통적인 웹 애플리케이션 (예: Spring Framework + WAR 배포) Spring Boot 애플리케이션 (JAR 배포)

 

WAS 존재 방식 외부 WAS 필수: Apache Tomcat, Jetty, WebLogic 등 별도의 WAS를 서버에 설치하고, 그 안에 애플리케이션(.war 파일)을 배포해야 합니다. 내장 WAS 포함: 애플리케이션 자체에 Tomcat, Jetty, Undertow 등의 WAS가 내장되어 있습니다. 별도의 외부 WAS 설치가 필요 없습니다.
배포 단위 .war (Web Application Archive) 파일 .jar (Java Archive) 파일 (내장 WAS가 포함된 독립 실행 가능한 파일)
실행 방식 외부 WAS 서버를 먼저 구동한 후, 그 안에 .war 파일을 올려야 애플리케이션이 실행됩니다. java -jar your-application.jar 명령어로 바로 실행 가능합니다. 애플리케이션 자체가 서버 역할을 합니다.
서버 설정 WAS 서버 자체의 설정(포트, 컨텍스트 경로 등)을 수동으로 구성해야 하는 경우가 많습니다. 대부분의 서버 관련 설정(내장 WAS 포트 등)이 Spring Boot의 자동 설정 기능으로 처리되어, 개발자의 수동 설정 부담이 적습니다.
개발 생산성 설정 파일(XML 등)이 많아 초기 설정에 시간이 소요되고, 배포 과정이 다소 복잡할 수 있습니다. 최소한의 설정으로 빠르게 개발을 시작할 수 있으며, 배포 과정이 매우 간소화되어 개발 생산성이 높습니다.
마이크로서비스 적합성 각 서비스마다 WAS를 설치하고 관리해야 하므로, 마이크로서비스 아키텍처에 적용하기 다소 복잡할 수 있습니다. 독립 실행 가능한 JAR 파일 형태로 각 서비스가 자체 WAS를 가지므로, 마이크로서비스 아키텍처 및 컨테이너(Docker) 환경에 매우 적합합니다.
정적 콘텐츠 처리 일반적으로 웹 서버(Nginx, Apache)가 정적 콘텐츠를 처리하고, 동적 요청만 WAS로 전달합니다. Spring Boot 애플리케이션이 직접 정적 콘텐츠도 제공할 수 있습니다. 하지만 대규모 정적 콘텐츠는 여전히 별도의 웹 서버나 CDN을 활용하는 것이 효율적입니다.
 

결론적으로, Spring Boot는 내장 WAS를 통해 애플리케이션을 독립적인 실행 파일로 만들어, 개발과 배포 과정을 획기적으로 간소화하고 생산성을 높여줍니다. 이 점이 전통적인 웹 애플리케이션 구조와의 가장 큰 차이점입니다.

반응형
반응형

스프링 부트 하루만에 배우기

책 소개

하루면 대표적인 자바 프레임워크 스프링 부트 웹 어플리케이션을 만들 수 있습니다.

스프링 부트를 개발하는 데 필요한 프로그램 설치부터 스프링 부트의 구조에 대한 설명, JPA를 이용해 데이터를 다루는 법까지 익혀봅니다. 이해하기 어려운 개념 설명보다는 코드를 작성하고 개별 코드를 설명하는 방식으로 진행하므로 초보자 분들도 보다 쉽게 다가가실 수 있으리라 생각합니다. 또한 스프링 MVC와 스프링 부트 차이에 따른 개발 방식에 대해서도 설명하므로 기존에 스프링 MVC를 사용하셨던 분들이 스프링 부트에 적응하시는 데도 도움이 되시리라 믿습니다.

국내 자바 웹 개발 트렌드는 스프링 MVC에서 스프링 부트로 많이 넘어갔다고 생각합니다. 물론 이미 기존에 스프링 MVC로 구축된 프로젝트의 경우는 어쩔 수 없겠지만, 신규로 개발하는 경우 보다 설정이 간단한 스프링 부트 프로젝트를 많이 쓰는 추세입니다.

이제 우리도, 대세에 합류해 봅시다.

 

https://wikidocs.net/book/10382

 

스프링 부트 하루만에 배우기

# 책 소개 하루면 대표적인 자바 프레임워크 스프링 부트 웹 어플리케이션을 만들 수 있습니다. 스프링 부트를 개발하는 데 필요한 프로그램 설치부터 스프링 부트의 구조에 대…

wikidocs.net

 

반응형
반응형

[JAVA] 점프 투 스프링부트 - https://wikidocs.net/book/7601

 

 

https://github.com/pahkey/sbb3/

 

GitHub - pahkey/sbb3: 점프 투 스프링부트3 책의 소스코드

점프 투 스프링부트3 책의 소스코드. Contribute to pahkey/sbb3 development by creating an account on GitHub.

github.com

 

점프 투 스프링부트

점프 투 스프링부트는 Spring Boot Board(SBB)라는 이름의 게시판 서비스를 만들어가는 과정을 설명한 스프링부트 입문서이다. 자바 설치부터 시작하여 서비스 운…

wikidocs.net

 

 

반응형
반응형

Java is Dead — 오늘날에도 여전히 Java가 적합하다고 생각하는 개발자의 5가지 오해!

https://medium.com/@sidh.thomas1/java-is-dead-6-misconceptions-of-developers-that-still-think-java-is-relevant-today-683310849855

 

Java is Dead — 6 Misconceptions of developers that still think Java is relevant today!

It is a common misconception that people still think Java is relevant in today’s day and age. In reality Java is a dying programming…

medium.com

사람들이 여전히 Java가 오늘날과 관련이 있다고 생각하는 것은 일반적인 오해입니다. 실제로 Java는 죽어가는 프로그래밍 언어입니다. Java는 세계에서 가장 널리 사용되고 널리 사용되는 프로그래밍 언어 중 하나이지만 곧 사라질 위험에 처해 있습니다. 오늘날 Java는 크고 활발한 개발자 커뮤니티를 보유하고 있으며 웹 개발, 모바일 앱 개발 및 엔터프라이즈 수준 소프트웨어 개발을 포함한 광범위한 애플리케이션에 여전히 사용되고 있지만 Java가 향후 10년 동안 살아남을 수 있을까요? 개발자가 Java에 대해 가지고 있는 오해를 알아보겠습니다.

오해 1 : Java에는 크고 활발한 개발자 커뮤니티가 있습니다. 전 세계에 수백만 명의 Java 개발자가 있으며 언어는 개발자가 지식과 리소스를 공유하는 온라인 포럼 및 커뮤니티에서 강력한 입지를 확보하고 있습니다.

이것이 계속해서 사실이지만, 개발자들이 다른 플랫폼과 프로그래밍 언어로 이동하는 속도를 보면 알 수 있으며 개인적으로 개발자들이 패닉에 빠지는 것을 보았습니다. 주요 문제는 프로그래밍 언어로서의 Java가 현대화되지 않았기 때문에 여전히 장황하게 남아 있고, 불안정하지만 매우 투박한 유형 시스템을 가짐으로써 정적 유형과 동적 유형 사이의 최악의 두 세계를 결합하고, VM에서 실행해야 한다는 것입니다. 거시적인 시작 시간(오래 실행되는 서버에는 문제가 되지 않지만 명령줄 응용 프로그램에는 문제가 됨). 요즘에는 꽤 잘 수행되지만 여전히 C 또는 C++에 비해 경쟁력이 없으며 약간의 사랑으로 C#, Go, Rust 및 Python이 해당 도메인에서 이를 능가할 수 있습니다. 실제 프로덕션 서버의 경우

오해 2 : Java는 광범위한 응용 프로그램에 사용됩니다. Java는 웹 개발 언어일 뿐만 아니라 모바일 앱, 게임 및 엔터프라이즈급 소프트웨어 개발에도 사용됩니다. 이러한 다양성으로 인해 다양한 유형의 프로젝트에 유용한 언어가 됩니다.

Java는 더 이상 모바일 애플리케이션 개발, 특히 Android에서 선호하는 프로그래밍 언어가 아닙니다. Kotlin은 이제 Android를 지배하고 대부분의 Android 개발자는 오래 전에 배를 뛰어 넘었습니다. 구글조차도 몇 년 전 오라클과의 실패로 인해 안드로이드용 사실상의 언어로서 자바를 포기했습니다. Java는 오래 전에 웹 개발 언어로서의 인기도 잃었습니다. 엔터프라이즈 개발에 관한 한 Java는 신뢰할 수 있고 안정적이기 때문에 여전히 대기업과 관련이 있습니다. 많은 신생 기업이 엔터프라이즈 소프트웨어의 첫 번째 선택으로 Java를 사용하지 않고 다른 대안을 사용하고 있습니다.

오해 3 : Java는 기본 언어입니다. 많은 최신 프로그래밍 언어는 Java의 원칙과 개념을 기반으로 구축되었으며 어떤 방식으로든 Java와 호환되도록 설계되었습니다. 즉, Java의 인기가 떨어지더라도 Java의 원칙과 개념은 계속 유효할 것입니다.

Java가 프로그래밍 여정을 시작하는 많은 사람들에게 기본 언어라는 것은 사실일 수 있지만 Java는 계속해서 매우 구식이고 융통성이 없다는 사실이 남아 있습니다. 게다가 다른 최신 프로그래밍 언어와 비교할 때 여전히 장황합니다. 즉, 특정 작업을 수행하려면 많은 코드가 필요합니다. 이로 인해 간결하고 우아한 코드를 작성하기가 더 어려워질 수 있으며 대규모 코드베이스를 유지 관리하는 데 더 많은 노력이 필요할 수 있습니다. 또한 Java가 정적으로 유형이 지정된다는 사실은 Java가 동적으로 유형이 지정되는 언어보다 더 엄격하고 덜 유연할 수 있음을 의미하므로 일부 개발자에게는 실망스러울 수 있습니다.

오해 4: Java는 주요 회사의 강력한 지원을 받고 있습니다. Java를 유지 관리하고 지원하는 회사인 Oracle은 언어에 대한 강한 의지를 가지고 있으며 개발 및 개선에 지속적으로 투자하고 있습니다. 또한 Google 및 Amazon을 비롯한 많은 주요 회사에서 제품 및 서비스에 Java를 사용합니다.

Oracle은 빠른 속도로 Java 시장 점유율을 경쟁자에게 빼앗기고 있습니다. 아래 그래프를 참조하십시오.

아래 차트는 Oracle이 여전히 시장에서 가장 큰 점유율을 차지하고 있음을 보여주지만 그 점유율은 절반 이상 감소했습니다. 2020년 Oracle은 "Java 시장의 약 75%"를 차지했지만 현재는 35% 미만입니다.

2021년 11월 Java 17이 출시된 이후 Eclipse Adoptium과 거의 비슷한 점유율을 기록하며 2위를 차지한 것은 New Relic의 수치에 따르면 Amazon입니다.

오해 5: Java는 학교와 대학에서 널리 가르칩니다. Java는 프로그래밍 개념을 가르치는 데 널리 사용되는 언어이며 학교 및 대학의 컴퓨터 과학 커리큘럼에서 자주 사용됩니다. 이는 Java를 배우고 그 기능에 익숙해지는 새로운 개발자의 꾸준한 흐름이 있음을 의미합니다.

이것은 크게 변화하고 있습니다. 소프트웨어 개발자를 꿈꾸는 젊은 대학생들은 빠르게 다른 프로그래밍 언어로 옮겨가고 있습니다. 이로 인해 이러한 다른 프로그래밍 언어에 대한 대중적인 수요로 인해 대학에서 대안을 찾는 일이 점점 더 많아지고 있습니다.

나는 이것이 논란의 여지가 있는 주제라는 것을 안다. 저는 여전히 Java를 소프트웨어 작성 방식을 혁신하고 따라야 할 다른 프로그래밍 언어에 대한 벤치마크를 만든 언어로 생각합니다. 불행하게도 언어의 소유권은 많은 금전적 이익을 남기지 않고 계속 개선할 의욕이 없는 회사의 손에 있습니다. Java는 곧 사라지지 않지만 몇 년 안에 관련성을 잃을 심각한 위험에 처해 있습니다.

반응형
반응형
>java -XX:+PrintFlagsFinal -version 2>&1 | findstr /I "heapsize permsize version"
    uintx ErgoHeapSizeLimit                         = 0                                   {product}
    uintx HeapSizePerGCThread                       = 87241520                            {product}
    uintx InitialHeapSize                          := 268435456                           {product}
    uintx LargePageHeapSizeThreshold                = 134217728                           {product}
    uintx MaxHeapSize                              := 4282384384                          {product}
java version "1.8.0_271"

Java Default Heap/Perm Size 알아내는 방법

출처: https://jang8584.tistory.com/257 [개발자의 길]

 

JVM의 default heap size 확인(리눅스, 윈도우)

1. 개요 java를 실행시킬 때, 혹은 WAS를 설치/구성 후 기동할 때 JVM옵션에 Heap, Perm 등의 설정을 넣지 않고 운영하다 쏟아져들어오는 요청들에~ 메모리를 많이 필요료하는 로직들에 의해 OutOfMemoryErr

jang8584.tistory.com

 

반응형
반응형

"자바 두명 타세요" 개발자 인력시장에 비유한 SW채용박람회

news.mt.co.kr/mtview.php?no=2020120310284718257

 

"자바 두명 타세요" 개발자 인력시장에 비유한 SW채용박람회 - 머니투데이

한 IT 공공기관이 소프트웨어(SW) 개발자 온라인 채용박람회를 진행하는 가운데 안내 포스터에 SW개발자를 새벽 인력시장 인부에 비유한 이미지를 사용해 물의를 빚...

news.mt.co.kr

한 IT 공공기관이 소프트웨어(SW) 개발자 온라인 채용박람회를 진행하는 가운데 안내 포스터에 SW개발자를 새벽 인력시장 인부에 비유한 이미지를 사용해 물의를 빚고있다.

판교창업존 운영기관인 경기창조경제혁신센터가 진행하는 '스타트업DNA-623 오픈런' 온라인 채용박람회 포스터다. 중소벤처기업부와 창업진흥원이 후원하는 이 행사는 스타트업들로부터 구인신청을 받고 이후 취업을 희망하는 구직자가 지원서를 제출하면 온라인상에서 매칭해주는 채용이벤트다.

하지만 좋은 취지와 달리 행사 안내포스터에 마치 영등포나 구로 새벽 인력시장에서 개발자를 픽업하는 듯한 이미지를 사용해 구설에 올랐다. 특히 "자바 두명 타세요"라는 문구는 이미 수년전부터 개발자들의 열악한 처우를 건설인부의 속칭 '노가다'(건축 및 토목노동자를 의미하는 일본어 유례 속어)에 비유한 사례로 회자돼 온 것이다.

최근 4차 산업혁명과 비대면 열풍으로 AI(인공지능)과 클라우드, 블록체인 등 SW시스템 개발 수요가 폭증하면서 개발자 부족현상이 심화되는 현실과도 맞지않다는 지적이다.

한 SW개발자는 "개발자 채용박람회라하면서 국가가 나서서 저런 인력시장 그림을 갖다 붙이는 것은 너무한 것 아니냐"면서 "오픈런이라는게 도망가라는 뜻인가? 개발자를 조롱하는 것같다"고 질타했다.

개발자 커뮤니티 오키의 노상범 대표는 "나름 유머라고 생각한 모양인데 담당자의 IT에 대한 인식수준이 저것밖에 안되나 싶다"고 꼬집었다.

경기창조경제혁신센터도 이같은 지적이 일자 포스터 이미지를 교체했다. 센터 관계자는 "개발자들을 모신다는 의미로 비하할 의도는 없었는데 잘못 전달된 것 같다"면서 "일부 지적이 있어 어제 바로 포스터 이미지를 교체했다"고 밝혔다.

 

반응형

+ Recent posts