반응형

분류 전체보기 322

태태개발일지 - 도메인 주도 설계의 사실과 오해 후기(조영호 강사님) 2일차

시작에 앞서 Q&A를 진행하셨다. 1. 성장할 수 있는 방법사람마다 성장할 수 있는 방법이 다양하다. 본인에게 맞는걸 선택해야한다. 조영호 강사님의 스타일은다양하고 넓게 공부하고, 파보고 싶은 분야를 정해서 더 깊게 들어가는 스타일이라고 하셨다. 1. 회사 공부 따로, 내 개인적인 공부 따로: 난 강의를 보면서 공부하는 것이 조금 더 이해도 빠르고 쉽게 습득 할 수 있다고 생각한다. 2.개발자가 아닌 Domain 전문가가 읽을 만한 DDD 책Domain 주도 설계의 첫 걸음( 개발을 가장 적게 언급한다)Domain 주도설계의 구현  DDD DDD를 프로세스, 방법론으로 바라보면 어렵다. 모델링과, 코드작업이 동시에 일어난다.그 이유는 도메인 모델을 코드로 보기 때문이다. 도메인기능요구사항불변식불변식A의 ..

태태개발일지 - 자바 고급 멀티쓰레드(김영한)

동시성저번 글은 메모리 가시성에 대한 글을 작성했다. 보통 성능을 위해 변수를 메모리에서 직접 참조하지 않고, 캐시에 담아서 값을 처리를 하는데, 이를 통해서 생기는 문제였다. 이번에 다룰 부분은 동시성이다. private Integer x = 7000if(x > 5000){ x -= 4000;} 쓰레드 안에서 이러한 로직을 실행할 때 문제가 생긴다.  만약 두개의 쓰레드가 동시에 실행한다면 어떻게 될까?  둘다 if문에 들어가서 검증로직을 수행 후 , x의 값을 변경하게 된다. 동시에 값을 참조했으므로 x의 값은 7000으로 찍히고 둘다 if문 안으로 들어가게 된다. 첫번째 쓰레드가 x에서 -4000을 해버렸고, 두번째 쓰레드가 값을 변경할때 x는 1000이 되게 되어 x는 음수가 되는 상황이 발생..

JAVA 2025.02.22

태태개발일지 - 멀티스레딩(김영한 고급 자바)

메모리 가시성 (Memory Visibility) 스레드를 선언할 때 공유변수를 volatile 으로 선언하는 이유를 알아보았다. 쓰레드와 메인쓰레드는 효율을 위해서 캐시에 변수의 값을 집어넣고 프로세스를 진행한다.즉. Main Thread에서 기존 쓰레드의 공유변수의 상태값을 바꾼다해도 캐시의 값이 바뀌기 때문에 쓰레드는 그 값의 변화를 인지하지 못한다는 것이다. private Boolean flag;를 쓰레드안에 선언해놓고 MainMethod에서flag = "false";를 선언한다고 해도 바로 실행중인 멀티 스레드에서 인지하지 못한다는 뜻이다.이것이 메모리의 가시성이다. 이유위에 언급한 것 처럼, MainThread 와 Multi Trhead모두 변수의 값을 캐시에 불러와서 그 값을 지속적으로 읽기..

JAVA 2025.02.17

태태개발일지 - 도메인 주도 설계의 사실과 오해 후기(조영호 강사님)

Next Step에서 진행하는 DDD 강의를 듣게 되었다. 수강료는 18만원으로 2일에 거쳐서 4시간씩 진행되는 강의였다. 수강 이유프로젝트에서 클린 + 레이어드 아키텍처로 진행하다가 도메인을 나눌 때 어떻게 나누어야하는지 궁금했고, DDD라는 개념을 접했는데 이에 대해서 더 알고싶어 수강을 하게 되었다. 강사님조영호 강사님이다. 객체지향으로 유명하시고, 이분의 인프런 강의를 수강한 상태로 진행 되었다. 시작DDD와 객체지향에 대해 오해가 있는 것 같다.  DDD를 사용하면 문제가 해결된다.?DDD 너무 어려워 안할래? 객체지향과 도메인주도 설계의 차이점 객체지향알고리즘과 데이터의 조화를 통해 작은 문제를 해결하는 것이다. 도메인 주도 설계(디자인패턴, 단위테스트, 아키텍쳐) 이러한 기술들을 비지니스로직..

태태개발일지 - 고급 자바 멀티 스레드

인터럽트 1. volatile boolean runFlagRunnable 클래스 안에 volatile boolean runFlag = true;를 선언해준다.  main method에서 task.runFlage = false; 넣으면 작업을 중단할 수 있다. 하지만 위와 같은 방법으로는 바로 작업을 중단할 수 없기 때문에  log("작업 중단 지시 thread.interrupt()"); 2.thread.interrupt();  인터럽트 메서드를 사용한다.  하지만 interrupt(); 가 발생했다고 바로 interruptException이 일어나는게 아니다.sleep(); 과 같이 스레드를 대기시키는 명령어를 만나면 interruptException을 만든다.  예외가 터지면 -> 이제 인터럽트 상태가..

