티스토리

catpark's something new
검색하기

블로그 홈

catpark's something new

www.icatpark.com/m

게으른 개발자... -_-;

구독자
0
방명록 방문하기

주요 글 목록

  • java print api 주의 사항 DocFlavor flavor = DocFlavor.INPUT_STREAM.PDF; FileInputStream fis = null; try { fis = new FileInputStream("sample.pdf"); } catch (FileNotFoundException e) { e.printStackTrace(); } Doc doc = new SimpleDoc(fis, flavor, null); pdfService.createPdfLabel(); try { docPrintJob.print(doc, printRequestAttributeSet); } catch (PrintException e) { e.printStackTrace(); } 생산 현장 프로젝트 중에 제품 생산시 바코드를 프린터로 출력해야하.. 공감수 0 댓글수 0 2021. 1. 15.
  • [typescript] Cannot use JSX unless the '--jsx' flag is provided. npx로 typescript 프로젝트를 만들었을때 vscode에서 위와 같은 에러가 발생했다. 구글링 중에 tsconfig.json의 내용을 바꾸라는 내용이 다수였는데 이 방법 보다 더 정확해 보이는 해결책을 찾았다. stackoverflow.com/questions/50432556/cannot-use-jsx-unless-the-jsx-flag-is-provided Cannot use JSX unless the '--jsx' flag is provided I have looked around a bit for a solution to this problem. All of them suggest adding "jsx": "react" to your tsconfig.json file. Which I have.. 공감수 3 댓글수 0 2020. 12. 10.
  • Http/3은 UDP? https://blog.cloudflare.com/http3-the-past-present-and-future/ HTTP/3: the past, the present, and the future We are now happy to announce that QUIC and HTTP/3 support is available on the Cloudflare edge network. We’re excited to be joined in this announcement by Google Chrome and Mozilla Firefox, two of the leading browser vendors and partners in our effort to blog.cloudflare.com 이제 TCP가 아닌 UDP로.. 공감수 0 댓글수 0 2020. 7. 8.
  • 왜 돈 연산에는 Floating-point type을 쓰면 안되나? https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html Primitive Data Types (The Java™ Tutorials > Learning the Java Language > Language Basics) The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See JDK Release Notes for inf.. 공감수 0 댓글수 0 2020. 6. 30.
  • N + 1 문제 해결 3 먼저 생각해 볼 수 있는 방법은 @EntityGraph로 한 번에 다 가져올 수 있습니다. join fetch을 사용하여 한 번에 쿼리 할 수 있습니다. hibernate의 default batch를 사용하는 방법이 있습니다. 3. Hibernate의 default batch를 사용하는 방법 spring boot를 사용하여 application.yml에 다음 항목을 설정하면 됩니다. spring: jpa: properties: hibernate.default_batch_fetch_size: 1000 ===== LAZY Hibernate: select post0_.id as id1_1_, post0_.title as title2_1_ from post post0_ 2020-06-15 15:32:53.655.. 공감수 0 댓글수 0 2020. 6. 15.
  • N + 1 문제 해결 2 먼저 생각해 볼 수 있는 방법은 @EntityGraph로 한 번에 다 가져올 수 있습니다. join fetch을 사용하여 한 번에 쿼리할 수 있습니다. hibernate의 default fetch를 사용하는 방법이 있습니다. 앞서 살펴본 EntityGraph에 이어 join fetch을 살펴 보겠습니다. 2. Join Fetch를 사용하는 방법 먼저 살펴본 방법(2020/06/11 - [Programming/JPA] - N + 1 문제 해결 1)은 JpaRepository에서 원하는 쿼리로 바뀌도록 @EntityGraph를 이용하여 가이드 했다면 이번 방법은 JPQL을 사용하여 직접적으로 해결하는 방법입니다. public interface PostRepository extends JpaRepository.. 공감수 0 댓글수 0 2020. 6. 11.
  • N + 1 문제 해결 1 앞서 살펴본 N + 1 문제 원인은 @oneToMany 관계로 reference 하고 있는 collection 내용을 가져오려고 접근할 때 생깁니다. 변수에 접근할 때마다 그때그때 하나씩 쿼리가 날아가는 문제입니다. 그럼 이 문제를 해결하기 위해 어떻게 하는 것이 좋을까요? 먼저 생각해 볼 수 있는 방법은 @EntityGraph로 한 번에 다 가져올 수 있습니다. join fetch을 사용하여 한 번에 쿼리할 수 있습니다. hibernate의 default fetch를 사용하는 방법이 있습니다. 1. @EntityGraph 사용하는 방법 그냥 @oneToMany를 똭 eager로 바꿔 버리면 다시는 lazy로 가져올 수는 없겠죠?^^; 그래서 필요할 때만 eager로 가져오고 평소에는 lazy로 가져오는.. 공감수 0 댓글수 0 2020. 6. 11.
  • N + 1 문제 원인 정말 많이 접하는 문제입니다. 왜 발생하고 처리하는 방법은 뭐가 있는지 정리하려 합니다.우선 왜 이런 문제가 생기는지 정리합니다. 언제나 문제는 원인부터 알아야 올바르게 대처하니까요. 포스트(Post)와 댓글(Comment)와의 관계를 예로 작성해 보았습니다.@Getter@Setter @AllArgsConstructor(access = AccessLevel.PROTECTED) @NoArgsConstructor @Entity @ToString public class Post { @Id @GeneratedValue private Long id; private String title; @OneToMany(mappedBy = "post", cascade = CascadeType.ALL) private List .. 공감수 1 댓글수 0 2020. 6. 5.
  • 왜 JPA를 써야할까? JPA를 왜 써야 할까에 앞서 이전에 진행했던 프로젝트들의 형태를 먼저 짚고 넘어가면, 기본적으로 JPA를 사용하고 있지만 더불어 JOOQ도 같이 사용하고 있습니다. public interface AccountInteHisRepositoryCustom { List findAccountIntegrationHistoryMonthlyActiveStateByCreateDate(LocalDateTime date); } custom repository inteface를 정의하고 @Repository public class AccountInteHisRepositoryImpl implements AccountInteHisRepositoryCustom { .... } 위와 같은 구현체인 XXXImpl에서 DSLConte.. 공감수 0 댓글수 0 2020. 6. 5.
  • Lombok @Builder에서 method name 이용 패턴 먼저 이 패턴을 사용하게 된 계기는 api response에서 http status code처럼 result를 return하려고 하려다 보니 이 result라는 놈이 특정 에러에 따라 정해지는 것이라 메소드 이름에 내용을 정해서 파라미터를 정하면 어떨까 하고 사용하게 되었습니다. Result model입니다. builder 패턴에 Success, failWithNotFoundPath같은 이름에 따라 내용이 정해지게 됩니다. @Getter @ToString @Builder(builderClassName = "Builder") public class MyResult { private boolean succeed; private String majorCode; private String minorCode; p.. 공감수 0 댓글수 0 2020. 5. 21.
  • Spring Boot Auto Configuration 예제 Spring Boot Auto Configuration 예제를 보다가 maven은 많은데 나한테 익숙한 gradle의 예제는 몇 개 안되어서 gradle로 한 번 만들어 보았다. auto configuration source : https://github.com/aloftcat/contact-spring-boot-starter application source : https://github.com/aloftcat/AutoConfigurationTest contact-spring-boot-starter 프로젝트를 clone후에 build 한다. 만든 jar파일을 어떻게 dependency를 추가해야 할까 잠시 고민했는데 maven local repository를 사용하면 간단했다. gradle instal.. 공감수 0 댓글수 0 2020. 4. 21.
  • 2way ssl 인증을 위한 JKS 만들기 지금 운영되는 서버에 인증서가 만료가 되었다. 서로 다른 도메인의 서버끼리 2way 인증을 하는데는 서로의 certification을 가지고 있어야 한다. Java Key Store는 key pair와 trusted certificate를 담을 수 있는 그릇이다. 먼저 갱신한 인증서를 확인해보자. 서버쪽은 CA인증서로부터 발급받은 key pair이고, 클라이언트는 self-signed key pair이다. 이 상태로는 2way ssl 인증이 안된다. 서로의 certification을 교환해서 가지고 있어야 된다. x.509형식의 .cer파일을 클라이언트 JKS에 import하자. 마지막 그림처럼 Trusted Certificate로 server의 certificate가 추가 되었다. 그럼 반대로 클라이언.. 공감수 0 댓글수 0 2020. 3. 10.
  • RUST 자주 묻는 질문들 (FAQ) https://prev.rust-lang.org/ko-KR/faq.html 자주 묻는 질문들 · Rust 프로그래밍 언어 자주 묻는 질문들 이 문서는 Rust 프로그래밍 언어에 대한 흔한 질문들을 답하기 위해 존재합니다. 이 문서는 언어에 대한 완전한 안내서도 아니고, 언어를 가르치는 도구도 아닙니다. 이 문서는 Rust 커뮤니티에서 사람들이 되풀이하여 맞닥뜨리는 질문들을 답하고, Rust의 일부 설계가 왜 그렇게 결정되었는지를 밝히기 위한 참조서입니다. 여기에서 답하지 않았지만 흔하거나 중요한 질문이 누락되어 있다고 생각하신다면 저희가 고칠 수 있도록 부담 없이 도와주세요 prev.rust-lang.org 이렇게 정리된 language가 있었던가??? 공감수 0 댓글수 0 2020. 1. 14.
  • JPA 기본 Annotation 정리 @Entity @Entity 어노테이션은 데이타베이스의 테이블과 일대일로 매칭되는 객체 단위이며 Entity 객체의 인스턴스 하나가 테이블에서 하나의 레코드 값을 의미합니다. 그래서 객체의 인스턴스를 구분하기 위한 유일한 키값을 가지는데 이것은 테이블 상의 Primary Key 와 같은 의미를 가지며 @Id 어노테이션으로 표기 됩니다. 먼저 Spring Boot 를 설정할때 spring.jpa.hibernate.ddl-auto 설정이 create 혹은 update 로 되어 있을 경우 Spring 프로젝트가 시작될때 EntityManager 가 자동으로 DDL 을 수행해 테이블을 생성해 줍니다. 이때 명시적으로 @Table 의 name 속성을 이용해 데이타베이스상의 실제 테이블 명칭을 지정하지 않는다면 E.. 공감수 13 댓글수 7 2019. 7. 4.
  • jpa 복합키에서 auto increment 먼저 중요 패키지 버전을 보면 아래와 같다. springboot 2.1.5.RELEASE spring-data 2.1.5.RELEASE spring-core 5.1.7.RELEASE hibernate-core 5.3.10.Final mysql 5.7.21-log entity는 아래와 같습니다. @Data @Builder @AllArgsConstructor(access = AccessLevel.PROTECTED) @NoArgsConstructor @Entity @EntityListeners(AuditingEntityListener.class) @Table(name = "T_NOTIFICATION") public class Notification { @EmbeddedId private Notification.. 공감수 1 댓글수 0 2019. 6. 27.
  • JPA 기본 키 전략 1. 직접 할당@id 애노테이션으로 필드와 매핑한다. 자바 기본형, 래퍼형, String, Date, BigDecimal, BigInteger가 타입이 가능하다 2. IDENTITY기본 키 생성을 DB에 위임한다. DB의 auto_increment와 같은 기능을 사용할 때 쓴다. 키 필드에 @GeneratedValue(strategy = GenerationType.IDENTITY)를 사용한다.이 전략을 사용하면 JPA는 기본 키 값을 얻어오기 위해 DB를 추가로 조회한다. 따라서 이 전략을 사용하는 엔티티를 새로 생성하여 식별자 값을 할당하려면 1차 캐시를 넘어서 DB에서 Insert한 후에 기본 키 값을 조회한다. 즉, persist()를 호출하는 즉시 Insert SQL이 DB에 전달되므로 트랜잭션을.. 공감수 0 댓글수 0 2019. 6. 27.
  • JVM Garbage Collection Basic PermGen은 자바 8에서 Metaspcae로 대체됐다. 이미지 출처: https://help.sap.com/ 읽기 전 주의사항(그림을 보는 법) 그림을 그리다보니 Stack에 있는 동그라미 모양과 힙 메모리에 있는 동그라미 모양이 동일한 그림들이 많이 있습니다. 이건 둘이 동일한 메모리를 의미하는 게 아니라 그냥 스택에서 힙을 참조한다는 걸 그린 건데, 사실 둘의 모양을 다르게 그려야하는데 아무 생각없이 복붙해서 그리다보니 이렇게 그리게 되었고… 되돌리기에는 너무 많이 그림을 그려놔서(히스토리 추적이 안 되게 막 그려서…) 귀챠니즘으로 인해 그림을 수정하지 않았습니다. 이 점 참고하셔서 보시길 바랍니다! 들어가기에 앞서 이 글은 이일웅 님께서 번역하신 자바 최적화란 책을 읽던 도중 공부한 내용을 정리.. 공감수 0 댓글수 0 2019. 5. 10.
  • Netty의 데이터 컨테이너(ByteBuf) Java NIO ByteBuffer자바 NIO 바이트 버퍼는 바이트 데이터를 저장하고 읽는 저장소다. 배열을 멤버 변수로 가지고 배열에 대한 읽고 쓰기 메소드를 제공한다. xxxBuffer 형태의 각 데이터별로 버퍼를 제공한다. ByteBuffer는 capacity / position / limit 세가지 속성을 가진다.capacity : 버퍼에 저장할 수 있는 데이터의 최대 크기. 한번 정하면 바꿀 수 없다. 버퍼를 생성할 때 생성자의 인수로 입력된 값이다.position : 읽기 또는 쓰기 작업 중인 위치를 나타낸다. 버퍼 객체가 생성되면 0으로 초기화되고 쓰기(put) 또는 읽기(get) 작업이 수행되면 자동으로 증가한다.limit : 읽고 쓸 수 있는 버퍼 공간의 최대치. limit 메소드로 값을.. 공감수 2 댓글수 0 2019. 3. 25.
  • Non-blocking, Blocking public class HelloWorld { static long start; public static void main(String[] args) throws InterruptedException, ExecutionException { HelloWorld helloWorld = new HelloWorld(); Future hello; System.out.println("[" + System.currentTimeMillis() + "]" + "Start!"); hello = helloWorld.getSayHelloAsync(); System.out.println("[" + System.currentTimeMillis() + "]" + "End!"); System.out.println(hello.get(.. 공감수 0 댓글수 0 2019. 3. 18.
  • Asynchronous (VS Synchronous) 보통 프로그래밍을 하면 동기프로그램을 짜게 됩니다. HelloWorld와 같은 sample 코드들 말입니다. Main 함수에서 호출되는 다른 함수들을 생각해 보세요.public class HelloWorld { public static void main(String[] args) { HelloWorld helloWorld = new HelloWorld(); System.out.println(helloWorld.sayHello()); } public String sayHello() { return "Hello!"; } }sayHello()함수가 호출되고 있고 이 함수는 string을 return하고 있습니다. 아주 짧은 순간이긴 하지만 sayHello()가 실행되는 순간에는 main함수는 멈추고 retur.. 공감수 0 댓글수 0 2019. 3. 18.
  • 코딩 시험과 TDD 이상한모임 글중에 나의 마음에 와닿는 글입니다.TDD의 효용성에 대해 짧은 글로 하고자 하는 말을 정확히 전달해서 아주 인상적으로 읽었습니다. 구직 과정에 코딩 시험이 있었다. 면접관의 컴퓨터와 응사자의 컴퓨터가 코딩 시험 도구로 연결되어 면접관이 응시자의 코딩을 지켜보거나 개입할 수 있는 환경이었다. 어떤 문제의 답 코드를 쓰다 10줄 이상이 되니 자신감이 떨어져 TDD를 사용하기로 했다. 여기서 나는 흥미로운 경험을 했다.물론 코딩 시험에 테스팅 도구는 주어지지 않았다. TDD는 테스팅 도구가 있어야만 할 수 있는 것이 아니다.이 글에서 테스트 케이스는 테스트 코드가 아니라 테스트 데이터를 의미한다.나는 시험 문제를 반영한 간단한 테스트 함수를 만들고 제시된 테스트 케이스와 몇가지 임의의 테스트 케이.. 공감수 0 댓글수 0 2019. 2. 14.
  • Git Slack을 webhooks로 연동 slack을 쓰긴 쓰고 있지만.... 사실 slack을 사용하고 있지만 협업툴로써 쓰기 보다는 메신저로 쓰고 있었다. 하지만 slack과 연동되는 많은 app의 기능은 단순 메신저로 사용하던 나를 slack API까지 보게 만들 정도로 매력이 넘친다. slack의 app directory를 가보면 category가 있는데 develop에 대한 app뿐만 아니라 finance, travel과 같은 app들과도 연동이 가능하다. 개발장이라 그런지 "project management"를 주목 하게 되었고 asana, trello, jira, gitlab등에 관심을 가지고 보게 되었다. 그 중에 MeisterTask는 유료긴 하지만 결제를 고민하게 될 정도로 괜찮아 보인다. 무료로도 사용 가능하지만 slack연.. 공감수 0 댓글수 0 2018. 12. 5.
  • Annotation-based Controller 개요스프링 프레임워크는 2.5 버젼 부터 Java 5+ 이상이면 @Controller(Annotation-based Controller)를 개발할 수 있는 환경을 제공한다. 인터페이스 Controller를 구현한 SimpleFormController, MultiActionController 같은 기존의 계층형(Hierarchy) Controller와의 주요 차이점 및 개선점은 아래와 같다.어노테이션을 이용한 설정 : XML 기반으로 설정하던 정보들을 어노테이션을 사용해서 정의한다.유연해진 메소드 시그니쳐 : Controller 메소드의 파라미터와 리턴 타입을 좀 더 다양하게 필요에 따라 선택할 수 있다.POJO-Style의 Controller : Controller 개발시에 특정 인터페이스를 구현 하거나.. 공감수 0 댓글수 0 2017. 2. 1.
  • repo 를 사용하여 프로젝트 관리하기 안드로이드는 수많은 git 프로젝트를 묶어서 하나의 프로젝트로 관리하고 있다. 이를 위해서 구글에서 python 기반의 새로운 관리 툴을 하나 선보였는데, 이것이 repo 이다.repo 를 받고 설치하는 법등은 인터넷을 잘 찾아보면 내용이 있으니, 여기서 다루지는 않겠다. 여기서는 간단하게 여러개의 프로젝트를 하나의 repo 로 관리하는 법을 알아보려고 한다.참고로 python 을 모르기 때문에 repo 가 어떻게 동작하는지를 분석하지는 않는다. 다만 단순하게 사용하는 입장에서 기술할 것이다. 1. git 프로젝트 등록git 프로젝트를 등록하는 방법도 인터넷을 검색하면 설명이 잘 된 사이트를 찾을 수 있을 것이다. 간단하게 절차를 기록해보면 다음과 같다.# mkdir # cd # git init< add.. 공감수 0 댓글수 0 2016. 6. 15.
  • git commit 내용을 메일로 보내기 How to Use git send-emailThe preferred way to send patches is by email, using git send-email (more information about sending patches can be found on the Community page). This page explains how to use git send-email.Installing send-emailYou probably already have git already installed, but that's not necessarily enough to have also the send-email command available. You can check if send-email is a.. 공감수 0 댓글수 0 2016. 1. 27.
  • GIT에 대한 내용정리 http://progit.org/book/ (Pro Git) http://dogfeet.github.com/articles/2012/progit.html ( Pro Git 번역)개념 정리1. Git의 데이터는 파일 시스템의 Snapshot이라 할 수 있으며, 크기가 아주 작다. Git은 Commit 하거나 프로젝트의 상태를 저장할 때마다 파일이 존재하는 그 순간을 중요하게 여기며, 파일이 달라지지 않았으면 Git은 성능을 위해서 파일을 저장하지 않는다. 단지 이전 상태의 파일에 대한 링크만 저장한다. Git은 아래의 그림과 같이 동작한다. 2. Git은 파일을 Commited, Modified, Staged 세가지 상태로 관리한다. - commited : 데이터가 로컬 저장소에 안전하게 저장됐다는 것을 .. 공감수 0 댓글수 0 2015. 8. 27.
  • HTTP 304: Not Modified 응답 구현 1. 최초 요청 시 HTTP Request와 ResponseClient's requestClient ------------------------------> ServerRequest URL: http://i1.daumcdn.net/cfs.tistory/static/images/logo.gif Server's responseClient 공감수 0 댓글수 0 2015. 7. 14.
  • .NET 소스코드 문서화 소스코드 문서화 개발자들은 개발 문서작업을 진행하는 데 많은 노력과 시간을 투자한다.직접 모든 비즈니스 로직이나 모듈을 문서로 작성하기란 만만치 않은 작업이다.MSDN형태의 도움말을 구독성이 뛰어나고 쉽게 구현하는 방법이 있어 이를 소개하고자 한다. 우선 소스코드 문서를 XML 파일로 바꿔주는 C#컴파일러의 기능에 대해 알아보자.C# 컴파일러가 코드 주석을 XML로 변경하는 과정을 담당한다.소스코드 주석 : /// , /** */ 이 XML 주석에서 사용하는 엘리먼트 정보들은 아래와 같다. Element정의N네임스페이스T형식(클래스, 인터페이스, 구조체, 열거형, 델리게이트)F필드P형식 속성M메소드(생성자와 오버로드된 연산자 포함)E이벤트!에러에 대한 정보를 나타내는 에러 문자열[표 2]XML 주석 포맷.. 공감수 0 댓글수 0 2015. 7. 13.
  • 성능을 위한 초간단 HTTP 304 Not Modified 구현 방법 "올바른 성장과 따뜻한 나눔"이 있는 넥스트리HTTP 는 대형 네트워크 시스템 아키텍처를 염두한 프로토콜이기에 단순하면서도 다양한 스펙들이 존재합니다. 대형 네트워크 시스템이다 보니 서로 주고 받는 정보가 많을 것이고 이에 네트워크 부하나 서버 부하가 발생할 소지가 매우 큽니다. 그런 상황을 위해 HTTP에는 단순하면서도 강력한 캐싱 메커니즘을 제공하고 있습니다. 브라우저와 웹서버와의 대화브라우저는 웹서버에게 이미지, CSS 그리고 동적생성 정보(HTML, XML, JSON... 등 많은 컨텐츠를 요청합니다. 그런데 동일한 리소스(이하 컨텐츠)를 여러번 요청하는 경우가 굉장히 많습니다. 전형적인 예가 이미지나 CSS 같은 정적 컨텐츠인데 이런 것을 요청할 때 브라우저와 웹서버가 어떻게 대화하는지 아래 그.. 공감수 0 댓글수 0 2015. 4. 28.
  • Mono project C# 개발 툴 정하기구글에 'free c# ide' 를 검색하니 사이트에 다양한 C# 개발 툴들이 있었다.http://stackoverflow.com/questions/3640866/is-there-a-free-opensource-c-sharp-ide-in-windows 여러 개발 툴중에 평이하게 괜찮은 것은 비주얼 스튜디오 익스프레스이겠지만크로스 플랫폼을 지원하는 툴을 사용하고 싶었다. 구글에 '리눅스 c#' 이라고 검색하니 나오는 것이 모노디벨롭이다.모노디벨롭을 c# 개발 툴로 선정하였다. 모노 프로젝트 (C# .NET 크로스 플랫폼) 홈페이지http://www.mono-project.com/ 다운로드http://monodevelop.com/ 설치 파일XamarinStudio-5.0.1.3-0.msi.. 공감수 0 댓글수 0 2015. 4. 22.
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.