inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Spring MVC Phần 1 - Công nghệ cốt lõi phát triển web backend

Phát triển domain sản phẩm

질문드립니다.

882

dmswo1062522

70 câu hỏi đã được viết

6

강의중에 궁금한게 생겨서 질문남깁니다.

현재 3년동안 개발을 하면서 ConcurrentHashMap을 사용하지 않고 모든코드를 HashMap으로 처리하였습니다.

물론 실제 고객들이 사용하는 서비스개발 회사가 아니라 주로 금융권 SI프로젝트들 중에서도 고객내부직원들이 쓰는 업무를 주로 개발해서 트래픽이 많이 몰리진 않았거든요.

제가 경험했던 프로젝트들이 여러개의 쓰레드가 접근하지 않아서 HashMap으로도 무리없이 프로젝트가 진행되었던 걸로 생각하면 될까요?? 반대로 트래픽이 몰리는 서비스개발회사에서는 ConcurrentHashMap을 사용하면 되는건가요??

MVC spring

Câu trả lời 2

5

yh

안녕하세요. 은재님

동시성이 문제가 되는 상황에서만 ConcurrentHashMap을 사용하시면 됩니다.

예를 들어서 스프링의 빈이 싱글톤인데, 여기에서 멤버 변수를 사용하면 여러 쓰레드에서 해당 멤버 변수를 공유해서 사용하게 됩니다. 이때 문제가 될 수 있습니다.

지역 변수는 쓰레드간에 공유되지 않기 때문에 HashMap을 사용하는 것이 맞습니다.

감사합니다.

0

dmswo1062522

예전에 빈객체로 등록될때는 스프링에서 자동으로 싱글톤으로 빈객체를 등록한다고 해주셨었는데요. 

예를들어서 Controller에서 @Service어노테이션이 붙은 ItemService를 호출하게되면

이때는 Map<Long, ItemService> map = new ConcurrentHashMap<>()이라고 코드를 구성하고 만약에 싱글톤으로 만들어진 경우가 아니면 Map<Long, String> map = new HashMap<>() 이런식으로 코드를 작성해도 된다는 의미인가요??

단일쓰레드환경과 멀티쓰레드환경이 개념적으로는 알고있지만, 실제 실무에서 어떻게 환경이 구축되어있는게 감이안잡혀서 질문드립니다. 그리고 혹시 이번강의에서는 단일쓰레드환경인지 멀티쓰레드환경인지 알 수 있을까요??

4

yh

안녕하세요. 은재님

웹 애플리케이션은 기본적으로 모두 멀티쓰레드 환경입니다.

여러 고객이 동시에 같은 싱글톤 컨트롤러, 서비스 등을 호출하게 됩니다.

여기서 핵심은 멤버 변수 vs 지역 변수의 차이를 이해하셔야 합니다.

이렇게 싱글톤 객체에 멤버 변수는 여러 쓰레드에서 공유되기 때문에 조심해서 사용해야 합니다. 그래서 이 경우 ConcurrentHashMap을 사용해야 합니다.

그런데 지역 변수는 쓰레드마다 각각 따로 전용 공간이 할당 되기 때문에 HashMap을 사용하셔도 됩니다.

1

gamma

멤버 변수(member variable)는
메소드 밖에서 선언된 변수를 말한다.
메소드 안에 선언된 변수는
지역(local) 변수라고 한다.

servlet과 container에 대한 질문입니다

0

15

1

api를 어느 컨트롤러에 작성해야하는지는 어떤 기준으로 해야하나요?

0

59

1

jsp 의존성 수정 요청

0

72

2

요즘 웹 서버가 주로 사용되는 이유는 SPA 구조 때문일까요 ?

0

142

1

save() 메서드 문의

0

64

1

절대 경로로 templates/basic 하위 파일 열면 css 적용 안되는 현상

0

98

1

request-body-json

0

83

2

MVC 패턴의 적용 단위

0

92

1

RequestMapping을 이용한 핸들러, 어댑터

0

118

2

save 후 결과화면

0

86

2

jsp를 이용한 view

0

96

1

application.properties에 debug 추가해도 결과가 똑같습니다.

0

171

1

수업 코드 제공 관련 문의

0

95

2

RequestMappingHandlerAdapter의 Controller 호출 과정

0

97

3

파일 오픈 시

0

67

1

스프링 배치 관련

0

76

1

@RequestParam의 defaultValue가 blank 값도 처리하는 지 여부

0

111

1

postman으로 /request-body-json-v1 호출시 500 error

0

93

1

프론트엔드와 백엔드의 mvc, rest api에 대한 질문

0

75

1

모델의 역할과 계층 분리에 대한 이해 차이 + 추가질문

0

111

1

console log 출력 관련 질문입니다.

0

73

1

애플리케이션이 실행 되지 않습니다 ㅠㅠㅠ

0

135

1

html 변경하는 부분 적용 문제

0

98

1

한글 깨짐

0

73

2