전체 글 51

[Spring] Spring Security

1. Spring Security 란 스프링 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크 용어정리 인증 : Authentication. 사용자의 신원을 검증하는 프로세스 ex) 로그인 인가 : Authorization. 인증된 사용자가 어떠한 자원에 접근할 수 있는지를 확인하는 절차 ex) 관리자 페이지는 관리자만 들어갈 수 있고 일반 유저는 들어갈 수 없음 즉, 인증이 먼저 이루어지고 인가가 이뤄져야 한다. Spring Security에서는 이러한 인증, 인가를 위해 Principal을 아이디로 Credential을 비밀번호로 사용하는 Credential 기반의 인증방식을 사용한다. 2. Servlet Filter 스프링 시큐리티는 서블릿의 필터를 기반으로 동작..

Spring 2023.02.08

[JAVA] 멀티쓰레드 & 동기화/비동기화 & Sync/Async

1. 멀티스레드 실제 동시에 처리될 수 있는 프로세스의 개수는 CPU 코어의 개수와 동일한데, 이보다 많은 개수의 프로세스가 존재하기 때문에 모두 함께 동시에 처리할 수는 없다. 각 코어들은 아주 짧은 시간동안 여러 프로세스를 번갈아가며 처리하는 방식을 통해 동시에 동작하는 것처럼 보이게 한다. 이와 마찬가지로, 멀티스레딩이란 하나의 프로세스 안에 여러개의 스레드가 동시에 작업을 수행하는 것을 말한다. 스레드는 하나의 작업단위이다. 멀티스레드 적용하기 위한 조건 병행성(concurrency) : 다수의 스레드 생성방법 존재 동기화(synchronization) : 작업이 방해받지 않고 각 스레드의 동기화 방법 존재 통신(communication) : 서로 다른 스레드가 정보를 교환할 수 있는 방법이 존재..

JAVA 2023.02.06

[JAVA] Thread 란

