[Network] 통신 프로토콜
통신 프로토콜(Protocol)의 정의 서로 다른 시스템(System)에 존재하는 개체(Entity) 간의 원활한 통신...
키자드에 등록된 총 558개의 포스트를 확인하실 수 있습니다.
통신 프로토콜(Protocol)의 정의 서로 다른 시스템(System)에 존재하는 개체(Entity) 간의 원활한 통신...
주소(Address) 이더넷 주소(Ethernet Address, Physical Address) LAN 카드(NIC : Network ...
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/42627 문제 설명 하드디스크는 한 번에 ...
인터네트워킹이란? 근거리 네트워크망 또는 광역망 간에 상호 접속시키는 제반 기법이다. 인터네트워킹 전...
문제 링크 : https://leetcode.com/problems/single-number/ 문제를 해결한 방법 다음 xor연산 특징을 이용...
GET으로는 Body로 Data를 보내지 못하는 것 같다. 그래서 Spring으로 @RequestBody로 body를 받을 ...
스프링의 버전이 올라가면서 생성자 방식의 DI에서 굳이 @Autowired를 쓰지 않아도, 매개변수가 Bean으...
대략 다음과 같이 연관관계가 맺어진 Order와 Delivery가 있다. (나머지 엔티티는 생략, 느낌만 확인) O...
문제 링크 : https://www.acmicpc.net/problem/2263 문제를 해결한 방법 분할 정복을 이용하여 해결했습니...
문제 링크 : https://leetcode.com/problems/valid-sudoku/ 문제를 해결한 방법 가로, 세로, 사각형을 따로...
문제 링크 : https://leetcode.com/problems/sort-colors/ 문제를 해결한 방법 값의 범위가 0~2이므로, 카...
문제 링크 : https://leetcode.com/problems/perfect-squares/ 문제를 해결한 방법 DP로 접근하면 되는 ...
문제 링크 : https://leetcode.com/problems/number-of-islands/ 문제를 해결한 방법 평범한 DFS, BF...
문제 링크 : https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/ 문제를 해결한 방...
문제 링크 : https://leetcode.com/problems/swap-salary/ 문제를 해결한 방법 update set sex = 조...
값이 없는 상황을 어떻게 처리해야하나? 다음처럼 `집`과 `주택 보험`을 갖고 있는 사...
CI/CD란 무엇인가? ︎ Continuous Intergration => 뭘 통합한다는 거야? 여러 개발자들의...
SpringBoot에서 기본적으로 jackson-databind 라이브러리가 있기 때문에 우리는 어떤 요청에 대해서 json...
환경 : Mac OS 1. 도커 설치 https://docs.docker.com/engine/install/ 2. Hello World 컨테이너 실행...
1. 모놀리스 애플리케이션에서 마이크로서비스로 전환 모놀리스 애플리케이션은 모든 것이 서로 강하게 결...
우선 쿠버네티스 자체를 깊이 파고들기 전에 먼저 컨테이너의 기본에 익숙해져야 한다. 또한 도커와 같은 ...
도커 - 컨테이너를 여러 시스템에 쉽게 이식 가능하게 하는 최초의 컨테이너 시스템 - 애플리케이션 뿐만 ...
쿠버네티스란? 컨테이너화된 애플리케이션을 쉽게 배포하고 관리할 수 있게 해주는 소프트웨어 시스템 리눅...
문제 링크 : https://www.acmicpc.net/problem/1064 문제를 해결한 방법 평행사변형을 만들 수 없는 경우는...
실행 환경 : Mac OS 쿠버네티스 클러스터를 설치하는 방법은 여러개입니다. 1. AWS EC2, Azure 등...
3년 전의 첫 키보드 레오폴드 후기 이후, 오랜만의 키보드 후기이다. 이번에 구매한 리얼포스 키보드의 정확한 제품 명은 다음과 같다. 토프레 REALFORCE for Mac 텐키레스 PFU Limited Edition 영문배열 / 슈퍼 화이트 / 블랙 all 45g 균등 R2TLSA-US4M 해외 배송으로 구매한 것이고, 약 5일 정도 소요됐다. (주말 포함해서) 가격이 참, 어마 무시하다. - - ; 오래 고민하다가 요새 타자를 너무 많이 쳐서 그런지 손가락이 너무 피로해져서 눈감고 질러버렸다. 키보드 + 뚜껑 + 배송비 = 약 45만원 정도 된다. 역시 키보드계의 샤넬인가....... 그리고 나는 키압을 45g으로 샀는데, 솔직히 키린이라서 압이 뭐고 30g은 어떻고 저소음은 어.......
서론 협업시 feautre 관리를 위해 git-flow를 활용하는데, git flow가 무엇인지, 그리고 협업시에 어떻게 활용하는지 실습해봅니다. git flow 란 무엇인가? Vincent Driessen 란 분이 2010년에 블로그에 올린 글에 의해 널리 퍼지기 시작한 git branch 관리 방법입니다. 특별한 기술은 아니고, 협업하는 사람들끼리 브랜치 관리에 대해 "우리 이렇게 브랜치 전략 짜자" 와 같은 방법론(Model)일 뿐입니다. git flow 브랜치와 그 의미 그럼, 각각의 브랜치와 의미에 대해 알아보겠습니다. master : 소프트웨어 제품을 배포하는 용도로 쓰는 브랜치 develop : 개발용 default 브랜치로, 이 브랜치를 기준으로 feature 브랜치를 따고, 각.......
하지만, 마크다운 방식 중 > 는 제공하지 않네요. 기존에 사용하던 인용구 기능을 이용하면 될 것 같습니다. 또한 `백틱`도 동작하지 않습니다. ```yml 물론: 이것도: 안됩니다: true 이거는: 네이버에서: 소스코드기능을 제공하므로: 그걸 사용하도록 하죠: true ``` | 당연히 | 이것도 | 안됩니다 | | -- | -- | -- | | 이것도 | 표 기능을 제공하니 | 그 기능을 사용하면 될 것 같습니다. | # 이것도 ## 안됩니다 --- 줄나누기도 안됩니다. 사실 다 기본 제공하고 있는 기능들이라 그런 것 같기도 합니다만, --- 로 default 구분선을 만들고, #로 상대적인 글자 크기로 변환되도록 추가해주면 좋.......
서론 정말 심플한 예제부터, 상황들을 하나씩 추가하면서 점점 고도화해보는 걸 해보려고 합니다. 이 예제에서는 매우 심플하게 로그스태시 로그 가공 작업도 없고, Spring log를 ElasticSearch로 전송하여, Kibana에서 해당 인덱스 패턴으로 로그를 확인하는 정도의 예제입니다. Logging Aggregation #1 Spring build.gradle GET, POST, PUT, DELETE와 Exception 예제 Controller logback.xml 마지막으로, INFO level의 로그만, console과 logstash로 출력하도록 지정했습니다. 이제 로그스태시 설정을 확인하려고 합니다. 기본적으로 Elasticsearch와 kibana를 구동시켜놓겠습니다. Elasticsearch.yml Kibana.yml logstash-test.conf 그리고 이.......
Tree를 이용한다. 없으면 깔아주자. 1. -L 명령어로 최대 depth를 지정한다. 이 값은 각 프로젝트에 맞게 설정한다 (ex) -L 3) 2. -I 명령어로, 특정 폴더를 제외할 것들을 적어준다. |로 연속해서 작성한다. *도 가능하다. (ex) -I "node_module | test") 3. -N 옵션을 추가하여 한글이 있는 경우 깨지지 않도록 해준다. 관련 Tree 옵션
컴퓨터를 정리한답시고, 이거 필요없어보이는 걸? ㅎㅎ 하고 지웠다가 뭔 프로그램이 안돌아가는 이슈가 생겼다. 거의 이런 에러는 dll 이 없어서 생기는 오류인데, 하나하나 설치하고 System 폴더안에 갖다 붙이자니 너무 귀찮다. 1. 여기(2015, 2017, 2019, 2022) 2. 여기 (2013) 에서, Visual C++ 재배포 가능 패키지를 설치해주자. 내가 64비트 컴퓨터라고 해서, 64비트만 다운받는게 아니라, 32비트도 다운 받아주자. 64비트 컴퓨터에서 32비트 프로그램을 실행시킬 때도 위와 같은 에러가 난다. 그럼에도 안된다면 윈도우 런타임 통합 팩을 깔아주자. 필자는 위와 같은 방법으로 해결했다.
개요 쿠버네티스 배포에서 트래픽이 파드에 도달하는 과정에 대해 정리합니다. 그리고 ingress gateway로 istio를 이용하여 트래픽 관리의 핵심인 VirtualService와 DestinationRule의 동작 원리를 알아봅니다. 사전 작업 1. 쿠버네티스 클러스터의 워커노드로 바인딩되도록 LoadBalancer의 생성(L7)하였습니다. 이때, 포트 매핑은 healthCheck를 할 수 있는 포트로 매핑해주었습니다. 2. DNS를 생성하여 이 LoadBalaner의 VIP를 지정해주었습니다. Deployment 로 ReplicaSet을 통해 Pod가 생성이 될텐데, DNS로 들어온 요청을 어떻게 해서 Pod로 Request가 도달하는지를 정리하려고 합니다. 요청의 흐름 요청 흐름은 다음과 같습니다. DNS Reque.......
문제 링크 : https://www.acmicpc.net/problem/24447 문제 해결법 오름차순 정렬을 PriorityQueue로, 방문 배열을 두어서 위의 Pseudo code를 그대로 구현했습니다.
개념적으로 예상한 그림이었지만, 직접 확인해보고 싶은 사람들을 위해 가볍게 테스트를 한 기록을 남겨보려고 합니다. Transaction이 AOP로 동작하니, 컨트롤러에서 Catch하면 롤백 여부에는 영향이 없고, Service에서 캐치하면 롤백이 일어나지 않게 할 수 있습니다. 여기서 일어나지 않게 할 수 있다라는 말은, 사실 잘못 알려진 개념도 함께 말할 수 있는데, UncheckedException은 알아서 스프링이 롤백을 해주고, checkedException은 추가적인 작업을 해야한다와 같은 2% 부족한 개념을 말하는 것입니다. 스프링 문서를 살펴보면, default로 우리가 알고 있는 uncheckedException인 RuntimeException에 대해서 rollback 처리가 되도록 구현.......
프로젝트를 하다보면, 소셜 로그인을 구현하는 경우가 많을 텐데요. 많은 소셜 로그인들 중 예제로 카카오 로그인을 구현하는 방법을 작성합니다. https://developers.kakao.com 에서 애플리케이션 등록하기 [내 애플리케이션] - [ + 버튼을 눌러 애플리케이션 추가 ] 애플리케이션 생성을 했다면, [앱 키]에서 Key를 받아볼 수 있습니다. 우리는 이 중에서 REST API 키만을 활용합니다. 그리고, 우리는 리다이렉션을 통해 키를 받아오고, 다시 요청하는 작업을 하기 때문에 [플랫폼]에서 리다이렉트를 할 주소를 적어주시면 됩니다. 예시로 localhost:3000 이나 localhost:8080을 등록해주시면 됩니다. 8080은 서버에서 토큰을 받으려고 할 때, .......
이미지 저장소로 AWS의 S3 Bucket을 이용합니다. 단건 이미지 업로드 API, 벌크 이미지 업로드 API를 만들어보겠습니다. 예제이므로, 심플한 설정으로 갑니다! AWS S3 세팅 IAM > 사용자 추가 1. 이름 지정 및 액세스 키- 프로그래밍 방식 액세스 선택 2. 기존 정책 직접 연결에서 S3FullAccess 태그는 따로 설정하지 않았습니다. 이를 통해 AccessKey와 SecretKey를 받을 수 있습니다. 이 값은 S3에 업로드할 때 업로드를 할 수 있는 계정인지 인증하는 용도로 사용합니다. S3 생성 S3 > 버킷 만들기 IAM 계정에서 사용할 수 있도록 ACL 설정을 걸어두겠습니다. 클라이언트에서 접근할 수 있도록 퍼블릭 액세스 차단을 풀어두었습니다. 그.......
서론 간단한 기능을 점검하거나, 토이 프로젝트시에 더미 데이터가 필요한 경우가 생깁니다. 물론 Front 측에서는 오늘 소개해드릴 API를 이용하여 바로 활용할 수도 있겠습니다. 그러나 Server측에서는 데이터를 가지고, 핸들링을 해보고 싶은 경우도 있을 것입니다. 이때, 데이터를 엑셀이나, 직접 데이터를 정제하여 Query를 만들어서 더미 데이터를 넣을 수도 있습니다. 하지만, 저는 너무 귀찮아서, 미리 만들어져있는 API를 이용하여 Database에 바로 넣으려고 합니다. Dummy api 소개 https://dummyapi.io/docs 우선 DummyAPI를 소개해드릴게요. 흔히들 사용하는 유저, 게시글, 댓글, 태그 와 같은 기본적인 데이터가 있습니다. 이 api를.......
DNS TTL ? 시스템 설계를 할 때, HA(High Availability)를 이루기 위해 Scaling을 하곤 합니다. 그리고 Load Balancer를 사용할 때 어느 특정 호스트가 가리키는 IP가 매번 달라지게 됩니다. 이 때 만약 DNS 캐시가 되어있으면, 새로운 주소를 반환하지 않고, 기존의 주소(캐시된 주소)만을 반환하게 됩니다. 이러면 시스템 장애로 이어지겠죠. 이를 방지하기 위한 DNS 캐시 TTL(Time To Live) 설정입니다. 그럼 제목으로 보아, JVM이 DNS 주소를 캐시하나요? JVM은 호스트 이름을 IP 주소로 확인하는 경우에 지정된 TTL (단위 : 초) 동안 IP 주소를 캐시합니다. 이 값은 60초 이하로 설정하는 것이 권장됩니다. 리소스의 IP 주소가 변경될 때, 애.......
정답이 없는 이 주제에 대해 다양한 의견을 듣곤 했었는데, 저도 스스로 생각을 정리할 겸 작성해보려고 합니다. 주관적인 생각이 가득한 글이니 가볍게 읽어주세요. DTO의 역할은 무엇인가? 클라이언트 요청에 담긴 데이터를 서버에 전달하고, 서버측의 결과를 클라이언트 응답으로 전달하는 역할을 합니다. 하지만, 비즈니스 로직은 도메인 위주로 흘러가게 되고, 비즈니스 로직의 최종 결과만 다시 DTO로 Wrapping하여 응답하고는 합니다. 요청으로 받은 데이터(RequestDTO)를 어느 Layer에서 도메인 객체로 변환하고, 또 어느 Layer에서 결과값을 ResponseDTO로 변환하는 것이 좋을까요? 데이터 처리 흐름 우리는 Client로 부터, 입력 데이터.......
문제 링크 : https://leetcode.com/problems/longest-substring-without-repeating-characters/ 문제를 해결한 방법 이 문제는, 중복되는 문자가 없으면서, 가장 긴 문자열을 찾는 문제입니다. 즉, DolphaGo도 안됩니다. DolphaG 가 중복이 없는 가장 긴 문자열(7글자)이 됩니다. 따라서, 이어진 문자열이면서, 중복이 없어야 하므로, 투 포인터를 이용했습니다. 즉, i, j 라는 변수를 주어서, i는 문자열의 좌측 끝, j는 문자열의 우측 끝을 의미하도록 두었습니다. 그리고 문자의 중복 체크는 List로도 이용해도 되긴 하지만, List의 Contains가 O(N)으로 찾기 때문에, O(1)로 조회를 하는 Set을 이용하면 시간 복잡도 측면에서 유리합니다. 따.......
이번에 하반기 데브매칭에 지원할 수 있는 회사들의 라인업이 좋더라구요. 초기엔 대부분 스타트업이었는데, 요즘은 네이버, 카카오, 라인, 쿠팡 등 대기업들도 엄청 많더군요. 지난 번 데브매칭 상반기에 간단하게 문제 해설했다가 메일로 글 내리라는 경고를 받아가지고, 문제 해설은 안하려고 합니다. (어차피 프로그래머스에 문제 올라와있는데 말이죠. 흠..=_=ㅎㅎ) 알고리즘 문제 3문제, SQL 1문제였습니다. 한 줄만 말하면 효율성 문제가 없어서 나이브하게 풀어도 다 풀린다는 것! => 구현력 초점 문제보단 오히려 핸드폰으로 모니터, 상체, 무릎 보이게 각도 맞추고, 듀얼 모니터 옷으로 덮어야 하는 그런 과정들이 더.......
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/87391 문제 설명 n행 m열의 격자가 있습니다. 격자의 각 행은 0, 1, ..., n-1번의 번호, 그리고 각 열은 0, 1, ..., m-1번의 번호가 순서대로 매겨져 있습니다. 당신은 이 격자에 공을 하나 두고, 그 공에 다음과 같은 쿼리들을 날리고자 합니다. 열 번호가 감소하는 방향으로 dx칸 이동하는 쿼리 (query(0, dx)) 열 번호가 증가하는 방향으로 dx칸 이동하는 쿼리 (query(1, dx)) 행 번호가 감소하는 방향으로 dx칸 이동하는 쿼리 (query(2, dx)) 행 번호가 증가하는 방향으로 dx칸 이동하는 쿼리 (query(3, dx)) 단, 공은 격자 바깥으로 이동할 수 없으며, 목적지가 격자 바깥.......
데이터베이스 기본 키는 다음 3가지 조건을 모두 만족해야 한다. 1. not null 2. unique 3. immutable 테이블의 기본 키를 선택하는 전략 자연키 - 비즈니스에 의미가 있는 키를 의미한다. - 예를 들면, 주민등록번호, 이메일, 핸드폰번호 등이 있다. 대리키 - 비즈니스와 관련 없는 의미가 없는 키로, 임의로 만들어지며, 대체키라고도 불린다. - 예를 들면, 오라클 시퀀스나 Auto increment, 키 생성 테이블 등이 있다. 자연 키보다는 대리키를 권장한다. - 자연키는 유일할 수는 있지만, 없을 수도 있고 변경될 수도 있다. (주민등록번호는 그럴 듯한 자연키인 것 같지만, 변할 수 있는 값이기도 하다.) - 비즈니스 환경은 언젠가 변한다. - 기.......
LINE Developer day가 2021.11.10~2021.11.11 이틀 간 진행됩니다. 2021년 11월 둘째주, 수요일/목요일입니다. 다양한 종류의 세션이 열리기 때문에 관심 있으신 분들은 참여해서 들어보는 것이 도움이 될 것 같습니다. 모든 세션을 한국어로 접할 수 있고, Kafka, Redis, Kubernetes 등 많은 세션도 준비되어 있으니 많은 참여 부탁드립니다! 등록하러 가기
서론 OutputStream을 통해 File I/O를 하던 중, Socket Broken I/O 이슈를 겪다가, JVM 메모리도 관련이 있는 것 같아 JVM모니터링을 해보고자 하였습니다. VisualVM - JVM을 실시간 모니터링할 수 있는 오픈소스 기반의 GUI 도구 - 메모리/CPU 사용률, Thread 현황 분석 가능 - 힙 덤프, 쓰레드 덤프 - 여러개의 VM을 동시에 모니터링/프로파일링 가능 VisualVM 설치 https://visualvm.github.io/download.html IntelliJ VisualVM Plugin 설치 [IntelliJ] - [Preferences] - [Plugins] 의 Marketplace에서 VisualVM Launcher를 설치해줍시다. 설치했으면, 하단의 VisualVM Launcher에서 executable에 위에서 설치한 VisualVM의 실행파일 경로를.......
kubectl 명령어를 사용하다보면, 거의 모든 명령어에서 매번 namespace를 치는 것이 귀찮게 느껴지곤 했습니다. kubectx는 다중 클러스터 사용 시 클러스터 전환을 쉽게 도와줍니다. 자매품 kubens는 namespace 전환을 쉽게 도와줍니다. 설치는 간단합니다. Mac 기준으로 작성합니다. kubectx만 깔아도, kubens 를 활용할 수 있습니다. 사용법도 간단합니다. 를 입력하면, 등록된 클러스터 목록을 확인할 수 있습니다. 만약 coffee라는 컨텍스트로 이동하고 싶다면 kubectx coffee 를 입력하면 됩니다. kubens도 동일합니다. kubens를 입력하면, 현재 클러스터에서의 네임스페이스를 확인할 수 있고, 만약 kube-system 네임스페이스 전환로 할 때.......
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/72410 문제 설명 카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로 가입하는 유저들이 카카오 아이디 규칙에 맞지 않는 아이디를 입력했을 때, 입력된 아이디와 유사하면서 규칙에 맞는 아이디를 추천해주는 프로그램을 개발하는 것입니다. 다음은 카카오 아이디의 규칙입니다. 아이디의 길이는 3자 이상 15자 이하여야 합니다. 아이디는 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.) 문자만 사용할 수 있습.......
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/72411 문제 설명 레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서 새로운 메뉴를 제공하기로 결정했습니다. 어떤 단품메뉴들을 조합해서 코스요리 메뉴로 구성하면 좋을 지 고민하던 "스카피"는 이전에 각 손님들이 주문할 때 가장 많이 함께 주문한 단품메뉴들을 코스요리 메뉴로 구성하기로 했습니다. 단, 코스요리 메뉴는 최소 2가지 이상의 단품메뉴로 구성하려고 합니다. 또한, 최소 2명 이상의 손님으로부터 주문된 단.......
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/72412 [본 문제는 정확성과 효율성 테스트 각각 점수가 있는 문제입니다.] 카카오는 하반기 경력 개발자 공개채용을 진행 중에 있으며 현재 지원서 접수와 코딩테스트가 종료되었습니다. 이번 채용에서 지원자는 지원서 작성 시 아래와 같이 4가지 항목을 반드시 선택하도록 하였습니다. 코딩테스트 참여 개발언어 항목에 cpp, java, python 중 하나를 선택해야 합니다. 지원 직군 항목에 backend와 frontend 중 하나를 선택해야 합니다. 지원 경력구분 항목에 junior와 senior 중 하나를 선택해야 합니다. 선호하는 소울푸드로 chicken과 pizza 중 하나를 선택해야 합니다. 인.......
문제 링크 : https://www.acmicpc.net/problem/9935 문제를 해결한 방법 단순 문자열 비교 문제이며, 구현 문제입니다. 알고리즘은 다음과 같습니다. 1. Buffer Array에 입력 문자를 하나씩 담는다. 2. Pattern의 길이보다 길어진다면, Buffer Array에 폭발 가능성이 있는지 체크한다. 이 때 Buffer Array의 끝에서 Pattern의 길이만큼만 체크하면 된다. 3. 폭발 가능성이 있다면 폭발 시켜버리면 된다. 4. 1-3 과정이 끝난 후 만약, BufferArray에 남은 문자가 없다면 FRULA를 출력시키고, 남은 문자가 있다면 StringBuilder에 담아서 리턴하면 된다.
자주 사용하는 변환 1. LocalDateTime 2. LocalDate 3. LocalTime offsetDateTime은 UTC(기준시간) + ZoneOffset이 이미 적용되어 있는 시간임. 가끔 볼 때마다 헷갈린다. 값을 기록해놔야지. 그나저나, 이놈의 UTC. 이게 존재하는 이유는 세계 시각이라는 것이 존재하는 이유와 같다. 그러니까 날짜와 시간이 다른 나라들 간의 데이터가 오갈 때 이런 기준이 필요하게 된다. OffsetDateTime 분석 위의 예처럼, OffsetDateTime은 다음과 같은 형태가 기본적이다. - 날짜 : yyyy-MM-dd의 형태 - T : 이 문자 뒤에는 시간이라는 것을 표현해주는 구분자 - 시간 : hh:mm:ss의 형태이며, 프로그래밍 언어에 따라 초 뒤에 소수점 형태로 milliseconds가.......
문제 링크 : https://www.acmicpc.net/problem/17069 문제를 해결한 방법 DP + DFS 로 해결했습니다. 파이프의 방향, 파이프의 끝 위치가 도달했는지에 대한 중요 단서이므로, 방향 1개, 위치 y,x가 필요하므로 3차원 배열을 만들어서 DFS + DP 를 적용해주면 됩니다.
https://twitter.com/github/status/1425505817827151872 깃허브 레포지토리에 들어가서 .을 눌러보면, 깃허브에서 제공하는 IDE가 열린다. 코드를 수정할 수도 있다. 위와 같이 email 필드를 추가한다고 가정을 해보자. 좌측에 보면 깃허브와 연동되어 있고, 커밋을 할 수 있다. 추가적으로 Extension도 제공하고, 플러그인 설치도 가능하다. VS Code와 똑같다! ㅋㅋ 그리고 CodeReview도 이걸로 할 수 있다. 해당 PR 화면에서 .을 누르면, 그 사람의 작업 내역으로 갈 수 있다. 저렇게 코멘트를 남겨놓고, 원래 PR창으로 와도 다 기록이 남아있다. 이 깃허브 IDE의 강점은 좌측에 폴더 구조와, 코드를 파일별로 확인할 수 있어서(?) 더 잘 읽힌.......
어제까지만 해도 잘 사용하던, Repository에 push가 동작하지 않았다. The requested URL returned error: 403 말 그대로 권한 없음이다. 로그를 보면, personal Access token을 사용하라는 문구가 있다. 이걸 세팅해주니 해결되었다. 1. Github - Settings 2. Setting - Developer settings - Personal access tokens 3. Token 생성 잘 보면, Expiration이 있는데, 이 만료기한에 따라 토큰의 생명이 결정된다. (필자는 매번 세팅하기 귀찮을 것 같아서 무기한으로 했다) 4. KeyChain에 세팅하자. 생성된 토큰을 복사해서, keychain 설정에서 github.com을 검색한다. 기존엔 일반적으로 Github 비밀번호로 설정되어있을 것인데, 이를 Token으로.......
BufferedReader를 맨날 알고리즘 용으로만 사용하다보니, System.in만을 알고 있었어서, input이 String으로 Application 단에서 주어질 때 이 String을 BufferedReader로 읽는 짤막한 코드.
fetch() : 리스트 조회, 데이터 없으면 빈 리스트 반환 [구현부] [사용 예시] [실행 쿼리] fetchOne() : 단건 조회 - 결과가 없으면 null 반환 - 결과가 2개 이상이면 NonUniqueResultException 반환 [구현부] [사용 예시] [실행 쿼리] fetchFirst() : 단건 조회 - limit(1).fetchOne()과 동일 - 없으면 null 반환 [구현부] [사용 예시] [실행 쿼리] fetchResults() : 페이징 포함 결과 반환 - 페이징 정보 포함 - count query 추가 실행 (즉, 쿼리가 2번 나감) - 복잡한 쿼리에서는 이 메서드로 조회했을 때 count query또한 복잡해지므로, 성능 개선을 위해서는 count query를 직접 구현하여 쿼리하는 것을 권장 [구현부] [사용 예시] [실행 쿼.......
- desc(), asc() : 일반 정렬 - nullsLast(), nullsFirst() : null 데이터 순서 부여 Case 1 (username, age) 데이터 3개가 다음과 같이 있다고 가정. 1. (null, 100) 2. ("member5", 100) 3. ("member6", 100) 그리고 다음과 같이 fetch()로 리스트를 가져올 때, 리스트에 정렬된 순서는? . . . . . . . . . . . . . . 정답 [0] : ("member5", 100) [1] : ("member6", 100) [2] : (null, 100) Case 2 (username, age) 데이터 3개가 다음과 같이 있다고 가정. 1. (null, 100) 2. ("member5", 99) 3. ("member6", 100) 그리고 다음과 같이 fetch()로 리스트를 가져올 때, 리스트에 정.......
각 테스트는 다음과 같이 데이터를 세팅한 상태로 진행합니다. 쿼리 방언은 H2를 기준입니다. 데이터 타입이 다른 여러개를 Select할 때 Tuple형이 반환되며, Tuple에서 값을 가져오려면 select시 사용한 Expression을 그대로 사용해주면 됩니다. [실행 쿼리] groupBy "각 팀의 평균 연령과 팀의 이름을 구하라" join후 groupBy, 집계함수로 구하면 됩니다. [실행 쿼리] having "각 팀의 평균 연령이 20살이 넘는 팀의 이름과, 평균 나이를 구하라" having은 Predicate(BooleanExpression)를 넣어주면 됩니다. [실행 쿼리]
서론 정말 반가운 소식!!! 입사 이후, 2주도 안지났을 때 즈음 나의 첫 PR을 담당했던 녀석이 바로 카프카였다. RabbitMQ는 경험해봤었지만, Kafka를 속성으로 공부하고 나의 Issue를 빠르게 처리하는 것이 내 입사 후 첫 임무였다. 내 코드는 바로 Production으로 들어가니, 내가 허투로 알고 사용하면 안됐다. 그건 내가 비록 짧은 개발 경험이지만, 경계해야 할 자세라고 생각하기 때문이다. 여기서 허투로 사용이라 함은 인터넷에 있는 코드를 어떻게 동작하는지도 모르고, 복사 붙여넣기로 기능 구현에만 급급한 태도를 말한다. 이러한 태도를 굉장히 경계하는 편이며, 막상 나에게 이 코드의 동작 방식을 설명하라고 했을 때 이러이러해서.......
종종 애플키보드를 사용할 때가 있습니다. 노트북은 키보드 상단의 디스플레이 때문에 간간히 fn을 사용하지만, 회사에서는 iMac인데 fn은 정말 사용하지 않아서 불편하더라구요. 뭐 예를 들면 IDE에서 control을 사용하는 단축키들이 은근히 많은데 자꾸 fn이 눌리는? ㅎㅎ 그래서 키보드를 커스텀하게 매핑할 수 있는 karabiner를 깔았습니다. 설치 설치후 karabiner를 실행시키면 다음과 같은 화면이 뜹니다. 하단의 Add item을 눌러서, fn키를 control 키로 정해줬어요. 물론 나중에 keyboard가 여러개가 된다면, devices 탭에서 키보드 별로 설정할 수도 있습니다. 그리고 애플 키보드를 보면 지우는 버튼 위에 저는 정말 쓰지 않는 자판이.......
문제 링크 : https://www.acmicpc.net/problem/4153 문제를 해결한 방법 직각삼각형의 특성을 이용하면 됩니다. 세 변을 a,b,c 그 중 c를 빗변이라고 했을 때, a^2 + b^2 = c^2를 만족하면 직각삼각형입니다.
EC2와 RDS를 연결할 때, RDS에 무지성 오픈을 멈출 때가 왔다. 테스트는 상관 없지만, 무지성 오픈은 멈춰줘야... 뭐 바이러스 심고 "복구하고 싶으면 돈 입금해라~" 이런 상황들을 주변에서 간혹 봤다. 그래, 이제 EC2를 통해서만 RDS 접근하게 하고 싶어 우리는 탄력적 IP 주소를 할당 받아서, 이를 서비스에 사용하곤 한다. 이것을 가지고 접속 경로로 활용한다던지, DNS를 매핑한다던지. 왜냐? 유동적인 IP 할당이 아닌 고정적 IP 할당이 가능하기 때문. "RDS에 가서, 이 Elastic IP만 넣어주면 되네. EC2에서만 접근 가능하게 하면 되니까! 그럼 EC2 내부에서 돌아가는 SpringBoot application의 접근에만 허용이 될거야&quo.......
AWS의 secretKey 같은 것들을 관리할 때 코드상에 노출하면 안되므로 Key/Value 저장소 같은 곳이 필요한데, 이 Vault가 그 역할을 한다. K사에서도 이걸 적극적으로 도입하고 있다는 소리를 들어서, 궁금해서 사용해봤는데 왠걸, 삽질 미쳤다. 너무 삽질을 많이해서 어디서부터 어디까지 기록해야하나 싶은데 쓰다가 보충하고 그래야겠다. 로컬 테스트 로컬에서는 간단하게 실행했다. 이걸 다음과 같이 서버를 실행시켜주고 위와 같이 VAULT_ADDR env 설정을 해주고, 로 seal 상태, vault 상태를 확인하고 계속 요청을 할 때마다 로그인하기 싫으니까 Root Token으로 로그인을 해준다. 만약 status를 확인했는데 seal되어 있다면 풀어줘야 사용.......
문제 링크 : https://www.acmicpc.net/problem/10250 문제를 해결한 방법 예외 처리를 잘 생각해줘야 하는 문제입니다. 쉽게 생각해서, 좌측 하단부터 우측 상단으로 순서대로 번호표를 매기는 것과 동일합니다. h = 3, w= 3일 때 다음과 같은 순서로 채워지게 될 것입니다. 3 6 9 2 5 8 1 4 7 대신 출력 방식은 yyxx, yxx죠. y는 층번호 그대로 출력하면 되지만, xx(방번호)는 항상 2자리를 유지해야 합니다. 우리는 쉽게 생각하여 n % h 를 이용하여 층수를 구할 수 있습니다. 물론 n % h == 0 일 때는 h층에 거주하게 됩니다. xx층 또한 쉽게 생각하면, 지금까지 몇개의 호수를 건넜나를 파악하면 되기 때문에 n / h 만큼.......
파드 상황 'default' namespace 'dolphago' namespace 'custom' namespace 이름으로 파드 삭제 kubectl delete [삭제하려는 오브젝트] [이름] 레이블 셀렉터를 이용한 파드 삭제 kubectl delete [삭제하려는 오브젝트] -l [레이블키=레이블값] 네임스페이스 전체 삭제 kubectl delete ns [삭제하려는 네임스페이스] 네임스페이스를 유지하면서 네임스페이스 안에 있는 모든 파드 삭제 kubectl delete po -all 그러나 ReplicationController나 ReplicaSet 등 파드 개수를 유지하도록 하는 컨트롤러 오브젝트들이 살아남아 있으면 파드를 계속 생성한다. 네임스페이스에서 (거의) 모든 리소스 삭제 kubectl del.......
from: 매개변수를 하나 받아서 해당 타입의 인스턴스를 반환하는 형변환 메서드 ex) Date d = Date.from(instant); of: 여러 매개변수를 받아 적합한 타입의 인스턴스를 반환하는 집계 메서드 ex) Set<Color> myColors = EnumSet.of(RED, ORANGE, GREEN); valueOf: from과 of의 더 자세한 버전 ex) BigInteger limitValue = BigInteger.valueOf(Integer.MAX_VALUE); instance, getInstance : (매개변수를 받는다면) 매개변수로 명시한 인스턴스를 반환하지만, 같은 인스턴스임을 보장하지는 않는다. ex) Member member = Member.getInstance(options); create 혹은 newInstance: instance 혹은 getInstance와 같지만, .......
아, 깜빡하고 이거 못했다 굉장히 쉬운 챌린지를 놓치다니 근데 벌써 5월!? 이게 핫한 만큼 많은 사람들의 일기가 시작되고 있다. 이웃분들은 2주까지 꾸준히 완성하시길!! 나는 소소하게 10일간 김밥 2줄을 노려본다. ㅎㅎ 짤막한 일기를 쓰자면, 평일에 불면증때문에 잠을 잘 못자서 주말에 엄청 쉬는 것 같다. ㅎㅎ; 그리고 블로그를 하는 것이 좀 줄어들었는데 반성한다(_ _)
오늘의 일기 매주 다짐하는 목표는 평일에 회사 일에 전념하고, 주말엔 밀렸던 기술 공부하기근데 왜 도메인 서버는 고쳐지질 않는 것인가dolphago.ga 언제 돌아오니마크다운으로 지금 일기 써보는 중보이는 것도 PC에서만 제대로 보이고 모바일 버전은 이상하게 보임.테마 적용이 안돼서 색감이 다 사라짐.
엥? 좀 투자해서 네이버 블로그 활성화 시키려는 것인 줄 알았는데, 예상보다 너무 핫했다고... 지금 참여 인원으로 2주까지 끌고 갔을 때 90억의 비용이 든다고 한다. 네이버 입장도 이해가 가지만, 역효과의 파장이 클 것으로 예상된다. (기획의 중요성)
지인 분이 알려주셨는데 정말 좋은 플러그인이라고 생각되어, LeetCode를 푸는 분들에게 꿀팁을 전해주고자 글을 씁니다. 바로 LeetHub 인데요. 플러그인은 여기에서 다운 받으시면 됩니다. 왜 추천하고 싶냐면, 보통은 알고리즘 문제 풀이를 한 뒤, '내가 어떤 문제를 풀었다.' 기록을 하기 위해 커밋을 하잖아요? 우리는 보통 다음과 같은 작업을 하게 됩니다. 1. '어떤 문제 사이트에서' 2. '문제 번호 몇 번' 3. '문제 이름' 4. '코드 복사' 5. '커밋 메세지 & 커밋' 6. '푸시' 위 플러그인은 이를 한 번에 자동으로 해주는 플러그인인데요. 우선 방법은 간단합.......
서비스시 SSL을 적용해야 한다거나, 13.xxx.xxx.xx 이런 고정 IP를 기억하기가 싫을 때 우리는 도메인을 찾게 됩니다. 물론 여러 유료 사이트들이 있는데요. 대략 몇 개의 사이트를 살펴봤을 때 .com, .net은 1년에 13000원, .kr은 1년에 9000원 정도로 저렴한 편에 속합니다. 그런데도, 무료로 도메인을 제공해주는 사이트가 있습니다. 바로 Freenom인데요. 물론, 여기서도 유료로 .com, .org 등을 대여해주는데요. 지금은 무료 도메인 발급 위주로 풀어볼게요. 대신 조금 "인기없는" 도메인을 무료로 제공합니다. 1. 접속 2. 도메인 이름 작성 여기서 Get it Now를 눌러서 다음 단계로 진행하면 되는데요. 버그가 있어서 누르면 다음.......
J2SE 환경에서 JPA 사용시, 개발자가 직접 Entity Manager를 생성하고, 트랜잭션도 관리해야 합니다. 하지만 Spring or J2EE 컨테이너 환경에서 JPA를 사용할 때는 이 컨테이너가 제공하는 전략을 따라야 합니다. OSIV - hibernate부터 사용하던 용어인데, JPA로 넘어오면서 Open EntityManager In View라고 하는 것이 맞을 것 같지만, 편의상 OSIV라고 합니다. - 이 세션이라는 것은, 데이터베이스 커넥션을 의미하는데요. - 쉽게 말해 OSIV는 View로 응답을 줄 때까지 커넥션을 유지하고 있을까? 의 의미입니다. - 화면이라면, 화면에 모두 데이터가 렌더링 될 때까지, API라면 완전한 데이터 응답을 줄 때까지 세션을 유지시킬 지의 의미가 됩.......
다음 세팅은 정말 기본적인 Querydsl 세팅이고, 버전이나 라이브러리 이슈에 따라서 동작하지 않을 수도 있다. 그럴 땐 구글링! build.gradle 보통 QEntity는 런타임 시점에만 필요하므로, 깃에 올리지 않는 것이 일반적. 그래서 일반적으로 .gitignore에 default로 등록된 build 파일 안으로 QEntity를 생성함 Test
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/76503 문제 설명 각 점에 가중치가 부여된 트리가 주어집니다. 당신은 다음 연산을 통하여, 이 트리의 모든 점들의 가중치를 0으로 만들고자 합니다. 임의의 연결된 두 점을 골라서 한쪽은 1 증가시키고, 다른 한쪽은 1 감소시킵니다. 하지만, 모든 트리가 위의 행동을 통하여 모든 점들의 가중치를 0으로 만들 수 있는 것은 아닙니다. 당신은 주어진 트리에 대해서 해당 사항이 가능한지 판별하고, 만약 가능하다면 최소한의 행동을 통하여 모든 점들의 가중치를 0으로 만들고자 합니다. 트리의 각 점의 가중치를 의미하는 1차원 정수 배열 a와 트리의 간선 정보를 의미하는 ed.......
Java 11을 사용 중, count()로 스트림을 종결시키면, 파이프라인이 동작할 것 같았는데 실제로는 동작하지 않았다. Stream을 타지 않고 바로 count의 개수를 출력하고 있다. 요약하면, Java 8까지는 count()가 스트림 종결함수로서 해당 스트림이 발동되지만 Java 9부터는 위와 같이 stream에서 개수에 변동을 주는 코드가 없으면, Steam을 동작시키지 않아도 stream내의 원소 개수를 구할 수 있으므로 파이프라인이 동작하지 않는다. 최종적으로 count만 바로 가져온다. 그렇지만 "아, 나는 진짜 저 로직안에 출력을 하면서 카운트도 가져오고 싶다"면 filter를 추가하면 된다. filter는 스트림을 강제한다. Reference https://docs.o.......
예를 들어 8080포트를 사용 중인 서버가 어디선가 데몬으로 계속 돌고 있는 상황이 있을 수 있다. 8080를 사용 중인 프로세스를 찾자. 그리고 pid를 찾고 해당 프로세스를 종료하면 된다. 두 번 입력하는 것이 귀찮으므로, 한방에 다음과 같이 하면 된다.
가끔 PSP 설정이 물리거나, admission controller 설정 등등 클러스터 설정이 꼬여가지고, 답답할 때가 있다. 특히 연습한다고 실습을 이것저것 하고, 정리를 안할 때? ㅎㅎ; 너무 귀찮다. 초기화 해버리려고 한다. minikube cluster 중지 종료 확인 minikube 클러스터 삭제 profile도 삭제 minikube 시작
[마약 영상]에 등극되었습니다. I'm such a good surfer 가라앉지 않기 비틀 비 비틀 거리다가 풍덩 uh 빠지더라도 구명복 따윈 졸업 I'm such a good surfer 휩쓸리지 않기 울렁 우 울렁 거리다가 throw up 게워내더라도 지는 건 난 못 참아 제일 높은 파도 올라타타 라차차우아 해일과 함께 사라질 타이밍 그건 내가 골라 무슨 소리 겁이 나기는, 재밌지 뭐 어어어 푸푸푸 또 허허허 우우우적 거거거 리더던 시 저저절 나라면 워어언 이 사람아 언제적 얘길 꺼내나 보란듯이 헤엄치기 처첨버벙 저저적 셔셔셔 또 저저적 셔셔셔 거거겁 없이 몸을 더더던 져져져 워어언 이 사람아 뭘 그렇게나 놀래나 더 재밌는 걸 보여줄게 When the .......
네임스페이스의 필요성이전에 레이블을 이용하여 오브젝트를 그룹으로 묶어봤습니다.그러나, 오브젝트가 여러 레이블을 가질 수 있기 때문에 오브젝트 그룹은 서로 겹쳐질 수 있으며, 레이블 셀렉터를 명시적으로 지정하지 않으면 항상 모든 오브젝트를 바라보게 될 것입니다.오브젝트를 겹치지 않는 그룹으로 분할하고자 할 때 네임스페이스로 그룹화할 수 있습니다.여기서 말하는 네임스페이스는 프로세스를 격리하는데 사용하는 리눅스 네임스페이스가 아닙니다.쿠버네티스 네임스페이스는 오브젝트 이름의 범위를 제공합니다.여러 네임스페이스를 활용하면 복잡한 시스템을 쪼갤 수 있다는 장점이 있습니다.즉, 큰 시스템을 쪼개어 작은.......
필자 환경 : EC2(Amazon Linux2) , Mac엔진엑스(Nginx)- 무중단 배포를 위해 많이 사용하는 웹 서버(블루 그린, L4 스위치 등을 이용한 방법도 있으나, 비쌈! 하지만 Nginx는 저렴하고 쉽다.)- 웹 서버, 리버스 프록시, 캐싱, 로드 밸런싱, 미디어 스트리밍 등을 위한 오픈 소스 소프트웨어.*리버스 프록시(Reverse Proxy)- 외부의 요청을 받아 백엔드 서버로 요청을 전달하는 행위즉, Nginx가 Client의 요청을 받아서 Server로 요청을 전달하는 방식입니다.리버스 프록시 서버(엔진엑스)는 요청을 전달만 해줄 뿐, 실제 요청에 대한 처리는 뒷단의 웹 애플리케이션 서버들이 처리합니다.엔진엑스로 무중단 배포를 구축해보자- 준비물 : .......
우선 저도 잘 모릅니다. 그저 경험한 사실을 끄적이는 목적에 있습니다.우연히 질문을 받았습니다.Inner Class(Nested Class)로는 @RequestBody로 Dto를 못 받나요?처음에 저는 이게 왜 안돼? 라고 생각이 들었는데, 예시로 보여주신 코드를 그대로 쳐보니까 어? 정말 안되더라구요.모든 요청은 다음과 같이 테스트해보겠습니다.요청 값을 ADto로 매핑해서, 입력한 대로 잘 매핑되어 출력하는지 확인하는 것입니다.[실패한 케이스] Dto는 다음과 같습니다.POST /test 로 요청을 보내보겠습니다.(다른 컨트롤러에 끼워서 테스트해본 것이라서, auth는 무시하셔도 됩니다!)[성공한 케이스] Dto는 다음과 같습니다.두 DTO의 차이점은 ADto의.......
요즘 알고리즘 문제를 거의 못 풀어서, 이런 거라도 주말에 가볍게 실력 점검이라도 해봐야겠다는 생각으로 지원했습니다.2시간이 주어지고, 화면 공유/카메라 공유를 해서 진행했습니다.반드시 핸드폰 카메라를 이용하라는 문구가 있었다고 하는데, 귀찮기도 하고, 저는 그냥 순수 감을 찾는 목적이여서 그냥 노트북 캠을 켜서 진행했어요.알고리즘 3문제, SQL 1문제였습니다.알고리즘 3문제는 따로 알고리즘이라고 할 만한 문제가 없었습니다.알고리즘이 없이, 자료구조 및 구현만으로 충분히 해결할 수 있는 문제였습니다.프로그래머스에서 시험 보는 것은 IDE를 안 쓰고 화면에서 바로바로 짜버릇해서 코드는 따로 키핑하지 못했어요.......
일반적으로 쿠버네티스 리소스는 쿠버네티스 REST API 엔드포인트에 JSON 또는 YAML manifest를 전송해서 생성합니다.이전에 간략하게 보여드렸었던 kubectl run과 같은 명령어로도 생성할 수 있지만, 설정할 수 있는 속성이 제한적입니다.실제로는 json보다는 yaml 파일을 자주 사용합니다. 아무래도 작성할 때 json에서 document를 분리하는 { }나 " " : " "도 귀찮거든요. json, yaml에 대한 설명은 여기에서 간략하게 정리해주니 가볍게 들어보시길 바랍니다!파드를 정의하는 주요 부분Metadata: 이름, 네임스페이스, 레이블 및 파드에 관한 기타 정보를 포함합니다.Spec: 파드 컨테이너, 볼륨, 기타 데이터 등.......
레이블? 라벨? 편한대로 부르는 것 같아요. 저는 레이블이라고 할게요!레이블이 필요한 이유파드를 이제 생성하는 방법을 알았고, 이전에 서비스로 사용하는 방법도 알아봤습니다.손쉽게 수 십개, 수 백개의 파드를 생성할 수 있을 것입니다.동일한 구성 요소의 여러 복사본이 복제되어서 여러 버전 혹은 Release(stable, beta, canary 등) 동시에 실행 될 것입니다.파드를 정리하는 메커니즘이 없으면 다음과 같은 파드들이 널브러져(?) 있을 것입니다.레이블(label)이란?레이블은 파드와 모든 다른 쿠버네티스 리소스를 조직화할 수 있는 단순하고 강력한 쿠버네티스 기능입니다.레이블은 리소스에 첨부하는 키-값 쌍으로, 이 쌍들은 레.......
레이블 셀렉터는 이전 포스팅처럼 파드 목록을 나열하는 것 뿐만 아니라, 파드 부분 집합에 작업을 수행할 때도 유용합니다. (예를 들어 여러 파드를 레이블 셀렉터를 이용해 한 번에 삭제한다거나..)또한 레이블 셀렉터는 우리가 입력하는 명령어인 kubectl 뿐만 아니라 내부적으로도 사용합니다.지금까지 생성한 파드들은 워커 노드 전체에 걸쳐서 무작위로 스케줄링이 되었습니다.이게 적절한 쿠버네티스에서의 동작 방식입니다.파드가 어느 노드에 스케줄링 되었느냐는 중요하지 않고, 각 파드는 요청한 만큼의 정확한 컴퓨팅 리소스(CPU, Memory 등)을 할당 받고, 쿠버네티스는 모든 노드를 하나의 대규모 배포 플랫폼으로 노출하기.......
Kubernetes에서 Annotation이 뭐죠?파드 및 다른 오브젝트들은 Label 외에 annotations를 가질 수 있습니다.Annotation은 키-값 쌍으로 레이블과 거의 비슷하지만, 식별 정보를 갖지 않습니다.레이블은 오브젝트를 묶는 데 사용할 수 있지만, 어노테이션은 그렇게 할 수 없습니다.(이전에 Label Selector를 통해 오브젝트를 입맛에 맞게 선택했었지만, Annotation Selector는 없습니다.)그럼 레이블을 쓰면 되는데, 어노테이션을 왜 써요?어노테이션은 훨씬 더 많은 정보를 보유할 수 있습니다.이 정보들은 주로 tools들에서 사용되는 정보들입니다.특정 Annotation은 Kubernetes에 의해서 자동으로 Object에 추가가 되지만,나머지 어노테이션.......
문제 링크 : https://www.acmicpc.net/problem/1011문제를 해결한 방법규칙을 찾는 문제였습니다.이 문제는 2가지 접근 방법으로 풀어봤습니다.제곱의 관점으로 접근하는 방법과, Summation으로 접근하는 방법입니다.Version 1. 제곱 접근먼저, 제곱의 관점으로 접근하는 것을 살펴보겠습니다.여기서 방법 중 하나에 주목해봅시다.sqrt(n)^2이 가장 이상적인 이동 경로가 됩니다.ex) (1), (1,2,1), (1,2,3,2,1) ... 즉 이 값들은 1, 4, 9죠.여러분들도 그림을 한 번씩 그려보면서, 점진적으로 점프했다가, 점진적으로 감소하는 베스트 상황을 떠올렸을 겁니다.그것이 바로 이 상황들인데요. 제곱근일 때 가장 이상적으로 이동할 수 있죠.그.......
자바 9로 오면서, Optional을 포함하는 스트림을 쉽게 처리할 수 있도록 Optional에 stream() 메서드가 추가되었습니다. 그래서 Optional 스트림을 값을 가진 스트림으로 변환할 때 아주 유용하게 사용할 수가 있죠.ㅎㅎ역시 코드를 보면서 이야기 하는게 좋겠네요.멤버, 팀, 구단 3개의 클래스를 가지고 예시를 들어보겠습니다.멤버와 팀은 있을 수도, 없을 수도 있지만, 클럽은 이름이 보통 있으므로 클럽은 Optional 없이 해볼게요!그리고 List<Member>로, 멤버 목록을 이용해서 속한 팀의 구단 이름 가져오는 메서드를 만들어보면 다음과 같습니다.코드를 하나하나 뜯어보도록 하죠!(0) Stream<Member>로 부터 시작합니다.......
문제 링크 : https://www.acmicpc.net/problem/2023문제를 해결한 방법DFS로 해결했습니다.값은 앞에서부터 뒤로 차곡차곡 모아주고, 검사는 앞에서부터 순서대로 n번째 수까지 합니다.그래서 저는 답으로 도출할 값(=res)와, 소수인지 판별하기 위한 수(=cur)를 구분하여 DFS로 해결했습니다. 숫자는 맨 앞에서부터 시작하므로 Math.pow(10,n-1)이 곱해질 것이며, n=0일 때까지 이 과정을 반복하면 됩니다.
문제 링크 : https://www.acmicpc.net/problem/5419문제를 해결한 방법스위핑과 세그먼트 트리로 해결했습니다.북서풍이므로, ︎ 방향으로 바람이 불죠.그러면, 항해할 수 있는 섬의 쌍을 구한다는 것은 어떤 의미일까요?첫 번째 예제를 예로 들면, 다음과 같이 5개가 한 쌍이 됩니다.그래서 정답이 5가 되죠.북서풍이라는 것은 동쪽, 남쪽으로 흘러간다는 의미잖아요?그럼 반대로, 북쪽, 서쪽으로는 이동을 못합니다.그렇기에 다음과 같은 알고리즘을 세워볼 수 있습니다.어느 한 섬에 대해서 서쪽, 북쪽, 북서쪽에 섬이 있다면, 그 섬으로 부터 현재 섬까지 한 쌍이 된다는 의미이죠.그렇다면, 섬을 각각 1개라고 표현하고, 이러한.......
문제 링크 : https://www.acmicpc.net/problem/13334문제를 해결한 방법1. 우선 데이터의 위치가 무작위로 들어오므로, s<e의 형식을 갖추도록 min, max를 이용하여 데이터를 정렬하여 입력 받습니다.2. e가 작은 것을 먼저 탐색하도록 데이터를 전체 정렬합니다.3. e-s > L 인 것을 쳐내줍시다.4. pq.peek() < e-L 보다 작다면, 철로의 범위를 벗어나므로 pop을 해줍니다. 더 이상 조건을 만족하지 않을 때까지 반복합니다. 5. s를 PriorityQueue에 add 합니다.6. 남아있는 pq.size()의 최댓값을 구합니다.
한 번 설정을 잘못 눌렀더니, 이후 부터는 새로운 프로젝트를 열 때, 현재 프로젝트를 닫고나서 열리게 되어 여러 창을 띄울 수 없었다.새로운 프로젝트를 열 때마다, 창을 새로 띄우고 싶다면 다음과 같이 해주면 된다.[Preferences] - [Appearance & Behavior] - [System Settings] - [Open project in New window] 체크
사전 준비- Github + Repository- AWS EC2(필자는 ubuntu 18.04)1. github Access Token 발급Github access Token은 Github Container Registry(이하 ghcr)로 docker image를 배포하고, runner(우리에겐 EC2) 실행 시에 docker login에 사용됩니다.다음 순서를 따라해봅시다.2. Repository에 secret 등록사전에 말했듯이, docker image를 배포하고, runner(우리에겐 EC2) 실행 시에 docker login에 사용하는 이 토큰을 해당하는 Repository에 등록을 해줘야 합니다.실제 계정 토큰이므로 노출되어서는 안됩니다. 그러므로 Secret을 이용합니다.3. Workflow (Actions)이 Repository에 push나 PR과 같은 이벤트 발생시 실행되는 동작들을 정.......
CrossOrigin을 모든 곳에서 열어두면 물론 안되지만, 개발 단계에서 CORS를 설정할 때, 컨트롤러마다 CrossOrigin("*")을 하기 귀찮으므로, WebConfig를 만들어서 WebMvcConfigurer를 implements 하여 addCorsMappings를 간단하게 구현해봤을 것입니다.이렇게 설정해놓고 개발 서버에 배포를 해보면, GET과 POST는 잘 동작하지만 PUT, DELETE를 사용하는 API에서는 다음과 같은 Invalid CORS request 이슈가 있었습니다.이 현상은 다른 PUT, DELETE Method를 사용하는 API에서 공통적으로 보였습니다.CorsRegistration class를 보면, allowMethods에 다음과 같이 구현되어 있습니다.default는 GET, HEAD, POST만 지원합니다.따로 all.......
필자 환경 : Mac OS Big Sur (Window 유저는 ssh보다 Putty로 접속하는게 편합니다.)지난번에는 EC2에 접속한 뒤에 비밀번호를 입력해서 들어갔었습니다.요약하자면, EC2를 대여받고 EC2에 pem키로 한 번은 접속을 한 뒤, 비밀번호를 설정하면 이후에도 비밀번호로 접속할 수 있는 방식이었습니다.한 서버를 여러명이 사용할 때, 한 사람이 지난 번 방식으로 접속 설정을 해두면, 다른 사람들은 pem key를 몰라도 접속할 수 있었는데요. 이번에는 조금 다릅니다. ec2로 ssh 접속하려는 컴퓨터에서 pem key를 가지고 있어야 합니다.이번에는 어찌말하면 그냥 ssh -i ~.pem host alias를 설정하는 느낌인데요.요런 방법도 있고 저런 방법도.......
https://stackoverflow.com/questions/66258552/why-is-this-condition-batch-flow-included-in-the-infinite-loop-in-the-spring-bat/66329547#66329547위와 같이 Spring Batch Flow를 악의적으로 만들어봤을 때 이해할 수 없는 상황에 대해 질문을 했었는데정말 놀랍게도, Spring Batch Team의 책임자분께서 정성스런 댓글을 달아주셨다.감동......! ㅋㅋ댓글도 보자마자 '아~ 이런 방식으로 흘러가는 구나' 하고 바로 이해가 된다.(직접 만드셔서 그런가 설명이 찰지시다...)맨날 구경만 했던 스택오버플로우에나도 첫 질문을 했고 그 첫 질문을 엄청 유명한 사람에게 답변을 받아서 기분이 좋아 기록한다.
(1) pem키로 ssh 접속귀찮다.매번 pem키 위치를 타게팅해줘야하는 것이 귀찮음!(2) 비밀번호로 접속그래서 위와 같이 비밀번호 쳐서 들어가게 바꾸려고 한다.우선은 처음은 우분투에 접속해야 하니 (1)의 방법으로 접속해주자.다음 설정을 찾아서 똑같이 바꿔주자. 핵심은 PasswordAuthentication을 yes로 만드는 것.그리고 우분투의 비밀번호를 설정해주자.나중에 key pair로 로그인하기 위해서 키페어를 복사하는 작업을 해주자.ec2에선 이미 다음 경로에 .ssh 폴더가 있으니 복사만 해주면 된다.(없는 경우엔 다음 경로에 .ssh 만드시면 됩니다.)그리고 ssh를 다시 시작!설정이 완료되었다.테스트! 인스턴스를 벗어나서(exit)easy
도커로 이것 저것 하다보면, 너무 많은 컨테이너를 띄우고 많은 이미지를 생성할 때가 있다.다 지우고 싶은데 이걸 하나하나 stop, rm, rmi를 하기엔 귀찮은 것.종속성 제거를 위해 컨테이너 중지 -> 컨테이너 삭제 -> 이미지 삭제 순으로 처리한다.실행 중인 컨테이너 목록 모두 중지하기컨테이너 목록 모두 삭제하기이미지 목록 모두 삭제그래도 reference가 걸려있는 것들 ( 쿠버네티스라던가, docker.io라던가 ...) 을 로컬에서 지우고 싶으면 --force 옵션을 추가해주면 된다.추가적인 팁으로 브랜치명 앞에 +를 붙이면 --force 옵션을 의미한다.ex) git push origin +master