웹 백엔드 공부 8

[Java]JVM GarbageCollector - 입문서

들어가며우리는 자바에서 객체를 new 키워드로 만들곤 합니다. 하지만 객체를 생성은 하지만 삭제를 따로 하신 기억이 없으실 겁니다. 사실 객체를 생성한다는 말은 메모리에 객체에 관한 데이터를 올린다는 말입니다. 그렇다면 당연히 삭제하는 과정이 있어야 할 텐데 저희는 명시적으로 삭제를 하지 않죠. 그래도 문제없이 돌아가는 것은 GarbageCollector의 친구가 있었기 때문입니다. 동적할당은 Heap과 관련이 있다.객체를 new 로 생성하는 것은 동적으로 할당을 한다는 말입니다. 동적 할당은 정적 할당과는 차이가 있는데 정적 할당은 이미 프로그램이 실행되기 전부터 할당이 정해져 있는 반면에, 동적 할당은 프로그램이 실행되는 환경(런타임 환경)에 되어서야 할당하기로 결정 나는 것이기 때문에 '동적'이라는..

Spring에서 HTTP 요청이 들어오면 처리되는 전체적인 흐름

들어가며Spring 어플리케이션 서버에서 HTTP 요청을 어떻게 처리하는지 흐름을 알고 계신가요? 이 글은 전체적인 작동 구조에 대해 공부하여 작성해보았습니다. 요청 처리 과정1) 요청이 웹 어플리케이션 서버에 도착 (Tomcat)클라이언트(브라우저, 모바일 앱 등)가 HTTP 요청을 보낼 때, Spring Boot 애플리케이션이 실행 중이라면 Tomcat 내장 웹 어플리케이션 서버가 요청을 받아줍니다.  📝  요청 예제GET /api/user/1 HTTP/1.1Host: example.comAuthorization: Bearer some_token  ✏️  웹 어플리케이션 서버의 역할요청을 받을 준비 (포트 8080 등)Servlet Container에게 요청 전달2) FilterChain이 요청을 ..

[Spring+MongoDB]한 컬렉션에서 중복된 필드값 검증하기(feat. 고유 인덱스)

들어가며안녕하세요. 현재 "모아동"이라는 부경대학교 소속 동아리를 안내해 주는 서비스를 개발하고 있습니다.Spring + MongoDB 기반으로 동아리 담당자 쪽 회원 가입 기능 개발에서 "한 컬렉션에서 중복된 필드값이 들어가는 문제"에 막혀 헤매다가 해결하게 되어 글을 쓰게 되었습니다.문제 상황public class User implements UserDetails { ... @NotNull @Email @Size(min = 5, max = 50) private String email; ...}  이메일 필드는 같은 컬렉션 내에서 중복이 되지 않기를 원했습니다. 해결 과정단순히 구현한다면 find로 컬렉션 내에 이메일이 존재하는지 파악을 하고나서 있으면 save..

[Spring+MongoDB]엔티티의 기본값이 DB에 저장되지 않은 문제

