본문 바로가기

분류 전체보기

(644)
[이펙티브 자바 3/E] 아이템18 - 상속보다는 컴포지션을 사용하라 - 이 장에서의 '상속'은 인터페이스 상속이 아닌 클래스가 다른 클래스를 확장하는 구현 상속을 말한다. - 메서드 호출과 달리 상속은 캡슐화를 깨뜨린다. - 구현 상속의 문제를 모두 피해 가는 묘안이 있다. 기존 클래스를 확장하는 대신, 새로운 클래스를 만들고 private 필드로 기존 클래스의 인스턴스를 참조하게 하자. 기존 클래스가 새로운 클래스의 구성요소로 쓰인다는 뜻에서 이러한 설계를 컴포지션(composition; 구성)이라 한다. - 새 클래스의 인스턴스 메서드들은 (private 필드로 참조하는) 기존 클래스의 대응하는 메서드를 호출해 그 결과를 반환한다. 이 방식을 전달이라 하며, 새 클래스의 메서드들을 전달 메서드라 부른다. => 새로운 클래스는 기존 클래스의 내부 구현 방식의 영향에서 ..
[이펙티브 자바 3/E] 아이템17 - 변경 가능성을 최소화하라 - 불변 클래스 : 인스턴스의 내부 값을 수정할 수 없는 클래스 불변 클래스를 만드는 규칙 1. 객체의 상태를 변경하는 메서드(변경자)를 제공하지 않는다. 2. 클래스를 확장할 수 없도록 한다. 3. 모든 필드를 final로 선언한다. 4. 모든 필드를 private으로 선언한다. 5. 자신 외에는 내부의 가변 컴포넌트에 접근할 수 없도록 한다. - 함수형 프로그래밍 : 피연산자에 함수를 적용해 그 결과를 반환하지만, 피연산자 자체는 그대로인 프로그래밍 패턴 => 코드에서 불변이 되는 영역의 비율이 높아지는 장점을 누릴 수 있다. - 불변 객체는 근본적으로 스레드 안전하여 따로 동기화할 필요가 없다. => 안심하고 공유할 수 있다. => 방어적 복사(아이템 50)도 필요 없다.(clone 메서드나 복사 ..
[JPA] 6장 - 다양한 연관관계 매핑(1) - 다대일, 일대다 다대일 - 데이터베이스 테이블의 일, 다 관계에서 외래 키는 항상 다쪽에 있다. => 연관관계의 주인은 항상 다쪽이다. 다대일 단방향 [N:1] - 회원 엔티티 @Entity public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; private String username; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; ... } - 팀 엔티티 @Entity public class Team { @Id @GeneratedValue @Column(name = "TEAM_ID") private Long id; private String name; ....
동기화(synchronization), 경쟁 조건(race condition), 임계 영역(critical section)을 자세하게 설명합니다! 헷갈리시는 분들 꼭 보세요! https://youtu.be/vp0Gckz3z64?si=DSCmsQhnxcZQjYIF 경쟁 조건(race condition) - 여러 프로세스/스레드가 동시에 같은 데이터를 조작할 때 타이밍이나 접근 순서에 따라 결과가 달라질 수 있는 상황 동기화(synchronization) - 여러 프로세스/스레드를 동시에 실행해도 공유 데이터의 일관성을 유지하는 것 임계 영역(critical section) - 공유 데이터의 일관성을 보장하기 위해 하나의 프로세스/스레드만 진입해서 실행 가능한 영역 critical section problem의 해결책이 되기 위한 조건 1. mutual exclusion(상호 배제) 2. progress(진행) 3. bounded waiting(한정된 대기)
스레드 풀(thread pool)은 왜 쓰는 걸까요? 어떻게 쓰는게 잘 쓰는 걸까요? 지금 이 영상으로 스레드 풀! 깔끔하게 정리하시죠! https://youtu.be/B4Of4UgLfWc?si=wJERzcFBCPfa1ME4 만약 Thread per request model의 동작 방식이 서버에 들어오는 요청마다 스레드를 새로 만들어서 처리하고 처리가 끝난 스레드는 버리는 식으로 동작한다면 어떤 문제점이 있을까? => 스레드 생성에 소요되는 시간 때문에 요청 처리가 더 오래 걸림 => 처리 속도보다 더 빠르게 요청이 늘어나면 -> 스레드가 계속 생성(스레드 수 증가) -> 컨텍스트 스위칭이 더 자주 발생 -> CPU 오버헤드 증가로 CPU time 낭비 -> 어느 순간 서버 전체가 응답 불가능 상태에 빠짐 Thread pool - 미리 스레드를 여러 개 만들어 놓고 재사용 => 스레드 생성 시간 절약 - 제한된 개수의 스레드를 운용 => ..
This method cannot decide whether these patterns are Spring MVC patterns or not 오류 해결 기존 코드 @Configuration @EnableWebSecurity @EnableMethodSecurity public class SecurityConfig { @Bean SecurityFilterChain filterChain(HttpSecurity http) throws Exception { return http .authorizeHttpRequests(auth -> auth .requestMatchers("/usr/register").permitAll() // 문제 발생 .requestMatchers("/usr/login").anonymous() .anyRequest().authenticated()) ... .build(); } ... } 수정한 코드1 @Configuration @EnableW..
[OS/공룡책] Chapter 3. 프로세스 - 클라이언트 서버 환경에서 통신 소켓 - 소켓(socket)은 통신의 극점(endpoint)을 뜻한다. - 각 소켓은 IP 주소와 포트 번호 두 가지를 접합해서 구별한다. - 일반적으로 소켓은 클라이언트-서버 구조를 사용한다. - 모든 연결은 유일해야 한다. 호스트 X에 있는 다른 클라이언트 프로세스가 위와 동일한 웹 서버와 통신을 하면 그 클라이언트는 1024보다 크고 1625가 아닌 다른 포트 번호를 부여받게 된다. 이것은 모든 연결이 유일한 소켓 쌍으로 구성되는 것을 보장한다. - Java는 세 가지 종류의 소켓을 제공한다. - 연결 기반(TCP) 소켓 => Socket 클래스 - 비연결성(UDP) 소켓 => DatagramSocket 클래스 - MulticastSocket 클래스(DatagramSocket 클래스의 서브 클래스)..
cpu bound, io bound 의미를 설명합니다! 이에 따른 스레드 개수를 정하는 팁도 알려드립니다! https://youtu.be/qnVKEwjG_gM?si=1ZZhH-It9rEgZvDF CPU(Central Processing Unit) : 프로세스의 명령어를 해석하고 실행하는 장치 버스트(Burst) : 어떤 현상이 짧은 시간 안에 집중적으로 일어나는 일 CPU 버스트 : 프로세스가 CPI에서 한 번에 연속적으로 실행되는 시간 IO 버스트 : 프로세스가 IO 작업을 요청하고 결과를 기다리는 시간 프로세스의 인생은 CPU 버스트와 IO 버스트의 연속 CPU bound 프로세스 : CPU burst가 많은 프로세스(예 : 동영상 편집 프로그램, 머신러닝 프로그램) IO bound 프로세스 : IO burst가 많은 프로세스(예 : (일반적인) 백엔드 API 서버) CPU bound 프로그램에서 적절한 ..