전체 글 142

[Java] JVM과 Garbage Collection 동작 원리

이번 포스팅은 JVM 동작 원리와 GC 동작원리에 관한 내용이다. JVM과 GC 동작원리 역시 근본 중의 근본인 내용이지만, 이제야 정리한다. 먼저 들어가기 전... ✔️ JVM, JRE, JDK 정리 JVM (Java Virtual Machine) 자바 프로그램이 어느 기기, 어느 운영체제에서도 실행될 수 있게 만들어준다. 자바 프로그램의 메모리를 효율적으로 관리 & 최적화 해준다. JRE (Java Runtime Environment) JVM이 원활하게 잘 작동될 수 있도록 환경을 맞춰주는 역할을 한다. (JRE에 클래스 로더도 포함됨) JDK (Java Development Kit) JDK 에는 JRE에 없는 자바 컴파일러를 포함하고 있다. 자바로 개발을 하고 싶다면, 설치해야 한다. ✔️ JVM ..

CS/Java (CS) 2023.01.29

[Spring] @SpringbootApplication의 원리

원래는 MVC1 & MVC2, DispatcherServlet와 같이 담으려 했으나... 내용이 길어지는 관계로 분리 포스팅을 했다. ✔️ @SpringBootApplication이란? @Configuration + @EnableAutoConfiguration + @ComponentScan을 합친 것이다. 💡 @SpringBootApplication으로 인해 스프링 부트의 자동 설정, 스프링 Bean 읽기와 생성을 모두 자동으로 설정한다. 특히나 @SpringBootApplication이 있는 위치부터 설정을 읽어가기 때문에, 이 클래스는 항상 프로젝트의 최상단에 위치해야만 한다. ✔️@SpringBootAplication의 내부 구조 @Target({ElementType.TYPE}) @Retention..

Spring/그 외 2023.01.27

[Spring] MVC1 & MVC2, DispatcherServlet

이번 포스팅도 역시 "기본"에 관한 것이다. '백견불여일타'라고, 아무리 읽고 또 읽어도 한번 코드 쳐보고 실행하는 것만도 못하다는 뜻이다. 난 이 말에 백번천번 동의한다. 원래 내 스타일도 이론을 쭉 훑고, 이해 갈 때까지 읽고 또 읽고 그 다음에 코딩을 하는 것이 아닌, 일단 한번 쳐보고 그 다음에 그 배경을 찬찬히 살펴본다. (그래도 어렵고 이해 잘 안 가는 건 함정) 그러면 내가 코드 쳐보면서 이해가 안 갔던 부분들이 '아 이래서 이런 거였구나?'하면서 뭔가 더 머릿속에 잘 들어오는 느낌;;; 뭐 물론 나만 그럴수도. 암튼 각설하고. 오늘은 MVC 패턴의 변화와 @SpringbootApplication에 대해서 다뤄볼 것이다. (글이 길어져서 @SpringbootApplication는 따로 뺌) ..

Spring/MVC 2023.01.27

[운영체제] PCB & Context Switching

