Notice
Recent Posts
Recent Comments
Link
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

나만의 개발 로그 | 고민 로그

23.01.31 TIL 본문

TIL&WIL

23.01.31 TIL

ultramancode 2023. 2. 1. 01:12

☑️  쓰레드 start() vs run()

 

호출 작동 방식 결과 
run() 그냥 일반 메서드 호출 새 스택·새 쓰레드 없음 → 순차 실행
start() JVM이 새 스택을 만들고 run()을 비동기로 호출 동시 실행(멀티쓰레드) 가능
 

JVM 메모리 구조: Heap, Method, Static 영역은 공유하지만 각 쓰레드마다 Stack 영역이 따로 생성됨
start()를 호출해야만 이 독립 스택이 마련되어 진짜 병렬 작업을 수행할 수 있다!


☑️ 쓰레드풀 기초

 
 
ExecutorService pool = Executors.newFixedThreadPool(8); 
pool.submit(task); // 필요할 때마다 재사용 
pool.shutdown();
  • 장점
    1. 쓰레드 생성 비용 절감
    2. 동시 실행 개수 제한 → 리소스 고갈 방지

☑️ @SpringBootApplication 

스프링 부트의 경우

@SpringBootApplication 눌러보면 컴포넌트스캔까지 다 포함하고 있어서

@ComponentScan 일일히 안해줘도 알아서 빈 등록해준다!

@Target(ElementType.TYPE) 
@Retention(RetentionPolicy.RUNTIME) 
@SpringBootConfiguration // @Configuration 
@EnableAutoConfiguration // Spring Boot 자동 설정 
@ComponentScan // 컴포넌트 스캔 
public @interface SpringBootApplication { ... }
 
  • 다만 스캔 범위를 커스텀해야 할 때는 @SpringBootApplication(scanBasePackages = …) 식으로 조정.

☑️  레이어 계층 관련 어노테이션!

 

어노테이션 역할
@Repository DAO/리포지토리 식별 + DB 예외 → Spring DataAccessException 변환 (JDBC, MyBatis 時 유용)
@Service 주로 비즈니스 로직 계층 표시 – 특별 기능 X (AOP 타깃 구분 정도)
@Controller MVC 컨트롤러 (@RestController = @Controller + @ResponseBody)
 

JPA 리포지토리는 스프링 프레임워크가 이미 예외를 변환해 주기 때문에 @Repository를 생략해도 안전하지만, 계층 명확화를 위해 붙여 두는 곳이 많다고 한다.


☑️  DI 모범 – 생성자 주입 + final

@RequiredArgsConstructor 
@Service 
public class OrderService { 
private final PaymentGateway paymentGateway; // 빼먹으면 컴파일 에러 
}
  • 불변 필드 + 생성자 주입
    1. 의존 누락 시 컴파일 에러
    2. 런타임 순환 의존 자동 감지
    3. 테스트 시 @InjectMocks 없이도 손쉽게 생성자 인자 주입 가능

'TIL&WIL' 카테고리의 다른 글

23.02.03 TIL  (0) 2023.02.04
23.02.01 TIL  (1) 2023.02.02
23.01.30 TIL  (2) 2023.01.31
23.01.26 TIL  (0) 2023.01.26
23.01.18 TIL  (0) 2023.01.19
Comments