1. 영화 예매 시스템 구현하기 /** * 영화를 표현 * 제목, 상영시간, 기본요금, 할인정책을 가지고 있음 */ public class Movie { private String title; private Duration runningTime; private Money fee; private DiscountPolicy discountPolicy; public Movie(String title, Duration runningTime, Money fee, DiscountPolicy dIscountPolicy) { this.title = title; this.runningTime = runningTime; this.fee = fee; this.dIscountPolicy = dIscountPolicy; } p..
1. 티켓 판매 어플리케이션 구현 /** * 극장을 표현 * 판매원을 가지고 있음 */ public class Theater { private TicketSeller ticketSeller; public Theater(TicketSeller ticketSeller) { this.ticketSeller = ticketSeller; } public void enter(Audience audience) { if(audience.getBag().hasInvitation()) { Ticket ticket = ticketSeller.getTicketOffice().getTicket(); audience.getBag().setTicket(ticket); } else { Ticket ticket = ticketSell..
리액티브란 프로그래밍이란? 비동기 데이터 스트림을 사용한 프로그래밍입니다 리액티브 스트림 인터페이스란? asynchronous non-blocking 서비스를 할때 기본이 되는 스펙입니다 java의 RxJava, Spring의 webFlux 등 해당 스펙을 따르고 있습니다 아래와 같이 4개로 구성되어있습니다 Processor Publisher Subscriber Subscription public interface Processor extends Subscriber, Publisher {} public interface Publisher { //Subscriber의 구독을 받기위한 메소드 public void subscribe(Subscriber
Jackson 라이브러리란? json 데이터 구조를 처리해주는 라이브러리입니다 Jackson 동작원리 @RequestBody 형식이라면 Spring 에서 MessageConverter 를 통해 컨트롤러에서 리턴하는 객체를 후킹 합니다 MessageConverter 중 MappingJacksonHttpMessageConverter를 사용하여 리플렉션을 사용해 객체를 가져와 Jackson의 ObjectMapper 로 json 객체로 변경 합니다 스프링 3.1 이후부터는 클래스패스에 Jackson 라이브러리가 있으면 MappingJacksonHttpMessageConverter 자동등록 됩니다. 추가적으로 jackson 의 데이터 매핑은 멤버변수 네임이 아닌 getter 함수의 네이밍 기반으로 매핑이 됩니다
트랜잭션이란? 여러 과정을 하나의 행위로 묶을 때 사용됩니다 여러 단계를 수행했을때, 하나라도 실패하면 모두 취소되어야 합니다. 이렇게 함으로써 데이터의 무결성을 보장합니다 스프링에서 사용방법 @Transactional을 클래스 또는 메소드 레벨에 명시하면 해당 메써드 호출시 지정된 트랜잭션이 작동하게 됩니다 단, 같은 빈 내에서 @Transactional이 명시된 다른 메소드를 호출해도 작동하지 않습니다Spring Framework는 내부적으로 AOP를 통해 해당 어노테이션을 인지하여 프록시를 생성하여 트랜잭션을 자동 관리하기 때문입니다 하지만 스프링부트에서는 바이트 코드를 수정(CGLIB)이 기본으로 변경 되었습니다 전파옵션(Propagation) ▶ REQUIRED 디폴트 속성, 부모 트랜잭션 내에..
jmeter란? 아파치사에서 만든 트래픽 부하 테스트 도구 설치 https://jmeter.apache.org/ 페이지에 들어가 해당 zip 파일을 받아 풀어줍니다 Apache JMeter - Apache JMeter™ Apache JMeter™ The Apache JMeter™ application is open source software, a 100% pure Java application designed to load test functional behavior and measure performance. It was originally designed for testing Web Applications but has since expanded to oth jmeter.apache.org 사용법 ..
람다란? 메서드로 전달할 수 있는 익명함수를 단순화 한 것입니다. 함수형 프로그래밍(Functional Language)에서 온 개념으로 매개변수(parameter)를 가진 코드 블록이지만, 런타임 시에는 익명 구현 객체(추상메소드를 한개 포함한)를 생성합니다. 아래와 같이 자바8 이전에는 메서드를 값으로 쓸 수 없어 매개변수로 넘기지 못했습니다. 그래서 익명구현객체를 인스턴스화 시켜서 넘겨주었습니다. new Thread(new Runnable() { public void run() { System.out.println("자바 8이전의 스레드 생성"); } }).start(); 이런 부분을 해결하기 위해서 자바 8에서 람다를 사용해 메서드를 값으로 넘길 수 있었습니다.(익명구현객체를 자동으로 만들어줌) ..
템플릿 메소드란 템플릿 메소드는 필수 처리절차를 정의한 일련의 과정을 메소드로 정의하고 final로 변경을 제한합니다 템플릿 메소드의 안의 메소드중 하나 이상이 추상메소드로 정의되며, 그 추상 메소드는 서브클래스에서 구현됩니다. 이렇게 하면 서브클래스에서 일부분을 구현할 수 있도록 하면서도 구조는 바꾸지 않아도 됩니다 후크 메소드란 후크메소드는 추상 클래스에서 선언되는 메소드이긴 하지만 기본적인 내용만 구현되어 있거나 아무 코드도 들어있지 않은 메소드 입니다. 이렇게 하면 서브클래스에서는 재정의를 할수 있고, 그냥 무시하고 넘어 갈 수도 있습니다. //template 메소드 final void prepareRecipe() { // 기본적인 커피 or 차 만드는 프로세스 boilWater(); // 물을 ..
저번에 toondere/image/ 폴더안에 이미지를 저장을했는데 서버주소/toondere/image/이미지파일 이름 하면 접근이 안된다 이때 media file을 이용하는데 Media file은 이용자가 웹에서 올리는(upload) 파일. 파일 자체는 고정되어 이지만, 언제 어떤 파일이 정적 파일로 제공되고 준비되는지 예측할 수 없다 urls.py 에서 from django.conf import settingsfrom django.conf.urls.static import static urlpatterns= [ ... ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 이부분만추가 settings.py 에서는미디어 경로와 접근 url을 ..
- Today
- Yesterday
- reactive
- Observer Pattern
- object
- 메인보드#asrock b650m #조립pc #후기이벤트
- observable
- concurrency
- Serialize
- exception
- template method
- Java
- iterable
- Serializable
- in-memory
- reactive stream
- template
- jdk11
- 부하테스트
- LAMBDA
- 영속성
- Concurrecy
- Effective JAVA
- JMeter
- Design Pattern
- Redis
- nosql
- Spring
- 디자인패턴
- gslb
- strategy
- jvm
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |