분류 전체보기

    [Spring] Thread Pool - pool size설정

    Thread Pool Thread Pool 은 여러 개의 쓰레드를 유지하고 관리하기 위해 사용된다. Thread Pool 의 사이즈 쓰레드를 불필요하게 많이 만들게 되면 메모리의 낭비가 심해지고 너무 적은 수의 쓰레드를 만들게 되면 효율성이 떨어진다. 쓰레드의 개수를 고정 시키는 것보다 서비스가 실행되는 CPU의 코어 개수에 따라 유동적으로 생성할 수 있도록 해주는 것이 좋다. 많이 생성하는 것이 아니라 어떤 작업을 처리하느냐에 따라 기준이 바뀔 수 있다. CPU 처리가 많은 경우 - CPU 코어가 N개인 경우 N+1만큼의 쓰레드를 생성해주면 최적에 가까운 성능을 낼 수 있다고도 한다. I/O 작업이 많은 경우 - N*2 만큼의 쓰레드를 생성해준다.

    [Querydsl] Resolved [com.querydsl.core.types.ExpressionException ~ ]

    selet 문에 내가 원하는 값으로 리턴하기 위해 Querydsl 에서 Projections.fileds를 사용하는데 다음과 같은 에러가 발생했었다. @Override public List getMasterIdList(Long memberId) { return jpaQueryFactory.select( Projections.fields(AnswerDTO.class, answer.answerId.as("answerId"), answer.answerId.count().coalesce(0L).as("answerCount")) ) .from(answer) .where(answer.mberId.eq(memberId)) .fetch(); } Projections의 경우 생성자 기반이 아닌 필드 기반으로 가져올 때 ..

    [Git] error: The following untracked working tree files would be overwritten by checkout:

    develop 브랜치에서 다른 feature 브랜치로 checkout 하는데 다음과 같은 에러가 발생했다. error: The following untracked working tree files would be overwritten by checkout: 해결방법 추적하지 않는 파일을 제거하면 된다. # == 적용하지 않고 무엇을 해야할 지만 보고 싶을 때 == git clean -fd --dry-run # 또는 git clean -fdn # == 적용하고 싶을 때 == git clean -fd

    [Spring] Spring 3버전에 Springdoc 라이브러리를 사용해 swagger 적용하기

    Springfox가 아닌 Springdoc으로 Swgger를 사용하는 이유 이전 Spring 에서 swagger를 사용할 때 springfox를 사용했는데 springdoc 에서 제공하는 swagger를 더 선호한다고해서 사용해보았다. springdoc는 webflux도 지원하며 더 사용하기 쉽다고 한다. Springdoc 사용하기 spring boot버전에 따라서 springdoc코드를 추가한다. spring boot 3버전부터 springdoc 2버전을 사용해야지 오류가 안난다. build.gradle //swagger implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0' config 파일 Springdoc에서는 config..

    FCM(Firebase Cloud Messaging)

    FCM 사용 이유 플랫폼에 종속되지 않고 push 메시지를 사용할 수 있다. 서버를 경유해서 실시간으로 push 메시지를 받으려면 사용자는 서버에 항상 접속하고 있어야 하는데 이는 사용자의 기기의 배터리 및 네트워크 리소스를 크게 낭비한다. FCM을 사용하면 메시징 서버를 중간에 둠으로써 낮은 배터리와 적은 네트워크 사용만으로도 메시지를 실시간으로 처리할 수 있다. 또한 iOS, Andriod, Web 에 각각 push 메시지를 보내려면 각각의 환경별로 개발해야하는데 이를 하나로 통합하는 솔루션이다.     Notification Server - 모바일 기기에서 push 알림을 전송하는 서버 - FCM 사용  Client App- 사용자의 모바일 기기에 설치된 앱 - pu..

    [Spring] 멀티 모듈 사용하기 - 루트 프로젝트에 자식 의존성 추가하기

    [Spring] 멀티 모듈 사용하기 - 루트 프로젝트에 자식 의존성 추가하기

    멀티모듈 사용하는 이유 서버를 여러개(api용, batch 용 등)를 사용하면 프로젝트를 여러개 만들어 사용하는데 프로젝트를 여러개 사용하는 경우 공통 코드를 사용할때 모든 프로젝트의 코드를 수정해주어야 한다. 이러한 불편한 점을 해결하기 위해서 멀티모듈을 사용하고자 한다. 멀티 모듈을 사용하면 코드를 분리해서 사용하기에 프로젝트별 코드 관리가 용이하다. 루트 프로젝트 생성하기 모듈을 담기 위한 루트 프로젝트를 생성하고 루트 프로젝트 안에서 모듈을 추가한다. 루트 프로젝트는 하위 모듈을 관리하는 역할만 하기 때문에 src 폴더를 삭제해도 된다. 모듈 추가하기 project 우클릭 > new > module 모듈을 추가한다. 모듈 추가 후 자식 모듈과 통신을 위해 루트 프로젝트 settings.gradle..

    [AWS] Amazon linux 2023 에 MySQL 8.0 설치

    [AWS] Amazon linux 2023 에 MySQL 8.0 설치

    amazon linux 2023 AMI에 mysql 8.0 설치하는 것은 다른 AMI 들과 다르다. MySQL 설치하기 먼저 mysql 을 설치하고자 하는 인스턴스에 접속한다. ssh -i /path/my-key-pair.pem ec2-user@instance-public-ip Amazon Linux 에서 Mysql 을 찾는다. dnf search mysql repository 를 최신 버전으로 업데이트 한다. sudo dnf update 레포지토리 추가 sudo wget https://dev.mysql.com/get/mysql80-community-release-el9-4.noarch.rpm 다운받기 sudo dnf install mysql80-community-release-el9-4.noarch.r..

    [Mysql] Docker 환경에서 mysql 설치 후 접속 에러 - Access denied for user 'root'@'172.17.0.1' (using password: YES)

    Docker 환경에 mysql 을 설치하고 localhost로 접속하면 Access denied for user 'root'@'172.17.0.1' (using password: YES) 다음과 같은 에러가 나면서 접속이 안된다. docker 에서 컨테이너 접속 $ docker exec -it bash mysql 접속 > mysql -u root -p 계정에 권한 부여 > GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.17.0.1' WITH GRANT OPTION; 다른 계정을 사용한다면 계정 생성 및 권한 부여 > CREATE USER 'admin'@'172.17.0.1' IDENTIFIED BY '비밀번호 입력'; > GRANT ALL PRIVILEGES ON *.* T..

    [Git] master -> main 합치기 (덮어쓰기)

    [Git] master -> main 합치기 (덮어쓰기)

    로컬에서 프로젝트를 생성 후 깃 연결을 위해 git init 설정을 하면 master 브랜치로 생성되는데 Git Repository에서 프로젝트를 생성하면 main 으로 디폴트 브랜치가 생성된다. 기본 브랜치는 main 이기 때문에 push 나 pull이 제대로 되지 않는 경우들이 있다. 그래서 master 브랜치와 main 브랜치를 하나로 만들기 위해서 master 브랜치의 내용을 main으로 옮기고자 했다. 해당 방법은 main의 내용이 다 삭제됨으로 master와 동기화 하고 진행하는 걸 추천한다. git checkout master git branch main master -f git checkout main git push origin main -f

    [스프레드 시트] 구글 스프레드 시트에서 다른 시트에 있는 데이터를 원하는 데이터 추출하기 (모두 찾기/전체 검색)

    [스프레드 시트] 구글 스프레드 시트에서 다른 시트에 있는 데이터를 원하는 데이터 추출하기 (모두 찾기/전체 검색)

    개발을 하다보면 네이밍 관련해서 행정표준용어사전에 맞게 사용해야하는데 예를 들어 '번호' 라는 단어를 사용할 때 굉장히 많은 '번호'의 데이터를 확인할 수 있는데 원하는 단어를 찾을때까지 ctrl+f 의 다음 버튼을 누르면서 찾는것은 굉장한 에너지가 소모되는 일이다.. 엑셀에는 '모두찾기' 라는 기능이 있다고 하는데 구글시트에서는 찾지 못했으므로 내가 직접 작성해서 사용했다. =QUERY(IMPORTRANGE("구글시트링크", "'시트이름'!시트범위:시트범위"), "select A,C,D,E where C contains '"&A2&"' ",) IMPORTRANGE 뒤에 해당 구글 시트 링크를 입력하고 데이터를 가져오고자 하는 시트이름을 입력하고 띄어쓰기가 있는경우 ' ' 표시를 사용하고 ! 뒤에 가져올..