JAVA 2025.02.11

태태코딩 - 김영한 자바 고급[스레드]

Thread 메서드Thread.threadId();  => 각 스레드에 대해 유일한 idThread.getName(); => 디버깅이나 로깅 목적으로 유용하다.Thread.getPriority();  => 스레드 우선순위 1이 가장낮음 10이 가장높음 기본값: 5 set 메서드를 가지고 우선순위를 변경할 수 있다.스케줄러가 따져보고 결정한다. *실제 실행 순서는 JVM 구현과 운영체제에 따라 달라질 수 있다.Thread.getThreadGroup(); =>   스레드 그룹은 하나의 그룹으로 묶어서 일괄종료, 우선순위 설정을한다.*부모 스레드* : 새로운 스레드를 생성하는 스레드를 의미한다.Thread.getState(); => 스레드 상태new , runnable, bolcked, waiting, tim..

JAVA 2025.02.08

태태개발일지 - 멀티쓰레드

자바 메모리 구조메서드영역: 프로그램을 실행하는데 필요한 공통 데이터를 관리한다. 이 영역은 프로그램의 모든 영역에서 공유한다.클래스 정보, static, 런타임 상수 스택영역: 자바 실행 시 스택이 생성된다.스택 프레임: 스택 영역에 쌓이는 네모 박스 하나가 스택 프레임이다 힙영역: 객체와 배열이 생성되는 영역. 가비지 컬랙션이 이루어지는 주요 영역. 스레드 생성1. Thread 상속public class HelloThread extends Thread{ @Override public void run(){ System.out.println(Thread.currentThread().getName()+":run()"); }} .run은 호출하지 말기 : 하단의 이유 제시 .star..

JAVA 2025.02.05

태태개발일지 - RateLimiter

Guava RateLimiter Google의 Guava RateLimiter는 초당 몇 개의 요청을 처리할지 결정하는 라이브러리이다.ex) 1초에 최대 5개의 요청만 허용 같은 제한을 쉽게 설정할 수 있다.  기본기능타입메서드설명static RateLimitercreate(double permitsPerSecond)입력받은 "초당 허용량"을 가진 RateLimiter생성doubleacquire()1회 허가 요청 후 요청이 승인될때 까지 대기  RateLimiter rateLimiter = RateLimiter.create(2);for (int i = 0; i  초당 횟수를 정해놓고 rateLimiter.acquire();로 시간을 조절해서 요청을 처리하는 것이다. => 이 개념이 헷갈려서 계속 찾아봤음..

보안 2025.02.02

태태개발일지 - 머신러닝

데이터 전처리데이터 분석 및 머신러닝 모델링을 위해 데이터를 준비하는 과정.  원시 데이터는 종종 불완전하거나, 노이즈가 많거나 형식이 일관되지 않아 직접 모델링에 사용하기 어렵다. 데이터 전처리는 데이터의 품질을 올린다.  1. 결측값 처리: None , null 데이터가 들어가있다는 뜻이다.삭제: 행이나 열 삭제대체: 평균,중앙값으로 바꿔버린다.예측: 예측하고, 채웁니다. 2. 이상값 처리: 값 자체가 이상한경우 ex) 사람키가 270이 넘는경우제거: 제거변환: 상한선 하한서으로 대체IQR방법: 이상치를 발견하는 방법(특정범위를 잡아놓고 범위가 넘어가는 것을 이상값이라고 처리) 3. 중복데이터 제거: 동일한 데이터가 여러번 나타나는 경우 ex) 개,고양이 사진을 넣는데 개가 99%고 고양이가 1%일경..

카테고리 없음 2025.01.30

태태개발일지 - 김영한의 실전 자바 - 고급편

멀티태스킹과 멀티 프로세싱 멀티태스킹프로그램의 실행  프로그램을 구성하는 코드를 순서대로 CPU에서 연산(실행)하는 일이다.  코어가 하나있어도, 실행 시간을 분할하여 마치 동시에 실행되는 것 처럼 하는 기법을 시분할 기법이라고한다.: 실제로 동시에 실행되는게 아니라 일정한 원리를 통해서 번갈아가 면서 실행한다.이것을 운영체제가 결정하는(스케줄링) 이라고 한다. 멀티프로세싱 코어가 여러개일때?cpu안에는 실제 연산을 처리할 수 있는 코어라는 것이있다.tip. 요즘은 cpu안에 2개이상의 코어가 들어가있다. 2개가 일정한 원리를 가지고 수행하면 더 빠르다. 멀티 프로세싱:cpu를 사용하여 동시에 여러가지 작업을 수행.하드웨어 기반으로 성능 향상다중 코어 프로세서를 사용하는 현대 컴퓨터 시스템  멀티 테스킹..

JAVA 2025.01.30
반응형