전체 글 93

[TIL] AWS S3를 이용하여 Spring JPA에 미디어 API 구현하기

요근래 B형 독감에 걸려서 3일간 공부를 못했다. 나만무 프로젝트 기간의 시작이다 보니 3일동안의 공백이 너무 컸다. 이제 다시 빡세게 좀 마음을 다잡고 프젝 기간에 불태워보려고 한다. 우리 나만무 프로젝트가 미디어 파일을 업로드하고 로드해야하는 플랫폼이다 보니 S3를 활용해보려 한다. Spring JPA에서 어떻게 AWS S3를 활용할 수 있는지 알아보자. AWS S3는 5GB의 용량까지 프리 티어로 사용할 수 있다. 따라서 해당 프리 티어 S3를 사용해보자. S3에서 버킷을 생성하면 보안 키를 생성해줄 것이다. 그 이후에 우리 project에서 AWS SDK를 지원하는 dependency를 추가해준다. software.amazon.awssdk s3 org.springframework.boot spri..

Java 2024.01.20

MP3 음성 파일의 압축 방법

MP3 : MP3는 가장 대표적인 압축 샘플링 사운드 파일이다. MP3는 동영상과 오디오 압축 기술에 대한 표준인 MPEG(Moving Picture Experts Group) 표준의 일부분으로 정확한 명칭은 MPEG Audio Layer 3이다. MPEG Audio Layer 1, Layer2도 있다. Layer 1은 압축률이 1/4정도 되고 Layer2는 1/6 ~ 1/8 정도 된다. MP3 파일은 CD 음질을 유지하면서도 1/10 ~ 1/12의 높은 압축률을 가진다는 것이 가장 큰 특징이다. MP3 파일은 대략 1분당 1메가의 크기를 필요로 하는데 이처럼 높은 압축률 때문에 인터넷을 통해 급속도로 보급될 수 있었다. 파일 크기가 작기 때문에 적용 용량의 메모리에도 다수의 노래를 저장할 수 있게 되어..

Jungle 2024.01.13

[TIL] Spring Security에 JWT 필터 추가하기

오늘 포스팅에서는 spring security 모듈을 적용하고 그 안에 JWT 인증 필터를 추가하여 JWT토큰으로 인증을 구현해 본 내용을 포스팅하겠습니다. spring security는 front-end 팀원분과 개인 공부를 위해 기본적인 crud와 회원가입 및 로그인 인증이 구현된 간단한 게시물 웹사이트를 만들기 위해 공부했습니다. Spring Security spring security 디펜던시를 추가해보면 6.1 버전이 23년 6월에 종료되어서 새로 코드에 대해 이해를 해야 했습니다. 먼저 spring security 자체가 어떻게 작동하는지 공부하고 이를 어떻게 커스터마이징 해야 할지부터 고민했습니다. spring security 디펜던시를 적용하지 않더라도 spring framework 자체에..

Java 2024.01.12

Spring-boot 빌드 오류 : java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.cfg.DatatypeFeature

끔찍한 오류를 체험하고 식은 땀을 흘리면서 해결했음. 원래 되던 spring project가 jar를 배포하기 위해 빌드를 초기화했더니 갑자기 되던 실행이 로컬에서도 안되던 것. 근데 발생한 오류가 바로 Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.cfg.DatatypeFeature 이 오류였다. 갑자기 발생한 'Class 없어' 오류에 너무 당황하여 찾아보니까, jackson 종속성은 spring-boot 자체에 내포되어 있어서 의존성을 따로 추가하면 conflict가 발생한다는 것. 며칠 전에 objectMapper 로직을 작성하기 위해 dependency를 추가했었는데, 이 objectMapper가 jacks..

Java 2024.01.07

[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