개발자상식 <백엔드 개발자> (14)[책리뷰 & Book review]
본문 바로가기

컴퓨터공부/책리뷰 & book review

개발자상식 <백엔드 개발자> (14)[책리뷰 & Book review]

by Life & study 2024. 1. 24.
반응형

개발자상식 <백엔드 개발자> (14)

[책리뷰 & Book review]

 

 

서블릿 jsp에서 형변환 Casting에 대한 것은 무엇인가?

형변환(Casting)은 한 타입의 값을 다른 타입으로 변환하는 과정을 말합니다. 

자바에서는 데이터 타입이 엄격하게 관리되기 때문에, 다른 타입의 값을 할당하거나 연산하려 할 때는 명시적으로 형변환을 해야 합니다.

특히, request.getAttribute("name") 메서드의 반환값은 Object 타입이기 때문에 이를 String 타입으로 사용하려면 형변환을 해야 합니다. Object 타입은 자바의 모든 클래스의 최상위 클래스로, 어떤 타입의 객체든 Object 타입으로 참조할 수 있습니다. 하지만, 이 Object 타입을 다시 원래의 타입으로 사용하려면 형변환을 해야 합니다.

아래 코드는 "name"이라는 속성 값을 String 타입으로 가져와서 name 변수에 저장하는 예제입니다.

java

String name = (String)request.getAttribute("name");


이 코드에서 (String)은 request.getAttribute("name")의 반환값을 String 타입으로 형변환하는 부분입니다. 

이렇게 형변환을 하지 않으면 Object 타입의 값을 String 타입의 변수에 할당할 수 없기 때문에 컴파일 에러가 발생합니다.

그림으로 표현하면 다음과 같습니다.

request.getAttribute("name") ----(Object)----> "name" attribute
                                                 |
                                                 V
                                       (String) "name" attribute -----> name variable


위의 그림에서 request.getAttribute("name")는 "name"이라는 속성의 값을 Object 타입으로 가져오고, (String)은 이 값을 String 타입으로 형변환하는 과정을 나타냅니다. 

 

마지막으로 형변환된 값이 name 변수에 할당되는 것을 보여줍니다. 이렇게 형변환을 통해 다른 타입의 값을 안전하게 사용할 수 있습니다.

 

 

 

멀티 스레드와 싱글스레드는 무엇인가?

 

멀티 쓰레드와 싱글 스레드는 프로그래밍에서 중요한 개념입니다.

싱글 쓰레드는 한 번에 하나의 작업만 처리하는 구조를 말하며, 한 스레드가 작업을 수행하는 동안 다른 작업은 대기해야 합니다. 이는 구현이 상대적으로 간단하다는 장점이 있지만, 스레드가 하나밖에 없기 때문에 CPU의 여러 코어를 효율적으로 활용하지 못하는 단점이 있습니다.

반면에 멀티 쓰레드는 여러 스레드가 동시에 작업을 수행하므로, CPU의 여러 코어를 효율적으로 활용하고 동시에 여러 작업을 처리할 수 있다는 장점이 있습니다. 하지만, 스레드 간의 동기화 문제나 공유 자원에 대한 접근 제어 등 복잡한 이슈를 처리해야 하는 단점이 있습니다.

자바 스프링 프레임워크와 이들의 관계는 다음과 같습니다:

자바 스프링 프레임워크는 멀티 스레드 환경을 지원합니다. 스프링은 자체적인 스레드 풀을 관리하며, 클라이언트의 요청마다 새로운 스레드를 생성하여 작업을 병렬로 처리합니다. 이를 통해 고성능의 웹 서비스를 제공할 수 있습니다. 또한, 스프링 프레임워크는 @Async 어노테이션을 사용하여 비동기적인 처리를 지원하며, Future 객체를 이용해서 비동기 작업의 결과를 쉽게 처리할 수 있도록 도와줍니다.

따라서, 자바 스프링 프레임워크는 멀티 스레드 환경에서의 프로그래밍을 보다 쉽고 효율적으로 할 수 있도록 도와주는 도구입니다.

 

