
1. 코드 스멜 게임을 만든다고 생각해보자. 각각의 몬스터들을 객체로 만드려고한다. 객체를 만드려면 일단 클래스가 있어야하니 클래스를 정의하자. public abstract class Monster { public abstract void attack(); } 몬스터들간의 다형성을 위해 Monster 추상 클래스를 정의했다. 이번 포스팅은 attack() 메서드부분을 리팩토링해나가는 과정을 작성하려한다. 그래서 메서드는 attack() 만 간단하게 정의했다. public class Knight extends Monster { @Override public void attack() { System.out.println("칼 공격!"); } } Knight 몬스터를 정의했다. Knight 몬스터 외에 Ske..
이펙티브자바를 보던중 평소에 잘 모르는 상태로 혼용하고있던 네이밍 컨벤션에 대해 잘 설명해주고있어 정리한다. from: 하나의 매개변수를 받아서 인스턴스를 생성 of: 여러개의 매개변수를 받아서 인스턴스를 생성 instance or getInstance: 인스턴스를 반환하지만 동일한 인스턴스임을 보장하지 않는다. 보통 singleton을 구현할때 많이 사용하는 네이밍이지만 singleton이랑은 무관하게 매번 신규 생성될 수 있다. create or newInstance: 매번 새로운 인스턴스를 반환한다. instance or getInstance 의 서브셋 개념이라고 볼 수 있을듯 getXxxx: getInstance와 같으나 호출하는 클래스와 다른 타입의 인스턴스를 반환할때 사용 예를들어 Date.g..
ParallelStream java8에 추가된 parallelStream 은 멀티스레드 프로그래밍을 매우 쉽게 해준다. 개발자가 직접 스레드 혹은 스레드풀을 생성하거나 관리할 필요없이 parallelStream(), parallel() 만 사용하면 알아서 ForkJoinFramework 를 이용하여 작업들을 분할하고, 병렬적으로 처리하게된다. public static void main(String[] args) { parallel(); single(); } private static void parallel() { long start = System.currentTimeMillis(); long sum = LongStream.range(0, 1_000_000_000).parallel() .sum(); S..
spring bean 설정시 lite mode 라는게 있어서 찾아보고, 그에대해 정리해보려한다. 일단 lite mode 는 java 설정에서만 사용할 수 있다. 보통의 java 설정파일을 알아보자. @Configuration public class BeanConfig1 { @Bean public ObjectMapper objectMapperBean() { return new ObjectMapper(); } }평소에 많이 사용하는 java 설정 내용이다. @Bean 애노테이션을 이용해 spring bean 을 생성한다. 그리고 이 java 클래스가 설정 클래스임을 나타내기위해 @Configuration 애노테이션을 사용한다. @Configuration 애노테이션은 설정 클래스임을 나타내며 그 자신도 spr..
빠르게 알아보자. 포스팅은 gradle 기준으로 설명한다. build.gradle에 아래 설정을 추가해준다. test { useJUnitPlatform() } spring starter test 에서 기존 junit을 제외해준다. dependencies에서 아래처럼 설정해준다. testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude module: 'junit' } 이제 junit5 의존성을 추가해줄차례다. testImplementation('org.junit.jupiter:junit-jupiter-api') testRuntimeOnly('org.junit.jupiter:junit-jupiter-engine') 위 ..

