본문 바로가기

공부 기록

(319)
[이펙티브 자바 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 프로그램에서 적절한 ..
[이펙티브 자바 3/E] 아이템16 - public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 - '퇴보한' 클래스는 public이어서는 안 된다. class Point { public double x; public double y; } - 이런 클래스는 데이터 필드에 직접 접근할 수 있으니 캡슐화의 이점을 제공하지 못한다(아이템 15). - 접근자와 변경자(mutator) 메서드를 활용해 데이터를 캡슐화한다. class Point { private double x; private double y; public Point(double x, double y) { this.x = x; this.y = y; } public double getX() { return x; } public double getY() { return y; } public void setX(double x) { this.x = ..