1. Thread (스레드) 더보기 스레드란 하나의 작업 단위이다. Runnable 인터페이스 구현 Thread 클래스 상속 모두 run() 메소드를 오버라이딩 한다. public class MyThread implements Runnable { @Override public void run() { // 수행 코드 } } public class MyThread extends Thread { @Override public void run() { // 수행 코드 } } 하지만 두 방법은 인스턴스 생성 방법에 차이가 있다. Runnable 인터페이스를 구현한 경우, 해당 클래스를 인스턴스화해서 Thread 생성자에 argument로 넘겨줘야한다. 그리고 run()을 호출하면 Runnable 인터페이스에서 구현..

JAVA 2023.02.06

[Spring] Servlet 과 Spring

1. Servlet (서블릿) 출현 배경 일반적으로 웹서버는 정적 페이지만을 제공한다. (Web Server는 정적 데이터만 전달할 수 있었다.) 따라서 동적인 페이지를 제공하기 위해서 웹서버는 다른 곳에 도움을 요청하여 동적인 페이지를 작성해야만 한다. 따라서 나온 것이 CGI이다. CGI 동적 데이터를 처리하는 인터페이스 (Web Server와 프로그램 사이의 규약) CGI는 어떠한 프로그래밍 언어로도 구현이 가능하며, 별도로 만들어 놓은 프로그램에 HTML의 GET/POST 방법으로 클라이언트의 데이터를 환경변수로 전달하고, 프로그램의 표준 출력 결과를 클라이언트에게 전송하는 것이다. 한계 request가 들어올 때 마다 Process를 생성하기 때문에 많은 사용자를 처리하기엔 무리였다. 같은 re..

Spring 2023.02.06

Process vs Thread

키워드 정리 실행 단위 : cpu core에서 실행하는 하나의 단위로 프로세스와 스레드를 포괄하는 개념 (부연 설명이 없는) 프로세스 : 하나의 스레드만 가지고 있는 단일 스레드 프로세스 동시성 : 한 순간에 여러가지 일이 아니라, 짧은 전환으로 여러가지 일을 동시에 처리하는 것처럼 보이는 것 1. Process vs Thread 프로그램과 프로세스 프로그램 : 코드 파일 (ex. 피자의 레시피) 프로세스 : 코드 파일을 실행하는 과정 (ex. 피자) / 프로그램을 메모리 상에서 실행중인 작업 프로세스는 각각 별도의 주소공간 할당 (독립적이다.) 프로그램이 프로세스가 되면서 일어나는 일 프로세스가 필요로 하는 것들이 메모리 영역에 올라간다. Code : 실행 명령을 포함하는 코드들 Data : Stati..

그 외 2023.02.05

[JAVA] GC 동작 알고리즘

1. GC 대표적인 알고리즘 2가지 Reference Counting Root Space : 스택 변수, 전역 변수 등 heap 영역 참조를 담은 변수 Reference Count : 몇 가지 방법으로 해당 객체에 접근할 수 있는지를 뜻한다. 카운트가 0이 되면(객체에 접근할 수 있는 방법이 0이 되면) GC에 의해 삭제된다. 순환참조 문제 등의 한계점이 있다. Mark and Sweep 루트에서부터 해당 객체에 접근 가능한지를 해제의 기준으로 삼는다. 루트부터 그래프 순회를 통해 연결된 객체들을 찾아내고(Mark) 연결이 끊어진 객체는 삭제한다.(Sweep) 루트로부터 연결된 객체는 Reachable이라 한다. (반대는 Unreachable) Sweep 이후 분산되어 있던 메모리를 한 곳으로 정리하는 ..

JAVA 2023.02.05

[JAVA] Call by Value & Call by Reference

1. Call by Value 값에 의한 호출 함수가 호출될 때, 메모리 공간 안에서는 함수를 위한 별도의 임시공간이 생성된다.(종료 시 사라짐) call by value 호출 방식은 함수 호출 시 전달되는 변수 값을 복사해서 함수 인자로 전달 이때 복사된 인사는 함수 안에서 지역적으로 사용되기 때문에 지역변수 속성을 가진다. 따라서 함수 안에서 인자 값이 변경되더라도 외부 변수 값은 변경 안됨 동작 방식 프로그래머가 어떤 함수를 호출한다고 하면 Stack 메모리에 먼저 함수의 Return Address가 쌓이고 그 위에 매개변수 등의 값이 쌓이게 된다. main 함수를 호출하였기 때문에 main 함수의 내용이 Stack에 먼저 존재할 것이고, 그 중에서 지역 변수로 선언한 someValue가 존재할 것..

JAVA 2023.02.05

[CS] JAVA

자바의 특징 더보기 운영체제에 독립적이다. (JVM) OOP의 특징인 캡슐화, 상속, 다형성, 추상화의 특징이 있다. 보안성이 뛰어나다. GC가 자동적으로 메모리를 관리해준다. 멀티 쓰레드 지원한다. + 어느 하드웨어던, 운영체제던 상관없이 컴파일된 코드(바이트코드)가 플랫폼 독립적이다. (어느 플랫폼이든 작성한 소스를 변겨할 필요 없이 다 실행시킬 수 있다.) JVM은 단순하게 말하자면 컴파일된 코드(바이트코드)를 실행시켜주는 가상의 컴퓨터라고 생각하면 좋다. 자바의 구동원리 (컴파일 순서) 더보기 프로그램이 실행되면 JVM은 OS로부터 필요한 메모리를 할당받는다. (Runtime Data Area) 자바 컴파일러(javac)가 자바 소스코드(.java)를 읽어들여 자바 바이트코드(.class)로 변환..

CS 2023.02.05

[Spring] 빈 스코프

1. 빈 스코프 스코프란 빈이 존재할 수 있는 범위를 뜻한다. 스프링 빈은 기본적으로 싱글톤 스코프로 생성된다. 스프링은 다양한 스코프를 지원한다. 싱글톤 : 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프 프로토타입 : 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입, 초기화까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다. 웹 관련 스코프 request : HTTP 요청 하나가 들어오고 나갈 때 까지 유지되는 스코프, 각각의 HTTP 요청마다 별도의 빈 인스턴스가 생성되고, 관리된다. session : 웹 세션이 생성되고 종료될 때까지 유지되는 스코프 (HTTP Session과 동일한 생명주기를 가지는 스코프) application : 웹의 서블..

Spring 2023.02.01

[CS] 프로그래밍 공통

OOP(객체지향 프로그래밍)이란 더보기 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, '객체'들의 상호작용으로 프로그램 로직을 구성하는 프로그래밍 패러다임이다. 하나의 클래스를 바탕으로 서로 다른 상태의 인스턴스를 만들면서 다른 행동들을 하게 할 수 있다. 객체지향 언어의 특징 더보기 캡슐화와 데이터 은닉 캡슐화는 서로 관련이 있는 변수와 함수를 하나의 클래스로 묶고 외부에서 쉽게 접근하지 못하도록 한다. 외부로부터 데이터를 보호할 수 있고, 외부에는 불필요한 내부적으로만 사용되는 부분을 감춘다. 내부 구조는 private하게 감춰두어 클래스 밖에서 객체에 직접적인 접근을 막는 것을 데이터 은닉이라 한다. 대신 getter, setter 라고 부르는 메소드를 통해서 접..

CS 2023.01.31