본문 바로가기

전체 글

(25)
Executing an update/delete query - 스케줄러에서 발생하는 예외가 API에서는 발생 했던 이유 🎯 결론 먼저 보기JPA를 사용한다면 반드시 JpaTransactionManager를 사용해야 합니다.@Configuration@EnableTransactionManagementpublic class DataSourceConfig { @Bean("transactionManager") public PlatformTransactionManager transactionManager( EntityManagerFactory entityManagerFactory) { return new JpaTransactionManager(entityManagerFactory); // ✅ JPA 사용 시 // return new DataSourceTransacti..
디자인 패턴을 적용해보자 - 팩토리(4). (pizza 예제 아님) 1. 팩토리 메서드 패턴 돌아보기 팩토리 메서드 패턴을 이용하여 리펙토링 했지만 찜찜함이 있었다. 간단한 팩토리에서 했던 분기 작업을 Controller 단으로 미룬 게 아닌가? 하는 생각 때문이었다. 헤드 퍼스트 디자인 패턴에서 예시로 들었던것도 팩토리 매서드 패턴을 적용한 타이밍은 팩토리의 종류(피자 매장의 타입) 자체가 달라지는 경우였다. 뉴욕 스타일의 피자 매장에서는 뉴욕스타일만 만들 것이고 클라이언트는 계속 그 요청만 하니 팩토리 자체를 추상화한 것이었다. 그래서 지금 내가 프로젝트의 상황에서는 팩토리 메서드 패턴 적용까지는 갈 필요가 없고 간단한 팩토리에서 타입에 따라 분리하는게 더 맞아 보인다. 지금 상황에서 새로운 댓글 타입이 추가된다면 TypesRository를 상속하는 클래스 한 개, ..
디자인 패턴을 적용해보자 - 팩토리(3). (pizza 예제 아님) 1. 팩토리 메서드 패턴 적용 이전 포스팅에서는 간단한 팩토리(Simple Factory)를 적용하였다. 이번 포스팅에서는 팩토리 메서드 패턴을 적용시켜 보자. 간단한 팩토리 태그로 이동하여 코드를 확인해 보자. https://github.com/SongHae8640/designPatternApply GitHub - SongHae8640/designPatternApply Contribute to SongHae8640/designPatternApply development by creating an account on GitHub. github.com git checkout tags/factory_method 팩토리 메서드 패턴은 객체 생성을 서브 클래스로 분리하는 디자인 패턴이다. 사용하는 클라이언트에서..
디자인 패턴을 적용해보자 - 팩토리(2). (pizza 예제 아님) 1. 간단한 팩토리 적용 이전 포스팅에서는 팩토리를 적용하기 전 상황과 문제점에 대해서 이야기해보았다. 이번 포스팅에서는 간단한 팩토리(simple factory) 를 적용해 보겠다. 간단한 팩토리 태그로 이동하여 코드를 확인해보자. https://github.com/SongHae8640/designPatternApply GitHub - SongHae8640/designPatternApply Contribute to SongHae8640/designPatternApply development by creating an account on GitHub. github.com git checkout tags/factory_simple 우선 게시글, 음료 의 객체를 반환 및 댓글수 변경 작업을 하는 기능을 추상..
디자인 패턴을 적용해보자 - 팩토리(1). (pizza 예제 아님) 0. 시작하는 이유 헤드 퍼스트의 디자인 패턴 책을 보았지만 실제 코드에서 적용하긴 쉽지 않다. 책의 예시가 실무에서 접할 상황이 아니라 객체나라에서 펼쳐지는 피자와 피자매장의 이야기 이기에 내가 진행중인 플젝에서 적용해보려고 한다. 내 프로젝트는 spring boot + jpa 환경이라서 예제 코드도 같은 환경으로 깃허브에 해당 코드를 올려두었다. 상황별로 태그를 달아 두었으니 clone 후 태그를 체크아웃 하면서 설명해보겠다. https://github.com/SongHae8640/designPatternApply GitHub - SongHae8640/designPatternApply Contribute to SongHae8640/designPatternApply development by creat..
나쁜 교육 - 조나선 하이트(느낀점, 대화 주제) 느낀 점 책의 내용을 구성하는 방식 저자의 이전 책 ‘바른 마음’을 굉장히 재밌게 읽었던 나에게 이 책은 저자가 같다는 이유만으로 내용/페이지수는 보지도 않고 바로 구매하였다. 바른 마음을 읽었을 때 저자가 자기의 생각을 말하기 전에 배경, 전체적인 요약으로 시작하고 각 부, 장 별로 내용을 정리하고 이후에 나올 이야기의 예고편을 던지는 방식이 너무 마음에 들었다. 이러한 구성 덕분에 600 페이지 내외의 내용도 부담 없이 재밌게 읽을 수 있었다. ‘나쁜 교육’ 이 책도 같은 구성이라 역시나 좋았다. 요즘 개발 공부하는 내용을 정리하고 있는데 저자의 이런 구성을 적용해봐야겠다는 생각이 든다. ‘좋은 교육’을 통한 가시적인 결과가 필요하다 현재 교육에 대한 저자의 비판이 옳아 보인다. 인간은 적당한 스트레..
JAVA HashMap의 용량은 왜 2의 거듭제곱일까? - 자료구조(9) java에서 HashMap의 용량은 16이다. 그리고 이 용량을 꼭(MUST) 2의 거듭제곱으로 하라고 한다. 왜 그럴까? 컬랙션 프레임워크의 HashMap 클래스를 살펴보자. public class HashMap extends AbstractMap implements Map, Cloneable, Serializable { ... //The default initial capacity - MUST be a power of two. static final int DEFAULT_INITIAL_CAPACITY = 1 MAXIMUM_CAPACITY) initialCapacity = MAXIMUM_CAPACITY; if (loadFactor >> Integer.numberOfLeadingZeros(cap - 1)..
JAVA HashMap 과 HashSet의 성능 비교 - 자료구조(8) 여러 자료에서 HashTable 보다는 HashMap을 권장한다. 그러면 정말 HashMap이 좋은지 데이터 추가, 조회, 삭제해보며 이 둘을 비교해보자. 간단한 테스트를 위해 키는 문자열 key + 숫자로 하였다. 성능 비교 코드는 Github에 올려 두었다. 1. 데이터 추가(put) 데이터 추가할 때 걸리는 시간을 비교하고자 하였다. 데이터를 1부터 10000000까지 10의 배수로 넣어가며 비교를 했다. @Test public void putTest(){ int dataSizeLimit = 10000000; int dataSize = 1; System.out.println("put running time test\\n"); while (dataSize