본문 바로가기

분류 전체보기84

정규표현식 (개념정리, Dangling meta character) 개인적으로 사용하려고 하면 헷갈려 항상 검색하게 만드는 것 중 하나입니다.😂🤣 그래서 이번기회에 한번 정리하기 위해서 작성하게 되었습니다. 또한 TDD 학습 중 JAVA에서 Dangling meta character 에러가 발생하여 해당 내용까지 한번 알아보도록 하겠습니다. https://github.com/phantom08266/java-racingcar-playground/blob/practice_game/src/main/java/AddCalculator.java 일반적인 패턴 정리 소문자 한 개 : [a-z] 대문자 한 개 : [A-Z] 숫자 한 개 : [0-9], \d 특수문자 한 개 : \( 특수문자를 찾을 때는 역슬래쉬 2개를 사용하여 여는 괄호 하나를 찾는다. 특수문자, 공백 한 개 : \w.. 2022. 6. 15.
java Stream API는 for-loop보다 정말 느릴까? 개인적으로 TDD 학습 공부를 하고 있었는데요! 해당 학습을 진행 하던 중 JAVA 8에서 제공하는 Stream에 대해서 학습하던 중 Stream이 for-loop보다 느리다라는 말을 들었습니다. 이때 나름의 이유는 있었지만 좀 더 명확하게 정리하고 싶어 글을 작성하였습니다. 우선 정말로 차이가 있는지 코드로 한번 알아보겠습니다. for vs foreach vs Stream 성능 비교 1~100만을 더하여 성능을 측정해보았는데요! for의 성능이 foreach, Stream보다 더 나은 성능을 보여주는 것을 확인할 수 있었습니다. 그렇다면 Stream이 성능이 가장 안 좋은데 왜 사용해야 할까요? 🤔Stream API이 성능이 왜 가장 낮을까요? 어떠한 개념을 알기 위해서는 해당 개념이 왜 생겨났는지를 .. 2022. 6. 15.
CQRS 패턴 CQRS 패턴이란? Command Query Responsibility Segregation의 약자로 ‘명령 조회 책임 분리’라고 합니다. 즉 명령과 조회를 분리하는 패턴인데요! 이 둘을 왜 분리를 해야 하는지 분리를 했을 때 이점은 무엇인지 알아보겠습니다. 명령과 조회를 분리한 이유 마틴 파울러는 명령과 조회를 분리한 이유가 비즈니스의 복잡도가 증가하여 이를 줄이고자 나온 개념이라고 합니다. 개발을 하다보면 많은 도메인 로직들이 생겨나고 복잡도가 증가하게 됩니다.(C, U, D) 또한 이에 따른 다양한 Read 방식도 제공해야 합니다. (R) 따라서 서로 다른 책임을 가지고 있으므로, 이를 분리하여 처리를 하면 성능 상 이점을 가져갈 수 있습니다. 분리를 할 경우 이점 명령 부분과 조회 부분을 분리하면.. 2022. 6. 15.
Java Random 클래스(Feat ThreadLocalRandom, SecureRandom) TDD 학습을 진행하던 도중 Random으로 값을 뽑아야 할 일이 생겼습니다. JAVA 에서는 Random에 대한 다양한 클래스들을 제공하고 있는데요! 이에 대해 하나씩 살펴보는 시간을 가져볼까 합니다. 우선 첫번째로 알아볼 Random 클래스 입니다. JAVA 1.0때부터 존재했었는데요! 역사가 있는 클래스 입니다. 본문 내용을 읽어보면 아래와 같은 내용을 확인하실 수 있습니다. 대략 요약하자면 이렇습니다. Random은 다중 스레드 환경에서는 스레드간 경합이 발생하여 성능저하가 발생하니 ThreadLocalRandom을 사용하는 것이 좋습니다. Random에서 만드는 의사난수는 보안적으로 안전하지 않으니 SecureRandom을 사용해야 합니다. 그럼 하나씩 살펴보도록 하겠습니다. Random vs .. 2022. 6. 15.
Optional orElse, orElseGet 차이 JAVA 8에서는 Optional을 사용할 수 있습니다. Optional에서는 다양한 기능들을 제공하는데요! 그 중 orElse, orElseGet에 대해서 정확히 알고 사용해야 할 부분이 있어 작성하게 되었습니다. 자세한 기능설명을 하기위해 클린코드에서 배운 학습 테스트를 해보겠습니다. class OptionalTest { @Test void test1() { String print = "Optional test"; String result1 = Optional.ofNullable(print).orElse(nullPrint1()); String result2 = Optional.ofNullable(print).orElseGet(this::nullPrint2); assertThat(result1).isE.. 2022. 6. 15.
Java Comparable vs Comparator 우리가 사용하고 있는 자바언어에서는 다양한 인터페이스들을 제공해주고 있는데요! 얼마전에 개인 공부를 하던 중 객체를 정렬해야하는 경우가 있었습니다. 대략적으로 알지만 Comparable와 Comparator 인터페이스를 이번 기회에 확실하게 정리하고 싶어 작성하게 되었습니다. Java Docs 일단 JAVA에서 제공하는 기본적인 인터페이스 임으로 공식 문서를 확인해 보겠습니다. java.lang.Comparable java.util.Comaprator 공식 문서를 확인해보니 Comparable 인터페이스는 해당 인터페이스를 구현하는 객체들의 순서를 적용한다고 합니다. Comparator에서도 객체들의 전체 순서를 적용한다고 하는데요! 일단 Comparator는 명시적으로 @FunctionalInterfa.. 2022. 6. 15.
JdbcSQLSyntaxErrorException 에러 해결과정 오늘은 개인 프로젝트를 진행하다가 발생한 이슈에 대해서 정리해보고자 합니다. 개발을 하다보면 더미 데이터가 필요합니다. Springboot에서는 Load시 main/resources안에 있는 data.sql을 읽어 설정된 DB에 Insert시킵니다. 그런데 빌드도중 갑자기 Table을 찾을 수 없다면서 Error가 발생하는 것이었습니다. 😱 Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "POST" not found; SQL statement: 🧐 문제인식 처음에는 datasource에 초기 스키마가 먼저 저장되어야 하는데 initialization설정을 하지 않았나? 하고 의심해보았지만 정상적으로 설정이 되어있었습니다. jpa: defer-dat.. 2021. 12. 16.
AWS EC2 서버 생성 및 설정방법 AWS에 서버를 만들기 위해서는 EC2를 생성해야 합니다. 1.EC2를 만들때에는 크게 주의할 것은 없고 Amazon Linux 2 AMI로 생성합니다. 그 이유는 Amazon에서 관리하고있는 리눅스 이기때문에 AWS 서비스와의 호환성이 좋으며, 아마존 독자 개발 레포지토리를 사용하므로 속도가 빠릅니다. 참고로 Amazon Linux 2 는 기본적으로 센토스OS입니다. 2. 만들면 pem키를 잘 관리하도록 합니다. 3. 인스턴스를 만들었으면 외부에서 접근할 수 있도록 탄력적 IP를 연결시킵니다. 4. 그런다음 인바운드 규칙을 설정하여 외부에서 http 요청이 들어오면 수신할 수 있도록 설정합니다. 보안그룹을 선택 하여 인바운드 설정을 수정합니다. EC2이기때문에 기본적으로 외부에서 들어오는 요청을 수신하.. 2021. 12. 14.
배포환경에서 애플리케이션과 S3 연동방법 본 포스팅은 이미 AWS에 EC2와 S3가 만들어져 있다고 가정하고 시작하겠습니다. 혹시라도 S3를 어떻게 만들지?, SpringBoot와 연동은 어떻게 하지? 하시는 분이 있으시다면 이전 포스팅을 참고 부탁드립니다. RDS 만들기 일단 SpringBoot 애플리케이션을 EC2에 띄우기 위해서는 해당 애플리케이션이 접속하는 DB를 구축해야 합니다. 여기서는 MariaDB를 사용하였습니다. MariaDB를 사용하는 이유는 가격입니다. 현재 AWS의 프리티어를 사용하고 있어 1년동안은 최대한 프리티어의 이점을 누리기 위해서 제일먼저 고민했던 부분입니다. MariaDB는 라이센스가 무료임으로 추후 프리티어 기간이 끝나도 MsSql이나 Oracle보다 가격선방을 해줄 것 같았습니다. 또한 성능면에서도 Mysql.. 2021. 10. 26.