2024/03 24

JVM과 프로세스, 스레드

들어가며 프로세스와 스레드에 대한 개념은 개발에 있어 기초이자 필수이다. 그러나 계속해서 제대로 이해되지 않는 부분이 존재하고 또한 JVM과 연관지어 생각해본 경험이 없었다. 이번 포스팅을 통해 JVM과 프로세스가 어떻게 관련지어 동작하는지 알아보자. 목차 프로세스와 스레드 fork()와 exec() 데몬 JVM과 프로세스 프로세스란? 프로그램이 CPU를 점유하고 있을 때 프로세스가 된다. OS는 여러 프로세스를 실행하고 관리한다. 프로그램과 프로세스 프로그램은 레시피, 프로세스는 실제 레시피에 대한 요리 프로세스 상태 new - 프로세스가 생성되는 상태 ready - 프로세스가 CPU에 할당되어, 처리되기를 기다리는 상태 running - 프로세스가 CPU에 할당되어, 명령어들이 실행되는 상태 wait..

CS/운영체제 2024.03.31

[항해 취업코스] 개발자 취준 기록 16일차

기초 Q. Call by reference란 무엇이고 보통 어떻게 쓰이나요? Call by reference는 메서드에 변수를 인자로 전달할 때, 그 변수의 원래 주소를 전달하는 방법을 말한다. 메서드 내에서 이 변수를 조작하면 원래의 변수의 값이 변경된다. 원래의 값을 변경하고 싶을 때, 또는 큰 데이터 구조를 복사하는 비용을 피하고 싶을때 사용된다. Q. Override 와 Overload 를 설명해주실 수 있을까요? Override는 상속 관계에 있는 클래스에서 상위 클래스가 가지고 있는 메서드를 하위 클래스에서 재정의 하는 것을 말한다. Overoad는 매개 변수의 타입과 개수를 다르게 하여 다양한 호출에 응답되도록하는 것을 말한다. Q. JPA는 언제 필요하고 언제 필요하지 않은지 설명해주실 ..

CS 2024.03.30

네트워크 프록시 (Network Proxy)

Proxy 해당 포스팅에서 언급하는 Proxy는 네트워크 프록시를 의미한다. ‘대리’라는 뜻을 가짐. 프록시 서버란? 클라이언트와 서버간의 중계 서버로, 통신을 대리 수행하는 서버 프록시 사용 이유 - 필터 : 리소스의 접근에 대해 허용 / 차단 관리 - 접근 제어 : 허가된 클라이언트에 대한 접근 허용 / 허가되지 않은 클라이언트는 예로 비밀번호 요구 등의 방법 사용 - 캐싱 : 인기있는 요청들을 관리해서 바로 프록시에서 응답할 수 있도록하여 네트워크 비용을 줄일 수 있음 - 익명화 : HTTP 메세지에서 신원을 식별할 수 있는 특성을 제거함으로써 Forward Proxy : 일반적으로 Proxy라 불리는 것 : 클라이언트와 인터넷 사이에 위치하여 클라이언트 대신 서버에 요청을 보내주는 역할을 하는 것..

CS/네트워크 2024.03.29

OSI 7 계층

1 계층 : Physical Layer 두 컴퓨터가 서로 통신하려면 어떻게 해야할까요? 컴퓨터 간의 언어를 사용해야 합니다. 컴퓨터는 0과 1로 이루어져 있습니다. 전기 신호를 발생시켜 전압의 차이를 이용하여 0과 1을 구분해서 신호를 보내는 방식을 사용합니다. 그런데 이 신호는 아날로그 신호 일거 아니에요? 그러면 컴퓨터에서 생성한 데이터는 디지털 신호일거 아니에요? 디지털 신호는 전선을 통해서 전송될 수 없습니다. 따라서 아날로그 신호로 변환해야만 전선을 통해서 신호를 전송할 수 있습니다. 이러한 디지털 신호를 아날로그 신호로 변경해서 전송하는 것을 인코딩이라고 합니다. 다른 컴퓨터에서 보낸 아날로그 신호를 컴퓨터가 이해할 수 있도록 디지털 신호로 변경하는 것은 디코딩 입니다. 결국 Physical ..

CS/네트워크 2024.03.28

[항해 취업코스] 개발자 취준 기록 15일차

기초 Q. NoSQL과 RDBMS의 특징과 차이점에 대해서 장, 단점을 들어 설명해주세요. RDBMS는 스키마를 정의하여 사용하지만, NoSQL은 스키마를 정의하지 않고 사용할 수 있습니다. RDBMS는 엄격한 스키마와 트랜잭션으로 데이터 무결성을 보장하는 특징이 있고, NoSQL은 무결성 보장에는 제한적이지만 데이터의 유연성과 확장성에 초점을 두어 대량의 데이터와 높은 사용자 부하에도 쉽게 확장할 수 있는 특징이 있습니다. Q. RDBMS의 정규화에 대해 설명해주세요. 정규화란? 중복을 최소화하여 이상 현상(Anomaly)의 발생을 방지하는 것을 뜻합니다. 이상현상이란 정규화가 제대로 되지 않은 Table에 어떤 작업을 수행했을 경우 비합리적 문제가 발생하는 현상입니다. 이상 현상에는 삽입 이상, 삭제..

