일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ehcache
- Packer
- Deserializer
- weaving
- controlleradvice
- Proxy
- container
- ci/cd
- terraform
- docker
- SpyBean
- Jpa Auditing
- playbook
- AOP
- spring
- AWS
- cache
- rest-api
- LocalDateTime
- junit
- gocd
- HandlerMethodArgumentResolver
- MockBean
- golang
- launch-template
- DevOps
- JPA
- ansible
- persistence
- serializer
- Today
- Total
목록Back-End (11)
기록용 블로그
Installation for mac $ brew install go for linux $ wget https://dl.google.com/go/go1.11.2.linux-amd64.tar.gz $ tar -C /usr/local -xzf go1.11.2.linux-amd64.tar.gz $ cd ~ $ vim .profile # 아래 내용 추가 export PATH=$PATH:/usr/local/go/bin $ source .profile GOPATH, GOROOT go에서 사용되는 주요 환경 변수 GOROOT go가 설치되는 위치 linux에 설치하고 나니 /usr/local/go 경로에 설치됐다. GOPATH 사용자의 workspace가 설정되는 위치 linux에서 설치하고 나니 $HOME/go가 ..
스프링 기반 REST API 개발 백기선님 slideshare 백기선님 study repository 백기선님의 스프링 기반 REST API 개발 세미나 관련 정리. 앞으로 자바 개발을 할 일이 있을진 모르겠지만 REST API와 관련된 HATEOAS나 Self-Descriptive와 같은 개념은 어떤 언어를 사용해 개발하든 적용될 것 같아서 한번 처음부터 진행해봤다. REST API 일반적으로 우리가 REST API라고 하면서 제공하는건 사실 제대로 된 REST API의 형태를 만족하지 않는다. 여러 요건들을 충족해야 하지만 그중에서도 거의 90% 이상이 아래 두가지 요건은 충족하지 못하고 있다. Self-Descriptive HTTP/1.1 200 OK ContentType: application/j..
관점지향 프로그래밍(Aspect Oriented Programming) OOP의 공통 기능(로깅, 트랜잭션, 접근 제어 등의 보안) 등에 대한 횡단 영역의 공통된 부분의 중복을 제거하고 모듈화 하는 프로그래밍의 방식 public List findAll() { //log.info("메소드 내용 실행 전 필요한 로그"); //long start = System.currentTimeMillis(); List bestCategories = bestCategoryRepository.findAll(); //log.info("메소드 내용 실행 완료 후 필요한 로그"); //long end = System.currentTimeMillis(); //log.info("메소드 실행 시간 {}", end -start); re..
JPA를 공부하면 계속 나오는 영속성에 대해서 정리. 엔티티 매니저 JPA의 엔티티 매니저(EntityManager)는 엔티티 저장, 수정, 삭제 조회 등 엔티티와 관련된 모든 일을 처리한다. 엔티티 매니저는 엔티티 매니저 팩토리를 통해 생성되는데, 팩토리는 아래와 같이 생성할 수 있다. 팩토리는 일반적으로 하나의 DB를 사용하는 경우 하나의 Factory만 생성한다. EntityManagerFactory emf = Persistence.createEntityManagerFactory("note"); 엔티티 매니저는 팩토리를 통해 필요할 때 마다 생성할 수 있다. EntityManager em = emf.createEntityManager(); - EntityManagerFactory - 생성 비용이 크..
Jpa Auditing을 통해 엔티티 중복 제거, 자동화하기 JPA 엔티티를 생성하다보면 중복되는 부분들이 많이 발생한다. 등록 시간, 수정 시간, id 등등... 그 외에도 등록 시간과 수정 시간은 엔티티 수정, 생성 시 마다 직접 입력해주어야 한다. 중복되는 부분은 Auditing Entity를 통해 중복을 제거하고 AuditingEntityListener를 통해 생성 시간, 수정 시간, 생성자 정보 등을 자동으로 넣어줄 수 있다. 아래와 같이 id, 생성 시간, 수정 시간, 생성자, 수정자에 대한 정보를 가지는 Superclass의 역할을 할 엔티티를 생성하자. AuditorEntity.java import lombok.Getter; import org.springframework.data.anno..
Spring에서 Java8의 LocalDateTime을 그냥 사용하다보면 왠진 모르겠지만 Serialize, Deserialize 하는 과정에서 많은 문제가 발생한다. 그냥 아래처럼 Custom Serializer, Deserializer 두개를 따로 만들고 활용하는게 더 좋은 것 같다. 원하는 형식에 맞게 Pattern을 지정하고 사용하면 별 에러 없이 사용할 수 있었다. 내가 LocalDateTime을 잘 몰라서 그럴수도 있고.. LocalDateTimeSerializer.java import java.io.IOException; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import com.fasterxml...
BcryptPasswordEncoder 랜덤값 단위 테스트 작성하기 코드를 작성하면서 회원 정보의 비밀번호 컬럼을 BcryptPasswordEncoder로 암호화해 저장하도록 구현했는데 그 부분과 관련된 단위 테스트를 작성했을 때, 매번 랜덤한 값이 인코딩되어서 나와서 단위 테스트 작성을 어떻게 해야할지에 대해 고민.. Mockito기반 단위 테스트 환경에서 PasswordEncoder를 직접 구현해서 MockPasswordEncoder를 생성한 뒤 @Spy로 주입하고 테스트를 작성했다. 큰 의미를 가지는 테스트는 아닌데 앞으로 랜덤값을 가지는 경우 DI로 주입 될 객체를 바꿔치기 해서 테스트를 하면 될 것 같다. @RunWith(MockitoJUnitRunner.class) public class Me..
@MockBean, @SpyBean 이용 Caching 사용 시 단위 테스트 작성하기 Service단 코드에 EhCache를 적용했었다. 그때 그와 관련된 테스트를 어떻게 진행해야 할 지 고민했었는데 @MockBean과 @SpyBean 어노테이션을 이용해 Repository 코드가 몇번 호출되는지 체크해 단위 테스트를 진행할 수 있었음. Spring Boot 1.4에서 @MockBean과 @SpyBean이 추가됨. @MockBean은 껍데기만 그 객체의 형태를 유지하고, 내부 구현은 사용자가 when, given이나 기타 등등을 통해서 사용자가 직접 정의해주어야 함. @SpyBean을 사용하면 given, when을 한 것 외에 실제 객체를 사용한다. 여기서는 verify를 사용하기 위해 @SpyBean..
Spring Ehcache 적용하기 잘 변경되지 않으면서 반복적으로 호출되는 데이터에 대해 캐싱을 적용해서 서버의 성능을 향상시킬 수 있다. 기본적으로 브라우저(크롬, 익스 등)단에서 캐싱을 적용해주고 있지만 그 이전 단계인 서버에서 캐싱을 적용한다면 DB 조회를 줄이면서 서버의 부하를 조금 더 줄일 수 있다. Spring에서는 spring-starter-cache를 통해 로컬 캐싱을 사용할 수 있는데 기본적으로 ConcurrentHashMap을 사용해 제공하고 있다. 기본 캐시매니저를 사용하지 않고 EhCache를 적용하려면 두가지 의존성을 추가해야 한다. compile('org.springframework.boot:spring-boot-starter-cache') compile group: 'net...
Spring @ControllerAdvice 어노테이션 스프링에서 예외처리를 전역적으로 핸들링하기 위해 @ControllerAdvicde 어노테이션을 사용할 수 있다. 아래와 같이 전역적으로 Exception을 핸들링 할 클래스를 만들고 어떤 에러에 대해서 어떤 방법으로 처리해줄지에 대해 정의해서 사용할 수 있다. @ControllerAdvice public class ControllerExceptionHandler { private static final Logger log = LoggerFactory.getLogger(ControllerExceptionHandler.class); @ExceptionHandler(NoLoginException.class) public String noLoginExcep..