스프링 프레임워크에서는 @Async 어노테이션을 사용해 비동기적으로 메서드를 실행할 수 있습니다. 

이를 통해 메소드가 별도의 스레드에서 실행되며, 호출한 스레드는 즉시 결과를 기다리지 않고 다른 작업을 계속 수행할 수 있습니다. 이렇게 하면 여러 작업을 동시에 처리할 수 있어 성능 향상을 이룰 수 있습니다.

이를 구현하려면 먼저 스프링의 비동기 지원을 활성화해야 합니다. 

이를 위해 @EnableAsync 어노테이션을 설정 클래스에 추가합니다.

java

@Configuration
@EnableAsync
public class SpringAsyncConfig {
    // ...
}


그런 다음 @Async 어노테이션을 비동기적으로 실행하려는 메서드에 붙입니다. 

아래 코드는 asyncMethod()라는 메소드가 별도의 스레드에서 실행되도록 하는 예시입니다.

java

@Service
public class AsyncService {

    @Async
    public void asyncMethod() {
        // 비동기로 실행할 코드
    }

}


이렇게 하면 asyncMethod() 메소드는 별도의 스레드에서 실행되며, 호출한 스레드는 메서드의 실행이 끝날 때까지 기다리지 않고 다른 작업을 계속 수행할 수 있습니다.

또한, 비동기 메소드의 결과를 받아야 하는 경우 Future를 사용할 수 있습니다. 

Future는 비동기 작업의 결과를 나타내는 객체로, 작업이 완료되면 결과를 얻을 수 있습니다.

java

@Service
public class AsyncService {

    @Async
    public Future<String> asyncMethodWithReturnType() {
        // 비동기로 실행할 코드
        return new AsyncResult<>("비동기 작업 결과");
    }

}


위의 코드에서 asyncMethodWithReturnType() 메서드는 Future 객체를 반환하며, 이 객체를 통해 비동기 작업의 결과를 얻을 수 있습니다. 이 메서드를 호출하는 측에서는 Future.get() 메서드를 사용해 결과를 얻을 수 있습니다.

java

@Service
public class SomeService {

    @Autowired
    private AsyncService asyncService;

    public void someMethod() {
        Future<String> future = asyncService.asyncMethodWithReturnType();
        // 다른 작업 수행
        String result = future.get();  // 비동기 작업의 결과 얻기
    }

}


이렇게 스프링의 @Async 어노테이션과 Future를 사용하면 비동기적으로 메서드를 실행하고, 그 결과를 얻는 것이 가능합니다. 이를 통해 멀티 스레드 환경에서의 프로그래밍을 보다 쉽게 할 수 있습니다.

 

 

 

 

 

 

 

 

회사의 인적성
5요인과 
기업에서 인적성을 보는 이유는 무엇인가?

인적성 검사는 개인의 성격 특성, 성향, 능력 등을 측정하는 도구로서, 기업에서는 이를 통해 직무에 적합한 인재를 선발하는 데 사용합니다. 특히 5 요인 인적성 모델은 '개방성, 성실성, 외향성, 친화성, 안정성'의 5가지 성격 요소를 측정하며, 이러한 요소들은 직무 수행능력과 팀에서의 협동성 등에 중요한 영향을 미칩니다.

기업에서 인적성을 보는 이유는 다음과 같습니다:

직무 적합성 판단: 인적성 검사를 통해 지원자의 성격과 성향을 파악하고, 이를 바탕으로 그가 특정 직무를 수행하는 데 적합한지를 판단할 수 있습니다.
팀워크 및 조직 문화 적합성 판단: 각 개인의 성격과 성향은 팀 내에서의 상호작용과 조직 문화에 큰 영향을 미칩니다. 따라서 인적성 검사를 통해 지원자가 기업의 조직 문화와 잘 맞을지, 팀 내에서 원활하게 협업할 수 있을지를 평가하는데 도움을 줍니다.
잠재력 및 발전 가능성 파악: 인적성 검사는 지원자의 현재 능력뿐만 아니라 잠재력과 발전 가능성까지 파악하는 데 도움을 줍니다. 이를 바탕으로 기업은 장기적인 인사 계획을 세울 수 있습니다.
따라서, 인적성 검사는 기업이 적합한 인재를 선발하고, 그들의 발전 가능성을 최대화하는 데 중요한 역할을 합니다.

 

 

 

 

 

 

