김영한님의 강의를 듣고 정리한다. Spring의 Controller, Service.. 등등 대부분의 클래스들은 Spring Container에 Bean으로 등록되어 사용된다. 스프링 빈은 싱글톤으로 등록된다. 이 인스턴스가 애플리케이션에 딱 1개 존재한다는 뜻이다. 이렇게 하나만 있는 인스턴에 전역변수를 선언하여 사용하면 어떤 문제가 발생할까? 해당 빈의 전역변수를 여러개의 쓰레드가 동시에 접근하여 사용하기 때문에 중간에 데이터가 바뀌거나 유실되는 문제가 발생한다. 이를 동시성 문제라고한다. 더보기 이런 동시성 문제는 지역 변수에서는 발생하지 않는다. 지역 변수는 쓰레드마다 각각 다른 메모리 영역이 할당된다. 동시성 문제가 발생하는 곳은 같은 인스턴스의 필드(주로 싱글톤에서 자주 발생), 또는 stat..
보통 쿠키와 세션을 대립되는 개념으로 많이들 알고있다. (나도 그랬었다.) 쿠키는 클라이언트에 저장 / 세션은 서버에 저장.. 그렇기 때문에 쿠키는 보안에 취약하다.. 등등 하지만 쿠키와 세션을 대립되는 개념으로만 이해하면 세션을 이해할 수 없다. HTTP 프로토콜 HTTP는 HTML 문서와 같이 리소스들을 가져올 수 있도록 해주는 프로토콜이다. HTTP는 상태를 저장하지 않는다.(Sateless) 동일한 연결 상에서 연속하여 전달된 두 개의 요청(request) 사이에는 연결고리가 없다. 이는 로그인처럼 클라이언트와 서버가 계속해서 상호작용하려고 할때 문제가 된다. 이를 보완하기 위해 HTTP 쿠키가 사용된다. 쿠키는 서버에서 Set-Cookie 헤더를 이용해 클라이언트에 저장할 수 있고, 모든 HTT..
쿠키 Set-Cookie: 서버에서 클라이언트로 쿠키 전달(응답에서 셋팅) Cookie: 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청시 서버로 전달 Sateless HTTP는 무상태(Stateless) 프로토콜이다. 클라이언트와 서버가 요청과 응답을 주고 받으면 연결이 끊어진다. 클라이언트가 다시 요청하면 서버는 이전 요청을 기억하지 못한다. 클라이언트와 서버는 서로 상태를 유지하지 않는다. 예) set-cookie: sessionID=abcde1234; expires=Sat, 26-Dec-2020 00:00:00 GMT; path=/; domain=.google.com; Secure 사용처 사용자 로그인 세션 관리(세션 키 채번) 광고 정보 트래킹 쿠키 정보는 항상 서버에 전송됨 네트워크..
1. HTTP 특징 클라이언트 서버 구조 무상태 프로토콜(Stateless), 비연결성 HTTP 메시지 단순함, 확장 가능 2. 클라이언트 서버 구조 Request, Response 구조 클라이언트는 서버에 요청(Request)을 보내고, 응답을 대기 서버가 요청에 대한 결과(Response)를 만들어서 응답 3. 무상태 프로토콜 (Stateless) 서버가 클라이언트의 상태를 보존하지 않는다. 장점: 서버 확장성 높음(스케일 아웃) -> 서버가 클라이언트의 상태를 보존하지 않으므로 각 요청을 다른 서버가 응답을 처리할 수 있음. 따라서 무한한 서버 증설이 가능하다. 단점: 클라이언트가 추가 데이터 전송 4. 비연결성 HTTP는 기본적으로 연결을 유지하지 않는 모델 일반적으로 초 단위 이하의 빠른 속도로..
1. IoC와 DI IoC(Inversion of Control)은 객체 또는 프로그램의 일부에 대한 제어를 컨테이너 또는 프레임워크로 이전하는 방법이다. IoC는 DI라고도 할 수 있는데, 이 프로세스는 객체가 생성자의 인자, 팩토리 메서드에 대한 인수 또는 객체 인스턴스가 팩토리 메서드로부터 생성되거나 반환된 후 객체 인스턴스에 설정된 속성을 통해서만 객체의 종속성을 정의하는 것이다. 이러한 구조의 장점 구현(implementation)으로 부터 작업 실행의 분리할 수 있다. 서로 다른 구현(implementation)으로 부터 쉽게 전환(switch)할 수 있다. 프로그램의 모듈성 (낮은 결합도) 컴포넌트를 구분하고, 종속성을 쉽게 바꿔가며 테스트를 쉽게 할 수 있다. 더보기 Factory Meth..
String 객체는 자바에서 제일 많이 쓰이는 객체이다.Java String Pool - JVM에 의해 String 객체들이 저장되는 특별한 메모리 공간이다.String interningString interning은 JVM이 동일한 문자열 하나만을 pool에 저장하여 메모리 사용을 최적화하는 것을 말한다.String 변수를 만들 때, JVM은 pool에서 동일한 문자열이 있는지 찾아서, 동일한 문자열이 pool에 존재하면 새로운 메모리를 사용하여 변수를 만들지 않고 메모리 주소를 참조하게 해준다.더보기문자열을 pool에서 찾을때는 해시 알고리즘을 사용하기 때문에 매우 빠른 속도로 찾을 수 있다. O(1)만약, 동일한 문자열이 없다면 새로운 String 객체를 만들어서 String pool에 넣어준다.S..
자바 바이트 코드는 JRE 위에서 동작 JRE는 자바 API와 JVM으로 구성되며, JVM의 역할은 자바 애플리케이션을 클래스 로더(Class Loader)를 통해 읽어 들여서 자바 API와 함께 실행하는 것 JDK vs JRE JDK : Java Development Kit JRE : Java Runtime Environment JDK는 JRE를 가지고 있고, 컴파일러도 가지고 있다. JDK 컴파일러로 컴파일(.java) -> ByteCode 변환(.class) 가상 머신 자바 바이트코드를 실행하고자 하는 모든 하드웨어에 JVM을 동작시킴으로써 자바 실행 코드를 변경하지 않고 모든 종류의 OS, 하드웨어에서 동작되게 할 수 있다. JVM 특징 스택 기반: 인텔 x86 아키텍처나 ARM 아키텍처와 같은 ..
class Person { private String name; private int age; public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } } Person p1 = new Person("justin", 10); Person p2 = new Person("justin", 10); boolean samePerson = p1.equals(p2);// ? s1.equals(s2) 는 true일 것 같지만 false이다. 그 이유는 Object 클래스의 equals함수는 단지 == 비교로 두 객체의 메모리 주소를 비교하고 있기 때문이다. new Person() 명령어를 통해 메모리에 2개의 ..