Spring 에서 제공하는 http client로는 대표적으로 RestTemplate이 있다. 이 RestTemplate으로 http 요청을 날리게되면 기본적으로 그때마다 connection을 맺고 응답을 받으면 끊게된다. 이를 db connection pool 처럼 connection pool을 만들어서 관리할 수 있다. 이를 설정하기위해서는 일단 RestTemplate에 대해서 먼저 이해를 해야하는데 Spring 에서 제공하는 RestTemplate은 직접 http 요청을 하는 역할을 수행하지않는다. 직접 수행하는 클래스를 한번 래핑한 어댑터 역할을 하는 클래스이다. 기본적으로는 jdk에서 제공하는 HttpUrlConnection 클래스를 이용한다. 우리는 apache 에서 제공하는 HttpClien..
두번째 포스팅을 할지말지 확신이 안섰는데 어느정도 삽질을 통해 알게된점들이 있어서 두번째 포스팅을 한다. spring boot에 적용하기라는 제목치고는 앞선 포스팅에서 spring boot 관련 얘기가 하나도 없어서 이에 관한 내용도 적으려한다. 일단 기본적인 구성은 앞 포스팅에서 다 진행됐다. 간략한 테스트를 진행해보자. jooq API를 사용할때는 DSLContext 객체를 이용하게되는데 이 객체는 spring boot 자동구성에 의해 spring bean으로 등록된다. 편하게 주입받아서 사용하면된다. 우리가 설정해줘야할것은 datasource 관련 설정만 해주면된다. spring: datasource: driver-class-name: org.sqlite.JDBC url: jdbc:sqlite::r..
신규 프로젝트에 DB access를 어떤 프레임워크를 사용할까 고민을 해봤다. 일단 난 MyBatis만 사용해와서 이번에 다른 프레임워크를 사용해보고싶은 마음이 있었다. 후보군은 이렇다. JPA JdbcTemplate MyBatis jooq 아직 실무에서 JPA 경험이 없는터라 JPA를 사용할까도 생각해봤지만 팀 구성원에 JPA에 경험이 있는 사람이 없고, 다른 기술셋들도 생소한걸 사용하기로해서 패러다임 자체를 바꿔야하는 JPA는 좀 무리라고 생각했다. 서비스 구성이 readonly라서 select만 필요한것도 JPA를 욕심내지않는것에 한몫하기도했다. 그러던중 jooq 라는 프레임워크가 있는걸 알게되어 도입을 고민해보게됐다. 각 기술에 대한 결정을 하게된 배경은 이렇다. JPA JPA에 대한 내용은 위에..
오늘은 Spring Cloud Hystrix 에 대해서 포스팅하려한다. 넷플릭스에서 Hystrix 를 만들어서 공개했는데 이를 좀 더 스프링 친화적으로 스프링에서 래핑해놓았다. Hystrix는 Circuit Breaker 패턴을 적용하여 서비스를 제공하는 Supplier에 장애가 생겼을때 Supplier를 호출하는 Consumer까지 장애가 전파되지않도록 Circuit Breaker 를 오픈하는 방식의 라이브러리이다. 외부 API를 호출하는 경우가 있다면 장애전파를 막고자할때 유용하게 사용할 수 있다. 이번 포스팅에서 작성할 애플리케이션은 Supplier, Consumer와 모니터링에 사용할 Dashboard, 그리고 여러 인스턴스를 모아서 모니터링할때 필요한 Eureka와 Turbine까지 총 5개다...
Spring Cloud Config Client지난 포스팅에서 config server를 띄우는것 까지 진행했다. 이제 config server가 구동되고있는 상태에서 그 정보들을 받아올 client 를 구현해보자. config 를 제대로 받아오는지 확인하는 용도의 스프링 부트 웹 애플리케이션을 만들면된다. 아래 의존성을 넣어주면 된다. implementation('org.springframework.boot:spring-boot-starter-web') implementation('org.springframework.cloud:spring-cloud-starter-config') 그리고 아무것도 하지않고 서버를 띄워보자. 8080으로는 이미 config server가 사용되고있으니 아래설정을 넣어주고 ..
- Total
- Today
- Yesterday
- backend개발환경
- frontcode
- programming
- EffectiveJava
- toby
- Spring
- spring cloud
- mariadb
- frontend개발환경
- code
- DesignPattern
- Kotlin
- db
- JavaScript Core
- clean code
- go-core
- Git
- http
- Design Pattern
- java
- 정규표현식
- MySQL
- TEST
- OOP
- java8
- servlet
- JPA
- Jackson
- generics
- javascript
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |