| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
- JDBC
- MVC
- AOP
- JPA
- SpringLegacy
- 사면초가
- string
- 문제선택근거
- 공통규약
- Ajax
- 설정세팅
- TDD
- DDD
- 단위테스트
- 이벤트핸들러등록
- 로그백
- MVC요청플로우
- 냄새라도
- 공통기술
- 전전긍긍
- Transaction
- 이벤트핸들러this
- OOP
- 디스크i/o
- SEQUENCE
- 클린아키텍처
- springsecurity
- 커뮤니티서버
- model
- index
- Today
- Total
목록SERVER/Java (8)
개발이군고구마
1. 전체 흐름 2. 1단계 : JVM — "Write Once, Run Anywhere"의 비밀 Java 코드는 **컴파일하면 .class 파일(바이트코드)**이 바이트코드는 특정 OS의 언어가 아니라 JVM만 이해하는 중간 언어서버에 JVM(Java가 설치된 것)만 있으면, 어디서든 같은 JAR 파일을 실행할 수 있는 이유 3. 2단계: Gradle이 하는 일Gradle이 ./gradlew build 명령 하나로 이 4단계를 순서대로 자동 처리특히 ④ 패키징 단계가 핵심인데, 여기서 만들어지는 것이 바로 "Fat JAR" 또는 "Executable JAR" 4. 3단계: JAR 파일 안에 뭐가 들어있나?app.jar 내부 구조 (사실 zip 파일!) JAR 파일의 핵심은 MANIFEST.MF.이 안에..
1. Parser 인터페이스와 결합도/응집도import java.util.Map;// 파싱 기능을 추상화한 인터페이스public interface Parser { // 대용량 처리를 위해 Map을 인자로 받아 직접 채워넣는 방식 (Call by Reference 활용) // 반환값을 List로 할 경우, 중간 단계 메모리 소모가 커지므로 Map을 전달받아 채우는 것이 효율적 void parse(String filePath, Map phoneBook);}import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;import java.util.Map;// CSV 파싱 구현체public class Csv..
1. 학습 내용 데이터가 들어오면, 메모리(Buffer)에 올리고, 쪼개고(Split), 적절한 **그릇(Map)**에 담는다 텍스트 파일 ↓문자 스트림 (Reader) ↓토큰 단위 해석 ↓구조화된 데이터 (Map / List / Object) ↓매핑 / 조합 로직 Java I/O: FileInputStream -> InputStreamReader -> BufferedReader로 이어지는 보조 스트림String 조작: split, substring, indexOf 만으로 원하는 문자열을 발라내기CSV → 구조화 (row, column)JSON → 구조화 (object, array, key-value)자료구조 개념두 구조를 어떤 공통 모델로 표현하고어디서 매핑/조합할지 사고할 수 있는가 2. 주어진 상..
스프링 웹 개발을 하다 보면 MultipartFile이나 Jackson 라이브러리가 내부적으로 스트림을 처리해주기 때문에 로우 레벨(Low-level)의 I/O(Input/Output) 처리를 직접 다룰 기회가 적다. 하지만 다음과 같은 상황에서는 직접 제어해야할 필요가 있다. 대용량 엑셀/CSV 업로드: 파일 전체를 메모리에 올리면 OutOfMemory가 발생하므로, InputStream이나 BufferedReader로 한 줄씩 읽으며 처리외부 API 연동: HttpURLConnection 등을 로우 레벨로 쓸 때 스트림을 직접 닫아야 함 1. 기본 개념: Stream과 Reader/Writer ▶ 자바의 I/O는 크게 두 가지 흐름Byte Stream (InputStream, OutputStream)..
1. List 종류 List는 ‘순서가 있고, 중복을 허용하는’ 컬렉션 인터페이스대표 구현체ArrayList (동적 배열 기반)LinkedList (이중 연결 리스트 기반) 2. Array(=ArrayList)와 LinkedList의 차이점 ▶ ArrayList 원리데이터가 메모리 상에 연속적으로 나열됨.Index(주소)를 통해 데이터에 즉시 접근 가능 (Random Access).공간이 꽉 차면 더 큰 새 배열을 만들고(=복사) 데이터를 전부 이사(Copy)시켜야 함.중간에 데이터를 삭제하면, 뒤에 있는 데이터들을 한 칸씩 앞으로 당겨야 함(Shift).public class MyArrayList { private Object[] elements; // 내부는 실제 배열(Array)로 되어 있음..
프레임워크에서 제공하는 편의 기능에 익숙해져, 내부 동작 원리를 놓치고 있었다. 1. Map 자료구조란 ㄴ데이터를 "순차적"으로 저장하는 List와 달리, Key-Value의 쌍 으로 데이터를 관리하는 자료 구조 ▶ 핵심특징key의 유일성 (ID 역할)순서 없음 : 데이터가 들어온 순서를 보장하지 않음빠른 검색 : Key를 알면 Value를 매우 빠르게 찾을 수 있음 2. Map의 종류 ▶ Java의 주요 Map 종류 HashMap: 가장 일반적으로 사용됨. Hashing을 사용하며 순서를 보장하지 않음.TreeMap: Key를 기준으로 정렬된 상태를 유지함.LinkedHashMap: 입력된 순서를 기억함.Hashtable / ConcurrentHashMap: 멀티스레드 환경에서 안전(Thre..
EC2에 스프링 프로젝트를 클론 받고 빌드 후 배포하면서 문득 무지성으로 스프링 "서버를 띄웠다" 는 것을 깨달았다. 그래, 나는 지금까지 아무 생각없이 기계처럼 손가락만 까딱 벌레 표시를 눌러왔던 계야...지금이라도 알고가자, 어떻게 스프링의 코드들이 서버에서 실행되는지! 1. JDK 설치 우선 java 코드를 실행하기 위해선 JDK 가 필요하다. JDK는 자바 컴파일러, 클래스 라이브러리, 개발 도구 등을 포함하고 있어 자바 프로그래밍을 위한 필수적인 요소 라고 할 수 있겠다. JDK 안에는 프로그램을 실행시키도록 만들어둔 파일인 .jar 을 가지고 있는 JRE와 어떤 운영체제든 java를 실행시킬 수 있게 만드는 가상머신 JVM 프로그램을 포함한다. 현재 작업하고 있는 Spring 프로젝트는 ..
1. 문제 상황 프로젝트 프론트 API 통신 결과는 특정 어노테이션을 붙혀서 inner 클래스로 매핑시켜서 받는 구조이다. 어노테이션 뒤에 해당 값을 받아오는 클래스를 정의하고-> 클래스에 선언된 멤버필드에 프론트에서 받아온 변수들이 매핑되는 로직public ExResponse practice(@RequestModel ExRequest.class Exdto dto) { ...} 이때 inner 클래스에 static 변수를 붙혀주지 않으면 에러 발생=> 왜 inner 클래스는 static 변수를 붙혀주어야 하는 걸까? 2. 자바의 메모리 구조 JVM 로딩되는 순간 작성한 코드들은 자바의 메모리에 각각 나누어 저장된다. 런타임 영역에는 클래스 메서드 등의 실행코드 static, 상수 관련 정보가 ..