Journey to CS 60

JSP 실행 매커니즘

1. filename_jsp.java 형식의 파일filename_jsp.java는 JSP 파일이 실행되기 위해 서블릿(Servlet) 소스 코드로 변환된 결과물이다.우리가 작성하는 .jsp 파일은 HTML 태그와 Java 코드가 섞여 있는 형태다.하지만 웹 서버(정확히는 WAS)는 JSP 파일 그 자체를 직접 실행할 능력이 없다.서버는 오직 컴파일된 자바 클래스 파일(.class)만 실행할 수 있다.따라서 내부적으로 JSP를 자바 소스 파일로 변환하는 과정을 거치는데, 이때 생성되는 것이 바로 서블릿 파일이다.2. JSP의 실행 메커니즘 (Lifycycle)사용자가 브라우저에서 filename.jsp를 호출하면 서버 내부에서는 다음과 같은 일이 벌어진다.변환(Translation): 톰캣 등의 WAS가 ..

Journey to CS/웹 2026.03.26

[Java] 메서드의 메모리 적재 원리와 클래스 선언 규칙

1. 메서드를 메모리에 올리는 두 가지 방법자바에서 메서드는 성격에 따라 메모리에 적재(Load)되는 시점과 방식이 다르다. 1️⃣라이브러리 클래스에서의 메서드보통 기능을 제공하는 역할을 하는 클래스들이다.인스턴스 메서드 (Instance Method): new 연산자를 통해 객체를 생성하는 순간 메모리에 올라간다. 객체마다 고유한 상태(필드)를 가질 수 있으며, 반드시 객체 생성 후에만 사용할 수 있다.정적 메서드 (Static Method): 프로그램이 실행되자마자 메모리(Method Area)에 자동으로 올라간다. 객체 생성 없이 클래스명.메서드명()으로 즉시 호출할 수 있다.2️⃣실행 클래스에서의 메서드public static void main이 포함된, 프로그램의 시작점이 되는 클래스다.프로그램..

[Java] static과 인스턴스 - JVM이 main 메서드를 찾아가는 방법

public, static, 그리고 new 이 세 가지 키워드는 자바의 동작 원리와 메모리 관리 방식을 이해하는 데 중요하다.각 키워드의 역할과 객체 생성 과정에서의 메모리 흐름을 살펴본다. 1. main 메서드가 public이어야 하는 이유JVM(Java Virtual Machine)이 프로그램을 실행할 때, 클래스 외부에서 main 메서드를 찾아 호출해야 한다.만약 main 메서드가 public이 아니라면 JVM은 해당 메서드에 접근할 수 없으며, 프로그램은 시작을 할 수 없다.따라서 main은 항상 외부로 완전히 개방된 public 상태여야 한다. default 접근 제어메서드 앞에 아무런 제어자도 붙이지 않으면 자동으로 default 상태가 된다.이는"같은 패키지 내부"에서만 접근이 가능하다는 뜻..

Jenkins와 Kubernetes를 조합한 CI/CD 파이프라인

1. Jenkins의 작동 메커니즘과 생태계Jenkins는 다양한 외부 서비스들을 하나로 묶어주는 오케스트레이터(Orchestrator) 역할을 수행한다.젠킨스의 전체적인 CI/CD 흐름은 다음과 같다. SCM(Source Code Management) 연동: 젠킨스 파이프라인에서 SCM은 자동화의 트리거(Trigger) 역할을 한다. Webhook을 통해 코드 변경을 실시간으로 감지하고 작업 공간(Workspace)으로 소스를 가져온다.(Checkout)CI(지속적 통합): 빌드 도구와 테스트 프레임워크를 통해 코드 품질을 검증하고 실행 가능한 아티팩트*를 생성한다.CD(지속적 배포): 생성된 아티팩트를 레지스트리에 저장하고 최종 목적지인 서버나 클러스터에 배포한다.💡아티팩트(artifact)란?소스..

Journey to CS/웹 2026.01.24

[Java] 래퍼 클래스(Wrapper Class)와 오토 박싱

자바는 객체 지향 언어지만 성능을 위해 비객체형인 기본형(Primitive)을 지원한다.하지만 제네릭이나 컬렉션 프레임워크처럼 객체만 다룰 수 있는 상황에서는 기본형을 객체로 감싸야 하는데, 이때 사용하는 것이 래퍼 클래스(Wrapper Class) 다.박싱(Boxing)과 언박싱(Unboxing)Boxing: 기본형 → 래퍼 클래스 (int → Integer)Unboxing: 래퍼 클래스 → 기본형 (Integer → int)JDK 1.5부터는 컴파일러가 이를 자동으로 처리해주는 Auto-boxing/Auto-unboxing을 지원한다.덕분에 개발자는 기본형과 래퍼 클래스를 혼용해서 사용할 수 있다.📌코드 예시 : null 처리와 유틸리티 활용래퍼 클래스는 null을 담을 수 있어 DB 연동 시 유용..

[Java] 기본형(Primitive)과 참조형(Reference)의 메모리 구조 차이