Node.js 와 스프링 중 멀티스레드의 장단점은?

 

멀티 쓰레드와 Node.js는 각기 다른 방식으로 동시성을 처리하며, 그에 따라 각각 장단점이 있습니다.

멀티 쓰레드를 사용하는 언어나 프레임워크(예: Java의 스프링)의 장점:

CPU 사용 효율성: 멀티 쓰레드스레드 환경에서는 여러 스레드가 동시에 작업 수행하므로, 멀티 코어 CPU의 각 코어를 효율적으로 활용할 수 있습니다.

 

복잡한 계산 작업 처리: CPU 집중적인 작업(예: 이미지 처리, 기계 학습 등)을 병렬로 처리하는데 유리합니다.. 동기식 작업 용이: 각 스레드가 독립적으로 작동므로, 동기화 문제를 적절히 관리하면 복잡한 동기식 작업을 처리하는데 유리합니다.

 


단점:

동기화 문제: 여러 쓰레드가 공유 자원에 동시에 접근할 때 발생하는 race condition(경쟁 상태) 등의 문제를 처리해야 합니다.
메모리 사용량: 스레드마다 독립적인 메모리 공간을 필요로 하므로, 많은 스레드를 생성하게 되면 메모리 사용량이 증가합니다.

 

 


 

 

 

Node.js의 장점:

단일 쓰레드: Node.js는 단일 스레드 이벤트 루프 모델을 사용하므로, 동기화 문제를 걱정할 필요가 적습니다.

 

비동기 I/O: Node.js는 비동기 I/O를 사용하므로, I/O 집중적인 작업(예: 데이터베이스 쿼리, 파일 입출력 등)에서 높은 성을 낼 수 있습니다.

 

메모리 효율: 단일 스레드델을 사용하므로, 스레드 생성에 따른 메모리 부하 적습니다.


단점:

CPU 집중적인 작업: Node.js는 CPU 집중적인 작업에서는 느릴 수 있습니다. 이는 단일 스레드 모델 때문에 CPU의 여러 코어를 효율적으로 활용하지 못하기 때문입니다.
비동기 프로그래밍 복잡성: 비동기 프로그래밍은 동기 프로그래밍에 비해 코드를 이해하고 디버그 하는 것이 복잡할 수 있습니다.


따라서, 사용할 기술은 애플리케이션의 요구 사항과 특성에 따라 결정해야 합니다. 

 

CPU 집중적인 작업이 많거나 복잡한 동기식 작업 처리가 필요한 경우에는 멀티 스레드를 사용하는 것이, I/O 집중적인 작업이 많은 경우에는 Node.js를 사용하는 것이 더 적합할 수 있습니다.

 

 

 

 

 

 

 

 

간단한 예제로 멀티 쓰레드 환경에서의 CPU 집중적인 작업과 Node.js에서의 I/O 집중적인 작업을 살펴보면?

 



멀티 쓰레드스레드 환경에서의 CPU 집중적인 작업: 아래의 자바 코드는 2개의 스레드를 생성하여 각각 복잡한 계산을 수행하는 예입니다.
java

public class Main {
    public static void main(String[] args) {
        // 쓰레드 1
        new Thread(() -> {
            for (int i = 0; i < 100000000; i++) {
                double x = Math.sin(i) * Math.tan(i);  // CPU 집중적인 작업
            }
        }).start();

        // 쓰레드 2
        new Thread(() -> {
            for (int i = 0; i < 100000000; i++) {
                double x = Math.cos(i) * Math.sqrt(i);  // CPU 집중적인 작업
            }
        }).start();
    }
}


위 코드에서는 2개의 스레드가 동시에 실행되며, 각각 복잡한 수학적 계산을 수행합니다. 이와 같이 멀티 스레드 환경에서는 여러 스레드가 동시에 작업을 수행함으로써 CPU를 효율적으로 활용할 수 있습니다.

 


