전체 글 132

[CS] 스케줄링

스케줄링: 프로세스 실행 시 필요한 여러 자원을 해당 프로세스에게 할당하는 것 스케줄링의 종류 장기 스케줄링 : 어떤 프로세스가 시스템 자원을 할당받을지 결정 후 준비상태 큐로 보냄 작업 스케줄링, 상위 스케줄링이라고도 하며 작업 스케줄러에 의해 수행 중기 스케줄링 : 어떤 프로세스들이 CPU를 할당받을 것인지 결정하는 작업 CPU를 할당받으려는 프로세스들이 많을 시 일시보류 시킨 후 활성화해서 부하 조절 단기 스케줄링 : CPU를 할당받는 시기와 특정 프로세스를 지정하는 작업 프로세서 스케줄링, 하위 스케줄링 이라고도 한다 프로세서 스케줄링 및 문맥교환은 프로세서 스케줄러에 의해 수행됨 문맥교환(Context Switching) : OS에 의해 CPU가 할당되는 프로세스 변경 시 실행 프로세스에 CPU..

CS 2023.07.15

[CS] 병행(Concurrency)과 병렬(Parallel)

공부를 하던 도중, 병행과 병렬의 개념이 헷갈려서 정리해봤다. 병행(Concurrency) 병렬(Parallel) 동시에 실행되는 것 같이 보이는 것 실제로 동시에 여러 작업이 처리되는 것 싱글 코어에서 멀티 쓰레드(Multi thread)를 동작 시키는 방식 멀티 코어에서 멀티 쓰레드(Multi thread)를 동작시키는 방식 한번에 많은 것을 처리 한번에 많은 일을 처리 논리적인 개념 물리적인 개념 병행(Concurrency) 단일 프로세서 또는 단일 코어에서 여러 작업이 시분할 방식으로 조금씩 번갈아가며 실행되는 방식이다. 여러 작업을 번갈아 가며 실행되면서 자원을 최대한 활용하여 작업을 빠르게 완료하는 것이 목표이다. 작업들이 서로에게 영향을 주지 않거나 의존성이 적을 경우 성능 향상을 노릴 수 ..

CS 2023.07.12

[Springboot] Handler, @ExceptionHandler, @ControllerAdvice

