전체 글

· Spring
⬜섹션4 프록시 패턴과 데코레이터 패턴◼️예제 프로젝트 만들기🟢예제 3가지 상황v1 - 인터페이스와 구현 클래스 - 스프링 빈으로 수동 등록v2 - 인터페이스 없는 구체 클래스 - 스프링 빈으로 수동 등록v3 - 컴포넌트 스캔으로 스프링 빈 자동 등록🟢스프링 부트 3.0 전후 차이스프링 부트 3.0 미만@RequestMapping //스프링은 @Controller 또는 @RequestMapping 이 있어야 스프링 컨트롤러로 인식@ResponseBody public interface OrderControllerV1 {}스프링 부트 3.0 이상 @RestController //스프링은 @Controller, @RestController가 있어야 스프링 컨트롤러로 인식public interface Ord..
· Spring
⬜섹션3 템플릿 메서드 패턴과 콜백 패턴◼️템플릿 메서드 패턴 - 시작문제점🤔: 앞서 로그 추적기를 만들면서 핵심기능보다 로그 출력을 위한 부가 기능 코드가 더 많고 복잡해졌다.아래의 동일한 패턴이 중복해서 나타난다. TraceStatus status = null; try { status = trace.begin("message"); //핵심 기능 호출 trace.end(status); } catch (Exception e) { trace.exception(status, e); throw e; }◼️템플릿 메서드 패턴 - 예제아래에서 변하는 부분은 비즈니스 로직, 변하지 않는 부분은 시간 측정이다. 이제 템플릿 메서드 패턴을 사용해서 변하는 부분과 변하지 않는 부분을 분리해보자. @Sl..
· Spring
⬜ 섹션2 쓰레드 로컬 - ThreadLocal◼️ 필드 동기화 - 개발앞서 로그 추적기를 만들면서 다음 로그를 출력할 때 트랜잭션ID와 level을 동기화 하는 문제가 있었다. 이 문제를 해결하기 위해 TraceId를 매번 파라미터로 넘기도록 구현했다.모든 메서드에 TraceId 파라미터를 추가하지 않기 위해 traceIdHolder필드를 사용하도록 해보자.public interface LogTrace { TraceStatus begin(String message); void end(TraceStatus status); void exception(TraceStatus status, Exception e);}@Slf4jpublic class FieldLogTrace implements L..
· Java
답답해서 공부해보는 thread...자바의 정석 책을 다시 펼쳤다..◼️쓰레드 구현과 실행🟢 쓰레드 구현 방법 두가지Thread클래스를 상속  (단점: 다른클래스 상속받을수없음) Runnable인터페이스를 구현//1.Thread 클래스를 상속class MyThread extends Thread{ public void run() { /*작업내용*/ }}//2.Runnable 인터페이스를 구현class MyRunnable implements Runnable{ public void run() { /*작업내용*/ }} 🔶예시 코드public class ThreadEx1 { public static void main(String[] args) { ThreadEx1_1 t1 = new T..
· Spring
⬜ 섹션11 스프링 트랜잭션 전파2 - 활용◼️ 예제 프로젝트 만들기실습을 위해 간단한 코드를 짜보자.만드는 프로그램은 아주 간단한 상품주문 프로젝트이다. Controller→Service →Repository 흐름을 가졌다.@Repository@RequiredArgsConstructorpublic class OrderRepositoryV0 { public void save(String itemId) { //저장 로직 if (itemId.equals("ex")) { throw new IllegalStateException("예외 발생!"); } sleep(1000); } private void sleep(int mill..
· Java
⬛ 멀티태스킹과 멀티프로세싱초기엔 CPU에서 하나의 프로그램을 끝내야 다음 프로그램으로 넘어갔다.이런 불편함을 해소하기 위해 하나의 CPU 코어로 여러 프로그램을 동시에 실행하는 '멀티태스킹' 기술이 등장했다.🟢멀티프로세싱 컴퓨터 시스템에서 둘 이상의 프로세서(CPU 코어)를 사용하여 여러 작업을 동시에 처리하는 기술CPU 안에는 실제 연산을 처리할 수 있는 코어가 있다. CPU 코어가 둘 이상이라면 어떻게될까. 🟢멀티프로세싱 vs 멀티태스킹 멀티프로세싱하드웨어 장비의 관점 여러 CPU(여러 CPU 코어)를 사용하여 동시에 여러 작업을 수행하는 것을 의미멀티태스킹운영체제 소프트웨어의 관점단일 CPU(단일 CPU 코어)가 여러 작업을 동시에 수행하는 것처럼 보이게 하는 것을 의미소프트웨어 기반으로 C..
· Spring
⬜ 섹션11 스프링 트랜잭션 전파2 - 활용◼️ 예제 프로젝트 시작▪️비즈니스 요구사항회원을 등록하고 조회회원 변경 이력 추적을 위해 회원 데이터 변경시 변경 이력을 DB LOG 테이블에 남긴다.(여기서는 예제 단순화를 위해 회원 등록시에만 DB LOG에 남김) ▪️베이스 실습 코드실습을 위해 Member,MemberRepository,Log,LogRepository,MemberService를 만들어주었다.각 레포지토리에는 save(), find() 함수를 만들었다.이때, 실습을 위해 아래 코드처럼 로그레포지토리에는 "로그예외" 단어를 포함하면 런타임예외를 발생시킨다.🔵CASE 1 : 서비스 계층에 트랜잭션 없을 때 - 커밋@Slf4j@Repository@RequiredArgsConstructorpub..
· Spring
⬜ 섹션10 스프링 트랜잭션 전파1 - 기본◼️ 스프링 트랜잭션 전파1 - 커밋, 롤백@Slf4j@SpringBootTestpublic class BasicTxTest { @Autowired PlatformTransactionManager txManager; @TestConfiguration static class Config { @Bean public PlatformTransactionManager transactionManager(DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } } @Test void commit(..
· Java
○ 직접 구현하는 Iterable, Interator자바는 자료구조 구현과 관계없이 모든 자료 구조를 동일한 방법으로 순회할 수 있는 Iterable,Iterator 인터페이스를 제공한다.public interface Iterable { Iterator iterator(); //iterator 반복자 반환}public interface Iterator { boolean hasNext(); //다음요소 없으면 false E next(); //다음요소 반환} 먼저 Iterator 구현체를 만든다.public class MyArrayIterator implements Iterator { private int currentIndex = -1; private int[] targetArr; publ..
· Spring
⬜ 섹션9 스프링 트랜잭션 이해◼️ 스프링 트랜잭션 소개라고 하고 복습이라 읽는...복습을 위한 나를 위한 정리 🟢트랜잭션 추상화기술마다 다른 트랜잭션 사용 코드(JPA,JDBC...)PlatformTransactionManager라는 인터페이스를 통해 트랜잭션을 추상화스프링은 트랜잭션 추상화, 매니저 구현체 모두 제공우리는 필요한 구현체를 스프링 빈으로 등록하고 주입 받아서 사용하기만 하면 된다. 🟢선언적 트랜잭션과 AOP보통 선언적 트랜잭션 ( @Transactional ) 을 사용한다.@Transactional 애노테이션만 붙으면 AOP는 이를 인식해 트랜잭션 처리 프록시를 적용해준다.◼️ 트랜잭션 적용 확인@Transactional 애노테이션이 특정 클래스나 메서드에 하나라도 있으면 트랜잭션 ..
고쩡이
고민보다 Go