
프로그래밍이란 간단히 말해 컴퓨터(CPU)에게 어떤 일을 시키기 위해 “프로그램 코드”를 작성하는 과정임.즉, 우리가 쓰는 코드는 사람이 이해하기 쉬운 문자(소스코드)이고, 최종적으로 컴퓨터가 이해할 기계어(binary) 형태로 바뀌어야 함.컴파일 언어 (예: C언어)
아래의 내용은 java_grammer 레파지토리 내 C01Basic 디렉터리에 저장되어있는 내용임핵심 포인트:클래스명 = 파일명 (대문자 시작)main() 메서드가 실행 시작점System.out.println()으로 출력입출력(IO)은 자바 기본 중 기본. Scanne
자바 기초 문법 중에서도 핵심인 연산자, 조건문, 반복문에 대해서 한 번에 정리해봤음.\+, -, \*, /, %는 다들 아는 바로 그 사칙연산임.정수끼리 나누면 몫만 나온다는 점 주의해야 함.8 / 3은 2.666...이 아니라, 그냥 2임.= 을 기반으로 한 축약형
Java 기본자료형의 문법과 입출력, 연산, 반복문, 조건문, 문자열 처리 등을 연습하기 위한 기본 예제 정리입력 예시:abc bcd efg요구사항: 0.25를 출력하기 위해 정수 나눗셈에 형 변환을 적용한다.요구사항: 문자열에 포함된 알파벳(a~z, A~Z) 개수 출
개요 아래의 내용은 java_grammer 레파지토리 `C01Basic` 디렉터리에 저장되어있는 내용을 정리하였다. > - C07ReferenceType > - C08String > - C09Array 참조자료형 기본형 vs 참조형 자바의 데이터 타입은 크게
아래의 내용은 java_grammer 레파지토리 C01Basic 디렉터리에 저장되어있는 내용을 정리하였다.C09Array배열은 선언 시 기본값으로 초기화됨. int → 0 boolean → false 참조형 → null 다른 초기화 방식도 가능함.리터럴 방식과
Java 참조자료형 중 문자열, 배열을 연습하기 위한 기본 예제 정리문자열에서 한글, 영어, 공백 등을 제거해라\[가-힣] : 한글 문자 범위 매칭\[A-Za-z] : 영문자 전체\\\\s+ : 하나 이상의 공백 문자(스페이스, 탭 등)콘솔에서 입력받은 값을 각 형식에
아래의 내용은 java_grammer 레파지토리 C01Basic 디렉터리에 저장되어있는 내용을 정리하였다.C10List.javaList는 배열이랑 다르게 값을 추가하거나 삭제할 수 있음.즉, 길이가 고정된 배열과 달리 유연하게 데이터 조작이 가능하다는 점이 제일 큼.L
아래의 내용은 java_grammer 레파지토리 C01Basic 디렉터리에 저장되어있는 내용을 정리하였다.C11Map.javaMap도 List, Set처럼 인터페이스임.주요 구현체로는 HashMap, TreeMap, LinkedHashMap이 있음.정의 : Key, V
List, Map 자료구조 백준 및 프로그래머스 문제 풀이
아래의 내용은 java_grammer 레파지토리 C01Basic 디렉터리에 저장되어있는 내용을 정리하였다.C12Set.javaSet은 중복을 허용하지 않고 순서 보장을 하지 않는 컬렉션이다.Hash 테이블 기반으로 O(1) 성능을 제공하며, 중복 제거가 필요한 경우 많
아래의 내용은 java_grammer 레파지토리 C01Basic 디렉터리에 저장되어있는 내용을 정리하였다.C13QueueStackDeque.javaQueue는 선입선출(FIFO) 구조로, 가장 먼저 들어간 데이터가 먼저 나간다.주요 구현체: LinkedList(일반 큐
아래의 내용은 java_grammer 레파지토리 C02MethodClass 디렉터리에 저장되어있는 내용을 정리하였다.C01MethodC02MethodPractice.java아래 예제는 C01Method 클래스의 코드 일부다. 먼저, for문을 이용해서 1~10까지의
아래의 내용은 java_grammer 레파지토리 C02MethodClass 디렉터리에 저장되어있는 내용을 정리하였다.C03Class.java먼저, 클래스와 객체의 관계를 간단하게 구분하자면 다음과 같다.클래스(Class) : 객체를 정의하는 틀, 설계도 객체(Inst
아래의 내용은 java_grammer 레파지토리 C02MethodClass 디렉터리에 저장되어있는 내용을 정리하였다.C04PersonMain.javaC04Person1.javaC04Person2.java이번 포스팅에서는 객체지향 프로그래밍(OOP)의 기본 개념인 클래스
아래의 내용은 java_grammer 레파지토리 C02MethodClass 디렉터리에 저장되어있는 내용을 정리하였다.C05Scope.java변수는 선언된 위치(문맥)에 따라 유효 범위가 달라진다.보통 자바에서는 크게 다음 3가지 범위로 나눌 수 있다.클래스 변수 (st
아래의 내용은 java_grammer 레파지토리 C02MethodClass 디렉터리에 저장되어있는 내용을 정리하였다.C06MethodOverloading.java같은 이름의 메서드를 여러 개 만들 수 있는 기능으로, 코드의 가독성과 사용성을 크게 향상시켜준다핵심 규칙:
아래의 내용은 java_grammer 레파지토리 C02MethodClass 디렉터리에 저장되어있는 내용을 정리하였다.C07Constructor.java생성자 특징:클래스명과 메서드명이 동일반환타입 없음 (void도 사용 X)메서드 오버로딩 가능new 키워드로 객체 생성
아래의 내용은 java_grammer 레파지토리 C02MethodClass 디렉터리에 저장되어있는 내용을 정리함C08AccountMain.java계좌 개설 → 저장 → 송금이라는 은행 시스템 워크플로우를 통해 코드의 단계별 개선 과정을 따라가며 핵심을 파악C08Acco
아래의 내용은 java_grammer 레파지토리 ``C02MethodClass`` 디렉터리에 저장되어있는 내용을 정리함> - [C11RecursiveBasicFlow.java](https://github.com/jiyean99/java_grammer/
아래의 내용은 java_grammer 레파지토리 ``C02MethodClass`` 디렉터리에 저장되어있는 내용을 정리함 > - [C11RecursiveBasicFlow.java](https://github.com/jiyean99/java_grammer/blob/ma
아래의 내용은 java_grammer 레파지토리 C03Inheritance 디렉터리에 저장되어있는 내용을 정리함C01Inheritance.javaC12RecursiveExample.java상속이란 부모 클래스의 변수와 메서드를 자식 클래스가 물려받는 것임.extends
아래의 내용은 java_grammer 레파지토리 C03Inheritance 디렉터리에 저장되어있는 내용을 정리함C04ProtectedClass.javaC05ProtectedTest.java자바에서 클래스에 사용할 수 있는 접근제어자는 public과 default(생략형
아래의 내용은 java_grammer 레파지토리 C03Inheritance 디렉터리에 저장되어있는 내용을 정리함C06AbstractMain.java추상클래스는 반드시 상속을 전제로 설계된 클래스임.즉, 직접 객체로 만들 목적이 아닌 “공통된 기본 틀”을 제공하기 위한
아래의 내용은 java_grammer 레파지토리 C04Interface 디렉터리에 저장되어있는 내용을 정리함C01AnimalInterface1.javaC01AnimalInterface2.javaC01AnimalInterface3.javaC01Cat.javaC01Dog.
아래의 내용은 java_grammer 레파지토리 C03Inheritance 디렉터리에 저장되어있는 내용을 정리함BankProgram 하위 시트MVC 또는 계층형 아키텍처 구조(Entity - Service - Controller)를 모형화한 예시이다.전체 프로그램은 다
아래의 내용은 java_grammer 레파지토리 C05AnonymousLambda 디렉터리에 저장되어있는 내용을 정리함C01InnerClassC02AnonymousClass내부클래스란, 클래스 안에 정의된 또 다른 클래스를 의미함.코드 구조를 조직화하거나 외부 클래스와
아래의 내용은 java_grammer 레파지토리 C05AnonymousLambda 디렉터리에 저장되어있는 내용을 정리함C03ComparatorComparable자바에서는 비교를 위한 인터페이스로 대표적으로 두 가지가 있음. compare 메서드의 반환값 규칙: 음수
아래의 내용은 java_grammer 레파지토리 C05AnonymousLambda/C04StreamApi.java 디렉터리에 저장되어있는 내용을 정리함C04StreamApi전통 for문 → Stream API → Optional 안전처리 워크플로우설명: 데이터와 객체
아래의 내용은 java_grammer 레파지토리 C06EtcClass 디렉터리에 저장되어있는 내용을 정리함C01MathC02Calendar C03EnumMainMath, Calendar, Enum 활용법 → 실무 활용 워크플로우Math 클래스는 수학에서 자주 쓰이는 상
아래의 내용은 java_grammer 레파지토리 C06EtcClass 디렉터리에 저장되어있는 내용을 정리함C04GenericMain제네릭 개요 → 배열 교환 → 컬렉션 활용 워크플로우제네릭은 클래스나 메서드의 타입을 파라미터화해서, 객체 생성할 때마다 다양한 타입으로
아래의 내용은 java_grammer 레파지토리 C07ExceptionFileParsing 디렉터리에 저장되어있는 내용을 정리함C01ExceptionBasicC02ExceptionAdvance예외처리 기본 → throw/throws → 실전 패턴 워크플로우예외처리 목적
아래의 내용은 java_grammer 레파지토리 C07ExceptionFileParsing 디렉터리에 저장되어있는 내용을 정리함C03FileStream 개념 → IO vs NIO → 파일 읽기/쓰기 워크플로우스트림(stream)은 실제 입력/출력 데이터를 이상화된 흐름
아래의 내용은 java_grammer 레파지토리 C07ExceptionFileParsing 디렉터리에 저장되어있는 내용을 정리함C04JsonC05HttpJsonParsingJSON 파싱 → HttpClient 요청 → 객체 변환 워크플로우현대 데이터 교환 포맷. Map
아래의 내용은 java_grammer 레파지토리 C08Thread 디렉터리에 저장되어있는 내용을 정리함ThreadMainLibrary스레드 기본 → 동시성 이슈 테스트 → 해결책 비교 → 실무 동기화 워크플로우스레드(thread)란 프로세스 내에서 실제로 작업을 수행하
아래의 내용은 java_grammer 레파지토리 C09NetWorking 디렉터리에 저장되어있는 내용을 정리함C01WebServerGetC02WebServerGet기본 HTTP GET 웹서버 구현부터 쿼리 파라미터 처리까지 순차적으로 학습하는 내용임. ServerSoc
아래의 내용은 java_grammer 레파지토리 C09NetWorking 디렉터리에 저장되어있는 내용을 정리함C03DBConnectJava에서 MariaDB 연결 및 JDBC 기본 사용법을 다룸. 웹서버와 DB 연동의 기초가 되는 기술이다.MySQL/MariaDB JD
아래의 내용은 java_grammer 레파지토리 C10Annotation 디렉터리에 저장되어있는 내용을 정리함C01ReflectionC02Validation리플렉션 기본 이해 → 어노테이션 정의 → 실전 검증 적용 순서로 진행된다. 스프링의 @Autowired, @Va
아래의 내용은 algorithm 레파지토리 A1sort 디렉터리에 저장되어있는 내용을 정리함A1sort힙 정렬을 “트리 탐색 + 재귀 호출” 관점으로 이해하기 위해, 배열을 완전이진트리로 해석하는 규칙부터 시작해 heapify로 최초 힙을 구성하고, 루트-마지막 스왑과
아래 내용은 DFS/BFS의 핵심 개념을 먼저 정리한 뒤, A2dfs, A3bfs 패키지에 있는 실습 코드(방문 순서 + BFS 최단거리)를 통해 “인접 리스트 설계 → 방문 처리 위치 → 탐색 결과가 달라지는 포인트”를 한 흐름으로 정리한 글이다.A01Dfs방문순서A
아래 내용은 Greedy(탐욕법)의 핵심 개념을 먼저 정리한 뒤, A4greedy 패키지에 있는 실습 코드(최소 동전 개수)를 통해 “정렬 기준 → 매 선택의 규칙 → Greedy가 성립하는 조건(언제 맞고 언제 틀리는지)”를 한 흐름으로 정리한 글이다.A01Greed
아래 내용은 DP(동적 프로그래밍)의 핵심 개념을 먼저 정리한 뒤, A5DP 패키지에 있는 실습 코드(계단/동전/최대·최소/수열/배낭)를 통해 “문제 정의 → 상태(state) 설계 → 점화식 → 초기값 → 반복 순서(탑다운/바텀업)”를 한 흐름으로 정리한 글이다.
아래 내용은 투포인터(two-pointer) 알고리즘의 핵심 개념을 먼저 정리한 뒤, A6투포인터 패키지의 실습 코드(A01TwoPointerBasic.java)를 통해 “문제 정의 → 아이디어 → 구현 흐름 → 시간복잡도 → 확장문제” 순으로 정리한 글이다. A01
아래 내용은 이분탐색(Binary Search) 알고리즘의 핵심 개념을 먼저 정리한 뒤, A7이분탐색 패키지의 실습 코드(A01BinarySearch.java)를 통해 “문제 정의 → 탐색 아이디어 → 반복 구조 → 복잡도 분석 → 응용”의 흐름으로 정리한 글이다.
Spring은 Java 기반 애플리케이션 개발을 위한 프레임워크로, 웹 애플리케이션을 만들 때 필요한 다양한 기능/라이브러리를 제공한다.순수 Java로 웹을 개발할 때 반복적으로 구현해야 하는 영역을 프레임워크가 표준화/단순화해서 개발 생산성을 높인다.대표적으로 다음

Spring은 Java 기반 애플리케이션 개발을 위한 프레임워크로, 웹 애플리케이션을 만들 때 필요한 다양한 기능/라이브러리를 제공한다.순수 Java로 웹을 개발할 때 반복적으로 구현해야 하는 영역을 프레임워크가 표준화/단순화해서 개발 생산성을 높인다.대표적으로 다음

스프링은 멀티 스레드 환경이며, 예를 들어 A/B/C 사용자의 요청이 동시에 들어오면 각 요청은 (요청 단위로) 스레드에서 처리된다. 이때 스프링은 보통 객체 하나를 함께 사용하는 싱글톤(Bean) 구조를 사용하고, 대표적으로 DispatcherServlet 객체가 사
※ 먼저 이전글을 반드시 읽고와야한다.\[Spring] 스프링 요청 처리 : DispatcherServlet부터 컨트롤러 메서드 실행까지이전 글에서 DispatcherServlet이 URL + HTTP 메서드를 분석해서 알맞은 컨트롤러 메서드를 찾는 과정까지 정리했다.
이전 글에서 @ResponseBody 유무에 따라 text/json/html 응답이 갈리고, GET/POST에서 @PathVariable, @RequestParam, @ModelAttribute, @RequestBody, @RequestPart로 바인딩이 이뤄진다는 걸
Author API(회원가입/목록/상세)를 만들면서 “코드는 맞는 것 같은데 결과가 계속 이상하게 나오는” 트러블을 여러 번 겪었다.결론부터 말하면, 대부분의 문제는 DB 없이 List로 레포지토리를 흉내 내는 구조 + DI 없이 new로 의존성을 연결한 구조에서 발생
아래 코드는 “Author 도메인”을 예시로 해서, 스프링 서비스 레이어에서 자주 다루는 주제(의존성 주입, 레포지토리 교체, DTO↔Entity 변환, 예외 처리, 스트림 변환)를 한 파일 안에서 실습/정리해둔 형태다. AuthorService는 Controller
아래 코드는 Spring 기반 게시판 예제에서 Author(회원) 관련 API를 제공하는 AuthorController를, “컨트롤러가 맡아야 할 책임”과 “예외 처리 개선 흐름” 중심으로 정리한 글이다. (요청/응답 DTO 설계 의도까지 포함)AuthorControl

Service에서 예외가 발생하면, 해당 Service를 호출한 Controller까지 예외가 전파된다. 이때 서버는 성공 응답 대신, 상황에 맞는 HTTP 상태코드와 응답 바디(에러 응답)를 내려줘야 한다.그런데 Controller마다 try-catch로 예외를 처리

DB 관련 의존성을 추가하고 실행했는데 에러가 나는 건 대부분 “DB 연결 정보가 없는데도 Spring이 서버 기동 시점에 DB 접근을 시도했기 때문”이다.즉, 의존성을 넣는 순간 Spring Boot가 DataSource를 만들려고 하고, 이때 url/계정정보가 없어

프로젝트에서 “지금 어떤 데이터 접근 기술을 쓰는지”는 결국 코드에 뭐가 보이냐로 판단하면 된다.JDBC는 DataSource, MyBatis는 mapper, 순수 JPA는 EntityManager, Spring Data JPA는 JpaRepository 상속이 가장

JPA에서는 EntityManager를 통해 엔티티 객체를 관리한다. 그리고 EntityManager는 영속성 컨텍스트라는 내부 공간을 유지하면서, 그 안에 올라온 엔티티의 생명주기와 변경 사항을 추적한다. 이 영속성 컨텍스트는 흔히 애플리케이션과 DB 사이에서 객체를

Gradle에서 의존성을 구분하는 핵심 이유는 “언제 필요한 라이브러리인가?”를 명확히 해서 빌드/실행/배포를 최적화하기 위해서다.컴파일 타임(compile-time) 의존성: 소스 코드를 .class로 컴파일할 때 필요한 라이브러리(코드에서 직접 참조하는 경우가 많음

프로그램 관점에서 1:N 관계를 잡는 이유(needs)는 크게 “무결성”과 “개발 편의성”으로 정리할 수 있다.무결성(FK 설정의 필요성)FK는 “존재하지 않는 회원을 참조하는 게시글” 같은 데이터를 구조적으로 막아준다. 물론 프로그램 로직으로도(작성자 조회 후 없으면

Cascade(영속성 전이)는 성능을 올리기 위한 기능이라기보다는, 연관된 엔티티를 함께 저장/삭제할 때 코드를 간결하게 만들기 위한 편의 기능에 가깝다. 즉 “부모 엔티티에 대한 작업을 자식 엔티티에도 자동으로 전파”해서, 서비스 계층에서 반복되는 저장/삭제 코드를
기본값(default)은 어디서 책임져야 할까?결론부터 정리하면, “기본값(default)은 가능하면 프로그램(도메인/애플리케이션)이 책임지고, DB default는 최소화하자”는 방향이 유지보수와 운영 측면에서 유리하다. 사용자 ↔ 프로그램 ↔ DB 구조에서 비즈니스
https://github.com/jiyean99/basic 의 b2_board 모듈을 실제 코드 기반으로 계층별로 정리해봤다. 어노테이션 + 간략 설명까지 포함.어노테이션 정리어노테이션 정리어노테이션 정리어노테이션 정리어노테이션 정리어노테이션 정리어노테이션
GitHub basic 레포지토리의 b2_board 모듈에서 초기 데이터 로드 → JWT 토큰 생성/검증 → 필터 체인 → Security 설정 → 컨트롤러 적용까지의 인증 시스템 구현 과정을 순서대로 따라가보자.각 클래스의 역할과 서로 연동되는 워크플로우를 정리한다.

로그인 API 호출 후 응답 토큰을 Environment 변수에 저장해서 이후 요청에서 {{user_token}}으로 재사용하는 실전 설정법이다.컨트롤러에서 ResponseEntity.ok(token)으로 문자열 직접 반환하므로 Postman에서 쉽게 추출 가능하다.실
JWT 단독으로는 토큰 유출 시 서버에서 폐기 불가능이라는 치명적 단점이 있다.이를 해결하기 위해 Access Token(AT) + Refresh Token(RT) 조합을 사용하는 방법을 실제 코드 구조까지 정리해보자.서버 메모리 절약: 세션처럼 서버에 상태 저장 X확

게시글 목록 조회 시 서버가 터지는 N+1 문제를 실제 코드와 쿼리 로그로 분석하고, inner join fetch로 완벽 해결하는 과정을 정리한다.사전 세팅: 게시글 5~6개 + 서로 다른 Author 등록결과: 게시글 N개 → 1 + N번 쿼리 → 서버 성능 폭발적

Spring Boot에서 환경별 설정 분리와 SLF4J/Logback 로깅 시스템을 실무 기준으로 정리한다.실행 방법내 실습 프로젝트의 경우 local과 prod로 분리하였다.환경별 설정 + 로그 레벨 분리로 개발/운영 완벽 분리 완료.

클라이언트에서 요청 → Spring Boot → 응답까지 전체 과정을 단계별로 자연스럽게 정리한다.Spring Boot는 Tomcat을 내장하여 별도 WAS 설치 없이 웹서버 + 애플리케이션 서버 역할을 동시에 수행한다.Spring Boot: 모든 요청을 Tomcat에

Spring Boot(Tomcat)에서 동시 요청 처리를 위해 쓰레드와 쓰레드풀이 어떻게 동작하는지 실무 관점에서 분석한다.쓰레드 = 프로세스 내에서 실제 코드를 실행하는 주체 (자원)핵심: 사용자 요청 1개 = 쓰레드 1개 할당WAS(Tomcat)가 멀티쓰레드를 생성

게시글 목록, 상품 리스트처럼 “전체 데이터 중 일부만 잘라서 보여주는” 기능은 대부분의 서비스에서 필수다. Spring Data JPA에서는 일반적으로 Page와 Pageable을 활용해서 페이징을 구현한다.핵심은 간단하다. 클라이언트(프론트)가 page, size,
게시글 목록 API는 보통 두 가지 요구사항이 같이 온다: 목록을 페이지 단위로 내려줘야 하고(page/size/sort), 검색 조건도 요청에 따라 붙었다 빠졌다 해야 한다(title/category/contents). Spring Data JPA에서는 이 조합을
예약 게시글 시나리오 기준으로 정리하면, 스케줄러는 “예약된 글 중에서 게시 시간이 된 것만 자동으로 게시 상태로 전환”해주는 백그라운드 작업이다. Spring에서는 @EnableScheduling + @Scheduled 조합으로 주기 실행을 쉽게 구현할 수 있고, 멀
배치는 “해야 할 작업(Job/Step)을 정의하는 프레임워크”이고, 그 작업을 “언제 실행할지 트리거를 거는 역할”은 스케줄러가 맡는 경우가 많다. 그래서 실무에서는 Spring Batch(작업 정의) + Spring Scheduler(실행 트리거) 조합을 자주 쓴다

서블릿(Servlet)은 “HTTP 요청/응답을 처리하기 위한 저수준 표준 인터페이스”이고, 스프링의 @Controller는 내부적으로 서블릿 기반 위에서 더 편하게 라우팅/바인딩/응답 생성을 할 수 있도록 추상화한 계층이다.웹 서버에서 클라이언트 요청이 들어오면 결국
Spring Boot S3 업로드 코드 스타일 비교 글 초기 코드는 “S3Client Bean만 만들어 두고, 업로드 로직을 각 도메인 서비스 메서드에 직접 작성하는 방식”이다. docs.spring 개선된 코드는 “S3Client Bean은 그대로 두되, 업로드 책

API를 만들다 보면 “모든 요청에서 공통으로 하고 싶은 일”이 생긴다. 예를 들면 요청/응답 로그를 남기거나, API별 응답 시간을 재서 병목 구간을 찾는 작업이다. 이런 코드를 각 컨트롤러/서비스 메서드마다 복붙하면 중복이 폭발하고, 핵심 로직이 지저분해진다. 이

AT: 유효기간 짧음, DB 저장X→ 얘만 쓰면 폐기처분이 안됨 RT : 유효기간 김, DB 저장O 물론 RT 써도 폐기처분 안됨 하지만 AT의 유효기간을 짧게 가져가서 검증하는 로직을 추가해주고, RT는 DB에 적재시켜 필요 시 제거하여 토큰 탈취를 대응하는 전략

반드시 사용자 → 서버의 흐름으로 진행된다.즉, 사용자가 서버에게 GET/POST 요청을 하면 서버는 “요청받은 것”만 처리해서 응답한다.그런데 실시간 기술(통신)은 사용자의 추가 요청이 없는 상태에서도, 서버가 화면에 데이터를 꽂아주는 경우가 있다.이런 실시간 구현

JMeter는 오픈 소스 소프트웨어로, 웹 애플리케이션을 포함한 다양한 서비스의 성능 테스트를 위한 툴이다.요청을 동시에 여러 개 발생시키고, 응답 시간/처리량/성공 여부 같은 지표를 통해 시스템이 버티는 한계를 확인할 수 있다.Apache JMeter 공식 웹사이트에

Swagger는 Spring Boot 애플리케이션에서 널리 사용되는 API 문서화 도구이고, 개발/테스팅을 지원한다.REST API의 엔드포인트, 파라미터, 요청/응답 데이터 형식 등을 문서로 정리해주고, UI에서 직접 호출 테스트까지 가능하게 해준다.Swagger를

동시성 이슈가 발생한 이유(Repeatable Read 환경에서의 Lost Update/경합)와, 이를 해결하기 위해 시도한 4가지 접근(격리수준/직렬화/비관적 락/Redis 단일스레드) 및 RabbitMQ 기반 RDB 동기화까지, 지금 적어둔 내용을 누락 없이 한 흐
🟢 Java 기초 & 문법 (1~40)자바의 특징이 아닌 것은?① 객체지향 ② 플랫폼 독립 ③ 포인터 직접 사용 ④ 가비지 컬렉션✅ 정답: ③📝 C/C++와 달리 포인터 직접 사용 없음JVM의 역할은?→ 자바 바이트코드 실행📝 OS와 독립적으로 실행 가능하게 함기
🟢 Spring 심화 (1~25) 1. 스프링에서 생성자 주입을 권장하는 가장 큰 이유는? ① 코드 길이 감소 ② 순환참조 방지 ③ 테스트 편의성 ④ 런타임 주입 가능 ✅ 정답: ② 📝 순환 참조를 컴파일 단계에서 방지 가

게시판 서비스 github URL: https://github.com/jiyean99/eazy-board.git이번에 Spring Boot 2.7 + Java 11 환경에서 MVC 패턴으로 게시판을 만들면서, 평소에 많이 쓰던 RESTful 방식과 흐름이 어

TDD(Test Driven Development)란? TDD는 테스트의 중요성을 강조한 개발 방법론으로, 테스트 코드를 먼저 설계하고 작성한 뒤 그 테스트를 통과시키는 방향으로 실제 기능을 개발해 나간다. 즉 “구현 먼저”가 아니라 “검증 기준(테스트) 먼저”를 세

예를 들어 주문 시스템이 있다고 가정해보자.이 시스템은 회원 파트, 상품 파트, 주문 파트로 구성되어 있다.사용자는 회원가입을 하고, 상품을 조회한 뒤, 주문을 넣는 세 가지 단계의 과정을 거치게 된다.우리의 실습에서는 이를 모놀리식 구조로 관리했지만, 실제 현업에서는

Spring Cloud는 마이크로서비스 아키텍처(MSA)를 구축하기 위한 일련의 도구를 제공하는 SPRING의 프로젝트다단일 진입점 + 라우팅 + 로드밸런싱Spring Cloud Gateway는 시스템의 입구 역할을 하는 API 게이트웨이모든 클라이언트 요청은 gate

order-system 모놀리식 아키텍처 구조 파일들을 서비스별로 분리해서 생성 api-gateway, eureka, member, product, ordering불필요한 의존성과 config 파일 제거 (RabbitMQ, Security 등)Spring Securi
Order System MSA – Saga 기반 보상 트랜잭션 설계 프로젝트 개요 이 프로젝트는 모놀리식 주문 시스템을 MSA(Microservice Architecture)로 리팩토링하고, 서비스 간 데이터 정합성을 보장하기 위해 Kafka 기반 Saga 패턴(보상 트랜잭션)을 적용한 주문 처리 시스템입니다. 최종 목표는 서비스 간 강결합 없이, 장애...
문제: Java에서 소스코드를 컴파일한 후 생성되는 파일의 확장자는?보기: ① .exe ② .java ③ .class ④ .bin답: ③문제: JVM의 메모리 영역 중 객체(인스턴스)가 저장되는 영역은?보기: ① Stack ② Heap ③ Method Area ④ PC