공부 45

Unix, Linux

Command Line Interface 를 배워야하는 이유 GUI보다 더 많은 명령이 가능하기때문, 서버를 시작하거나 프로세스를 죽이고 관리하거나 권한을 변경하거나 숨긴 파일을 설정하거나 컴퓨터의 핵심 영역에 접근할 수 있다. Unix, Unix Like 계층적 파일 시스템 등.. 많은 명령어와 시스템들이 유닉스로부터 시작됨. -소프트웨어의 모듈화 레고 조각처럼 작은 프로그램을 만들고 여러 명령어를 연결해 하나의 프로그램을 완성시킴. -Unix Like 공식적으로 Unix라고 할 수 없지만 Unix처럼 동작하고 Unix에게 영감을 받은 운영체제들 Linux와 Mac OS X가 대표적 Linux Linux는 Kernel이다. 리눅스만으로 운영체제라고 부를 수 없고 ( 커널이 자동차 엔진이라 치자면, 엔진..

공부/Linux 기초 2024.01.05

동시성 문제와 TreadLocal

Spring 동시성 문제에 관한 강의를 듣고 복습 겸 정리겸 겸사겸사.. 우선 동시성 문제란... n개의 Thread가 동시에 하나의 자원에 접근할 때 발생하는 문제 강의에서 본 학습 테스트로 직접 동시성문제를 겪어봤다. nameStrore 라는 이름을 저장하는 필드값이 존재하고 fieldService가 제공하는 logic이라는 메서드에서는 매개변수로 name을 받고 log로 받은 name, nameStore에 현재 어떤 name값이 들어와있는지를 조회한다. (동시성문제 확인을위해 nameStore 조회전 1초간 Thread를 멈췄다.) 테스트는 2개의 Thread로 name을 nameStore에 저장해본다. 첫번째 동시적으로 nameStore Field 변수에 접근하지않고 2초라는 시간텀을 두고 각각의..

공부/Java 2024.01.04

인증과 권한부여 [Authentication & Authrization]

Authentication [ 인증 ] 1. 식별의 의미 2. AuthN: 항상 권한부여보다 먼저 등장 (우리는 항상 사용자에게 로그인을 먼저하라고한다.) 3. 로그인과 관련된 세부정보만 묻는다. 4. 401 Error Authrization [ 권한부여 ] 1. 인증 후 역할에 따른 접근의 강제 2. AuthZ: 항상 인증 후에 등장 3. 사용자의 자격증명에 대해 몰라도된다. (사용자의 Role을 알아야함. ) 4. 403 Error ROLE: 권한 부여의 그룹. 실제 서비스에는 수백가지의 권한이 존재한다. 사용자에게 일일히 권한을 부여하기에는 코드가 너무 복잡해지므로 ADMIN, USER등 역할을 주고 여러 권한을 한꺼번에 부여한다. 역할에는 항상 'ROLE_ ~~' 같은 접두사가 붙어야한다. 세밀한..

공부/Security 2023.12.19

CORS & CSRF

CORS Cross-Origin Resource Sharing (CORS): 두가지 출처에서 서로의 자원을 공유 여기서 출처: Origin 이란 URI를 뜻한다. origin: (도메인주소, 포트 번호 , HTTP 프로토콜) 서로 다른 출처에서 자원공유를 하려할 때 브라우저에서 보안적 의미로 막는 행위 CORS가 없다면 해커의 서버에서 나의 서버로 쉽게 침투 할 수 있다. 보안 공격방법이 아닌 보안협약이라고 볼 수 있다. 이렇기에 백엔드서버와 프론트서버의 자원 공유를 위해 수동으로 이 설정을 풀어줘야한다. 해결 방법 1. @CrossOrigin(origins = "http://localhost:4200"): Spring REST API 서버에서 Annotation으로 해당 origin의 요청을 허용 문제..

공부/Security 2023.12.19

OSIV

Open Session in View : JPA에서 영속성 컨텍스트의 생존 범위를 어디까지 설정할지 처리하는 패턴. 따로 설정해놓지않으면 기본값은 true로 되어있다. true인 경우 Open Session in view 이름 그대로 Spring에서 View를 반환할때 까지 영속성 컨텍스트가 생존한다. 컨트롤러 계층에서 지연로딩 초기화가 가능하단 이야기. 이 경우의 장점은 앞서 말한 영속성 컨텍스트의 생존 범위가 대략 인터셉터부터 리파지토리까지 요청을 받고 응답을 보낼때까지 살아있기때문에 코드 작성이 수월해진다. 어느 계층에서던 Entity를 조회하거나 초기화 할 수 있다. 단점으로 그만큼 요청이 처리되는 긴 시간동안 데이터베이스 커넥션을 계속 가지고있기에 웹 어플리케이션 성능에 문제가 생길 수 있다. ..

공부/JPA 2023.12.18

암호화 Encode / Encrypt / Hash

최근 스프링 시큐리티 강의를 들으면서 사용자의 비밀번호를 암호화 할 때 Hash 암호화 방식을 사용해야하는지 배웠다. 간단하고 짧게 복습하자는 의미에서 글을 남긴다. 암호화방식에는 크게 3가지가 존재한다. 1. Encode 2. Encrypt 3. Hash 1. Encode 대표적으로 Base64를 통해 암호화 하는 방식. 공개적인 암호화 방식으로 암호화를 진행하므로 어떠한 알고리즘을 사용했는지만 알 수 있다면 쉽게 복호화가 가능하다. 그때문인지 비밀번호라던가 유출에 크리티컬한 정보는 Encode 방식으로 암호화 하지않고 주로 이미지, 동영상 업로드에 사용된다. 2. Encrypt Encode방식에서 조금 더 진화된 형태로 Key가 들어간다. 암호화된 데이터를 복호화할때 Key가 없다면 복호화가 불가능...

공부/Security 2023.12.17

Collection fetch Join (~~ toMany 관계)

어제 공부하면서 배운 ~~toOne 관계는 Collection이 아닌 객체 한개를 조회하기때문에 fetch Join을 사용하면 큰 문제는 없었다. 이번 강의에서는 ~~toMany 관계가 포함된 Order 를 조회하면서 문제점과 해결방안에대해 알아봤다. 우선 toOne관계와 똑같이 fetch Join이 들어간 방식이 DB에 쿼리를 어떻게 전송하는지와 응답한 JSON을 살펴보자. 기존 처럼 fetch join을 이용해 get요청을 했더니 첫번째 문제가 발생했다. JSON에 중복된 데이터가 응답됬다. 이유가 뭘까 Hibernate가 DB에 전송한 쿼리를 H2에 날려 어떤 테이블 형식을 가지는지 봤더니 1개의 Order를 조회할때 Order가 ~~toMany 관계로 가지고있는 OrderItem 2개를 join하..

공부/JPA 2023.12.16

JPA N + 1 과 FetchJoin

JPA 강의를 보고 복습 겸 남겨보는 JPA N+1문제와 해결방법인 FetchJoin 우선 첫번째 조회 API 방식은 fetchJoin을 사용하지않고 DTO로 변환 후 응답하는 방식 지연 로딩을 DTO Class에서 getter로 초기화하며 원하는 값들을 가져오기엔 성공했지만, 1개의 Order를 조회할때 쿼리가 한번 Lazy된 Member를 조회할때 또 쿼리가 한번 Lazy된 Delivery를 조회할때 또또 쿼리가 한번 여기서 두개의 Order를 조회한다면 DTO에서 지연로딩을 초기화 하는과정에서 또 Member와 Delivery 값을 가져오는 쿼리가 날라가 Memeber, Delivery에 관한 쿼리가 총 4개가 날라간다. 이는 성능 저하 이슈로 이어진다. 1개의 쿼리를 조회할때 + N 개의 쿼리가 ..

공부/JPA 2023.12.15

상속

OOP 의 핵심중 하나 다형성의 기반 is-a 관계 부모 클래스 멤버 변수가 private 일때 자식클래에스에서 부모 클래스 멤버변수에 접근하고 싶다면 protected로 바꿔주면 된다. 외부 클래스는 접근할 수 없음 클래스 내부,같은 패키지에 속한 클래스,자식 클래스만 접근가능 is-a관계 상속관계 수학에서 부분 집합 관계 A student is a Person has-a관계 컴포지션 관계 가지고있는(포함) 관계 Casting 부모 ← 자식 암시적 캐스팅 Person 이 부모 Student 가 자식일 때 Student s1 = new Student(); Person = (Person) s1; // (person)생략가능 컴파일러가 해줌. 캐스팅은 형제간에 불가능하다 (부모 자식간에만 가능.) insta..

공부/OOP 2023.12.13

Singleton

어떤 클래스에서 만들 수 있는 인스턴스 수를 하나로 제한 하는 패턴 다음과 같은 조건을 충족하는 객체에 적합 프로그램 실행중 최대 하나만 있어야함. 프로그램 설정, 파일 시스템 등.. 이 객체에 전역적으로 접근이 가능해야함. 특징 private 생성자 static 메서드를 통해서만 객체를 얻어올 수 있음. 아직 객체가 없는 경우 객체를 생성한 후 static변수에 저장 static 변수에 저장된 객체를 반환 객체가 있는 경우 static 변수에 저장된 객체를 반환. 예시 코드 public class Singleton{ private static Singleton instance; private Singleton(){ //private이기에 여기서 new 생성자를 하지 못함. get메서드를 통해야 생성 가..

공부/OOP 2023.12.13