자바의 변수는 데이터를 저장하는 방식에 따라 크게 두 가지로 나뉜다.이 둘의 차이는 '데이터가 메모리의 어디에, 어떻게 저장되는가'에 있다.1. 기본형 (Primitive Type)C언어의 일반 변수와 같다.메모리의 스택(Stack) 영역에 실제 값(Literal)을 직접 저장한다. int, double, boolean 등 8가지 타입이 존재하며, null을 가질 수 없다.종류타입 이름크기저장 가능한 값의 예시비고논리형boolean1 bit*true, false조건문(if)에서 주로 사용문자형char2 byte'A', '가', '3'문자 하나만 저장 (작은따옴표 사용)정수형byte1 byte-128 ~ 127파일 데이터 등 매우 작은 단위 short2 byte-32,768 ~ 32,767C언어 호환 외엔..

Spring Boot와 NestJS를 비교해보자

이번 포스팅에서는 백엔드 개발 생태계의 두 프레임워크, 자바 진영의 스프링부트와 노드(Node.js) 진영의 NestJS의 구조적 차이를 알아보고, 각각의 네트워크 처리 방식과 보안적 관점을 알아본다. 1. 언어 및 런타임 환경우선 사용하는 언어와 실행 기반부터 차이가 있다.Spring Boot: Java(or Kotlin)를 기반으로 하며 JVM(Java Virtual Machine) 위에서 동작한다. 강력한 정적 타입 시스템과 객체 지향 프로그래밍(OOP)을 강제하여 대규모 프로젝트의 유지보수성과 안정성을 보장한다.NestJS: TypeScript를 기반으로 Node.js 런타임 위에서 동작한다. 자바스크립트의 유연함에 타입의 안정성을 더했으며, 프론트엔드(React, Vue 등)와 언어를 통일할 ..

Journey to CS/웹 2026.01.10

리눅스 환경에서 Node.js/Express로 웹 서버 구동하기

가상화 기술과 클라우드 환경이 보편화되면서 웹 애플리케이션의 구조는 거대한 모놀리식(Monolithic) 형태에서 가볍고 유연한 마이크로서비스 형태(MSA)로 변화하고 있다.특히 Docker 컨테이너나 Kubernetes Pod 환경에서는 애플리케이션이 얼마나 '가볍게' 구동될 수 있는지가 관건이다.이러한 트렌드 속에서 기존의 Apache/Nginx와 Tomcat 조합보다 훨씬 경량화된 Node.js와 Express.js가 백엔드 개발의 핵심 도구로 자리 잡았다.리눅스(Ubuntu) 환경에서 Node.js 개발 환경을 구축하고, 버전 호환성 문제를 해결하며 간단한 웹 서버를 띄우는 과정을 단계별로 정리한다.1. 환경 구축: NVM을 이용한 Node.js 설치리눅스 시스템의 패키지 매니저(apt)를 통해 ..

Journey to CS/웹 2026.01.08

[Spring Boot] Spring Initializr로 프로젝트 시작하기 (+인텔리제이 환경설정)

Spring Initializr를 이용한 프로젝트 생성 방법과 IntelliJ에서 발생할 수 있는 주요 오류 해결 방법 정리1단계: Spring Initializr 설정 (start.spring.io)먼저 Spring Initializr 사이트에서 프로젝트의 뼈대를 만든다. [설정 예시]Project: Gradle - GroovyLanguage: JavaSpring Boot: SNAPSHOT이나 M1이 붙지 않은 최신 정식 버전 (예: 4.0.x, 3.4.x 등)Project Metadata: Group, Artifact 이름 설정Packaging: JarJava: 17 (현재 가장 많이 쓰이는 LTS 버전)💡 중요: 여기서 Java 17을 골랐다면, 이후의 모든 IntelliJ 설정도 17로 통일해야..

Journey to CS/웹 2026.01.03

[수강 후기] 비전공자도 이해할 수 있는 Docker 입문/실전

이 강의를 선택하게 된 계기백엔드/클라우드를 공부하기 시작하면서 프로젝트를 배포할 때 많이 사용하는 도커를 접하게 되었는데, CLI 환경에서 이미지를 내려받고 컨테이너를 띄우고 하다보니 어떤 원리로 동작을 하는 것인지 머릿속에 잘 그려지지 않았다. 또 내가 아직 현업자가 아니다보니 현업에서는 도커를 실제로 어떻게 쓰는지 감을 잡고 싶었다. 그래서 인프런에서 도커 입문 강의를 찾아보게 되었다. 내가 선택한 강의는 JSCODE 박재성 님의 비전공자도 이해할 수 있는 Docker 입문/실전이다. 이 강의는 단순한 도커 명령어 실습 위주로 흘러가지 않고, 도커를 이용한 백엔드, 프론트엔드 프로젝트 배포 등 현업에서 자주 쓰이는 기술들의 개념을 명확하게 잡고 적용할 수 있도록 도움을 준다. 매 파트마다 주요 개..