PCB란? PCB(Process Control Block)는 CPU가 프로세스가 여러 개일 때, CPU 스케줄링을 통해 관리하는 것을 말한다. ❗ 이때, CPU는 각 프로세스들이 누군지 알아야 관리가 가능하다. → 프로세스들의 특징을 갖고있는 것이 바로 Process Metadata이다. ※ Metadata (메타데이터)란? : 데이터에 관한 구조화된 데이터로, 대량의 정보 가운데에서 확인하고자 하는 정보를 효율적으로 찾아내서 이용하기 위해 일정한 규칙에 따라 콘텐츠에 대해 부여되는 데이터이다. Process Metadata에는 다음과 같은 정보들이 있다. PCB에 담기는 프로세스 정보 PCB는 프로세스 스케줄링 상태, 프로세스 ID 등의 다음과 같은 정보들로 이루어져 있다. Process ID (PID..

CS/운영체제 2023.01.27

Spring Security를 이용하여 로그인을 구현해보자

UserDetailService UserDetailService 인터페이스는 DB에서 유저 정보를 가져오는 역할을 한다. UserDetailsService는 DaoAuthenticationProvider와 협력하는 인터페이스이다. DaoAuthenticationProvider는 요청받은 유저의 ID, Password와 저장된 ID, Password의 검증하는 책임을 가지고 옴. 저장된 ID, Password를 갖고오기 위해 UserDetailsService와 협력한다. UserDetailsService 인터페이스 public interface UserDetailsService { UserDetails loadUserByUsername(String username) throws UsernameNotFoun..

프로젝트 2023.01.26

[운영체제] 시스템 콜(System Call)

들어가기 전 용어 정리 운영체제는 커널 모드(Kernel Mode)와 사용자 모드(User Mode)로 나뉘어 구동된다. - 사용자 모드(User Mode) : 유저가 접근할 수 있는 영역을 제한적으로 두며, 컴퓨터 자원에 함부로 침범하지 못하는 모드. - 커널 모드(Kernel Mode) : 모든 컴퓨터 자원에 접근할 수 있는 모드. - 커널 (Kernel) : 운영체제의 핵심 부분이자 시스템콜 인터페이스를 제공하며 보안, 메모리, 프로세스, 파일 시스템, I/O 디바이스, I/O 요청 관리 등 운영체제의 중추적인 역할을 한다. 즉, 파일 입출력, 프로세스 관리 등과 같이 운영체제의 기능을 담당 시스템 콜이 필요한 이유 일반 사용자(사용자 모드)는 커널에 접근할 수 없기 때문에 원칙적으로는 파일 입출력..

CS/운영체제 2023.01.26

[운영체제] 인터럽트(Interrupt)

주변장치와 입출력 장치는 CPU나 메모리와 달리 인터럽트라는 메커니즘을 통해 관리된다. 인터럽트란? 프로그램을 실행하는 도중에 예기치 않은 상황이 발생할 경우, 현재 실행 중인 작업을 즉시 중단하고, 발생된 상황을 처리한 후 다시 실행 중인 작업으로 복귀하는 것이다. 즉, 현재 실행 중인 프로그램을 중단하고, 다른 프로그램의 실행을 요구하는 명령어다. (※ 인터럽트 : 끼어들다) ※ 지금 수행 중인 일보다 더 중요한 일(ex. 입출력, 우선 순위 연산 등)이 발생하면, 그 일을 먼저 처리하고 나서 하던 일을 계속해야 한다. 그래서 인터럽트, 왜 하는 건가? 입출력 연산이 CPU 명령 수행속도보다 현저히 느리기 때문. 인터럽트의 종류 인터럽트의 종류는 외부 인터럽트, 내부 인터럽트, 소프트웨어 인터럽트로 ..

CS/운영체제 2023.01.26

'도대체 DTO를 왜 만드는 것인가'에 대한 고찰

어떤 카테고리로 분류할지 고민이 된다. [Spring/그 외] 카테고리에 해야할지, [프로젝트] 카테고리에 해야할지, [생각들] 카테고리에 해야할지. 일단 [생각들] 카테고리에 분류했다. 결국 [프로젝트] 카테고리로 옮겼다. 각설하고. MySQL을 알게되니, MyBatis를 알게되고 MyBatis를 알게되니, JPA를 알게되고 JPA를 알게되니, TestCode를 알게되고 TestCode를 알게되니 DTO를 알게되었다. 파도파도 끝이 없는 코딩의 세계. (DTO 정리만 벌써 3번째인 것 같음;;) DTO가 정확히 뭘 의미하는 걸까? DTO를 도대체 "왜" 쓰는 걸까? 왜?왜?왜?왜?왜?왜에에에에에ㅔㅔㅔ에???????????????? DTO란? DTO(Data Transfer Object)는 프로세스 간 ..

프로젝트 2023.01.25

[운영체제] 프로세스 & 스레드, 멀티 프로세스 & 멀티 스레드

운영체제란? 운영체제는 컴퓨터 하드웨어가 컴퓨터 소프트웨어와 통신하고 작동하도록 하는 소프트웨어 프로그램이다. 운영체제의 주목적은 무엇인가? 운영체제에는 두 가지 주요 목적이 있다. 컴퓨터 시스템의 계산 활동을 관리하여 컴퓨터 시스템이 제대로 작동하도록 한다. 프로그램 개발 및 실행을 위한 환경을 제공한다. 프로세스와 스레드의 차이 (Process vs Thread) ※ 참고 : 메모리 영역 코드(Code) 영역 : 프로그램 소스 코드를 저장 (프로그램 명령) 데이터(Data) 영역 : 전역변수, 정적변수, 배열 등 스택(Stack) 영역 : 지역변수, 매개변수, 리턴 값 (임시 메모리 영역) 힙(Heap) 영역 : 동적 할당 시 사용 (new(), malloc() 등) ✔️ 프로그램이 CPU에 의해 실..

CS/운영체제 2023.01.25

[예외 처리] isEmpty일 때 Custom Exception 실패 후기

예외 처리에 관해 이것저것 해보고 있음. 저번 회원가입 시 중복 이름 입력에 대한 Custom Exception을 해보고, 이번엔 게시물 이미지를 한 개도 등록하지 않았을 경우 Custom Exception을 해보았다. 나름대로 코드를 짜고... 이게 맞는 로직인가? 싶었는데, 일단 테스트코드가 통과하긴 한다... ++ 후에 알고보니 잘못된 코드였음. 아무튼 실패도 값진 경험이니 기록을 해보겠다. 먼저, ErrorCode를 enum 타입으로 만든다. [ErrorCode.java] import lombok.AllArgsConstructor; import lombok.Getter; import org.springframework.http.HttpStatus; @AllArgsConstructor @Getter..

에러 2023.01.25