분류 전체보기 89

[TIL] JAVA : @Bean, IoC 컨테이너, 의존성 주입

어제 하루종일 CRUD 노가다를 마무리하고 JWT를 저녁에 입문했는데, 애들 장난이라고 생각하고 공부하면 절대 스프링의 제작 의도대로 Spring security 디펜던시를 사용할 수 없을 것 같다고 생각됬다. 오늘부터는 정말 약한 의지가 아니라 뇌빼고 모르는거 다 찾아본다는 마인드로 security 정복에 나선다. 오늘 할일 1. @Bean 어노테이션의 의미는 무엇인가 ? 2. Filter Chain Froxy의 동작 방법 + HttpFilterChain의 내부 구조에 대해 이해하고 보안에 관한 원하는 코드 짜는 방법 공부하기 3. spring jpa 는 어떻게 DB 서버와 통신하는가? @Bean 어노테이션의 의미 spring security가 바뀌면서 지원해주던 config를 직접 개발자가 커스텀하여..

Java 2024.01.03

Errorfix : compatible version of org.hibernate.dialect.MySQL57Dialect

java spring jpa 구현체인 hibernate를 사용하면서 발생한 버그이다. Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot /autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: 'void org.hibernate.dialect. MySQL57Dialect...

Java 2024.01.02

[TIL] 리버스 프록시(Reverse Proxy) 개념

백엔드와 프론트엔드, DB를 각각 어떻게 서버로 연결할지에 대한 개요를 짜다가 예전 프로젝트 때, 개발에 진심이셨던(?) 컴퓨터 공학과 박사님이 추천해준 방식인 프론트서버와 백엔드 서버를 NGINX 리버스 프록시에 넣어 연결하는 방식이 생각났다. 그때는 리버스 프록시에 대한 개념이 너무 어려워서 그냥 DB 백,프론트 서버를 한꺼번에 한 서버에 넣어 돌렸었는데 이번에 제대로 한번 공부해서 적용해보자고 다짐하며 리버스 프록시에 대한 개념에 대해 공부하게 되었다. 그래서 오늘은 Nginx의 리버스 프록시 개념과 그 사용법에 대해 공부해보고 이에 관해 포스팅해보겠다. 리버스 프록시 란? 리버스 프록시란 클라이언트 요청을 대신 받아 내부 서버로 전달해주는 방식을 말한다. 이 프록시는 대리자의 의미를 가지는데, 정..

Jungle 2023.12.30

[TIL] spring을 공부하기 전 배워야 할 것들 (2) : 빌드 도구의 선택

처음으로 자바 스프링에 대해 공부할 때, 항상 서두에 듣게 되는 선택지는 바로 Maven vs Gradle 이다. 나는 처음 자바의 개발환경을 선택하기 위해 Maven과 Gradle이라는 자바의 빌드 툴의 선택지에 들어섰을 때, Maven은 현재 많은 개발 환경에서 이미 사용중이고 Gradle은 비교적 최신(2013년도)에 나온 빌드 스크립트라고 배웠었다. 이때, Maven이 더 많은 사용량을 차지하지만 Gradle을 추천받아 Gradle의 사용법을 배웠었다. 하지만 왜 maven이 더 많이 사용되는데 gradle을 추천했는지는 이해하지 못했다. 그 궁금증을 풀기 위해 오늘은 자바의 빌드 도구 중 무엇을 선택할 것인지 정하기 위해 도구들에 대해 공부해 보겠다. 2. 빌드 툴이 무엇인가? - Maven V..

Java 2023.12.30

[TIL] spring을 공부하기 전 배워야 할 것들 (1) : Java의 특징과 빌드 과정

오늘부터 java 스프링에 대해 공부할 것이다. 예전엔 어떻게 하면 api를 만들어 보낼 수 있는지에 집중했었지만, OS를 공부하면서 내부 구조가 어떻게 되고 왜 사람들이 maven과 gradle 중에 하나를 선택하는지 그것들이 무엇인지 등 조금 세부적으로 공부해서 내가 주체적으로 선택한 이유를 알고 사용하고 싶다고 생각했다. 그래서 이번엔 java 스프링을 본격적으로 배우기 전에 배워야 할 것들에 대해 공부하고, 그것들을 포스팅해보겠다. 1. 자바의 빌드 과정과 특징 자바의 빌드 과정 자바의 컴파일 순서를 보자. 1. 개발자가 작성한 .java 소스 파일은 자바 가상 머신이 읽을 수 있는 .class 바이트 코드로 컴파일 된다. 이 컴파일은 Java Compiler인 javac 가 수행한다. 2. 이후..

Java 2023.12.30

[TIL] pintos : 가상 메모리 구현 (2) - fork , mmap , swap