CS 2024.03.28

[항해 취업코스] 개발자 취준 기록 13일차

Q. Garbage Collector의 역할, 원리, 알고리즘에 대해 아는 만큼 설명해주실 수 있을까요? GC의 역할 프로그램에서 동적으로 할당한 메모리 영역에 대해 어떠한 변수로 참조하지 않는 메모리 영역을 자동으로 해제시켜주는 역할을 합니다. GC의 원리/알고리즘 GC가 어떻게 변수를 참조하지 않는 메모리 영역을 검사하는지 설명드리겠습니다. 검사를 위한 알고리즘에는 두 가지가 있는데요, 첫 번째는 reference counting 방식입니다. 몇 가지 방법으로 해당 객체에 접근할 수 있는지에 대한 count를 저장하는 방법인데요, 순환참조로 인해 해당 count가 1을 유지하게 되어 메모리가 해제되지 않는 문제가 생깁니다. 이를 해결하는 방식이 Mark and Sweep 방식입니다. Mark and ..

CS 2024.03.26

Checked Exception과 Unchecked Exception에 대해 알아보자.

이 글은 Exception을 이해하기 위해서 다른 외부 블로그나 링크들을 참조하여 정리한 포스팅 입니다. 자바에서 예외 처리는 프로그램의 안정성과 신뢰성을 높이기 위해 매우 중요한 부분입니다. 예외는 크게 에러, 체크 예외, 언체크 예외 등 3가지로 나눌 수 있습니다. 자바 예외 클래스의 계층 구조 RuntimeException의 하위 클래스들이 Uncheck Exception 이라 하고 하위 클래스가 아닌 Exception 클래스의 하위 클래스들을 Checked Exception이라고 합니다. Checked Exception이란? 컴파일 시점에 처리 여부를 체크하는 예외입니다. 컴파일러가 해당 예외를 처리하거나 선언하지 않았다면 컴파일 에러를 발생시킵니다. Uncheck Exception이란? 런타임 ..

CS/Java 2024.03.22

@ControllerAdvice에 대해 알아보자.

이 글은 @ControllerAdvice에 대한 동작원리를 이해하기 위해서 다른 외부 블로그나 링크들을 참조하여 정리한 포스팅 입니다. @ControllerAdvice를 사용하는 이유 많은 예외 처리들을 적용하게 되면 코드량이 증가하고 복잡해집니다. 따라서, 비지니스 로직에 집중하기 힘들고 유지보수 하기가 어려워 집니다. 이러한 문제를 개선하기 위해서 @ExceptionHandler와 @ControllerAdvice를 사용한다고 생각하면 됩니다. 여러 예외 처리들을 적용하다보면 코드가 엄청나게 복잡해진다. 그렇게 되면 유지보수하기 아주 어려워진다. 또한, 비지니스 로직에 집중하기 어렵고, 비지니스 로직과 관련된 코드보다 예외 처리를 위한 코드가 더 많아지는 경우도 생긴다. 이런 문제를 조금이라도 개선하기..

[항해 취업코스] 개발자 취준 기록 12일차

Q. Spring @ControllerAdvice 애너테이션의 동작 원리에 대해 자세히 설명해주세요. @ControllerAdvice 애너테이션을 사용하면 프로젝트의 @Controller 어노테이션이 있는 클래스에서 @ExceptionHandler로 등록한 예외가 발생하는 경우에 대해 처리할 수 있습니다. @ExceptionHandler는 사용하여 처리할 예외를 명시하고, 실행시킬 메서드를 정의하여 사용합니다. Q. Checked Exception과 Unchecked Exception에 대해 자세히 설명해주세요. 자바 예외 클래스 계층 구조로 보았을 때, RuntimeException의 하위 클래스들이 Uncheck Exception 이라 하고 하위 클래스가 아닌 Exception 클래스의 하위 클래스들..

CS 2024.03.22

[항해 취업 코스] 개발자 취준 기록 11일차

Q. DTO에 대한 설명과 함께 왜(?) Entity 인스턴스를 Client에 그대로 전달하면 안되는지에 대해 설명해주세요. Data Transfer Object는 계층 간의 데이터 교환을 위해 필요한 객체이다. 특히 클라이언트와 서버 간의 데이터 전송에 사용된다. 필요한 정보만을 DTO에 담아 최소한의 데이터 전송으로 필요한 작업을 수행할 수 있도록 도와줍니다. 보안 유지 : 엔티티에 민감한 정보가 포함되어 있을 수 있습니다. 때문에 DTO를 사용하여 클라이언트에 전달할 데이터를 필터링하여 보안을 유지할 수 있습니다. 응집도 향상 : DTO에 필요한 정보만을 담기 때문에 애플리케이션의 응집도를 향상시킵니다. 유연성 : 객체의 구조가 변경되더라도 DTO를 통해 데이터를 전송하면 클라이언트에 덜 영향을 줄..

CS 2024.03.21