Node.js에서의 I/O 집중적인 작업: 아래의 Node.js 코드는 비동기적으로 파일을 읽어오는 예입니다.
javascript

const fs = require('fs');

// 비동기적으로 파일 읽기
fs.readFile('file.txt', 'utf8', (err, data) => {
    if (err) throw err;
    console.log(data);
});

console.log('파일 읽기 요청 후 바로 출력되는 로그');


위 코드에서는 fs.readFile() 함수를 사용하여 비동기적으로 파일을 읽어옵니다. 

이 함수는 I/O 작업을 비동기적으로 처리하므로, 파일을 읽는 동안 다른 작업을 계속 수행할 수 있습니다. 따라서 I/O 집중적인 작업을 효율적으로 처리할 수 있습니다.

이처럼, 멀티 쓰레드 환경과 Node.js는 각각 다른 방식으로 동시성을 처리하므로, 애플리케이션의 요구 사항에 따라 적절한 방식을 선택할 수 있습니다.

 

 

 

 

개발자가 시스템의 CPU와 메모리 사용량을 확인하려면

 

개발자가 시스템의 CPU와 메모리 사용량을 확인하려면, 

운영 체제의 시스템 모니터링 도구를 사용하거나 프로그래밍 언어가 제공하는 API를 활용할 수 있습니다.

시스템 모니터링 도구: 대부분의 운영 체제는 CPU와 메모리 사용량을 확인할 수 있는 시스템 모니터링 도구를 제공합니다. 예를 들어, 윈도에서는 작업 관리자(Task Manager), 리눅스에서는 top, htop 등의 명령어를 사용할 수 있습니다.

 

프로그래밍 언어의 API: 일부 프로그래밍 언어는 시스템의 CPU와 메모리 상태를 확인할 수 있는 API를 제공합니다. 예를 들어, 자바에서는 Runtime 클래스를 통해 JVM의 메모리 상태를 확인할 수 있습니다.
java

Runtime runtime = Runtime.getRuntime();
long maxMemory = runtime.maxMemory();  // JVM이 사용할 수 있는 최대 메모리 양
long usedMemory = runtime.totalMemory() - runtime.freeMemory();  // 현재 사용 중인 메모리 양


그러나 이러한 방법으로 얻은 정보는 시스템 전체의 상태가 아니라 JVM의 상태에 대한 것이므로, 시스템 전체의 메모리 상태를 정확히 파악하기 위해서는 운영 체제의 도구를 사용하는 것이 더 정확합니다.

또한, 이러한 정보를 바탕으로 애플리케이션의 메모리 사용량을 적절하게 조절해야 합니다. 예를 들어, 너무 많은 스레드를 생성하면 시스템의 메모리를 과도하게 사용하여 성능 문제를 일으킬 수 있으므로, 적절한 수준에서 스레드의 개수를 제한해야 합니다.




 

 

 

#개발자취업 #개발자기초 #개발자 #개발자분야 #개발자분류 #개발자종류 #it개발자 #서버개발자 #개발자성장 #신입개발자 #ios개발자 #개발자노트북 #개발자 되는 법 #개발 #앱개발 #웹개발 #개발분야 #it개발 #개발공부 #코딩상식 #개발공부 #개발초보

 

#개발자취업 #개발자면접 #개발자채용 #백엔드개발자 #백엔드개발자 #백엔드개발자취업 #백엔드개발 #프론트엔드개발자 #개발자상담 #백엔드 #개발자 #앱개발자 #웹개발자 #개발자팁 #앱개발자 #백엔드취업 #백엔드공부 #백엔드강의 #백엔드독학

 

#전산직면접 #면접 #면접팁 #면접관 #공공기관전산직면접 #공사면접 #면접질문 #면접할말 #면접준비 #면접준비 #면접답변 #면접질문 #면접기출 #전화면접 #면접복장 #면접답변 #면접꿀팁 #모의면접 #면접후기 #롯데면접 #면접후기 #임원면접 #최종면접 #면접꿀팁

 

 

 

 

 

반응형

댓글