이전 포스팅을 통해 uninit 유형의 페이지를 생성하여 spt에 넣어 놓은 뒤 page_fault가 발생하여 demanding 될 경우 page를 할당해주는 lazy loading 의 진행 과정을 살펴보았다. 오늘은 lazy loading에서 추가되어 필요한 fork의 추가 작업과 mmap 메모리 매핑 페이지 시스템콜을 구현한 것과 마지막으로 swap disk을 활용하여 물리 메모리로부터 퇴거와 복귀를 하는 작업에 대해 살펴보겠다. Fork 추가 작업 이전엔 물리 메모리가 가상화되어 있지 않았으므로 그저 pml4를 전체 탐색하여 모든 페이지를 자식에게 복사해주기만 하면 되었지만 이제는 spt 테이블을 통해 메모리를 가상화하였으므로 spt의 내용을 복제하고 유형별로 물리 메모리도 할당해주어야 한다. 그전..

Jungle 2023.12.29

[TIL] pintos : 가상 메모리 구현 (1) - lazy loading

오늘로서 핀토스 운영체제를 마쳤다. 핀토스를 하며 느낀점에 대해서는 다음 포스팅에 작성하겠다. (아마 매우 길어질 것 같아서) 이번 포스팅은 핀토스 운영체제 프로젝트의 지옥주 3주차인 가상 메모리 VM에 대해 작성하겠다. 구현하느라 바쁘게 달려온 오늘로 마무리된 2주의 기간동안 구현과 고민을 하는 순간 순간의 감정과 생각들의 기록을 전부 남겨보려고 한다. 좀 길어진다면 여러개의 포스팅으로 나누어 작성하겠다. 메모리 관리 처음 메모리 관리를 들어갔을 때 3일 정도 고민했던 사항이 바로 이 메모리 관리에 관해서이다. 깃북을 처음 읽었을 때, 다음처럼 spt(supplemental page table)이라는 것을 추가 구현해야 한다고 나와있었다. 지금까지 코드 상에서 pml4(page map level 4 :..

Jungle 2023.12.29

[TIL] pintos : mmap 트러블 슈팅

오늘은 하루를 쏟아 트러블 슈팅을 했던 mmap_unmap 테스트 케이스에 대해 다뤄보겠습니다. test : mmap_unmap 테스트 코드를 보면서 이야기 하겠습니다. 테스트가 무엇을 검증하려는 건지 주석에 이렇게 나와 있습니다. 페이지 공간을 mmap -> munmap 한뒤 mmap으로 매핑되었던 페이지 주소 공간이 munmap 이후 접근 불가능한지 확인합니다. 즉 mmap으로 매핑된 주소공간을 munmap 으로 매핑 해제한 뒤 이후에 접근하려 하면 fail되는지 확인하는 테스트 입니다. 테스트 코드를 다시 보겠습니다. sample.txt 파일은 '794 바이트' 입니다. 해당 파일을 열고 'ACTUAL'에 저장되어있는 가상 주소 '0x10000000' 공간에 sample.txt를 mmap으로 메모리..

Jungle 2023.12.26

[TIL] pintos : stack growth 지원하기

유저프로그램이나 커널에서 함수를 호출할 때는 런타임 스택에 인자들을 집어넣고 함수가 끝났을 때 복귀할 주소인 return address를 넣은 뒤 call function 어셈블리어를 통해 함수를 호출한다. 이때 런타임 스택도 페이지로 할당받아 사용하는 메모리 공간이다. 근데 만약 런타임 스택이 1개의 페이지 이상의 값을 채워넣어야 하는 상황이 발생하면 그때는 페이지를 추가로 요청해야 한다. 이 상황을 stack growth라고 한다. 그럼 왜 동적으로 stack을 할당해줄까? 미리 넓찍하게 스택을 할당해두면 다른 메모리 페이지를 할당할 용량이 줄어들어서 효율적이지 못하기 때문이다. 나는 stack growth를 지원해주기 위해서 사용자 혹은 커널이 stack을 추가로 할당하기를 원하는 정당한 page_..

Jungle 2023.12.23

[TIL] pintos : VM - fork uninit 시 aux도 복사해주기

https://songarden.tistory.com/71 [TIL] pintos : vm anon 페이지 구현 오늘도 어김없이 vm 코드를 개선해 나갈 예정이다. 1. hash table 접근 시 동기화 보장 The hash table does not do any internal synchronization. It is the caller's responsibility to synchronize calls to hash table functions. 깃북에 songarden.tistory.com 바로 이전 포스팅에서 fork도 구현을 마쳤다고 생각했는데, fork-read가 작동안되는 문제가 발생해서 디버깅을 진행했다. 이 문제에 대해 트러블 슈팅한 내용을 포스팅하겠다. 문제 상황 : 자식이 읽은 fi..

Jungle 2023.12.23