Today I Learned
2024 스파르타 내일배움캠프 Sping 트랙 참여 // day28
shinelee26
2024. 11. 8. 22:30
오늘 진행한 학습 요약
1. 베이직 반 1회차 (간단 정리 & 웹 기초)
- JVM (Java Virtual Machine)
- 변수와 네이밍 컨벤션
- 클래스와 객체
- 상속 (Inheritance)
- 추상 클래스와 인터페이스 다형성
- Enum (열거형)
- 컬렉션 프레임워크
- 예외 처리와 제네릭
- 웹 흐름의 기초
- HTTP기초
2. 알고리즘 코드카다 Day24(작성 생략)
CodingTest Git-hub 링크 : https://github.com/chews26/CodingTest
학습 정리
1. 베이직 반 1회차 (간단 정리 & 웹 기초)
- JVM (Java Virtual Machine)
- JVM은 자바 바이트 코드를 OS에 맞게 해석하고 실행하는 가상 머신
- 자바 프로그램의 실행 환경을 제공
- OS와 하드웨어에 독립적인 실행을 가능
- Class Loader: 클래스 파일을 메모리에 로드
- Execution Engine: 바이트 코드를 기계어로 변환하여 실행
- Runtime Data Area: 프로그램 실행에 필요한 메모리 공간
- Garbage Collector: 사용되지 않는 객체를 메모리에서 해제
- 플랫폼 독립성: 한 번 컴파일된 자바 바이트 코드는 어느 OS에서나 실행 가능
- 메모리 관리: GC를 통해 자동으로 메모리를 관리
- 변수와 네이밍 컨벤션
- 변수
- 값을 저장할 수 있는 메모리 공간
- 변수의 타입은 저장되는 데이터의 형태를 결정
- 네이밍 컨벤션
- 클래스 이름: 대문자 카멜 표기법
- 메서드 이름: 소문자 카멜 표기법
- 변수 이름: 소문자 카멜 표기법
- 상수 이름: 대문자와 언더스코어
- 변수
- 클래스와 객체
- 클래스
- 객체를 생성하기 위한 틀 또는 설계도
- 속성 (Attributes): 객체의 상태나 특징을 나타내는 변수.
- 메서드 (Methods): 객체의 행동이나 기능을 나타내는 함수
- 생성자 (Constructor): 객체 생성 시 초기화를 담당하는 특별한 메서드
- 객체
- 클래스로부터 생성된 실제 메모리 상의 실체
- 프로그램에서 실제로 동작하고 데이터를 처리하는 주체
- 클래스
- 상속 (Inheritance)
- 기존 클래스(부모 클래스)의 속성과 메서드를 새로운 클래스(자식 클래스)가 물려받는 것.
- 코드 재사용성 향상
- 계층적 구조로 코드 관리 용이
- 다형성 구현의 기반
- 추상 클래스와 인터페이스 다형성
- 추상 클래스(Abstract Class)
- 객체 지향 프로그래밍에서 클래스의 상속을 위해 사용되는 개념
- 추상 클래스 자체로는 객체를 생성할 수 없음
- 하나 이상의 추상 메소드를 포함하고 있는 클래스를 의미
- 공통적인 기능을 가진 클래스를 설계할 때
- 특정 메소드는 상속받는 클래스에 따라 다르게 동작해야 할 필요가 있을 때 사용
- 추상 메소드: 소리내기()
- 🐶개(Dog)에서는 소리내기()를 '멍멍'으로 구현
- 🐱고양이(Cat)에서는 소리내기()를 '야옹'으로 구현
- 추상 메소드: 소리내기()
- 인터페이스(Interface)
- 모든 메소드가 추상 메소드인 특별한 형태의 클래스
- 클래스가 여러 인터페이스를 구현가능
- 다중 상속의 효과
- 인터페이스는 메소드의 구현을 강제하여 일관된 디자인을 유지할 수 있도록 도와줌
- 다양한 클래스들이 같은 인터페이스를 구현함으로써, 그 클래스들이 일정한 기능을 가지고 있음을 보장
- 비행 가능한 인터페이스(Flyable)
- 비행하다()
- 🛫비행기(Plane), 🦅새(Bird)가 이 인터페이스를 구현
- 비행 가능한 인터페이스(Flyable)
- 다형성(Polymorphism)
- 다형성은 '많은 형태를 가질 수 있는 성질'을 의미
- 객체 지향 프로그래밍에서 한 객체가 여러 타입을 가질 수 있는 것
- 코드의 유연성
- 코드의 재사용성
- 쉬운 유지 보수
- 추상 클래스(Abstract Class)
- Enum (열거형)
- 관련된 상수들의 집합을 표현하는 특별한 데이터 타입
- 코드의 가독성 향상
- 타입 안전성 제공
public enum Weekday {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
Weekday today = Weekday.MONDAY;
System.out.println("오늘은 " + today);
- 컬렉션 프레임워크
- 데이터의 집합을 효율적으로 관리하기 위한 클래스와 인터페이스의 집합.
- List: 순서가 있고 중복을 허용하는 컬렉션.
- Set: 순서가 없고 중복을 허용하지 않는 컬렉션.
- Map: 키와 값의 쌍으로 이루어진 컬렉션.
- 데이터의 집합을 효율적으로 관리하기 위한 클래스와 인터페이스의 집합.
- 예외 처리
- 프로그램 실행 중 발생하는 예기치 못한 상황.
- 프로그램의 비정상 종료 방지
- 오류 원인 파악 및 대응
try {
// 예외 발생 가능성 있는 코드
} catch (ExceptionType e) {
// 예외 처리 코드
} finally {
// 항상 실행되는 코드
}
- 제네릭
- 클래스나 메서드에서 사용할 데이터 타입을 외부에서 지정할 수 있게 하는 기법.
- 코드의 재사용성 증가
- 타입 안전성 제공
public class Box<T> {
private T item; // T 타입의 item이라는 변수를 가짐
public void setItem(T item) {
this.item = item; // item 변수를 설정하는 메소드
}
public T getItem() {
return item; // item 변수를 반환하는 메소드
}
}
public class Main {
public static void main(String[] args) {
Box<String> stringBox = new Box<>(); // String 타입의 Box 생성
stringBox.setItem("Hello"); // "Hello"라는 문자열 설정
System.out.println(stringBox.getItem()); // "Hello" 출력
}
}
- 웹 흐름의 기초
- URL 입력 및 분석
- 사용자가 웹 브라우저의 주소 표시줄에 URL(Uniform Resource Locator)을 입력
https://google.com/search?q=hello&hl=ko - 프로토콜 : https
- 웹 서버와 안전한 연결을 위한 HTTPS 프로토콜을 사용
- 호스트명: google.com
- 웹 페이지를 호스팅하는 서버의 주소
- 포트번호: 443
- 명시되지 않았으나 https의 기본 포트인 443을 사용
- 패스:
- /search - 서버에서 어떤 리소스를 요청하는지를 나타내는 경로
- 사용자가 웹 브라우저의 주소 표시줄에 URL(Uniform Resource Locator)을 입력
- URL 입력 및 분석
- DNS 조회
- 브라우저는 도메인 이름 시스템(DNS)을 사용하여 google.com과 같은 호스트명을 IP 주소로 변환
- 서버와의 연결
- 브라우저는 변환된 IP 주소를 사용하여 서버에 TCP 연결을 시도
- HTTPS를 사용하는 경우, SSL/TLS 핸드셰이크 과정을 통해 암호화된 연결이 설정
- HTTP 요청
- 브라우저는 HTTP 프로토콜을 통해 서버에게 웹 페이지를 요청
🍃여기서부터 Spring의 처리 과정🍃
- DispatcherServlet 수신
- 모든 요청은 먼저 Spring의 DispatcherServlet에 도달
- 이 서블릿은 프론트 컨트롤러로 작동하여 들어오는 요청을 적절한 컨트롤러에 전달하는 역할
- 핸들러 매핑
- DispatcherServlet은 요청 URL을 분석하여 해당 요청을 처리할 수 있는 컨트롤러를 찾음
- 이를 위해 HandlerMapping을 사용
- 컨트롤러 실행
- 요청이 매핑된 컨트롤러에 도달하면, Spring Framework는 해당 컨트롤러의 메서드를 호출
- 사용자가 https://yourapp.com/products/details?id=123 URL로 요청을 보냈다면, products/details 패스와 관련된 컨트롤러 메서드가 실행
- 비즈니스 로직 처리
- 컨트롤러 내부의 메서드는 사용자의 요청과 함께 전달된 파라미터 를 처리
- 예를 들어 상품의 id
- 이 정보는 서비스 계층에 전달되어 필요한 비즈니스 로직을 수행할 수 있음
- 모델 채우기
- 서비스 계층에서의 처리 결과를 컨트롤러가 다시 받아 모델 객체에 데이터를 채움
- 모델 객체는 주로 요청에 대한 응답으로 보낼 데이터를 포함
- 응답 생성 및 전송
- 서버는 HTML OR Json 응답 데이터를 생성하여 브라우저로 전송
- 콘텐츠 렌더링
- 브라우저는 받은 HTML, CSS, JavaScript 등을 해석하고 사용자에게 웹 페이지를 보여주기 위해 렌더링
- 추가 리소스 로딩
- HTML 문서 내에 추가 리소스(이미지, 스타일시트, 스크립트 등)가 있을 경우, 이들도 필요에 따라 각각의 요청을 통해 로드하고 처리
- HTTP 기초
- HTTP 요청의 종류
- GET: 무언가를 보여 달라고 요청할 때 쓰이는 명령
- POST: 새로운 정보를 보내거나 주문할 때 사용
- PUT: 이미 있는 정보를 바꾸고 싶을 때 사용
- DELETE: 무언가를 지우고 싶을 때 사용
- HTTP 상태코드 : https://developer.mozilla.org/ko/docs/Web/HTTP/Status
- HTTP 구조
- HTTP 헤더 용도
- HTTP 전송에 필요한 모든 부가정보
- 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트(브라우저) 정보 등
- 표준 헤더가 너무 많다.
- 필요한 경우 임의의 헤더 추가 가능
- HTTP 요청
- HTTP 응답
- HTTP 요청의 종류