반응형 Programing497 Prototype Pattern 프로토타입 패턴 GoF 디자인패턴 GoF 디자인 패턴 중 생성패턴의 하나인 Prototype 패턴에 대해 알아보도록 하겠습니다. 특징 Prototype Pattern 은 자주 사용하는 객체를 생성해 두고 이를 복사하여 사용하는 패턴을 말합니다. Singleton 패턴과 달리 매번 새로운 객체가 생성이 됩니다. @Scope("prototype") 설정으로 Prototype Pattern 으로 동작하게 할 수 있습니다. 참조 변수 필드의 경우 얕은 복사로 처리 되기 때문에 java.lang.Clonable interface를 implements 받아 깊은 복사로 처리되도록 clone method를 구현해야 합니다. 샘플코드 import java.util.ArrayList; import java.util.List; import java.uti.. Programing/Design Patterns 2023. 7. 11. Singleton Pattern 싱글턴 패턴 GoF 디자인패턴 GoF 디자인 패턴 중 생성패턴의 하나인 Singleton 패턴에 대해 알아보도록 하겠습니다. Singleton Pattern은 Spring bean, @Scope("singleton"), MapStruct Mapper 등 많이 사용되는 패턴 중의 하나입니다. 특징 Singleton 은 객체가 오직 한 개의 인스턴스만 갖도록 하는 패턴입니다. Spring을 예로 들면 @Component 관련 어노테이션을 통해 Spring Container에 단 하나의 객체 인스턴스만 생성을 하고, Inject 관련 어노테이션 (@Autowired, @Resource)을 통해 주입하여 사용하게 됩니다. 단점으로는 상속이 불가능 하기 때문에 다형성을 해치는 개념이고, 전역적인 접근을 허용하기 때문에 정보은닉을 해치는 단점이.. Programing/Design Patterns 2023. 7. 11. Java Refrection API 알짜만 빼먹기 Java의 Refrection API에 대해 알아보도록 하겠습니다. 1. Refrection 이란? 리플렉션의 사전적 의미는 '반사' 이며, Runtime 시점에 동적으로 객체의 정보를 추출하거나 실행할 수 있는 기능을 말합니다. 성능, 디버깅등 많은 단점도 있지만, Spring을 비롯한 여러 유명 라이브러리들에서 사용하는 만큼 강력한 기능이니 사용법을 익혀두도록 합시다. 2. Refrection의 단점 2.1 성능 오버헤드 위에서 말씀드린데로, Refrection은 Compile 시점이 아닌 Runtime 시점에 동적으로 객체에 접근하기 때문에 오버헤드가 발생 할 수 있습니다. 오버헤드란 프로그램의 실행시점에 동적으로 코드를 실행해야하는 경우 추가적인 시간, 메모리, 자원등이 사용되는 현상을 말합니다... Programing/JAVA 2023. 7. 10. static 메소드, 변수의 Thread safe, unsafe 1. static 자주, 반복적으로 사용하는 메소드를 개발할 때 고민해봐야 하는 것이 static의 사용입니다. static 의 경우 new 키워드로 생성하여 Heap 에 저장되는 일반 객체와 달리, GC의 대상이 되지 않는 Data 영역에 저장됩니다. 이는 어플리케이션이 종료될 때 까지 메모리에서 해제되지 않음을 의미 합니다. static 은 잘 사용하면 매우 유용하지만, 잘못 사용하거나 남발하게 되면 어플리케이션의 퍼포먼스에 악영양을 미치기 때문에 적절하게 사용해야 합니다. link : https://aljjabaegi.tistory.com/636 Java GC Gargabe Collection 알짜만 빼먹기 / 알고리즘 / 종류 / 모니터링 VisualVM Java GC Garbage Collect.. Programing/JAVA 2023. 6. 26. getReader() has already been called for this request 해결 방법 java.lang.IllegalStateException: getReader() has already been called for this request 의 원인과 해결방법을 알아보겠습니다. 원인 위의 Exception은 request.getReader()를 한번 이상 사용할 때 발생합니다. request.getReader() 를 사용하게 되면 request body 를 읽기위한 스트림을 반환하고, 읽는동안 내부적으로 포인트를 사용하여 읽은 위치를 기억하게 됩니다. 처음 다 읽은 후 두번째 읽을 때는 이미 포인터가 body의 마지막부분을 기억하고 있기 때문에 읽을 데이터가 없다고 판단하게 되는 것이죠. 예를들어 Interceptor에서 아래와 같은 코드로 body의 데이터를 조회한다고 할 때 이미 인터셉.. Programing/JAVA 2023. 5. 25. JPA Date or Timestamp 저장 시 유용한 어노테이션 JPA Date or Timestamp 저장 시 유용한 어노테이션에 대해 알아보겠습니다. 1. @Temporal @Temporal 은 날짜, 시간 타입 매핑에 필수 어노테이션 입니다. TemporalType.DATE, TemporalType.TIME, TemporalType.TIMESTAMP 3가지가 있으며 각각의 컬럼 타입에 따라 설정하시면 됩니다. 2. @CreationTimestamp 신규저장 시 자동으로 현재 시간을 넣어주는 어노테이션 입니다. @Embeddable @EmbededId의 경우 정상동작 하지 않음에 주의 해야 합니다. 엔티티 클래스 필드에만 적용합니다. 3. @UpdateTimestamp @CreationTimestamp와 비슷하게 수정 시 현재 시간을 자동으로 업데이트 해주는데 사.. Programing/JPA 2023. 5. 16. JPA 에서 entity를 삭제하는 여러가지 방법과 차이 JPA에서 entity를 삭제하는 방법은 여러가지가 존재합니다. 각각의 삭제하는 방법의 내부코드와 사용방법, 차이점을 알아보도록 하겠습니다. 1. delete delete method를 사용하여 entity를 삭제할 수 있습니다. 1.1 how to use? repository.delete(entity); entity를 전달하므로써 해당 entity를 삭제하게 됩니다. 1.2 delete 구현 코드 참고 @Override @Transactional @SuppressWarnings("unchecked") public void delete(T entity) { Assert.notNull(entity, "Entity must not be null!"); if (entityInformation.isNew(ent.. Programing/JPA 2023. 5. 4. Firebase 환경 설정, 구축 및 구현 방법, 앱 푸시 메시지 보내기 Firebase는 Android 및 ios 에 구분 없이 알림을 전달할 수 있는 구글의 플랫폼 입니다. Firebase 환경을 구축하고 Java 서버를 구현하여 보겠습니다. 아래의 Link를 클릭하여 Firebase site로 이동합니다. 1. Firebase 환경 설정 Link : https://firebase.google.com/ Firebase Firebase는 고품질 앱을 빠르게 개발하고 비즈니스를 성장시키는 데 도움이 되는 Google의 모바일 플랫폼입니다. firebase.google.com 시작하기를 클릭합니다. 프로젝트 만들기를 클릭합니다. 프로젝트 이름을 지정하고, 약관동의 등을 체크 후 계속 버튼을 클릭합니다. 애널리틱스 사용설정을 하고 계속을 클릭합니다. 새로운 애널리틱스를 생성합니다.. Programing/JAVA 2023. 4. 21. Springboot Quartz clustering 적용방법, spring batch, shedlock quartz를 사용하여 schedulering을 하는 어플리케이션을 이중화 하게 되면, 복수 개의 scheduler가 동작하기 때문에 문제를 야기 할 수 있습니다. 그래서 Clustering을 적용하여 하나의 scheduler만 동작하게 처리해야 합니다. 그 방법중에 하나가 Quartz clustering이고 shedlock 등의 라이브러리도 DB를 사용한 Clustering을 제공합니다. Quartz clustering 적용방법 그럼 이제 quartz에 clustering을 적용하는 방법을 알아보도록 하겠습니다. org.quartz.simpl.RAMJobStore 는 default 로 메모리를 사용한 스케쥴링이고, org.quartz.impl.jdbcjobstore.JobStoreTX 가 DB를 활용한.. Programing/JAVA 2023. 4. 18. JPA Query Methods 정리 오늘은 JPA에서 간단하게 우리가 원하는 데이터를 조회 할 수 있는 방법중에 하나인 Query Methods 에 대해서 알아보도록 하겠습니다. Keyword Usage JPQL Where and findByColumne1AndColumn2(col1, col2); select ... where column1 = col1 and column2 = col2 Where or findByColumn1OrColumn2(col1, col2); select ... where column1 = col1 or column2 = col2 Distinct findDistinctByColumn1(col1); select distinct ... where column1 = col1 Is, Equals findByColumn1Is.. Programing/JPA 2023. 4. 13. Firebase Proxy 등록 정보 및 라이브러리 수정 방법 특정 업체 협업을 하던 도중, 방화벽이 IP 주소만 허용이 되서, 프록시를 사용하여 도메인주소를 변경해야 했습니다. 일단 다운받은 firebase 설정 파일(json) 에는 아래 4개 값이 도메인 주소로 되어 있습니다. auth_uri, token_url, auth_provider_x509_cert_url, client_x509_cert_url 이 도메인 주소로 설정되어 있습니다. 해당 도메인을 IP 주소로 바꾸어 프록시를 타게 설정합니다. 그리고 메시지 전송을 위해서는 firebase라이브러리 내 com.google.firebase.messaging package의 FirebaseMessagingClientImpl class 에 설정된 2개의 final 변수를 수정해 주어야 하는데, FCM_URL 과 .. Programing/JAVA 2023. 4. 11. JPA @Query 사용 시 주의점 ERROR: relation "table_name" does not exist, ConverterNotFoundException JPA에서 데이터를 조회 할 때는 보통 find로 시작하는 Query Method를 사용하여 조회합니다. 하지만 복잡한 관계에 있는 테이블들을 사용해 조회해야 할 경우에는 직접 쿼리를 작성하여 조회하는데요, 이럴 때 사용하는 Annotation이 @Query (org.springframework.data.jpa.repository.Query) 입니다. @Query 사용법 @Query(value = "query 작성", nativeQuery = true) @Query Parameter 전달 방법 @Query(value = "select userId, userNm from user where user_id = :userId", nativeQuery = true) Optional findUser(@Param(.. Programing/JPA 2023. 4. 8. JPA Sequence 자동증가 설정 @SequenceGenerator MariaDB의 auto_increasement나 postgressql 의 serial 같은 자동증가 컬럼을 기본키로 설정하는 경우 해당 시퀀스와 컬럼을 매핑해주어야 합니다. 이럴 때 사용하는 것이 @SequenceGenerator 입니다. 1. @SequenceGenerator 속성 name : 참조할 수 있는 시퀀스 제너레이터 명칭 sequenceName : DB에서 생성한 sequence 이름 initialValue : 시퀀스 시작 값 (DDL 생성 시에만 사용) allocationSize : 시퀀스 호출 시마다 증가하는 수 catalog : DB 카탈로그 schema : DB 스키마 2. @SequenceGenerator 사용법 entity 레벨에 사용할 sequenceGenerator를 명명합니.. Programing/JPA 2023. 3. 7. Swagger 잘~만들어보기 응답 Model 명확하게, 타입, 최대 최소값 표출하기 Swagger는 API를 구현할 때 Front-End와 의사소통에 있어 많은 편의를 줍니다. 하지만 적절한 정보 규격을 전달해주지 않으면 많은 오해가 생기게 됩니다. API 사용자와 보다 적절한 의사소통을 하기위해서 설정해줘야 하는 부분을 알아보도록 하겠습니다. swagger를 적용하는 방법은 아래의 Link를 확인하세요! Link : https://aljjabaegi.tistory.com/668 [API documentation 자동화] spring boot swagger UI 적용 방법 API의 Document를 자동으로 제공해주는 swagger UI 설정방법을 알아보겠습니다. springboot 2.7.7 springsecurity gradle 1. dependencies 를 추가 /*swagger.. Programing/JAVA 2023. 2. 27. java 카카오 간편 로그인 구현하기 처음부터 자세히! 여러 업체들에서 간편 로그인 기능을 제공하고 있습니다. 각 업체들마다 제공하는 정보는 조금씩 다르지만, 로직은 비슷합니다. 이번 포스팅은 그 중에서 카카오 간편 로그을 구현하는 방법을 알아보겠습니다. 간단하게 전체 과정을 알아보겠습니다. 1. 과정 요약 Kakao Developers 설정 카카오 디벨로퍼스에 애플리케이션 추가 -> 플랫폼 등록 -> Redirect URI 등록 -> 동의항목 추가 동작 순서 카카오 OAuth 주소로 Client Id, Redirect URI 전송(Front) -> 카카오는 Redirect URI 주소로 OAuth Code를 전달해줌.(Kakao) -> 서버는 받은 OAuth Code로 Token 정보 요청 -> ToKen 정보를 받아 유저 정보 요청 2. Kakao Dev.. Programing/JAVA 2023. 2. 24. 이전 1 2 3 4 5 6 ··· 34 다음 💲 추천 글 반응형