들어가며안녕하세요. 현재 "모아동"이라는 부경대학교 소속 동아리를 안내해주는 서비스를 개발하고 있습니다.Spring + MongoDB 기반으로 동아리 담당자 쪽 회원 가입 기능 개발에서 "엔티티의 기본 값이 DB에 저장되지 않은 문제"가 발생했습니다.문제 상황User (Entity)@Entity@Builder@Getter@AllArgsConstructor@NoArgsConstructor@Document(collection = "user")public class User implements UserDetails { @Id private String id; @NotNull @Email @Indexed(unique = true) @Size(min = 5, max = 50) ..

[Java]JVM 구조

들어가며Write once, run anywhere한 번 쓰면, 어디서든 실행된다. 자바는 위 슬로건을 전면에 내세워 세상에 널리 알려졌습니다.당시 다른 프로그래밍 언어와 다르게 하드웨어의 종류와 상관없이 사용할 수 있다는 것이 큰 장점이었습니다.현재도 여전히 크로스 플랫폼이라는 장점은 무시하지 못합니다. 자바는 어떻게 하드웨어 의존성을 무시할 수 있게 됐을까요??그 근간엔 JVM(Java Virtual Machine)이 존재합니다. 이 글에선 JVM에 대해 공부해본 것을 정리해 보았습니다. 자바 전체 구조그림 1은 JVM에 대해 검색하면 자주 나오는 개념도입니다.이 그림을 이용해서 차근차근 자바가 어떻게 작동하는지 설명해 보겠습니다. 1. Byte Code 변환 우리가 작성한 자바 소스 코드는 컴퓨터가..

자바(Java) 비동기 처리에 대하여

🌱 해당 포스트는 한걸음 스터디에서 발표한 내용입니다. 발표 내용을 아래 영상에서 확인하실 수 있습니다!  🌱한걸음은 각자 학습한 내용을 토대로 블로그 글을 작성하고, 대면으로 모여서 발표하며, 녹화해 유튜브에 업로드하는 스터디입니다. 한걸음 알아보기  들어가며프로그램에서 작업을 처리하는 방식으로 비동기와 동기처리가 있습니다.이 글에선 자바에서 비동기 처리에 대해 공부하여 정리해 보았습니다. 동기? 비동기? 처리가 뭘까요?결국 동기와 비동기에 대한 이야기는 작업 방식에서의 차이점을 말합니다. 만약 라면을 끓인다고 했을 때, 순서가 있습니다. 1. 물을 끓인다.2. 끓여진 물에 면과 수프를 넣는다.3. 달걀을 넣는다. 면을 넣기 전에 물은 먼저 끓여야겠죠.그렇다면 면과 수프를 넣는 작업으로 넘어가기 전..

[Spring 공식문서 정리하기] Resource 관리

🌱 해당 포스트는 한걸음 스터디에서 발표한 내용입니다. 발표 내용을 아래 영상에서 확인하실 수 있습니다.🌱한걸음은 각자 학습한 내용을 토대로 블로그 글을 작성하고, 대면으로 모여서 발표하며, 녹화해 유튜브에 업로드하는 스터디입니다.한걸음 알아보기들어가며Spring 어플리케이션을 개발하다 보면 필연적으로 Resource 관리를 만나게 됩니다.대표적으로 resources 패키지안에 있는 application.properties 파일도 Resource라고 할 수도 있고 외부의 파일들을 업로드하는 경우도 있습니다.스프링에선 이를 어떻게 개발자가 쉽게 활용할 수 있도록 제공하는지 알아보겠습니다. Resource Interface로우 레벨인 리소스들을 개발자가 쉽게 사용할 수 있게 하는 가장 쉬운 방법은 추상화..

[Spring 공식문서 정리하기] Spring IoC Container와 Beans(Feat. 의존성 주입(DI))

🌱 해당 포스트는 한걸음 스터디에서 발표한 내용입니다. 발표 내용을 아래 영상에서 확인하실 수 있습니다.  🌱한걸음은 각자 학습한 내용을 토대로 블로그 글을 작성하고, 대면으로 모여서 발표하며, 녹화해 유튜브에 업로드하는 스터디입니다.한걸음 자세히 알아보기들어가기 앞서 Spring에서 MVC 패턴으로 개발할 때, 흔히 Controller, Service, Repository 등을 만들곤 합니다.그리고 이 그림 1처럼 클래스 명 위에 어노테이션 하나만 딱 달아두면 Main Application 클래스에서 Run 하면 알아서 서버가 돌아갑니다. 하지만, 자바에서 객체를 생성할 때 어떻게 하나요??  그림 2처럼 new 키워드를 사용해 객체를 생성하죠. 우리는 Spring으로 개발할 때, 따로 Main A..