Handler 클라이언트로부터의 요청을 처리하고, 해당 요청에 대한 적절한 작업을 수행하는 역할 @Controller와 @RestController를 사용하여 정의한다. 핸들러는 특정 URL에 매핑되고 해당 URL로 요청이 들어오면 실행된다. @ExceptionHandler @ExceptionHandler: @ExceptionHandler를 사용한 handler에서 발생하는 모든 예외를 하나의 메서드로 처리할 수 있다. 아래는 PostController에서 NullPointerException발생 시 nullex 메서드를 호출하는 코드이다. @RestController public class PostController { ... ... @ExceptionHandler(NullPointerException..

Springboot 2023.07.11

[CS] DBMS

DBMS는 DB를 효율적이고 직관적이며 안전하게 사용할 수 있게 해주는 DB ManagerSystem이다효율성: 중복 제어 및 무결성 제약조건을 정의/검사하는 기능을 가짐 직관성: 서로 다른 데이터 간의 관계를 표현해주는 관계 표현 및 편리한 인터페이스를 제공 안전성: 접근하는 사용자마다 다른 권한을 주어 접근통제 및 데이터 수정/삭제 시 백업 기능 제공 트랜잭션: DB의 상태를 변화시키는 작업 단위나 병행제어 및 회복 작업 시 처리되는 작업의 논리적 단위로 사용된다.트랜잭션의 특성: ACID - Atomicity(원자성) : 모두 반영(Commit)되거나 전혀 반영되지 않아야 함(Rollback) - Consistency(일관성) : 시스템의 고정요소는 트랜잭션 수행 전, 후의 상태가 같아..

DB 2023.07.08

[Springboot] 관계 매핑(ORM; Object Relational Mapping) N:M

외래키의 주인은 1:N, N:1에선 1이고 N이 가지고 있는다. N:M 직접 연관을 맺으면 안된다. 가운데에 테이블을 하나 더 생성하여 테이블을 거쳐 관계를 맺어야 한다. N : 1 : M 형식이 된다 예시: 여러 메뉴(N)를 가지는 식당과 여러 손님(M) 사이의 주문(1) 중간 테이블인 Order테이블 @ManyToOne @JoinColumn(name = "user_id") private User user; @JoinColumn: 외래키를 매핑할 때 사용. 저장시 user_id라는 릴레이션(튜플)에 저장한다. users(손님) 테이블 @OneToMany(mappedBy = "user") private List orderList = new ArrayList(); mappedBy: 타겟 엔티티(Order)..

Springboot 2023.07.07

[Network] HTTP/HTTPS의 차이, SSL/TLS이란?

HTTP/HTTPS HTTP와 HTTPS는 클라이언트와 서버 간 통신에 사용되는 프로토콜이다. 프로토콜이란 컴퓨터나 디지털 장치 등 다양한 기기간에 통신하기 위한 규칙과 규약이다. 사용자의 요청(주소창에 URL을 입력하거나 웹 페이지의 링크를 클릭 등) 시, 브라우저는 해당 URL로 서버에 요청(Request)을 보낸다. 이 요청을 HTTP 또는 HTTPS 프로토콜을 사용하여 이루어진다. HTTP HTTP (HyperText Transfer Protocol): 텍스트 기반으로 데이터를 전송하며 보안 기능이 없는 평문 통신 방식이다. 중간에 제3자가 데이터를 가로채거나 조작할 가능성이 있다. 80번 포트를 사용하여 데이터를 전송한다. HTTPS HTTP에 SSL/TLS을 사용하여 데이터를 암호화하여 안전하..

CS 2023.07.05

[WIL] Week 3

Fact: 있었던 일 1. Springboot를 사용하여 게시판 CRUD 구현 2. jwt, security를 사용하여 회원가입 및 login 구현 Feeling: 느낀점 CRUD 구현에는 큰 어려움이 없어 재미있었다. 로그인 기능을 구현하기 위한 security, jwt의 개념을 이해하는데 어려움을 느꼈다. Finding: 알게된 것 JPA(Java Persistence API)의 프레임워크(Hibernate)를 이용한 Java-DB를 연결하는 방법 JWT(json web token) 생성부터 전달까지의 흐름 및 코드 작성법 usernamePasswordAuthenticationFilter를 이용하여 내부 인증을 처리하는 방법 및 동작방식 @Vaild를 이용하여 Dto 또는 Entity의 값을 제한하는..

TIL, WIL 2023.07.02

[Springboot] Security

어제 Security가 Controller보다 먼저 실행된다는 것을 알았다. 하지만 오늘 직접 코드를 구현해 봄으로써 어떻게 Controller 이전에 Security가 올 수 있는지 확실히 알지 못했기에 login 기능을 구현하는데에 어려움을 겪었다. 찾아보던 도중, 좋은 notion글이 있어서 참조했다. Spring Security 인증(Authentication): 해당 사용자가 본인이 맞는지 확인하는 과정 hyeonjunju.notion.site 클라이언트가 정보를 요청하면 AuthenticationFilter가 요청을 가로채고, 가로챈 정보를 통해 토큰을 생성한다. AuthenticationFilter 예시코드 public Authentication attemptAuthentication(Htt..

Springboot 2023.07.01

[Springboot] login 구현

로그인이란 인증, 인가를 거치는 단계이다. 1. 인증(Authentication)과 인가(Authorization) 인증: 해당유저가 실제 등록된 유저인지 확인하는 단계 인가: 해당 유저가 특정 리소스에 접근이 가능한지 허가를 확인하는 단계 하지만 보통의 웹 사이트들은 비연결성 무상태로 통신하기에 로그인을 구현하기에 어려움이 따른다. 비연결성 무상태 비연결성 무상태란 리소스 절약을 위해 클라이언트가 요청 시 연결, 처리 후 요청을 끊는 방식을 뜻한다. 클라이언트 - 서버 간 연결을 계속 유지한다면 서버 측에서 기하학적 비용이 발생할 수도 있기 때문이다. 그런데 요청을 끊으면 어떻게 로그인한 페이지가 로그아웃이 되지 않고 유지되는가? 보통 쿠키세션, JWT 방식을 이용하여 로그인을 유지한다. 쿠키세션 방식..

Springboot 2023.06.29

[Springboot] @Valid

오늘은 게시판 백엔드 구현 후, 로그인 환경을 구현했다. ID 조건 1. a ~ z와 숫자 0 ~ 9만 입력받을 것 2. 길이는 4글자 이상, 10글자 이하일 것 이었다. Service에서 Replace를 사용하여 구현했었다. 구현을 완료하고 난 후, 참고자료를 확인했는데 어노테이션으로도 손쉽게 기능을 구현할 수 있었다. 우선 gradle에 빈 검증기를 작성하여야 사용할 수 있다. implementation group: 'org.springframework.boot', name: 'spring-boot-starter-validation' Entity 코드 import jakarta.validation.constraints.Pattern; import jakarta.validation.constraints..

Springboot 2023.06.28