분류 전체보기(90)
-
java동작 과정
Java Source code(.java)를 Compile하게 되면 -> .class로 변환이 됨(.class = Java Application) -> 이클립스 혹은 인텔리제이에서 RUN을 하게 되면, JVM은 .class파일을 실행(RUN)시키게 된다. 참조사이트 https://www.youtube.com/watch?v=9V0rdrm59X4
2024.01.16 -
cookie, session, jwt
cookie 쿠키를 이용해서 서버는 우리의 브라우저에 데이터를 넣을 수 있다. - 데이터를 넣는 이유는, 클라이언트의 정보를 기억하기 위해서! 브라우저는 서버에 요청을 보내고, 서버는 이에 응답할텐데, 응답에는 모든 데이터와 클라이언트가 찾던 페이지 정보가 있다. 이때 응답에 쿠키도 포함함! 브라우저에 쿠키를 저장한 후, 해당 웹사이트에 방문할 때마다, 브라우저는 해당 쿠키를 요청과 함께 보내게 된다. 쿠키는 도메인에 따라 제한이 된다. ex) 유튜브가 준 쿠키는 유튜브에만 전송이 된다. 쿠키는 유효기간이 있다. (서버가 유효기간을 정함) 쿠키는 인증 뿐만 아니라, 여러가지 정보를 저장한다. session과 token이 필요한 이유 http프로토콜(클라이언트와 서버 사이 데이터를 전송하는 프로토콜)은 s..
2024.01.16 -
Oauth개념 및 동작방식
Oauth개념 및 동작방식 이해하기 웹 서핑을 하다보면 google과 kakao와 같이 외부 소셜 계정을 기반으로 간편히 회원가입 및 로그인할 수 있는 웹 어플리케이션을 쉽게 찾아볼 수 있다. 예를 들어, google로 로그인하면 API를 통해 연동된 계정 정보를 가져와 로그인이 간편하게 진행된다. 이때 사용되는 프로토콜이 OAuth이다. OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다. (위키백과) '원티드라 서비스'는 사용자 인증을 위해 kakao, naver, facebook, google등의 사용자 인증 방식을 사용한다고 가정하자. ..
2024.01.15 -
좀비프로세스와 고아프로세스
좀비프로세스와 고아프로세스 좀비 프로세스(자식이 먼저 종료 + 부모가 wait()호출 X) 자식 프로세스가 부모프로세스보다 먼저 종료 + 부모프로세스가 아직 wait()를 호출하지 않은 자식프로세스의 상태 자식 프로세스가 종료되어도 사용하던 리소스를 운영체제에게 반환하지 못하기때문에 완전히 제거되지 못한다. 이러한 경우에 대비하여, 커널은 자식프로세스의 최소한의 정보(자식프로세스의 PID, 프로세스의 종료 상태 등)을 가지게 된다. 이후, 부모프로세스가 wait() 시스템콜을 호출하여 종료상태를 회수하게 되면, 좀비프로세스가 정상적으로 제거된다. 고아 프로세스(부모가 먼저 종료) 부모 프로세스가 자식 프로세스보다 먼저 종료하게 되면, 이때, 자식프로세스의 상태를 고아프로세스라고 한다. 자식프로세스의 부모..
2024.01.15 -
프로세스 관리
프로세스 관리 운영체제가 프로세스를 전부 생성하는 것이 아니라! 시스템이 부팅된 후 최초의 프로세스만 직접 생성하고 그 다음부터는 이미 존재하는 프로세스가 다른 프로세스를 복제-생성하게 된다. 이때 프로세스를 생성한 프로세스를 부모프로세스, 부모프로세스에 의해 생성된 프로세스는 자식 프로세스라고 한다. 결과적으로 프로세스는 트리를 형성한다. 현실세계와 다르게 자식프로세스가 먼저 죽고, 부모프로세스는 그 이후에 죽는 구조이다. 프로세스 생성과 종료 부모프로세스는 fork() 시스템콜을 통해 자식프로세스를 생성한다. fork() 시스템 콜 : fork() 시스템 콜을 통해 생성된 자식 프로세스는 부모프로세스를 복제하기때문에 부모와 동일한 형태를 가진다. (단, PID값은 서로 다름!) 이후, 자식프로세스가 ..
2024.01.15 -
deleteAll()보다 deleteAllInBatch()가 더 권장되는 이유가 뭐야?
deleteAll vs deleteAllInBatch deleteAll() : SimpleJpaRepository()에 오버라이딩되어 있으며, MyBatis, JdbcTemplate 등 기술에 상관없이 사용가능하다. 또, deleteAll()이 실행되면, findAll()의 결과로 얻은 리스트를 순회하며, 데이터를 한개씩 삭제함. 즉, N개의 데이터가 존재하면 N개릐 DELETE쿼리가 실행된다. -> 테스트 실행시간이 오래 걸림. deleteAllInBatch() : 테이블에 있는 데이터를 전부 지우는 DELETE쿼리가 실행된다. 즉, 데이터 크기와 관계없이 한번의 쿼리로 clear가 가능함. package org.springframework.data.jpa.repository.support; @Repo..
2024.01.15