adamdoha의 등록된 링크

 adamdoha로 등록된 네이버 블로그 포스트 수는 558건입니다.

[Network] 통신 프로토콜 [내부링크]

통신 프로토콜(Protocol)의 정의 서로 다른 시스템(System)에 존재하는 개체(Entity) 간의 원활한 통신...

[Network] 인터넷 주소 [내부링크]

주소(Address) 이더넷 주소(Ethernet Address, Physical Address) LAN 카드(NIC : Network ...

[Programmers] 디스크 컨트롤러 - 힙(Heap) [내부링크]

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/42627 문제 설명 하드디스크는 한 번에 ...

[Network] 인터네트워킹 (Inter + Networking) = 인터넷 (Internet) [내부링크]

인터네트워킹이란? 근거리 네트워크망 또는 광역망 간에 상호 접속시키는 제반 기법이다. 인터네트워킹 전...

[LeetCode] Single Number [내부링크]

문제 링크 : https://leetcode.com/problems/single-number/ 문제를 해결한 방법 다음 xor연산 특징을 이용...

@RequestBody 와 HTTP Get [내부링크]

GET으로는 Body로 Data를 보내지 못하는 것 같다. 그래서 Spring으로 @RequestBody로 body를 받을 ...

Test class의 생성자 방식 DI는 @Autowired가 필수?! [내부링크]

스프링의 버전이 올라가면서 생성자 방식의 DI에서 굳이 @Autowired를 쓰지 않아도, 매개변수가 Bean으...

@OneToOne 무한 참조 문제 또는 hibernateLazyInitializer 또는 byteBuddy~ 문제 [내부링크]

대략 다음과 같이 연관관계가 맺어진 Order와 Delivery가 있다. (나머지 엔티티는 생략, 느낌만 확인) O...

2263번 : 트리의 순회 [내부링크]

문제 링크 : https://www.acmicpc.net/problem/2263 문제를 해결한 방법 분할 정복을 이용하여 해결했습니...

[LeetCode] Valid Sudoku [내부링크]

문제 링크 : https://leetcode.com/problems/valid-sudoku/ 문제를 해결한 방법 가로, 세로, 사각형을 따로...

[LeetCode] Sort Colors [내부링크]

문제 링크 : https://leetcode.com/problems/sort-colors/ 문제를 해결한 방법 값의 범위가 0~2이므로, 카...

[LeetCode] Perfect Squares [내부링크]

문제 링크 : https://leetcode.com/problems/perfect-squares/ 문제를 해결한 방법 DP로 접근하면 되는 ...

[LeetCode] Number of Islands [내부링크]

문제 링크 : https://leetcode.com/problems/number-of-islands/ 문제를 해결한 방법 평범한 DFS, BF...

[LeetCode] Lowest Common Ancestor of a Binary Tree [내부링크]

문제 링크 : https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/ 문제를 해결한 방...

[LeetCode] Swap Salary [내부링크]

문제 링크 : https://leetcode.com/problems/swap-salary/ 문제를 해결한 방법 update set sex = 조...

[Java] Optional 클래스 [내부링크]

값이 없는 상황을 어떻게 처리해야하나? 다음처럼 `집`과 `주택 보험`을 갖고 있는 사...

[Jenkins] CI/CD란 무엇인가? [내부링크]

CI/CD란 무엇인가? ︎ Continuous Intergration => 뭘 통합한다는 거야? 여러 개발자들의...

[SpringBoot] REST API에서 XML, JSON 응답 형식 다르게 주기 [내부링크]

SpringBoot에서 기본적으로 jackson-databind 라이브러리가 있기 때문에 우리는 어떤 요청에 대해서 json...

[Docker] 도커 찍먹 가이드 [내부링크]

환경 : Mac OS 1. 도커 설치 https://docs.docker.com/engine/install/ 2. Hello World 컨테이너 실행...

[Kubernetes] 쿠버네티스와 같은 시스템이 필요한 이유(feat. 마이크로서비스) [내부링크]

1. 모놀리스 애플리케이션에서 마이크로서비스로 전환 모놀리스 애플리케이션은 모든 것이 서로 강하게 결...

[Kubernetes] 가상머신보다는 컨테이너 [내부링크]

우선 쿠버네티스 자체를 깊이 파고들기 전에 먼저 컨테이너의 기본에 익숙해져야 한다. 또한 도커와 같은 ...

[Kubernetes] Docker [내부링크]

도커 - 컨테이너를 여러 시스템에 쉽게 이식 가능하게 하는 최초의 컨테이너 시스템 - 애플리케이션 뿐만 ...

[Kubernetes] 쿠버네티스란? [내부링크]

쿠버네티스란? 컨테이너화된 애플리케이션을 쉽게 배포하고 관리할 수 있게 해주는 소프트웨어 시스템 리눅...

1064번 : 평행사변형 [내부링크]

문제 링크 : https://www.acmicpc.net/problem/1064 문제를 해결한 방법 평행사변형을 만들 수 없는 경우는...

[Kubernetes] 쿠버네티스 클러스터 설치 및 간단한 애플리케이션 실행하기(Minikube 편) [내부링크]

실행 환경 : Mac OS 쿠버네티스 클러스터를 설치하는 방법은 여러개입니다. 1. AWS EC2, Azure 등...

[후기] 리얼포스(Realforce) for Mac 무접점 텐키리스 45g [내부링크]

3년 전의 첫 키보드 레오폴드 후기 이후, 오랜만의 키보드 후기이다. 이번에 구매한 리얼포스 키보드의 정확한 제품 명은 다음과 같다. 토프레 REALFORCE for Mac 텐키레스 PFU Limited Edition 영문배열 / 슈퍼 화이트 / 블랙 all 45g 균등 R2TLSA-US4M 해외 배송으로 구매한 것이고, 약 5일 정도 소요됐다. (주말 포함해서) 가격이 참, 어마 무시하다. - - ; 오래 고민하다가 요새 타자를 너무 많이 쳐서 그런지 손가락이 너무 피로해져서 눈감고 질러버렸다. 키보드 + 뚜껑 + 배송비 = 약 45만원 정도 된다. 역시 키보드계의 샤넬인가....... 그리고 나는 키압을 45g으로 샀는데, 솔직히 키린이라서 압이 뭐고 30g은 어떻고 저소음은 어.......

[Gitflow] 깃플로우 브랜치 전략 [내부링크]

서론 협업시 feautre 관리를 위해 git-flow를 활용하는데, git flow가 무엇인지, 그리고 협업시에 어떻게 활용하는지 실습해봅니다. git flow 란 무엇인가? Vincent Driessen 란 분이 2010년에 블로그에 올린 글에 의해 널리 퍼지기 시작한 git branch 관리 방법입니다. 특별한 기술은 아니고, 협업하는 사람들끼리 브랜치 관리에 대해 "우리 이렇게 브랜치 전략 짜자" 와 같은 방법론(Model)일 뿐입니다. git flow 브랜치와 그 의미 그럼, 각각의 브랜치와 의미에 대해 알아보겠습니다. master : 소프트웨어 제품을 배포하는 용도로 쓰는 브랜치 develop : 개발용 default 브랜치로, 이 브랜치를 기준으로 feature 브랜치를 따고, 각.......

네이버 블로그 마크다운스러운 글 작성 가능! [내부링크]

하지만, 마크다운 방식 중 > 는 제공하지 않네요. 기존에 사용하던 인용구 기능을 이용하면 될 것 같습니다. 또한 `백틱`도 동작하지 않습니다. ```yml 물론: 이것도: 안됩니다: true 이거는: 네이버에서: 소스코드기능을 제공하므로: 그걸 사용하도록 하죠: true ``` | 당연히 | 이것도 | 안됩니다 | | -- | -- | -- | | 이것도 | 표 기능을 제공하니 | 그 기능을 사용하면 될 것 같습니다. | # 이것도 ## 안됩니다 --- 줄나누기도 안됩니다. 사실 다 기본 제공하고 있는 기능들이라 그런 것 같기도 합니다만, --- 로 default 구분선을 만들고, #로 상대적인 글자 크기로 변환되도록 추가해주면 좋.......

[Spring] ELK - 로그 수집(Logging Aggregation) # 1 [내부링크]

서론 정말 심플한 예제부터, 상황들을 하나씩 추가하면서 점점 고도화해보는 걸 해보려고 합니다. 이 예제에서는 매우 심플하게 로그스태시 로그 가공 작업도 없고, 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] 프로젝트 구조중 모듈만 싸-악 뽑아보고 싶을 때 [내부링크]

Tree를 이용한다. 없으면 깔아주자. 1. -L 명령어로 최대 depth를 지정한다. 이 값은 각 프로젝트에 맞게 설정한다 (ex) -L 3) 2. -I 명령어로, 특정 폴더를 제외할 것들을 적어준다. |로 연속해서 작성한다. *도 가능하다. (ex) -I "node_module | test") 3. -N 옵션을 추가하여 한글이 있는 경우 깨지지 않도록 해준다. 관련 Tree 옵션

[Windows] 0xc000007b 에러잡기 [내부링크]

컴퓨터를 정리한답시고, 이거 필요없어보이는 걸? ㅎㅎ 하고 지웠다가 뭔 프로그램이 안돌아가는 이슈가 생겼다. 거의 이런 에러는 dll 이 없어서 생기는 오류인데, 하나하나 설치하고 System 폴더안에 갖다 붙이자니 너무 귀찮다. 1. 여기(2015, 2017, 2019, 2022) 2. 여기 (2013) 에서, Visual C++ 재배포 가능 패키지를 설치해주자. 내가 64비트 컴퓨터라고 해서, 64비트만 다운받는게 아니라, 32비트도 다운 받아주자. 64비트 컴퓨터에서 32비트 프로그램을 실행시킬 때도 위와 같은 에러가 난다. 그럼에도 안된다면 윈도우 런타임 통합 팩을 깔아주자. 필자는 위와 같은 방법으로 해결했다.

[Kubernetes] Pod에 도달하기까지의 트래픽 관리(feat. Deployment, Service, VirtualService, DestinationRule) [내부링크]

개요 쿠버네티스 배포에서 트래픽이 파드에 도달하는 과정에 대해 정리합니다. 그리고 ingress gateway로 istio를 이용하여 트래픽 관리의 핵심인 VirtualService와 DestinationRule의 동작 원리를 알아봅니다. 사전 작업 1. 쿠버네티스 클러스터의 워커노드로 바인딩되도록 LoadBalancer의 생성(L7)하였습니다. 이때, 포트 매핑은 healthCheck를 할 수 있는 포트로 매핑해주었습니다. 2. DNS를 생성하여 이 LoadBalaner의 VIP를 지정해주었습니다. Deployment 로 ReplicaSet을 통해 Pod가 생성이 될텐데, DNS로 들어온 요청을 어떻게 해서 Pod로 Request가 도달하는지를 정리하려고 합니다. 요청의 흐름 요청 흐름은 다음과 같습니다. DNS Reque.......

24447번 : 알고리즘 수업 - 너비 우선 탐색 4 [내부링크]

문제 링크 : https://www.acmicpc.net/problem/24447 문제 해결법 오름차순 정렬을 PriorityQueue로, 방문 배열을 두어서 위의 Pseudo code를 그대로 구현했습니다.

[Spring] Transaction catch 위치에 따른 Rollback 여부 체크 [내부링크]

개념적으로 예상한 그림이었지만, 직접 확인해보고 싶은 사람들을 위해 가볍게 테스트를 한 기록을 남겨보려고 합니다. Transaction이 AOP로 동작하니, 컨트롤러에서 Catch하면 롤백 여부에는 영향이 없고, Service에서 캐치하면 롤백이 일어나지 않게 할 수 있습니다. 여기서 일어나지 않게 할 수 있다라는 말은, 사실 잘못 알려진 개념도 함께 말할 수 있는데, UncheckedException은 알아서 스프링이 롤백을 해주고, checkedException은 추가적인 작업을 해야한다와 같은 2% 부족한 개념을 말하는 것입니다. 스프링 문서를 살펴보면, default로 우리가 알고 있는 uncheckedException인 RuntimeException에 대해서 rollback 처리가 되도록 구현.......

[Spring] 소셜 로그인 구현하기 (feat. 카카오 로그인) [내부링크]

프로젝트를 하다보면, 소셜 로그인을 구현하는 경우가 많을 텐데요. 많은 소셜 로그인들 중 예제로 카카오 로그인을 구현하는 방법을 작성합니다. https://developers.kakao.com 에서 애플리케이션 등록하기 [내 애플리케이션] - [ + 버튼을 눌러 애플리케이션 추가 ] 애플리케이션 생성을 했다면, [앱 키]에서 Key를 받아볼 수 있습니다. 우리는 이 중에서 REST API 키만을 활용합니다. 그리고, 우리는 리다이렉션을 통해 키를 받아오고, 다시 요청하는 작업을 하기 때문에 [플랫폼]에서 리다이렉트를 할 주소를 적어주시면 됩니다. 예시로 localhost:3000 이나 localhost:8080을 등록해주시면 됩니다. 8080은 서버에서 토큰을 받으려고 할 때, .......

[Spring] Image upload API 구현하기 [내부링크]

이미지 저장소로 AWS의 S3 Bucket을 이용합니다. 단건 이미지 업로드 API, 벌크 이미지 업로드 API를 만들어보겠습니다. 예제이므로, 심플한 설정으로 갑니다! AWS S3 세팅 IAM > 사용자 추가 1. 이름 지정 및 액세스 키- 프로그래밍 방식 액세스 선택 2. 기존 정책 직접 연결에서 S3FullAccess 태그는 따로 설정하지 않았습니다. 이를 통해 AccessKey와 SecretKey를 받을 수 있습니다. 이 값은 S3에 업로드할 때 업로드를 할 수 있는 계정인지 인증하는 용도로 사용합니다. S3 생성 S3 > 버킷 만들기 IAM 계정에서 사용할 수 있도록 ACL 설정을 걸어두겠습니다. 클라이언트에서 접근할 수 있도록 퍼블릭 액세스 차단을 풀어두었습니다. 그.......

[Spring] Dummy api를 이용하여 데이터베이스로 더미데이터를 가져와보자. [내부링크]

서론 간단한 기능을 점검하거나, 토이 프로젝트시에 더미 데이터가 필요한 경우가 생깁니다. 물론 Front 측에서는 오늘 소개해드릴 API를 이용하여 바로 활용할 수도 있겠습니다. 그러나 Server측에서는 데이터를 가지고, 핸들링을 해보고 싶은 경우도 있을 것입니다. 이때, 데이터를 엑셀이나, 직접 데이터를 정제하여 Query를 만들어서 더미 데이터를 넣을 수도 있습니다. 하지만, 저는 너무 귀찮아서, 미리 만들어져있는 API를 이용하여 Database에 바로 넣으려고 합니다. Dummy api 소개 https://dummyapi.io/docs 우선 DummyAPI를 소개해드릴게요. 흔히들 사용하는 유저, 게시글, 댓글, 태그 와 같은 기본적인 데이터가 있습니다. 이 api를.......

JVM DNS TTL 설정 [내부링크]

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의 역할은 무엇인가? 클라이언트 요청에 담긴 데이터를 서버에 전달하고, 서버측의 결과를 클라이언트 응답으로 전달하는 역할을 합니다. 하지만, 비즈니스 로직은 도메인 위주로 흘러가게 되고, 비즈니스 로직의 최종 결과만 다시 DTO로 Wrapping하여 응답하고는 합니다. 요청으로 받은 데이터(RequestDTO)를 어느 Layer에서 도메인 객체로 변환하고, 또 어느 Layer에서 결과값을 ResponseDTO로 변환하는 것이 좋을까요? 데이터 처리 흐름 우리는 Client로 부터, 입력 데이터.......

[LeetCode] Longest Substring Without Repeating Characters [내부링크]

문제 링크 : https://leetcode.com/problems/longest-substring-without-repeating-characters/ 문제를 해결한 방법 이 문제는, 중복되는 문자가 없으면서, 가장 긴 문자열을 찾는 문제입니다. 즉, DolphaGo도 안됩니다. DolphaG 가 중복이 없는 가장 긴 문자열(7글자)이 됩니다. 따라서, 이어진 문자열이면서, 중복이 없어야 하므로, 투 포인터를 이용했습니다. 즉, i, j 라는 변수를 주어서, i는 문자열의 좌측 끝, j는 문자열의 우측 끝을 의미하도록 두었습니다. 그리고 문자의 중복 체크는 List로도 이용해도 되긴 하지만, List의 Contains가 O(N)으로 찾기 때문에, O(1)로 조회를 하는 Set을 이용하면 시간 복잡도 측면에서 유리합니다. 따.......

팔공산 정상 [내부링크]

날씨 좋고~ 넘 힘들어서 별 보면서 등산했다c

[Dev-Matching] 2021 웹 백엔드 개발자(하반기) 코딩테스트 후기 [내부링크]

이번에 하반기 데브매칭에 지원할 수 있는 회사들의 라인업이 좋더라구요. 초기엔 대부분 스타트업이었는데, 요즘은 네이버, 카카오, 라인, 쿠팡 등 대기업들도 엄청 많더군요. 지난 번 데브매칭 상반기에 간단하게 문제 해설했다가 메일로 글 내리라는 경고를 받아가지고, 문제 해설은 안하려고 합니다. (어차피 프로그래머스에 문제 올라와있는데 말이죠. 흠..=_=ㅎㅎ) 알고리즘 문제 3문제, SQL 1문제였습니다. 한 줄만 말하면 효율성 문제가 없어서 나이브하게 풀어도 다 풀린다는 것! => 구현력 초점 문제보단 오히려 핸드폰으로 모니터, 상체, 무릎 보이게 각도 맞추고, 듀얼 모니터 옷으로 덮어야 하는 그런 과정들이 더.......

[Programmers] 월간 코드 챌린지 시즌3 - 공 이동 시뮬레이션 [내부링크]

문제 링크 : 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)) 단, 공은 격자 바깥으로 이동할 수 없으며, 목적지가 격자 바깥.......

권장하는 식별자(PK) 선택 전략 [내부링크]

데이터베이스 기본 키는 다음 3가지 조건을 모두 만족해야 한다. 1. not null 2. unique 3. immutable 테이블의 기본 키를 선택하는 전략 자연키 - 비즈니스에 의미가 있는 키를 의미한다. - 예를 들면, 주민등록번호, 이메일, 핸드폰번호 등이 있다. 대리키 - 비즈니스와 관련 없는 의미가 없는 키로, 임의로 만들어지며, 대체키라고도 불린다. - 예를 들면, 오라클 시퀀스나 Auto increment, 키 생성 테이블 등이 있다. 자연 키보다는 대리키를 권장한다. - 자연키는 유일할 수는 있지만, 없을 수도 있고 변경될 수도 있다. (주민등록번호는 그럴 듯한 자연키인 것 같지만, 변할 수 있는 값이기도 하다.) - 비즈니스 환경은 언젠가 변한다. - 기.......

2021 LINE Developer day에 참여하세요~! [내부링크]

LINE Developer day가 2021.11.10~2021.11.11 이틀 간 진행됩니다. 2021년 11월 둘째주, 수요일/목요일입니다. 다양한 종류의 세션이 열리기 때문에 관심 있으신 분들은 참여해서 들어보는 것이 도움이 될 것 같습니다. 모든 세션을 한국어로 접할 수 있고, Kafka, Redis, Kubernetes 등 많은 세션도 준비되어 있으니 많은 참여 부탁드립니다! 등록하러 가기

VisualVM + IntelliJ 연동 및 사용방법 [내부링크]

서론 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의 실행파일 경로를.......

Kubectx 설치 [내부링크]

kubectl 명령어를 사용하다보면, 거의 모든 명령어에서 매번 namespace를 치는 것이 귀찮게 느껴지곤 했습니다. kubectx는 다중 클러스터 사용 시 클러스터 전환을 쉽게 도와줍니다. 자매품 kubens는 namespace 전환을 쉽게 도와줍니다. 설치는 간단합니다. Mac 기준으로 작성합니다. kubectx만 깔아도, kubens 를 활용할 수 있습니다. 사용법도 간단합니다. 를 입력하면, 등록된 클러스터 목록을 확인할 수 있습니다. 만약 coffee라는 컨텍스트로 이동하고 싶다면 kubectx coffee 를 입력하면 됩니다. kubens도 동일합니다. kubens를 입력하면, 현재 클러스터에서의 네임스페이스를 확인할 수 있고, 만약 kube-system 네임스페이스 전환로 할 때.......

[Programmers] 신규 아이디 추천 [내부링크]

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/72410 문제 설명 카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로 가입하는 유저들이 카카오 아이디 규칙에 맞지 않는 아이디를 입력했을 때, 입력된 아이디와 유사하면서 규칙에 맞는 아이디를 추천해주는 프로그램을 개발하는 것입니다. 다음은 카카오 아이디의 규칙입니다. 아이디의 길이는 3자 이상 15자 이하여야 합니다. 아이디는 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.) 문자만 사용할 수 있습.......

[Programmers] 메뉴 리뉴얼 [내부링크]

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/72411 문제 설명 레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서 새로운 메뉴를 제공하기로 결정했습니다. 어떤 단품메뉴들을 조합해서 코스요리 메뉴로 구성하면 좋을 지 고민하던 "스카피"는 이전에 각 손님들이 주문할 때 가장 많이 함께 주문한 단품메뉴들을 코스요리 메뉴로 구성하기로 했습니다. 단, 코스요리 메뉴는 최소 2가지 이상의 단품메뉴로 구성하려고 합니다. 또한, 최소 2명 이상의 손님으로부터 주문된 단.......

[Programmers] 순위 검색 [내부링크]

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/72412 [본 문제는 정확성과 효율성 테스트 각각 점수가 있는 문제입니다.] 카카오는 하반기 경력 개발자 공개채용을 진행 중에 있으며 현재 지원서 접수와 코딩테스트가 종료되었습니다. 이번 채용에서 지원자는 지원서 작성 시 아래와 같이 4가지 항목을 반드시 선택하도록 하였습니다. 코딩테스트 참여 개발언어 항목에 cpp, java, python 중 하나를 선택해야 합니다. 지원 직군 항목에 backend와 frontend 중 하나를 선택해야 합니다. 지원 경력구분 항목에 junior와 senior 중 하나를 선택해야 합니다. 선호하는 소울푸드로 chicken과 pizza 중 하나를 선택해야 합니다. 인.......

9935번 : 문자열 폭발 [내부링크]

문제 링크 : https://www.acmicpc.net/problem/9935 문제를 해결한 방법 단순 문자열 비교 문제이며, 구현 문제입니다. 알고리즘은 다음과 같습니다. 1. Buffer Array에 입력 문자를 하나씩 담는다. 2. Pattern의 길이보다 길어진다면, Buffer Array에 폭발 가능성이 있는지 체크한다. 이 때 Buffer Array의 끝에서 Pattern의 길이만큼만 체크하면 된다. 3. 폭발 가능성이 있다면 폭발 시켜버리면 된다. 4. 1-3 과정이 끝난 후 만약, BufferArray에 남은 문자가 없다면 FRULA를 출력시키고, 남은 문자가 있다면 StringBuilder에 담아서 리턴하면 된다.

[Java] OffsetDateTime to LocalDateTime [내부링크]

자주 사용하는 변환 1. LocalDateTime 2. LocalDate 3. LocalTime offsetDateTime은 UTC(기준시간) + ZoneOffset이 이미 적용되어 있는 시간임. 가끔 볼 때마다 헷갈린다. 값을 기록해놔야지. 그나저나, 이놈의 UTC. 이게 존재하는 이유는 세계 시각이라는 것이 존재하는 이유와 같다. 그러니까 날짜와 시간이 다른 나라들 간의 데이터가 오갈 때 이런 기준이 필요하게 된다. OffsetDateTime 분석 위의 예처럼, OffsetDateTime은 다음과 같은 형태가 기본적이다. - 날짜 : yyyy-MM-dd의 형태 - T : 이 문자 뒤에는 시간이라는 것을 표현해주는 구분자 - 시간 : hh:mm:ss의 형태이며, 프로그래밍 언어에 따라 초 뒤에 소수점 형태로 milliseconds가.......

17069번 : 파이프 옮기기 2 [내부링크]

문제 링크 : https://www.acmicpc.net/problem/17069 문제를 해결한 방법 DP + DFS 로 해결했습니다. 파이프의 방향, 파이프의 끝 위치가 도달했는지에 대한 중요 단서이므로, 방향 1개, 위치 y,x가 필요하므로 3차원 배열을 만들어서 DFS + DP 를 적용해주면 됩니다.

Github Repository에서의 숨은 단축키 (.) [내부링크]

https://twitter.com/github/status/1425505817827151872 깃허브 레포지토리에 들어가서 .을 눌러보면, 깃허브에서 제공하는 IDE가 열린다. 코드를 수정할 수도 있다. 위와 같이 email 필드를 추가한다고 가정을 해보자. 좌측에 보면 깃허브와 연동되어 있고, 커밋을 할 수 있다. 추가적으로 Extension도 제공하고, 플러그인 설치도 가능하다. VS Code와 똑같다! ㅋㅋ 그리고 CodeReview도 이걸로 할 수 있다. 해당 PR 화면에서 .을 누르면, 그 사람의 작업 내역으로 갈 수 있다. 저렇게 코멘트를 남겨놓고, 원래 PR창으로 와도 다 기록이 남아있다. 이 깃허브 IDE의 강점은 좌측에 폴더 구조와, 코드를 파일별로 확인할 수 있어서(?) 더 잘 읽힌.......

[Git] Support for password authentication was removed on August 13, 2021 [내부링크]

어제까지만 해도 잘 사용하던, 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으로.......

Read String using BufferedReader [내부링크]

BufferedReader를 맨날 알고리즘 용으로만 사용하다보니, System.in만을 알고 있었어서, input이 String으로 Application 단에서 주어질 때 이 String을 BufferedReader로 읽는 짤막한 코드.

[Querydsl] 결과 조회 메서드 [내부링크]

fetch() : 리스트 조회, 데이터 없으면 빈 리스트 반환 [구현부] [사용 예시] [실행 쿼리] fetchOne() : 단건 조회 - 결과가 없으면 null 반환 - 결과가 2개 이상이면 NonUniqueResultException 반환 [구현부] [사용 예시] [실행 쿼리] fetchFirst() : 단건 조회 - limit(1).fetchOne()과 동일 - 없으면 null 반환 [구현부] [사용 예시] [실행 쿼리] fetchResults() : 페이징 포함 결과 반환 - 페이징 정보 포함 - count query 추가 실행 (즉, 쿼리가 2번 나감) - 복잡한 쿼리에서는 이 메서드로 조회했을 때 count query또한 복잡해지므로, 성능 개선을 위해서는 count query를 직접 구현하여 쿼리하는 것을 권장 [구현부] [사용 예시] [실행 쿼.......

[Querydsl] 정렬 - sort [내부링크]

- 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()로 리스트를 가져올 때, 리스트에 정.......

[Querydsl] 집합(Tuple) - groupBy, having [내부링크]

각 테스트는 다음과 같이 데이터를 세팅한 상태로 진행합니다. 쿼리 방언은 H2를 기준입니다. 데이터 타입이 다른 여러개를 Select할 때 Tuple형이 반환되며, Tuple에서 값을 가져오려면 select시 사용한 Expression을 그대로 사용해주면 됩니다. [실행 쿼리] groupBy "각 팀의 평균 연령과 팀의 이름을 구하라" join후 groupBy, 집계함수로 구하면 됩니다. [실행 쿼리] having "각 팀의 평균 연령이 20살이 넘는 팀의 이름과, 평균 나이를 구하라" having은 Predicate(BooleanExpression)를 넣어주면 됩니다. [실행 쿼리]

[후기] 아파치 카프카 애플리케이션 프로그래밍 [내부링크]

서론 정말 반가운 소식!!! 입사 이후, 2주도 안지났을 때 즈음 나의 첫 PR을 담당했던 녀석이 바로 카프카였다. RabbitMQ는 경험해봤었지만, Kafka를 속성으로 공부하고 나의 Issue를 빠르게 처리하는 것이 내 입사 후 첫 임무였다. 내 코드는 바로 Production으로 들어가니, 내가 허투로 알고 사용하면 안됐다. 그건 내가 비록 짧은 개발 경험이지만, 경계해야 할 자세라고 생각하기 때문이다. 여기서 허투로 사용이라 함은 인터넷에 있는 코드를 어떻게 동작하는지도 모르고, 복사 붙여넣기로 기능 구현에만 급급한 태도를 말한다. 이러한 태도를 굉장히 경계하는 편이며, 막상 나에게 이 코드의 동작 방식을 설명하라고 했을 때 이러이러해서.......

[MacOS] 키보드 자판을 커스텀해보자 - karabiner [내부링크]

종종 애플키보드를 사용할 때가 있습니다. 노트북은 키보드 상단의 디스플레이 때문에 간간히 fn을 사용하지만, 회사에서는 iMac인데 fn은 정말 사용하지 않아서 불편하더라구요. 뭐 예를 들면 IDE에서 control을 사용하는 단축키들이 은근히 많은데 자꾸 fn이 눌리는? ㅎㅎ 그래서 키보드를 커스텀하게 매핑할 수 있는 karabiner를 깔았습니다. 설치 설치후 karabiner를 실행시키면 다음과 같은 화면이 뜹니다. 하단의 Add item을 눌러서, fn키를 control 키로 정해줬어요. 물론 나중에 keyboard가 여러개가 된다면, devices 탭에서 키보드 별로 설정할 수도 있습니다. 그리고 애플 키보드를 보면 지우는 버튼 위에 저는 정말 쓰지 않는 자판이.......

4153번 : 직각삼각형 [내부링크]

문제 링크 : https://www.acmicpc.net/problem/4153 문제를 해결한 방법 직각삼각형의 특성을 이용하면 됩니다. 세 변을 a,b,c 그 중 c를 빗변이라고 했을 때, a^2 + b^2 = c^2를 만족하면 직각삼각형입니다.

[AWS] EC2에 배포한 SpringBoot Application과 RDS를 연결할 때(Communications link failure) [내부링크]

EC2와 RDS를 연결할 때, RDS에 무지성 오픈을 멈출 때가 왔다. 테스트는 상관 없지만, 무지성 오픈은 멈춰줘야... 뭐 바이러스 심고 "복구하고 싶으면 돈 입금해라~" 이런 상황들을 주변에서 간혹 봤다. 그래, 이제 EC2를 통해서만 RDS 접근하게 하고 싶어 우리는 탄력적 IP 주소를 할당 받아서, 이를 서비스에 사용하곤 한다. 이것을 가지고 접속 경로로 활용한다던지, DNS를 매핑한다던지. 왜냐? 유동적인 IP 할당이 아닌 고정적 IP 할당이 가능하기 때문. "RDS에 가서, 이 Elastic IP만 넣어주면 되네. EC2에서만 접근 가능하게 하면 되니까! 그럼 EC2 내부에서 돌아가는 SpringBoot application의 접근에만 허용이 될거야&quo.......

[Vault] log.debug("삽질") [내부링크]

AWS의 secretKey 같은 것들을 관리할 때 코드상에 노출하면 안되므로 Key/Value 저장소 같은 곳이 필요한데, 이 Vault가 그 역할을 한다. K사에서도 이걸 적극적으로 도입하고 있다는 소리를 들어서, 궁금해서 사용해봤는데 왠걸, 삽질 미쳤다. 너무 삽질을 많이해서 어디서부터 어디까지 기록해야하나 싶은데 쓰다가 보충하고 그래야겠다. 로컬 테스트 로컬에서는 간단하게 실행했다. 이걸 다음과 같이 서버를 실행시켜주고 위와 같이 VAULT_ADDR env 설정을 해주고, 로 seal 상태, vault 상태를 확인하고 계속 요청을 할 때마다 로그인하기 싫으니까 Root Token으로 로그인을 해준다. 만약 status를 확인했는데 seal되어 있다면 풀어줘야 사용.......

10250번 : ACM 호텔 [내부링크]

문제 링크 : 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 만큼.......

[Kubernetes] 파드 중지와 제거 [내부링크]

파드 상황 'default' namespace 'dolphago' namespace 'custom' namespace 이름으로 파드 삭제 kubectl delete [삭제하려는 오브젝트] [이름] 레이블 셀렉터를 이용한 파드 삭제 kubectl delete [삭제하려는 오브젝트] -l [레이블키=레이블값] 네임스페이스 전체 삭제 kubectl delete ns [삭제하려는 네임스페이스] 네임스페이스를 유지하면서 네임스페이스 안에 있는 모든 파드 삭제 kubectl delete po -all 그러나 ReplicationController나 ReplicaSet 등 파드 개수를 유지하도록 하는 컨트롤러 오브젝트들이 살아남아 있으면 파드를 계속 생성한다. 네임스페이스에서 (거의) 모든 리소스 삭제 kubectl del.......

[Java] Static Factory Method Naming Convention [내부링크]

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와 같지만, .......

[오늘일기] Day1을 못했다. 10000원 GoodBye [내부링크]

아, 깜빡하고 이거 못했다 굉장히 쉬운 챌린지를 놓치다니 근데 벌써 5월!? 이게 핫한 만큼 많은 사람들의 일기가 시작되고 있다. 이웃분들은 2주까지 꾸준히 완성하시길!! 나는 소소하게 10일간 김밥 2줄을 노려본다. ㅎㅎ 짤막한 일기를 쓰자면, 평일에 불면증때문에 잠을 잘 못자서 주말에 엄청 쉬는 것 같다. ㅎㅎ; 그리고 블로그를 하는 것이 좀 줄어들었는데 반성한다(_ _)

[오늘일기] 네이버 블로그 마크다운 테스트 [내부링크]

오늘의 일기 매주 다짐하는 목표는 평일에 회사 일에 전념하고, 주말엔 밀렸던 기술 공부하기근데 왜 도메인 서버는 고쳐지질 않는 것인가dolphago.ga 언제 돌아오니마크다운으로 지금 일기 써보는 중보이는 것도 PC에서만 제대로 보이고 모바일 버전은 이상하게 보임.테마 적용이 안돼서 색감이 다 사라짐.

[네이버 블로그 챌린지] 알고보니 작심삼일 챌린지 [내부링크]

엥? 좀 투자해서 네이버 블로그 활성화 시키려는 것인 줄 알았는데, 예상보다 너무 핫했다고... 지금 참여 인원으로 2주까지 끌고 갔을 때 90억의 비용이 든다고 한다. 네이버 입장도 이해가 가지만, 역효과의 파장이 클 것으로 예상된다. (기획의 중요성)

LeetCode와 Github 연동하기 [내부링크]

지인 분이 알려주셨는데 정말 좋은 플러그인이라고 생각되어, 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를 눌러서 다음 단계로 진행하면 되는데요. 버그가 있어서 누르면 다음.......

[JPA] Spring OSIV [내부링크]

J2SE 환경에서 JPA 사용시, 개발자가 직접 Entity Manager를 생성하고, 트랜잭션도 관리해야 합니다. 하지만 Spring or J2EE 컨테이너 환경에서 JPA를 사용할 때는 이 컨테이너가 제공하는 전략을 따라야 합니다. OSIV - hibernate부터 사용하던 용어인데, JPA로 넘어오면서 Open EntityManager In View라고 하는 것이 맞을 것 같지만, 편의상 OSIV라고 합니다. - 이 세션이라는 것은, 데이터베이스 커넥션을 의미하는데요. - 쉽게 말해 OSIV는 View로 응답을 줄 때까지 커넥션을 유지하고 있을까? 의 의미입니다. - 화면이라면, 화면에 모두 데이터가 렌더링 될 때까지, API라면 완전한 데이터 응답을 줄 때까지 세션을 유지시킬 지의 의미가 됩.......

[Querydsl] 기본 Project Setting [내부링크]

다음 세팅은 정말 기본적인 Querydsl 세팅이고, 버전이나 라이브러리 이슈에 따라서 동작하지 않을 수도 있다. 그럴 땐 구글링! build.gradle 보통 QEntity는 런타임 시점에만 필요하므로, 깃에 올리지 않는 것이 일반적. 그래서 일반적으로 .gitignore에 default로 등록된 build 파일 안으로 QEntity를 생성함 Test

[Querydsl] 검색 조건 쿼리 메서드 [내부링크]

querydsl에서 제공하는 메서드가 엄청 많지만, 자주 사용하는 것들 모음 사용 예 실행된 쿼리

[Programmers] 월간 코드 챌린지 시즌2 : 모두 0으로 만들기 [내부링크]

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/76503 문제 설명 각 점에 가중치가 부여된 트리가 주어집니다. 당신은 다음 연산을 통하여, 이 트리의 모든 점들의 가중치를 0으로 만들고자 합니다. 임의의 연결된 두 점을 골라서 한쪽은 1 증가시키고, 다른 한쪽은 1 감소시킵니다. 하지만, 모든 트리가 위의 행동을 통하여 모든 점들의 가중치를 0으로 만들 수 있는 것은 아닙니다. 당신은 주어진 트리에 대해서 해당 사항이 가능한지 판별하고, 만약 가능하다면 최소한의 행동을 통하여 모든 점들의 가중치를 0으로 만들고자 합니다. 트리의 각 점의 가중치를 의미하는 1차원 정수 배열 a와 트리의 간선 정보를 의미하는 ed.......

[Java9+] count()가 Stream Terminal operation이 아니다!? [내부링크]

Java 11을 사용 중, count()로 스트림을 종결시키면, 파이프라인이 동작할 것 같았는데 실제로는 동작하지 않았다. Stream을 타지 않고 바로 count의 개수를 출력하고 있다. 요약하면, Java 8까지는 count()가 스트림 종결함수로서 해당 스트림이 발동되지만 Java 9부터는 위와 같이 stream에서 개수에 변동을 주는 코드가 없으면, Steam을 동작시키지 않아도 stream내의 원소 개수를 구할 수 있으므로 파이프라인이 동작하지 않는다. 최종적으로 count만 바로 가져온다. 그렇지만 "아, 나는 진짜 저 로직안에 출력을 하면서 카운트도 가져오고 싶다"면 filter를 추가하면 된다. filter는 스트림을 강제한다. Reference https://docs.o.......

[Mac] Port 충돌이 날 때 [내부링크]

예를 들어 8080포트를 사용 중인 서버가 어디선가 데몬으로 계속 돌고 있는 상황이 있을 수 있다. 8080를 사용 중인 프로세스를 찾자. 그리고 pid를 찾고 해당 프로세스를 종료하면 된다. 두 번 입력하는 것이 귀찮으므로, 한방에 다음과 같이 하면 된다.

[Minikube] 초기화 [내부링크]

가끔 PSP 설정이 물리거나, admission controller 설정 등등 클러스터 설정이 꼬여가지고, 답답할 때가 있다. 특히 연습한다고 실습을 이것저것 하고, 정리를 안할 때? ㅎㅎ; 너무 귀찮다. 초기화 해버리려고 한다. minikube cluster 중지 종료 확인 minikube 클러스터 삭제 profile도 삭제 minikube 시작

[Music] 어푸(Ah puh) - IU [내부링크]

[마약 영상]에 등극되었습니다. I'm such a good surfer 가라앉지 않기 비틀 비 비틀 거리다가 풍덩 uh 빠지더라도 구명복 따윈 졸업 I'm such a good surfer 휩쓸리지 않기 울렁 우 울렁 거리다가 throw up 게워내더라도 지는 건 난 못 참아 제일 높은 파도 올라타타 라차차우아 해일과 함께 사라질 타이밍 그건 내가 골라 무슨 소리 겁이 나기는, 재밌지 뭐 어어어 푸푸푸 또 허허허 우우우적 거거거 리더던 시 저저절 나라면 워어언 이 사람아 언제적 얘길 꺼내나 보란듯이 헤엄치기 처첨버벙 저저적 셔셔셔 또 저저적 셔셔셔 거거겁 없이 몸을 더더던 져져져 워어언 이 사람아 뭘 그렇게나 놀래나 더 재밌는 걸 보여줄게 When the .......

[Kubernetes] 네임스페이스(namespace) [내부링크]

네임스페이스의 필요성이전에 레이블을 이용하여 오브젝트를 그룹으로 묶어봤습니다.그러나, 오브젝트가 여러 레이블을 가질 수 있기 때문에 오브젝트 그룹은 서로 겹쳐질 수 있으며, 레이블 셀렉터를 명시적으로 지정하지 않으면 항상 모든 오브젝트를 바라보게 될 것입니다.오브젝트를 겹치지 않는 그룹으로 분할하고자 할 때 네임스페이스로 그룹화할 수 있습니다.여기서 말하는 네임스페이스는 프로세스를 격리하는데 사용하는 리눅스 네임스페이스가 아닙니다.쿠버네티스 네임스페이스는 오브젝트 이름의 범위를 제공합니다.여러 네임스페이스를 활용하면 복잡한 시스템을 쪼갤 수 있다는 장점이 있습니다.즉, 큰 시스템을 쪼개어 작은.......

[Nginx] 엔진엑스 찍먹하기 [내부링크]

필자 환경 : EC2(Amazon Linux2) , Mac엔진엑스(Nginx)- 무중단 배포를 위해 많이 사용하는 웹 서버(블루 그린, L4 스위치 등을 이용한 방법도 있으나, 비쌈! 하지만 Nginx는 저렴하고 쉽다.)- 웹 서버, 리버스 프록시, 캐싱, 로드 밸런싱, 미디어 스트리밍 등을 위한 오픈 소스 소프트웨어.*리버스 프록시(Reverse Proxy)- 외부의 요청을 받아 백엔드 서버로 요청을 전달하는 행위즉, Nginx가 Client의 요청을 받아서 Server로 요청을 전달하는 방식입니다.리버스 프록시 서버(엔진엑스)는 요청을 전달만 해줄 뿐, 실제 요청에 대한 처리는 뒷단의 웹 애플리케이션 서버들이 처리합니다.엔진엑스로 무중단 배포를 구축해보자- 준비물 : .......

[Lombok] Getter, Setter naming convention issue [내부링크]

우선 저도 잘 모릅니다. 그저 경험한 사실을 끄적이는 목적에 있습니다.우연히 질문을 받았습니다.Inner Class(Nested Class)로는 @RequestBody로 Dto를 못 받나요?처음에 저는 이게 왜 안돼? 라고 생각이 들었는데, 예시로 보여주신 코드를 그대로 쳐보니까 어? 정말 안되더라구요.모든 요청은 다음과 같이 테스트해보겠습니다.요청 값을 ADto로 매핑해서, 입력한 대로 잘 매핑되어 출력하는지 확인하는 것입니다.[실패한 케이스] Dto는 다음과 같습니다.POST /test 로 요청을 보내보겠습니다.(다른 컨트롤러에 끼워서 테스트해본 것이라서, auth는 무시하셔도 됩니다!)[성공한 케이스] Dto는 다음과 같습니다.두 DTO의 차이점은 ADto의.......

[Dev-Matching] 웹 백앤드 개발자 코딩테스트 후기 [내부링크]

요즘 알고리즘 문제를 거의 못 풀어서, 이런 거라도 주말에 가볍게 실력 점검이라도 해봐야겠다는 생각으로 지원했습니다.2시간이 주어지고, 화면 공유/카메라 공유를 해서 진행했습니다.반드시 핸드폰 카메라를 이용하라는 문구가 있었다고 하는데, 귀찮기도 하고, 저는 그냥 순수 감을 찾는 목적이여서 그냥 노트북 캠을 켜서 진행했어요.알고리즘 3문제, SQL 1문제였습니다.알고리즘 3문제는 따로 알고리즘이라고 할 만한 문제가 없었습니다.알고리즘이 없이, 자료구조 및 구현만으로 충분히 해결할 수 있는 문제였습니다.프로그래머스에서 시험 보는 것은 IDE를 안 쓰고 화면에서 바로바로 짜버릇해서 코드는 따로 키핑하지 못했어요.......

[Kubernetes] yaml로 파드 생성하기 [내부링크]

일반적으로 쿠버네티스 리소스는 쿠버네티스 REST API 엔드포인트에 JSON 또는 YAML manifest를 전송해서 생성합니다.이전에 간략하게 보여드렸었던 kubectl run과 같은 명령어로도 생성할 수 있지만, 설정할 수 있는 속성이 제한적입니다.실제로는 json보다는 yaml 파일을 자주 사용합니다. 아무래도 작성할 때 json에서 document를 분리하는 { }나 " " : " "도 귀찮거든요. json, yaml에 대한 설명은 여기에서 간략하게 정리해주니 가볍게 들어보시길 바랍니다!파드를 정의하는 주요 부분Metadata: 이름, 네임스페이스, 레이블 및 파드에 관한 기타 정보를 포함합니다.Spec: 파드 컨테이너, 볼륨, 기타 데이터 등.......

[Kubernetes] 레이블(label)로 파드를 구성해보자 [내부링크]

레이블? 라벨? 편한대로 부르는 것 같아요. 저는 레이블이라고 할게요!레이블이 필요한 이유파드를 이제 생성하는 방법을 알았고, 이전에 서비스로 사용하는 방법도 알아봤습니다.손쉽게 수 십개, 수 백개의 파드를 생성할 수 있을 것입니다.동일한 구성 요소의 여러 복사본이 복제되어서 여러 버전 혹은 Release(stable, beta, canary 등) 동시에 실행 될 것입니다.파드를 정리하는 메커니즘이 없으면 다음과 같은 파드들이 널브러져(?) 있을 것입니다.레이블(label)이란?레이블은 파드와 모든 다른 쿠버네티스 리소스를 조직화할 수 있는 단순하고 강력한 쿠버네티스 기능입니다.레이블은 리소스에 첨부하는 키-값 쌍으로, 이 쌍들은 레.......

[Kubernetes] 레이블 셀렉터(Label Selector) [내부링크]

레이블 셀렉터는 이전 포스팅처럼 파드 목록을 나열하는 것 뿐만 아니라, 파드 부분 집합에 작업을 수행할 때도 유용합니다. (예를 들어 여러 파드를 레이블 셀렉터를 이용해 한 번에 삭제한다거나..)또한 레이블 셀렉터는 우리가 입력하는 명령어인 kubectl 뿐만 아니라 내부적으로도 사용합니다.지금까지 생성한 파드들은 워커 노드 전체에 걸쳐서 무작위로 스케줄링이 되었습니다.이게 적절한 쿠버네티스에서의 동작 방식입니다.파드가 어느 노드에 스케줄링 되었느냐는 중요하지 않고, 각 파드는 요청한 만큼의 정확한 컴퓨팅 리소스(CPU, Memory 등)을 할당 받고, 쿠버네티스는 모든 노드를 하나의 대규모 배포 플랫폼으로 노출하기.......

[Kubernetes] 어노테이션(Annotations) [내부링크]

Kubernetes에서 Annotation이 뭐죠?파드 및 다른 오브젝트들은 Label 외에 annotations를 가질 수 있습니다.Annotation은 키-값 쌍으로 레이블과 거의 비슷하지만, 식별 정보를 갖지 않습니다.레이블은 오브젝트를 묶는 데 사용할 수 있지만, 어노테이션은 그렇게 할 수 없습니다.(이전에 Label Selector를 통해 오브젝트를 입맛에 맞게 선택했었지만, Annotation Selector는 없습니다.)그럼 레이블을 쓰면 되는데, 어노테이션을 왜 써요?어노테이션은 훨씬 더 많은 정보를 보유할 수 있습니다.이 정보들은 주로 tools들에서 사용되는 정보들입니다.특정 Annotation은 Kubernetes에 의해서 자동으로 Object에 추가가 되지만,나머지 어노테이션.......

1011번 : Fly me to the Alpha Centauri [내부링크]

문제 링크 : 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죠.여러분들도 그림을 한 번씩 그려보면서, 점진적으로 점프했다가, 점진적으로 감소하는 베스트 상황을 떠올렸을 겁니다.그것이 바로 이 상황들인데요. 제곱근일 때 가장 이상적으로 이동할 수 있죠.그.......

[Java] Optional Stream 값 꺼내쓰는 방법(unwrap) [내부링크]

자바 9로 오면서, Optional을 포함하는 스트림을 쉽게 처리할 수 있도록 Optional에 stream() 메서드가 추가되었습니다. 그래서 Optional 스트림을 값을 가진 스트림으로 변환할 때 아주 유용하게 사용할 수가 있죠.ㅎㅎ역시 코드를 보면서 이야기 하는게 좋겠네요.멤버, 팀, 구단 3개의 클래스를 가지고 예시를 들어보겠습니다.멤버와 팀은 있을 수도, 없을 수도 있지만, 클럽은 이름이 보통 있으므로 클럽은 Optional 없이 해볼게요!그리고 List<Member>로, 멤버 목록을 이용해서 속한 팀의 구단 이름 가져오는 메서드를 만들어보면 다음과 같습니다.코드를 하나하나 뜯어보도록 하죠!(0) Stream<Member>로 부터 시작합니다.......

2023번 : 신기한 소수 [내부링크]

문제 링크 : https://www.acmicpc.net/problem/2023문제를 해결한 방법DFS로 해결했습니다.값은 앞에서부터 뒤로 차곡차곡 모아주고, 검사는 앞에서부터 순서대로 n번째 수까지 합니다.그래서 저는 답으로 도출할 값(=res)와, 소수인지 판별하기 위한 수(=cur)를 구분하여 DFS로 해결했습니다. 숫자는 맨 앞에서부터 시작하므로 Math.pow(10,n-1)이 곱해질 것이며, n=0일 때까지 이 과정을 반복하면 됩니다.

5419번 : 북서풍 [내부링크]

문제 링크 : https://www.acmicpc.net/problem/5419문제를 해결한 방법스위핑과 세그먼트 트리로 해결했습니다.북서풍이므로, ︎ 방향으로 바람이 불죠.그러면, 항해할 수 있는 섬의 쌍을 구한다는 것은 어떤 의미일까요?첫 번째 예제를 예로 들면, 다음과 같이 5개가 한 쌍이 됩니다.그래서 정답이 5가 되죠.북서풍이라는 것은 동쪽, 남쪽으로 흘러간다는 의미잖아요?그럼 반대로, 북쪽, 서쪽으로는 이동을 못합니다.그렇기에 다음과 같은 알고리즘을 세워볼 수 있습니다.어느 한 섬에 대해서 서쪽, 북쪽, 북서쪽에 섬이 있다면, 그 섬으로 부터 현재 섬까지 한 쌍이 된다는 의미이죠.그렇다면, 섬을 각각 1개라고 표현하고, 이러한.......

13334번 : 철로 [내부링크]

문제 링크 : 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()의 최댓값을 구합니다.

인텔리제이(intelliJ) 창 여러개 띄우기 [내부링크]

한 번 설정을 잘못 눌렀더니, 이후 부터는 새로운 프로젝트를 열 때, 현재 프로젝트를 닫고나서 열리게 되어 여러 창을 띄울 수 없었다.새로운 프로젝트를 열 때마다, 창을 새로 띄우고 싶다면 다음과 같이 해주면 된다.[Preferences] - [Appearance & Behavior] - [System Settings] - [Open project in New window] 체크

[Github Actions] AWS EC2에 CI/CD를 해보자 [내부링크]

사전 준비- 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과 같은 이벤트 발생시 실행되는 동작들을 정.......

[Spring] PUT, DELETE 403 Issue(Invalid CORS request) [내부링크]

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.......

[AWS EC2] .ssh 설정으로 간단하게 ssh 접속하기 [내부링크]

필자 환경 : Mac OS Big Sur (Window 유저는 ssh보다 Putty로 접속하는게 편합니다.)지난번에는 EC2에 접속한 뒤에 비밀번호를 입력해서 들어갔었습니다.요약하자면, EC2를 대여받고 EC2에 pem키로 한 번은 접속을 한 뒤, 비밀번호를 설정하면 이후에도 비밀번호로 접속할 수 있는 방식이었습니다.한 서버를 여러명이 사용할 때, 한 사람이 지난 번 방식으로 접속 설정을 해두면, 다른 사람들은 pem key를 몰라도 접속할 수 있었는데요. 이번에는 조금 다릅니다. ec2로 ssh 접속하려는 컴퓨터에서 pem key를 가지고 있어야 합니다.이번에는 어찌말하면 그냥 ssh -i ~.pem host alias를 설정하는 느낌인데요.요런 방법도 있고 저런 방법도.......

[StackOverFlow] Spring Batch Team Leader에게 답변을 받았다! [내부링크]

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의 책임자분께서 정성스런 댓글을 달아주셨다.감동......! ㅋㅋ댓글도 보자마자 '아~ 이런 방식으로 흘러가는 구나' 하고 바로 이해가 된다.(직접 만드셔서 그런가 설명이 찰지시다...)맨날 구경만 했던 스택오버플로우에나도 첫 질문을 했고 그 첫 질문을 엄청 유명한 사람에게 답변을 받아서 기분이 좋아 기록한다.

[AWS EC2] ubuntu 귀찮은 pem키 접속 말고 password로 접속하기 [내부링크]

(1) pem키로 ssh 접속귀찮다.매번 pem키 위치를 타게팅해줘야하는 것이 귀찮음!(2) 비밀번호로 접속그래서 위와 같이 비밀번호 쳐서 들어가게 바꾸려고 한다.우선은 처음은 우분투에 접속해야 하니 (1)의 방법으로 접속해주자.다음 설정을 찾아서 똑같이 바꿔주자. 핵심은 PasswordAuthentication을 yes로 만드는 것.그리고 우분투의 비밀번호를 설정해주자.나중에 key pair로 로그인하기 위해서 키페어를 복사하는 작업을 해주자.ec2에선 이미 다음 경로에 .ssh 폴더가 있으니 복사만 해주면 된다.(없는 경우엔 다음 경로에 .ssh 만드시면 됩니다.)그리고 ssh를 다시 시작!설정이 완료되었다.테스트! 인스턴스를 벗어나서(exit)easy

[Docker] 컨테이너, 이미지 한 번에 삭제하기 [내부링크]

도커로 이것 저것 하다보면, 너무 많은 컨테이너를 띄우고 많은 이미지를 생성할 때가 있다.다 지우고 싶은데 이걸 하나하나 stop, rm, rmi를 하기엔 귀찮은 것.종속성 제거를 위해 컨테이너 중지 -> 컨테이너 삭제 -> 이미지 삭제 순으로 처리한다.실행 중인 컨테이너 목록 모두 중지하기컨테이너 목록 모두 삭제하기이미지 목록 모두 삭제그래도 reference가 걸려있는 것들 ( 쿠버네티스라던가, docker.io라던가 ...) 을 로컬에서 지우고 싶으면 --force 옵션을 추가해주면 된다.추가적인 팁으로 브랜치명 앞에 +를 붙이면 --force 옵션을 의미한다.ex) git push origin +master

[Mac] 확장자 기본 프로그램 설정 [내부링크]

상황 : Xcode를 깔았는데, 그 다음부터 항상 markdown(.md) 기본 프로그램이 Xcode로 열리게 됐다. 뭐 어디 들어가서 설정하고 그랬는데 다음날 보면 또 Xcode로 열리고 그런다.맥린이라서 이거 어디서 설정해야 디폴트로 되는지 몰랐는데, 확실한 방법을 알게 되어 기록한다.우선 기본 프로그램을 지정할 파일 오른쪽 클릭 -> 정보 가져오기중간에 보면 다음으로 열기가 있다.원하는 프로그램으로 설정 후 모두 변경을 눌러준다.계속다음과 같이 기본으로 설정되고, 이후에도 모든 md파일은 Typora 프로그램으로 열리게 된다.

[글귀] 록키 명대사 [내부링크]

인생이란 건 결국 난타전이야네가 얼마나 센 펀치를 날리는가가 아니라네가 끝없이 맞아가면서도조금씩 앞으로 전진하며하나씩 얻어가는게 중요한거야계속 전진하면서 말야그게 진정한 승리야

[Kubernetes] 파드, 컨테이너, 레플리케이션컨트롤러, 서비스가 서로 동작하는 방식 [내부링크]

시나리오Json이나 Yaml 파일 없이 간단하게 replicationController을 생성하는 kubectl run 명령이나, kubectl apply -f 로 ReplicationController 구성 요소를 정의한 yaml, json 파일로 레플리케이션 컨트롤러를 생성하면, 레플리케이션컨트롤러가 실제 파드를 생성합니다.그리고, 클러스터 외부에서 파드에 접근할 수 있도록 쿠버네티스에게 레플리케이션 컨트롤러에 의해 관리되는 모든 파드를 단일 서비스로 노출하도록 명령합니다.파드, 컨테이너지금까지의 예제는 파드 하나에 한 컨테이너만 있었지만, 보통 파드는 원하는 만큼의 컨테이너를 포함시킬 수 있습니다.위의 그림에선 컨테이너 내부에 Node.js 프로세스가 포트 8080에 바인.......

[Kubernetes] 파드(Pod)의 개념 [내부링크]

파드(Pod)란- 함께 배치된 컨테이너의 그룹- 쿠버네티스의 기본 빌딩 블록- 일반적으로 파드는 하나의 컨테이너만 포함- 그러나 여러 컨테이너를 가지고 있을 경우에, 모든 컨테이너는 항상 하나의 워커 노드에서 실행되며, 여러 노드에 걸쳐 실행되지 않습니다.파드가 왜 필요해요?- 왜 컨테이너를 직접 사용하지 않아요?- 왜 여러 컨테이너를 같이 실행할 필요가 있을까요?- 모든 프로세스를 단일 컨테이너에 넣을 수도 있잖아요?여러 프로세스를 실행하는 단일 컨테이너보다 다중 컨테이너가 나은 이유IPC나 로컬 파일을 통해 통신하는 여러 프로세스로 구성되어 같은 노드에서 실행해야 하는 애플리케이션이 있다고 가정해봅시다.그러면 &#.......

SSH 로그인 접속 시 퍼미션 문제 (UNPROTECTED PRIVATE KEY FILE) [내부링크]

뭐 대략 다음과 같은 SSH 로그인 시 이슈가 있을 때가 있다.읽어보면 너무 오픈되어 있다! 이게 private가 맞냐!? 무시할꺼다! 요런 느낌이다.요놈의 권한이 644로 되어 있다. 이 권한을 400으로 변경해줬다. 간단하게 chmod 400 key.pem 해주면 된다.

앞으로의 Issue 기록(수정) [내부링크]

앞으로의 이슈는 깃허브에 기록할 예정입니다.레이블 기능이 맘에 들어서 이 쪽으로 옮기는 것이 좋을 것 같네요.

[LeetCode] Binary Tree Zigzag Level Order Traversal [내부링크]

문제 링크 : https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/문제를 해결한 방법Tree의 Depth별로 출력하는데, 이를 정방향, 역방향, 정방향.. 이렇게 지그재그로 출력하는 문제였습니다.그래서 Base는 BFS로 너비우선탐색을 이용했습니다.그리고 정방향, 역방향을 구분하는 방법은 다음과 같은 로직을 세웠습니다.1. 정방향으로 출력하는 Depth에서는 좌측->우측으로 자식 노드를 탐색합니다.2. 역방향으로 출력하는 Depth에서는 우측->좌측으로 자식을 탐색합니다.물론 출력 != 탐색입니다.그러나, 출력과 동일하게 탐색 또한 정방향 -> 역방향 -> 정방향으로 하겠다는 것입니다.이 BFS를.......

[LeetCode] Longest Increasing Subsequence [내부링크]

문제 링크 : https://leetcode.com/problems/longest-increasing-subsequence/문제를 해결한 방법lowerbound의 O(NlogN) 또는 dp의 O(N^2)으로 LIS를 구하면 됩니다.LIS에 대한 설명은 이미 블로그에 많이 했으므로 생략합니다.lowerbounddp

[LeetCode] Not Boring Movies [내부링크]

문제 링크 : https://leetcode.com/problems/not-boring-movies/문제를 해결한 방법홀수인 것은 %2 = 1 이면서(AND) 문자열 조건은 != 나 Not LIKE로 처리해주면 됩니다.

[LINE] Thanks for welcome, LINE! [내부링크]

지난 이야기NOW, WOW!지난 번에 Day 1, Day 2, Day 3, Day 4를 기대하며 Work Box(Welcome kit) 개봉기를 올렸었다! 매 세션마다 다양한 교육들이 진행됐었는데, 강사님들이 하나 같이 선물을 많이 준비하셨다고 했다. 부끄럼 많은 성격이긴 하지만, 그래도 대답할 수 있는 부분은 적극적으로 대답했다. 팀과의 활동도 적극적으로 참여하고, 좋은 팀원들을 만나서 1등을 한 것도 몇 개 있고~! ㅋㅋ 재밌었다. 좋은 팀원들과 노력해주시는 운영진님들. 조금은 빡셌지만 유익했던 교육들.그리고 오늘 그 선물을 받아와서 기분이 좋아서 기록하려고 쓰는 글!! (헤헤)1. 치킨yeah~~~ 방탈출 게임 1등했더니 치킨 주셨다. 블랙 치즈볼 + 콜라까지.......

[LeetCode] Construct Binary Tree from Preorder and Inorder Traversal [내부링크]

문제 링크 : https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/문제를 해결한 방법트리의 순회 문제입니다. 이 문제는 분할 정복으로 해결할 수 있습니다.주로 이런 유형의 문제들이 있습니다. preorder와 inorder 또는 inorder와 postorder가 주어지고, 이 트리를 복원하라는 문제들 말이죠.지금 이 문제인 preorder, inorder가 주어졌을 때 트리를 복원하는 방법을 간단히 알아보겠습니다.preorder 탐색 순서는 어떻게 되나요? 루트 -> 좌측 서브 트리 -> 우측 서브 트리inorder 탐색 순서는 어떻게 되나요? 좌측 서브 트리 -> 루트 -> 우측 서브 트리 순입니다.즉, preorder의 맨.......

청담에이프릴어학원 동작캠퍼스 학원차량 지도교사 배달기사 비하 및 갑질 논란!? [내부링크]

정말 인성이 참 중요하다는 걸 느낀다. 직업에 귀천이 어딨으며.... 무시하고 논리도 없는 갑질에 눈살이 찌푸려진다.상황 설명 : 2월의 첫날 한 음식점에서 배행 요청이 와서 주문한 '학원'으로 우리 라이더가 배달을 갔습니다. 학원에서 아이들을 가르치던 선생님이 음식을 주문한 듯한데.. 지금 바쁘니까 아래 내려가서 기다리라고 했다고 합니다.. 내려가서 기다리면 계산하러 내려가겠다고... 그 말에 우리 라이더는 학원에서 나와 1층 밖에서 5~10분 사이쯤으로 기다렸고 다른 오더를 배정받아 시간이 촉박하여 다시 학원으로 올라갔다고 합니다. 근데 그 학원 선생님 말이 애들 가르치고 있고 지금 바쁘니까 그냥 기다리라고.......

[LeetCode] Container With Most Water [내부링크]

문제 링크 : https://leetcode.com/problems/container-with-most-water/문제를 해결한 방법투 포인터를 이용하여 풀었습니다.포인터 1 : 좌측 변포인터 2 : 우측 변을 의미합니다. 각각 양 끝에서 시작합니다. 물은 항상 작은 높이를 기준으로 채워지므로, 작은 높이 기준으로 Area를 구합니다.이 때, 우측의 높이가 크다면 좌측의 포인터를 당겨주고, 좌측의 높이가 크다면 우측의 포인터를 당겨주면 됩니다.왜 그럴까요?아무래도 큰 게 좋겠죠? 큰 벽이 있는데 그 부분은 남겨두고 작은 벽인 쪽을 포인터를 변경시키는 개념입니다.그리고 더 큰 벽이 있을 때까지 반복하는 것이죠. 꼭 이전보다 더 큰 벽이 나온다고 해서 max가 갱신.......

yyyy-MM-dd? yyyy-MM-DD? [내부링크]

LocalDateTime을 원하는 포맷(yyyy-MM-dd'T'HH:mm:ss)에 맞게 변형해야 하는 상황입니다.자, 2가지 포매팅이 있습니다.yyyy-MM-ddyyyy-MM-DD뭐가 맞을까요?자, 그럼 지금부터 date와 a1 : a2를 번갈아 가며 보여드리겠습니다.date (1월)a1 : a2date (2월)a1 : a2date (3월)a1 : a2......더는 안 볼겁니다.네. 보시듯이 1월을 제외하고는 a1과 a2가 다르게 나옵니다.지금이 1월이라서 yyyy-MM-DD로 잘못 쓰고 LocalDateTime.now()로 테스트하다가, 잘 나오길래 아무 의심 없이 넘어갔었는데.. 이런 이슈가 있었다니!! 체크해보니 DD로는 day를 년 단위로 셉니다. 윤년도 체크해주네요.(2020년 2월 29일)그러니까.. 1월.......

[LeetCode] Big Countries [내부링크]

문제 링크 : https://leetcode.com/problems/big-countries/문제를 해결한 방법OR 이나 Union으로 조건을 묶어서 풀면 됩니다.

[LeetCode] Implement Trie (Prefix Tree) [내부링크]

문제 링크 : https://leetcode.com/problems/implement-trie-prefix-tree/문제를 해결한 방법일반적인 트라이 구현 문제입니다.이 문제에서는 소문자로만 주어지기에 arr[26]으로도 해결할 수 있겠으나 저는 일반적인 트라이 구현 형태인 Map을 이용해서 해결했습니다. insert는 존재한다면 해당 노드를 타고 들어가고, 존재하지 않으면 새로운 노드를 만들어주면 됩니다. 그리고 마지막 노드에 해당 word의 개수를 +1해주면 됩니다.Search는 탐색하는 도중에 노드가 존재해야만 하고, 노드의 마지막에도 word의 개수가 1개 이상이어야 합니다.StartsWith는 탐색하는 도중에만 노드가 존재하면 됩니다. 포함관계이기 때문입니다.

[LeetCode] Sum of Two Integers [내부링크]

문제 링크 : https://leetcode.com/problems/sum-of-two-integers/문제를 해결한 방법우리가 일반적으로 사용하는 +를 비트 연산(AND, XOR, BITSHIFT)으로 구현하는 문제였습니다. 이 방법에 대한 설명은 여기에 설명이 잘 되어 있습니다.

[LeetCode] Flatten Nested List Iterator [내부링크]

문제 링크 : https://leetcode.com/problems/flatten-nested-list-iterator/문제를 해결한 방법리스트 안에 리스트가 있을 수 있으며, 이 리스트를 벗겨내고 숫자만을 취합하는 문제입니다.순서가 보장되어야 하므로, 재귀로 모든 리스트가 벗겨질 때까지 반복하도록 설계했습니다.만약 현재 리스트에서 접근한 value가 숫자라면 답에 해당하는 list에 insert를 해주면 되지만, single integer value가 아닌 list가 존재한다면 그 list를 다시 재귀 함수의 로직을 태우는 방법입니다. 이렇게 하면 결국 single integer value일 때까지 반복될 것이며, 기존 리스트에서의 value 순서도 유지가 됩니다.

[Kafka Streams] Multiple Outbound - Branch [내부링크]

이것은 Multiple Producer로 동작하는 것이 아니다.if~ else if~else 방식으로 동작한다.2가지 스타일이 있고, 혼용하면 동작하지 않는다.1. Functional Style함수형 스타일@Bean으로 Function Interface를 등록하고, .yml이나 .properties에서 Bean을 설정하는 방법입니다. spring.cloud.stream.function.definition : 함수명1;함수명2;함수명3; 을 설정하고그 내부에 default로 생성되는 함수명-in-0, 함수명-out-0.. 이런 식으로 내부 설정을 이어나가주면 됩니다.2. Imperative programming model명령형 프로그래밍 모델이번엔 명시적으로 @EnableBinding(구현해야할 인터페이스.class)를 어노테이션으로 설정해주고,@StreamListener.......

[Java] 스트림 활용(Stream API) - anyMatch, noneMatch, findAny, reduce [내부링크]

검색과 매칭1. Predicate가 적어도 한 요소와 일치하는 지 확인할 때Predicate가 주어진 스트림에서 적어도 한 요소와 일치하는지(true인지) 확인할 때 anyMatch 메서드를 이용할 수 있습니다. 예를 들면 다음과 같은 예제는 문자열 Stream 중 문자열의 문두에 "DolphaGo"가 있는지 확인하는 예제입니다.anyMatch는 boolean을 리턴하므로 최종연산입니다.2. Predicate가 모든 요소와 일치하는 지 검사할 때allMatch 메서드는 anyMatch와는 달리 스트림의 모든 요소가 주어진 Predicate와 일치하는 지 검사합니다.︎ noneMatchnoneMatch라는 녀석도 있습니다. 이 녀석은 allMatch와 반대 연산을 수행합니다. 즉, noneMatch는 주어.......

6198번 : 옥상 정원 꾸미기 [내부링크]

문제 링크 : https://www.acmicpc.net/problem/6198문제를 해결한 방법Stack을 활용했습니다.앞에서부터 건물의 현재 높이를 받으면서 그 높이에 따라 Stack을 어떻게 비울지가 달라집니다.Stack에는 기본적으로 내림차순으로 정렬합니다.그렇게 되면, 현재 높이를 바라볼 수 있는 건물들의 개수가 곧 Stack에 담긴 건물들의 개수이고, 이 개수를 정답에 += 해주면 간단하게 풀 수 있습니다.대신 이 문제는 [80000,1] 이라는 데이터가 들어온다면 최대 79999*80000/2 = 약 32억이기에 int형을 벗어납니다.정답은 long형으로 리턴해줍시다.

[D4] 3143번 : 가장 빠른 문자열 타이핑 [내부링크]

문제 링크문제를 해결한 방법KMP를 이용해서 해결했습니다.B 패턴의 실패함수를 구한 뒤, A패턴과 일치하는 지점을 찾으면 중복 방지를 위해 다시 패턴의 원점으로 돌려놓고, 이 패턴을 찾은 개수를 answer에 더해줬습니다.최종적으로 타이핑하게 될 수는 answer(B패턴 발견 수) + A 문자열의 길이 - (패턴을 찾은 개수 * B 패턴의 길이)가 됩니다.

9084번 : 동전 [내부링크]

문제 링크 : https://www.acmicpc.net/problem/9084문제를 해결한 방법간단한 다이내믹 프로그래밍 문제였습니다.동전의 액수를 A라고 하면, 다음과 같은 로직을 구현하면 됩니다.1. 0원을 만드는 방법의 수는 1개(초깃값)2. [A, Target] 을 만드는 방법은 각각 [0, Target-A]를 만드는 방법에 A원을 더하면 된다.나이스하게 금액의 오름차순으로 데이터가 주어지기에앞에서부터 위의 로직을 그대로 구현하면 됩니다.

[LeetCode] Game of Life [내부링크]

문제 링크 : https://leetcode.com/problems/game-of-life/문제를 해결한 방법세포의 현재 상태, 주변(8곳)의 살아있는 세포의 개수에 따라 다음 상태를 결정해주는 문제였습니다.이러한 세세한 조건들은 문제에 적혀있든 그대로 하드코딩으로 구현했습니다.현재 세포가 죽어있든, 살아있든 간에 다음 상태를 결정하는 것은 주변 8곳의 살아있는 세포의 수 입니다.그래서 주변의 살아있는 세포의 수를 구하는 함수를 구현했고, 현재 세포의 상태와 주변 살아있는 세포의 수, 이렇게 2가지의 정보로 다음 세포의 상태를 결정하게 됩니다.그런데 Follow-up을 보면, in-place로 구현하라고 되어있습니다. 그러면 약간의 Tricky한 방법으로 풀 수.......

[LeetCode] Binary Tree Level Order Traversal [내부링크]

문제 링크 : https://leetcode.com/problems/binary-tree-level-order-traversal/문제를 해결한 방법트리가 주어지면 Depth별로 Value를 그룹화하는 문제였습니다.BFS나 DFS를 이용해서 Depth별로 구하면 됩니다. 저는 BFS를 이용해서 Queue에 null이 아닌 TreeNode가 있음을 보장하고좌측에서 우측 방향으로 데이터를 Insert했습니다.

[LeetCode] Kth Smallest Element in a Sorted Matrix [내부링크]

문제 링크 : https://leetcode.com/problems/kth-smallest-element-in-a-sorted-matrix/문제를 해결한 방법각 Row별로 오름차순으로 데이터가 주어지고, 이 전체 2차원 행렬에서 K번째로 큰 수를 구하는 문제였습니다.가장 쉬운 방법으로는 2차원 배열을 1차원 배열로 만든 뒤, 소트하여 k번째 값을 가져오는 방법입니다.그리고 오름차순인 점을 이용하면 파라메트릭 서치도 활용할 수 있습니다.하한값, 상한값을 잡아준 뒤, 임의의 값 m(=(상한+하한)/2)에 대해서 각 Row에서 upperbound를 이용해 해당 임의의 값보다 작거나 같은 것들의 개수를 count에 더해줍니다.만약 이 count가 목표치 k보다 작다면 하한값을 m+1로 올려주고, 목.......

[LeetCode] Unique Paths [내부링크]

문제 링크 : https://leetcode.com/problems/unique-paths/문제를 해결한 방법특정 위치에 도달하는 방법의 가짓수를 찾는 쉬운 DP문제입니다.(장애물이 없기에 간단합니다.)0,0을 좌상단, m,n을 우하단이라고 가정하겠습니다.현재 위치 (y,x)에 도달할 수 있는 가짓수를 P(y,x)라고 하면, P(y,x)= P(y-1,x) + P(y,x-1) 입니다.

[LeetCode] 4Sum II [내부링크]

문제 링크 : https://leetcode.com/problems/4sum-ii/문제를 해결한 방법4개의 그룹에서 각각 하나씩 선택하여 a+b+c+d의 값이 0이 되는 개수를 묻는 문제였습니다.더한다는 개념은 최소 2개의 그룹이 필요합니다. 그래서 (A, B)/(C, D) 이렇게 큰 그룹으로 나눴습니다.그리고 이 문제는 N이 500이기에, 만약 모든 경우에 대해서 하나씩 선택해서 합을 맞춰본다면 500^4이기에 시간초과는 너무나 당연합니다. 그렇지만 500^2라면 아주 귀여운 시간복잡도죠.로직은 다음과 같습니다.1. A와 B 그룹에서 각각 원소에 접근하여(->500^2의 경우의 수) 합을 map에 저장합니다. 합이 동일한 것이 여러 개 일 수도 있으니 value는 count로 활.......

[LINE] NEW LINER Welcome Kit! [내부링크]

어느날 집으로 도착한 정체 불명의 검은색 상자.꽤나 컸었습니다. 살펴보니 저만 오픈 가능.. ㅎㅎ 라인다웠습니다. 귀엽더군요!열어보니 가장 먼저 보이는 것은 Day 1, Day 2, Day 3, Day 4 물품들입니다.열어보지 말래서 안열어봤어요. ㅎㅎ사실 오늘부터 Day 1입니다. 열어볼 생각에 기대가 되네요.두 번째로는 후드티가 눈에 보였습니다. (제가 하루 입어서 먼지가 보이네요..ㅋㅋㅠㅠ)왔을 때는 깔끔하게 포장되어 왔었습니다. 줄에 LINE, 등에 크게 LINE이 적혀있네요.한 번 사원증도 걸어봤습니다.맛있는 까까!손 세정제 (캐릭터가 귀엽네요.. )!? 소설 책도 선물로 왔습니다.라인 이어폰도 왔네요.피규어가 왔는데, 조립하고.......

[LeetCode] Find the Duplicate Number [내부링크]

문제 링크 : https://leetcode.com/problems/find-the-duplicate-number/문제를 해결한 방법Map으로 확인하는 방법(시간복잡도 O(N), 공간 복잡도 O(N)) 정렬 후에, 이웃한 값을 비교하는 방법 (시간 복잡도 O(NlogN), 공간복잡도 O(1))플로이드의 거북이와 토끼 방법(투 포인터)The key insight in the algorithm is as follows. If there is a cycle, then, for any integers i ≥ μ and k ≥ 0, xi = xi + kλ, where λ is the length of the loop to be found and μ is the index of the first element of the cycle. Based on this, it can then be shown that i = kλ ≥ μ for some k if and only if xi = x2i. .......

[LeetCode] Odd Even LinkedList [내부링크]

문제 링크 : https://leetcode.com/problems/odd-even-linked-list/문제를 해결한 방법홀수 번째와 짝수 번째를 따로따로 연결해버리면 node.next가 망가지기에, node.next.next에서 오류가 생깁니다. 그래서 홀수와 짝수를 동시에 이동시켜줘야 했습니다.oddNode, evenNode를 가져와서, oddNode.next와 evenNode.next가 둘다 null이 아닐 때까지 반복합니다.두 노드는 같은 방식으로 node.next=node.next.next로 매핑해줍니다.그리고 node.next가 그 다음 노드로 이동하도록 매핑되었으니, 다음 단계는 node=node.next로만 이동해줘도 됩니다.홀수번째 묶음 -> 짝수번째 묶음으로 매핑해야하기 때문에 짝수번째 묶음의 head가.......

[LeetCode] Duplicate Emails [내부링크]

문제 링크 : https://leetcode.com/problems/duplicate-emails/문제를 해결한 방법중복된 이메일을 찾는 문제입니다.이메일을 그룹으로 묶고, 해당 그룹에서 2개 이상인 것들을 Select 해주면 됩니다.

[LeetCode] Customers Who Never Order [내부링크]

문제 링크 : https://leetcode.com/problems/customers-who-never-order/문제를 해결한 방법A와 B테이블의 공통되는 점이 없는 A의 레코드들 중 A의 Name을 출력하는 문제입니다.LEFT JOIN을 한 뒤 o.Id가 NULL인 부분을 골라내는 방법도 있겠습니다.그리고 IN 절을 이용해서 B.CustomerId 에 존재하지 않는 레코드를 골라내는 방법도 있겠습니다.

[Java] 스트림 활용(Stream API) - filter, distinct, takeWhile, dropWhile, limit, skip, map, flatMap [내부링크]

사전 데이터[Class Dish][Enum Type][Main Data]여러 개의 객체가 있을 때 그중 우리는 어떤 조건에 해당하는 것만 골라내서 다른 리스트에 담고 싶을 때가 있습니다. 예를 들어서 메뉴 중에 Vegetarian도 먹을 수 있는지를 체크해서 메뉴로 골라낸다면 흔히 다음과 같이 작성할 수 있습니다.이걸 이제 filter와 collect 연산을 지원하는 Stream API를 이용해서 데이터 컬렉션 반복을 내부적으로 처리할 수 있습니다. 다음처럼 말이죠.데이터 처리는 Stream API가 관리하기에 우리는 편하게 데이터 관련 작업을 할 수 있게 됩니다.따라서 Stream API 내부적으로 다양한 최적화가 이루어질 수 있습니다. Stream API는 내부 반복뿐만 아니라, 코.......

[Programmers] 완주하지 못한 선수 [내부링크]

문제 설명수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.제한사항마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.completion의 길이는 participant의 길이보다 1 작습니다.참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.참가자 중에는 동명이인이 있을 수 있습니다.입출력 예입출력 예 설명예제 #1leo는 참여자 명단에는 있지.......

[LeetCode] Kth Smallest Element in a BST [내부링크]

문제 링크 : https://leetcode.com/problems/kth-smallest-element-in-a-bst/문제를 해결한 방법BST는 inorder로 순회하면 오름차순으로 탐색할 수 있습니다.모든 데이터를 List에 담아서 k번째의 값을 리턴하는 방법도 있지만, k번 째 데이터를 제외한 나머지 데이터를 굳이 저장해줄 필요가 없습니다.따라서 전역변수를 이용하여 방문한 지점마다 count를 해줍니다.이 count가 k가 된다면, 그 때의 node의 value가 k번째 작은 데이터가 됩니다.

[LeetCode] Delete Duplicate Emails [내부링크]

문제 링크 : https://leetcode.com/problems/delete-duplicate-emails/문제를 해결한 방법한 테이블 내에서 중복된 이메일이 있는 레코드를 삭제하는 문제입니다.똑같은 테이블 2개를 준비하고, 이메일이 같으면서 id가 큰 쪽의 레코드를 삭제해주면 됩니다.

[LeetCode] Rising Temperature [내부링크]

문제 링크 : https://leetcode.com/problems/rising-temperature/문제를 해결한 방법한 테이블 내에 날짜와 기온이 적혀있습니다.직전 날과 비교해서 현재의 기온이 높은 레코드를 출력하는 문제였습니다.직전날과의 비교는 DATEDIFF를 이용하면 됩니다.DATEDIFF(day1, day2) 는 day1-day2의 의미와 같기에, day1을 현재 날짜로 지정해주고, day2를 직전 날짜로 지정해주면 됩니다. 이 값의 차이가 1이여야 직전 날과 비교가 가능해집니다.그리고 추가적인 조건으로 이 중 현재 날짜의 기온이 더 높은 것들만 출력해주면 됩니다.

[LeetCode] Product of Array Except Self [내부링크]

문제 링크 : https://leetcode.com/problems/product-of-array-except-self/문제를 해결한 방법재밌는 문제입니다.배열이 주어졌을 때, 현재 자기 자신을 빼고 나머지 곱을 출력하는 문제입니다.전체 곱 / 나누기를 사용하면 조금만 생각해봐도 divide in zero라던가, 0이 곱해진 부분을 다시 복원하는 것이 어렵겠죠.그렇기에 -> 왼쪽에서 하나씩 곱해나가면서 곱할 부분을 곱해주고, 그 다음 번에는 <- 오른쪽에서 왼쪽에서 하나씩 곱해가면서 곱할 부분에 곱해줍니다.하나씩 순차적으로 곱하는 것은 l, r로 지정했습니다. 가장 먼저 l과 r은 아무것도 곱하지 않은 상태이기에 1이겠죠.l부분을 곱하는 경우엔 그냥 대입을 하고.......

[LeetCode] Rotate Image [내부링크]

문제 링크 : https://leetcode.com/problems/rotate-image/문제를 해결한 방법바뀌는 지점을 일일히 고려하기 번거로워서그냥 단순하게 90도 좌표 이동을 하고, 다시 원래 맵에 복사를 해주는 방식으로 구현했습니다.그런데 한 번에 맵 내부에서 뒤집는 방법도 있습니다.가운데 대각선을 잡고 시계방향으로 돌리는 방법입니다.

[LeetCode] Group Anagrams [내부링크]

문제 링크 : https://leetcode.com/problems/group-anagrams/문제를 해결한 방법애너그램을 찾는 문제입니다. 이를 Group으로 만들어서 리턴하는 문제인데요.String을 내부적으로 정렬을 해서 해당 값을 Key로 사용하는 방법도 있겠습니다.그리고 굳이 정렬을 하지 않고, String의 Character하나하나 아스키코드 값을 더해서 Key로 활용하는 방법도 있겠습니다. 하지만 변환하는 과정, count배열을 매번 만들고 하나씩 넣는 등 속도가 느립니다. 정렬 최고!

[LeetCode] Excel Sheet Column Number [내부링크]

문제 링크 : https://leetcode.com/problems/excel-sheet-column-number/문제를 해결한 방법ABC라는 문자열이 들어온다면((A*26) + B) * 26 + C 가 해당하는 숫자입니다.풀어 쓰면 (A * 26^2) + B * 26^1 + C * 26^0 가 됩니다.따라서 26^자릿수에 해당하는 값을 곱해서 answer에 더해주면 됩니다.

[LeetCode] Contains Duplicate [내부링크]

문제 링크 : https://leetcode.com/problems/contains-duplicate/문제를 해결한 방법HashSet의 add는 이미 contain하고 있다면 false를 리턴합니다.hashMap의 put은 다음과 같이 동작하죠.그리고 pulVal 코드는 다음과 같습니다.따라서 HashSet으로 O(N)으로 해결할 수 있습니다.

[LeetCode] Permutations [내부링크]

문제 링크 : https://leetcode.com/problems/permutations/문제를 해결한 방법일반적인 순열 구하는 방법을 재귀로 구현해서 풀었습니다.이건 스트림을 쓰고 싶어서 이렇게도 해봤습니다.

[LeetCode] Binary Tree Inorder Traversal [내부링크]

문제 링크 : https://leetcode.com/problems/binary-tree-inorder-traversal/문제를 해결한 방법inorder는 현재 노드 기준으로 [좌측 방문]-현재 출력-[우측 방문] 순이므로 이를 그대로 구현해주면 됩니다.

[LeetCode] Generate Parentheses [내부링크]

문제 링크 : https://leetcode.com/problems/generate-parentheses/문제를 해결한 방법짝을 지어서 ( ) 올바른 괄호 쌍을 만들 수 있는 모든 케이스를 출력하는 문제였습니다.올바른 괄호 쌍이 되기 위해서는 여는 괄호는 n개 까지만 열 수 있으며, 닫는 괄호는 여는 괄호보다 많을 수 없습니다.이 조건을 넣어준다면 재귀문으로 구현할 수 있습니다.

[LeetCode] Subsets [내부링크]

문제 링크 : https://leetcode.com/problems/subsets/문제를 해결한 방법PowerSet을 구하는 방법은 많지만 저는 Bit로 구현하는 것이 편했습니다.방법은 간단합니다. 2개의 반복문을 사용합니다.하나는 [0, (1<<n)-1] 까지의 값을 순회하고, 다른 하나는 비트 하나씩 보면서 켜진 비트(1인 비트)를 확인합니다.이때 켜진 비트에 대해서만 nums[j]를 추가해주면 됩니다.

[LeetCode] Top K Frequent Elements [내부링크]

문제 링크 : https://leetcode.com/problems/top-k-frequent-elements/문제를 해결한 방법Map에 숫자들을 세준 뒤, Value에 대해서 내림차순으로 정렬하여 K개를 가져오면 되는 문제였습니다.오름차순으로 Queue에 넣다가 K개가 넘어가면 쳐내는 식으로 했는데, 오히려 속도가 안나왔습니다.그래서 그냥 값을 모두 넣은 뒤, K개만 빼내오는 방식을 택했습니다.

[Kafka] 설치부터 Producer Application까지 [내부링크]

서론데브 원영님의 카프카 강의를 듣고 실습한 내용 및 자료를 그대로 옮겼습니다.EC2, Java, Kafka 설치AWS에서 EC2를 할당받습니다.(Elastic IP는 할당 받지 않아도 됩니다.)Kafka는 9092 포트를 기본값으로 사용하기에 inbound 규칙에 추가해주시면 됩니다.이제 Kafka를 설치하겠습니다.Kafka는 기본적으로 Java 기반으로 돌아가기에 Java를 설치해줘야 합니다.Kafka 2.5.0은 JDK 1.8 버전 이후에 정상 동작함을 보장하기에 Java를 설치해줍니다.이제 Kafka를 다운로드 받아줍니다. 카프카를 실행하기 위해서는 카프카 binary파일을 다운받아야합니다.다운로드 받은 tgz는 다음 명령어로 압축을 풀어줍니다.Kafka 2.5.0은 1G의 Heap Mem.......

[LeetCode] Best time to buy and sell stock II [내부링크]

문제 링크 : https://leetcode.com/problems/best-time-to-buy-and-sell-stock-ii/문제를 해결한 방법Greedy하게 접근했습니다.현재 가격보다 다음 날이 비싸면 바로 팔아버리면 됩니다.물론 문제에서는 그런 말이 없지만, a<b<c일 때, b-a만큼의 차액을 챙기고 b를 또 사서 c-b만큼의 차액을 챙기면 됩니다. 이런 관점이라면 c-a라는 큰 이득을 취할 수 있게 됩니다. 또 다른 예로 a>b<c일 때는 [7 2 10] 이라면 8이 정답이 됩니다. b를 계산할 때 a가 관여하지 않기 때문입니다.[1 2 3 4 5] 라는 예제에서도 1+1+1+1 과 5-1 = 4 라는 값이 동일함을 알 수 있습니다.

[LeetCode] Valid Anagram [내부링크]

문제 링크 : https://leetcode.com/problems/valid-anagram/문제를 해결한 방법어구전철 또는 애너그램은 단어나 문장을 구성하고 있는 문자의 순서를 바꾸어 다른 단어나 문장을 만드는 놀이이다. 어구전철을 잘 아는 사람들끼리 암호문으로 어구전철을 사용할 수도 있지만 그렇지 못할 경우도 많다. 그 이유는 어구전철은 여러 자의적 해석이 가능하기 때문이다. 1. 두 문자열의 길이가 같은지 검사.2. 한 문자열의 알파벳 개수를 세주고 다른 문자열의 알파벳 개수를 하나씩 제거해주면 됩니다.이 과정에서 개수가 남아 있지 않은 알파벳이 나온다면 false를 해주면 됩니다.

[LeetCode] Roman to Integer [내부링크]

문제 링크 : https://leetcode.com/problems/roman-to-integer/문제를 해결한 방법하드코딩으로 각 문자에 맞는 값을 넣어준 뒤[현재, 다음 문자]의 값을 비교해서 추가 조건에 부합하는지 확인하고 인덱스 작업을 해주면 됩니다.추가 조건의 특징은 다음 문자에 해당하는 값이 더 크다면 next-cur 관계입니다.문자열이 올바르게 들어오므로, 예외케이스는 생각하지 않아도 됩니다.

[Java] 스트림(Stream) 소개 [내부링크]

스트림이란?스트림은 자바 8 API에 새로 추가된 기능입니다. 스트림을 이용하면 선언형(즉, 데이터를 처리하는 임시 구현 코드 대신 질의로 표현)으로 컬렉션 데이터를 처리할 수 있습니다.쉽게 말하면 스트림은 데이터 컬렉션 반복을 멋지게 처리하는 기능입니다. 또한 스트림을 이용하면 멀티스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있습니다.만약 다음과 같은 코드가 있습니다.1. 메뉴 중에서 400 칼로리 이하의 음식을 찾습니다.2. 이 메뉴를 칼로리가 낮은 순으로 정렬합니다3. 이 메뉴들의 이름을 담은 List를 만듭니다.그럼 다음과 같이 구현할 것입니다.(자바 7이하)여기서 lowCalories는 컨테이너 역.......

[Java] 스트림(Stream) 시작하기 [내부링크]

스트림이란 데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소로 정의할 수 있습니다. 데이터 처리 연산 : 스트림은 함수형 프로그래밍 언어에서 일반적으로 지원하는 연산과 데이터베이스에와 비슷한 연산을 지원합니다. 예를 들면 filter, map, reduce, find, match, sort 등으로 데이터를 조작할 수 있습니다. 스트림 연산은 순차적으로 또는 병렬로 실행할 수 있습니다. 소스 : 스트림은 컬렉션, 배열, I/O 자원 등의 데이터 제공 소스로부터 데이터를 소비합니다. 정렬된 컬렉션으로 스트림을 생성하면 정렬이 그대로 유지됩니다. 즉, 리스트로 스트림을 만들면 스트림의 요소는 리스트의 요소와 같은 순서를 유지합니다.......

[스크랩] GC 튜닝 [내부링크]

https://d2.naver.com/helloworld/37111

[Mac terminal] iTerm2 커스터마이징하기 [내부링크]

iTerm theme은 굉장히 많습니다. 이곳에 가시면 많은 테마를 다운 받을 수 있습니다.그 중 저는 dracula 테마를 적용할 예정이라 이를 기준으로 작성하겠습니다.저는 git clone으로 dracula테마를 다운 받아보겠습니다. (위에 제가 드린 링크에서 원하는 테마를 다운로드 받으시면 됩니다.)Dracula.itermcolors를 더블클릭하면 자동으로 iterm theme에 import가 됩니다.그럼 이제 iterm으로 가서 테마를 적용해야 합니다.iTerm2 - [preferences...] 를 열어줍니다. (단축키는 command + , )그리고 [Profiles] - [Colors] 탭으로 이동해서 방금 다운받은 테마를 적용해줍니다.[Result]이제 브랜치를 보여주는 oh-my-zsh테마를 적용해보려 합.......

[Kafka] 기본 개념 및 생태계 [내부링크]

서론이 포스팅은 데브원영님의 Youtube 영상을 듣고 내용을 그대로 옮긴 것입니다.Before Kafka️ 엔드투엔드(end to end) 연결 방식의 아키텍쳐️ 데이터 연동의 복잡성 증가(하드웨어, 운영체제, 장애 등)️ 각기 다른 데이터 파이프라인 연결 구조️ 확장에 엄청난 노력 필요모든 시스템으로 데이터를 전송 실시간 처리도 가능한 것.데이터가 갑자기 많아지더라도 확장이 용이한 시스템이 필요함After Kafka️ Producer/ Consumer 분리️ 메시지 데이터를 여러 Consumer에게 허용️ 높은 처리량을 위한 메시지 최적화️ 스케일 아웃 가능️ 관련 생태계 제공Kafka broker️ 실행된 카프카 애플리케이션 서버 중 1대.......

[Java] 동작을 파라미터화하기 [내부링크]

사과를 담은 리스트가 있다고 가정해봅시다.사과는 다음과 같이 색과 무게를 기본적으로 갖고 있습니다.그리고 다음과 같이 사과 3개를 준비해볼게요.여기서 녹색 사과만 필터링 하라는 요구사항이 들어왔습니다.그러면 Java8을 활용하지 않고서는 다음과 같이 구현할 것입니다.Step 1. 필터링 함수 만들기여기에 추가적으로 빨간 사과도 따로 필터링하는 함수가 필요하다는 요구사항이 들어왔습니다.그러면 또 복사 붙여넣기 해서 다음과 같은 filterRedApples라는 새로운 메서드를 만들 것입니다.너무 반복적인 코드입니다.만약 검은색, 녹색, 노란색.. 색이 계속 추가된다면 어떻게 할 것인가요?이와 같은 코드를 계속 복사하며 구현할 수도 없.......

[Java] 람다 표현식 [내부링크]

람다란 무엇인가?람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이라고 할 수 있습니다.람다 표현식에는 이름은 없지만, 파라미터 리스트, 바디, 반환 형식, 발생할 수 있는 예외 리스트는 가질 수 있습니다.︎ 람다의 특징1. 익명: 보통의 메서드와 달리 이름이 없으므로 익명이라고 표현합니다.2. 함수: 람다는 메서드처럼 특정 클래스에 종속되지 않으므로 함수라고 부릅니다.하지만 메서드처럼 파라미터 리스트, 바디, 반환 형식, 가능한 예외 리스트를 포함합니다.3. 전달: 람다 표현식을 메서드 인수로 전달하거나 변수로 저장할 수 있습니다.4. 간결성: 익명 클래스처럼 많은 자질구레, 긴 코드를.......

[Java] 람다, 메서드 참조 활용하기 [내부링크]

형식 추론기존에는 매개변수로 (Apple apple) -> { } 로 사용했었지만, 자바 컴파일러는 람다 표현식이 사용된 콘텍스트(대상 형식)를 이용해서 람다 표현식과 관련된 함수형 인터페이스를 추론합니다.즉 대상 형식을 이용해서 함수 디스크립터를 알 수 있으므로, 컴파일러는 람다의 시그니처도 추론할 수 있습니다. 결과적으로 컴파일러는 람다 표현식의 파라미터 형식에 접근할 수 있으므로 람다 문법에서 이를 생략할 수 있습니다.여러 파라미터를 사용한다면 가독성이 더 두드러집니다.위 코드는 형식을 추론하지 않지만, 아래 코드는 형식을 추론합니다. 덕분에 더 간결한 코드를 작성할 수 있습니다 상황에 따라 명시적으로 형식을 포.......

[Java] 람다 표현식과 자주 사용되는 유용한 메서드 [내부링크]

1, Comparator 조합정적 메서드 Comparator.comparing을 이용해서 비교에 사용할 키를 추출하는 Function 기반의 Comparator를 반환할 수 있습니다.︎ 역정렬만약 사과 무게를 내림차순으로 정렬하고 싶다면, 다른 Comparator 인스턴스를 만들어야 할까요?그럴 필요 없습니다. 인터페이스 자체에서 주어진 비교자의 순서를 뒤바꾸는 reverse라는 디폴트 메서드를 제공하기 때문입니다. 따라서 다음 코드처럼 처음 비교자 구현을 그대로 재사용해서 사과의 무게를 기준으로 역정렬 할 수 있습니다.하지만 무게가 같은 두 사과가 존재한다면 어떻게 해야할까요?정렬된 리스트에서 어떤 사과를 먼저 나열해야 할까요?이럴 땐 더 비교하는 Co.......

[LeetCode] Convert Sorted Array to Binary Search Tree [내부링크]

문제 링크 : https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/문제를 해결한 방법Binary Search Tree를 만드는 것이므로, 힌트는 N/2로 쪼개는 것입니다.이분탐색할 때 답을 찾아갈 때 계속해서 반으로 나누어 접근하는 것을 이용한 것입니다.그래서 (배열, 시작 인덱스, 끝 인덱스)를 매개변수로 넘겨주며 재귀를 구현했습니다.구간 내 중간 인덱스의(m=(s+e)/2) 값이 해당 노드의 Value가 되고, left, right를 순차적으로 연결해주는 방식입니다. m을 기준으로 좌/우측의 구간을 구분할 수 있습니다.즉, 나눠진 구간은 (s, m-1) 과 (m+1, e)가 됩니다.(s, m-1)은 left에 대응되고, (m+1, e)는 right에.......

[LeetCode] Move Zeroes [내부링크]

문제 링크 : https://leetcode.com/problems/move-zeroes/문제를 해결한 방법0을 모두 뒤로 미루면서 in-place-sorting하는 문제였습니다.앞에서부터 0인 곳(=i)과 0이 아닌 곳(=j)을 가리킬 포인터 2개를 준비합니다.0을 뒤로 미뤄야 하므로, i<j가 보장되어야 합니다.따라서 0인 곳을 첫 번째로 찾으면(=i)그 다음은 j(=i+1)부터, 0이 아닌 곳을 찾습니다.그리고 i와 j가 가리키는 값을 swap해줍니다. 이 과정을 반복합니다.만약 이 과정에서 i와 j가 배열의 범위를 넘어가면 break를 합니다. 더 이상 바꿀 수 있는게 없다는 뜻이기 때문입니다.그런데 이 문제는 값을 하나씩 당겨서 복사하여 풀 수도 있습니.......

[LeetCode] Reverse Integer [내부링크]

문제 링크 : https://leetcode.com/problems/reverse-integer/문제를 해결한 방법숫자의 부호에 따라 문자열을 다르게 모아서(음수면 맨 앞의 -는 빼고) reverse를 한 뒤 답을 출력했습니다.그 다음 방법으로는, 나머지의 값을 먼저 더하면서, 다음 값을 더하기 직전에 이전 값에 *10을 해주는 방법입니다. 이렇게하면 말 그대로 reverse된 Integer가 만들어집니다.최종적으로 오버플로우가 났을 때는 res를 int형으로 형변환시 오버플로우/언더플로우가 났을 것이므로, 같은지 판단하고 리턴하는 방식을 결정해주면 됩니다.(오버/언더 플로우 => 0)

[LeetCode] Majority Element [내부링크]

문제 링크 : https://leetcode.com/problems/majority-element/문제를 해결한 방법주어진 배열에서 가장 많이 등장하는 숫자를 리턴하면 되는 문제였습니다.여러가지 풀이가 존재할 것입니다. [HashMap으로 숫자를 세서 리턴하는 방법][정렬 후, arr[size/2]의 숫자를 리턴하는 방법]이 방법은 예를 들어 [2,1,2,1,2]일 때 정렬 후 [1,1,2,2,2]의 중간 인덱스 2를 리턴하는 방식입니다. 짝수로도 [1,2,2,2] 적용이 가능하죠. 이 문제는 반드시 Majority Element가 존재하기 때문에 가능한 방법입니다.

[LeetCode] Sqrt(x) [내부링크]

문제 링크 : https://leetcode.com/problems/sqrtx/문제를 해결한 방법Math.sqrt(x)로 제출했다가 양심이 찔려서 다른 방법을 고안했습니다.값의 범위는 0~2^31-1까지이고, 소숫점은 제외한다고 했습니다.예를들어 sqrt(8) = 2로 출력해야 합니다. (2.xxxx...)그래서 Upperbound로 풀었습니다.long은 2^63-1이니, 2^31-1을 두번 곱해도 long 범위 내에 있으므로 오버플로우가 나지 않습니다.그래서 두 번 제곱했을 때 x보다 큰 첫 번째 값을 찾았습니다.그리고 최종적으로 답은 두 번 제곱했을 때 x보다 큰 첫 번째 값- 1 을 리턴하면 됩니다. (소숫점은 제거하므로)

[LeetCode] Count Primes [내부링크]

문제 링크 : https://leetcode.com/problems/count-primes/문제를 해결한 방법평범한 소수(Prime Number) 구하기 문제입니다.에라토스테네스의 체각 수마다 sqrt(n)으로 소수 판별하기

[Java] Integer Cache [내부링크]

https://blog.naver.com/adamdoha/222130436653위의 포스팅을 통해 우리는 AutoBoxing, Auto-UnBoxing에 대해 알게 되었습니다.한마디로 primitive type을 Wrapper Class로 자동으로 변환해주면 AutoBoxing 그 반대는 Auto-UnBoxing이죠.그런데 문제를 하나 내보겠습니다.[A] 다음 예제에서 a==b의 값은 무엇일까요?true입니다. false라고 대답하신 분들은 '아니 왜? Integer는 Object Class고, 객체마다 가진 메모리 주소가 다를텐데, 왜 true죠?' 라는 의문을 가지게 될 것입니다. 예제 하나만 더 보고 비교해드릴게요.[B] 다음 예제에서 a==b는 무엇일까요?false 입니다.에이 거짓말. 값 하.......

[LeetCode] Valid Parentheses [내부링크]

문제 링크 : https://leetcode.com/problems/valid-parentheses/문제를 해결한 방법일반적인 괄호 검사 문제입니다.여는 괄호( '(', '[', '{' ) 일 때는, Stack에 넣어주고, 닫는 괄호일 때는 짝이 맞는지 검사합니다.짝이 맞지 않거나, Stack이 비어있다면 스택 검사 Runtime에 false를 리턴합니다.최종적으로 모든 괄호를 입력받고나서 스택이 비어있다면 제대로 짝을 만나서 pop이 되었다는 의미이기에 true, 아니라면 false를 리턴하면 됩니다.

[LeetCode] Combine Two Tables [내부링크]

문제 링크 : https://leetcode.com/problems/combine-two-tables/문제를 해결한 방법사람이 주소를 가지고 있든 가지고 있지 않든 출력하면 되기 때문에Person Table과 Address를 left outer join해주면 됩니다. 그런데 Select하는 Column이 각 테이블에서 Unique하므로 p.~를 생략할 수도 있겠습니다.

[LeetCode] Second Highest Salary [내부링크]

문제 링크 : https://leetcode.com/problems/second-highest-salary/문제를 해결한 방법두 번째로 높은 봉급을 출력하는 것이고, 없다면 null을 리턴하는 문제입니다.가장 높은 봉급을 SubQuery로 구하고, 이 값보다 작은 Salary 중에 최댓값을 가져오면 됩니다.그러한 값이 존재하지 않으면 max는 null을 리턴합니다.Where 절에 서브쿼리를 삽입해줄 수도 있겠지만, Select 절에 바로 SubQuery를 넣어줄 수도 있습니다. 봉급을 내림차순으로 DISTINCT 정렬을 하고, 페이징으로 2번째 값을 하나 가져오면 됩니다. 만약 그러한 값이 없다면 null을 출력하기 위해 IFNULL을 활용했습니다.

[LeetCode] Employees Earning More Than Their Managers [내부링크]

문제 링크 : https://leetcode.com/problems/employees-earning-more-than-their-managers/문제를 해결한 방법상사가 없는 Employee는 비교하지 않아도 되므로, INNER JOIN으로 처리하면 되겠습니다.Join 처리를 하기 위해서는 Employee 2개의 테이블이 필요합니다.하나는 E1, 다른 하나는 E2라고 하겠습니다.E1.ManagerId와 E2.Id를 Join 처리하면, E1은 현재 Employee, E2는 상사를 의미하므로 E1.Salary가 E2.Salary보다 큰 Employee의 이름을 출력해주면 됩니다.

[LeetCode] Factorial Trailing Zeroes [내부링크]

문제 링크 : https://leetcode.com/problems/factorial-trailing-zeroes/문제를 해결한 방법......000 의 0의 개수를 세주는 문제입니다.즉, a*10^k로 표현할 수 있는 k의 개수를 출력하는 문제였습니다.그래서 처음엔 단순히 2의 개수, 5의 개수를 세준 뒤 두 개수의 최솟값을 리턴하는 방식으로 구현했습니다.그런데 생각해보면 5의 개수는 항상 2의 개수보다 작습니다.그러면 5의 개수에 대해서만 고려해볼 수도 있겠습니다.5! 에는 5가 1개 들어가있고, 10!에는 (5*2) ... (5*1) ... 해서 5가 2개 들어가있죠.이런 방식으로 5의 개수만 세주면 되겠습니다.즉 5^k<=n 을 만족하는 k의 개수를 출력하면 됩니다.

14725번 : 개미굴 [내부링크]

문제 링크 : https://www.acmicpc.net/problem/14725문제를 해결한 방법트라이를 이용하면 됩니다. Character 하나씩 넣는 것이 아니라 String단위로 넣어주는 것 뿐입니다.그리고 구조도를 출력할 때, 같은 Depth면 사전순으로 앞선 것을 먼저 출력하라고 했습니다.그러므로 String 데이터를 담을 자료구조는 Key를 정렬된 순서(Default : 사전순)로 관리할 수 있는 TreeMap을 활용했습니다. 그리고 print()를 하는 과정이 DFS 방식처럼 Depth를 끝까지 찍고 나와야 하기에 getRoot로 현재 Trie의 root Node를 가져온 뒤 재귀로 구현했습니다.

[LeetCode] Longest Common Prefix [내부링크]

문제 링크 : https://leetcode.com/problems/longest-common-prefix/문제를 해결한 방법짧은 문자열을 기준으로 잡고, prefix를 찾아나갔습니다.이렇게 하면 짧은 문자열보다 긴 뒤쪽은 확인하지 않아도 됩니다.그래서 기준으로 str[0]을 잡아둔 뒤, 값이 일치하지 않으면 일치하지 않는 부분 이전까지 String을 자르는 방식으로 구현했습니다. 물론 탐색은 초기에 str[0] (= 가장 짧은 문자열)을 넣어놨기 때문에, 이후의 문자열은 모두 StringBuilder의 size()만큼만 순회하면 됩니다.

[LeetCode] Valid Palindrome [내부링크]

문제 링크 : https://leetcode.com/problems/valid-palindrome/문제를 해결한 방법영어, 숫자를 제외하고는 모두 무시합니다.영어 소문자 or 숫자는 그대로 append,영어 대문자는 소문자로 바꿔서 append를 해주면 됩니다.그리고 모아진 String과 Reverse String이 일치하는지 확인해주면 됩니다.

[LeetCode] Implement strStr() [내부링크]

문제 링크 : https://leetcode.com/problems/implement-strstr/문제를 해결한 방법KMP를 이용했습니다. 패턴의 실패함수를 만들고, 문자열의 일치하는 부분을 찾는 방법으로 풀었습니다. 문자 하나씩 일치하는지 찾다가, 실패한다면 미리 구해놓은 실패함수로 다시 문자열을 비교하도록했습니다만, 생각보다 속도는 그렇게 빠르지 않았습니다. (7ms)haystack에서 needle의 length만큼 문자열을 잘라서, 단순히 문자열 비교 작업을 해줘도 됩니다.(0ms)

[LeetCode] FizzBuzz [내부링크]

문제 링크 : https://leetcode.com/problems/fizz-buzz/문제를 해결한 방법단순 구현 문제입니다. 3의 배수라면 Fizz, 5의 배수라면 Buzz를 더해주면 됩니다.그 무엇도 아니라면 숫자 그대로를 Insert해주면 됩니다.

오늘의 삽질 [내부링크]

리스트는 참조를 해시코드로 하나 메모리 주소로 하나 궁금했었다.해시코드는 JVM에서 객체를 관리하기 편하게 하기 위한 값이라고 하는데메모리 주소 != 해시코드니까메모리 주소는 안바뀌겠지만 해시코드야 String이나 여러 클래스에서도 오버라이딩으로 재정의해서 자주 쓰니까ㅎㅎ하지만 객체.setHashCode(다른 해시코드) 같은 건 없으니까 어떻게 할까.. 고민했음.문제에서 클래스도 내가 만든게 아니라 문제 내부적으로 박혀있는 거라서 이걸 어떻게 오버라이딩을 할 수도 없고 그러다가 그냥 인텔리제이로 가져와서 직접 짜봤는데왜 node=node.next가 안되지부터 시작해서 더 나아가 null처리를 했는데도 출력이 잘 될까를 고.......

[스크랩] Enum [내부링크]

https://woowabros.github.io/tools/2017/07/10/java-enum-uses.html

[LeetCode] Merge Sorted Array [내부링크]

문제 링크 : https://leetcode.com/problems/merge-sorted-array/문제를 해결한 방법공간이 m+n만큼 주어지므로, 배열의 뒤쪽에서부터 큰 값을 차례로 넣으면, in-place sort가 가능합니다.아니면 그냥 한 곳에 몰아넣고 O(NlogN)으로 소팅해도 됩니다.

[LeetCode] Palindrome LinkedList [내부링크]

문제 링크 : https://leetcode.com/problems/palindrome-linked-list/문제를 해결한 방법ListNode에 2개의 node를 이용해서 이동합니다.하나는 fast, 하나는 slow입니다. 둘 다 시작점은 head입니다.그리고 fast는 2칸씩, slow는 한 칸씩 이동합니다.잘 생각해 봅시다. 예를 들어서 5개가 있다고 칩시다.f - - - -s- - - -- - f - -- s - - -- - - - f- - s - -자 여기서, f가 끝이 났습니다. 홀 수개 일 때는 가운데를 제외하고 가운데를 기준으로 비교해 주시면 됩니다. 그래서 f가 끝이 아니기에, s를 한번 더 이동시켜줍니다.- - - - f- - - s -cf) 짝수 개 일 때, 잠깐 살펴보고 가겠습니다.f - - -s - - -- - f -- s - -.......

[LeetCode] Reverse LinkedList [내부링크]

문제 링크 : https://leetcode.com/problems/reverse-linked-list/문제를 해결한 방법단방향 리스트도 적절한 순서로 prev, next를 이용하여 node의 next를 바꿔준다면 reverse List로 만들 수 있습니다. (그림을 그려보시는 걸 추천합니다.)

[스크랩] Kafka와 MongoDB, Kubernetes로 유연하고 확장 가능한 LINE 쇼핑 플랫폼 구축하기 [내부링크]

https://engineering.linecorp.com/ko/blog/line-shopping-platform-kafka-mongodb-kubernetes/

IntelliJ에서 GC가 일어나는 시점을 알고 싶다면 [내부링크]

[Edit Configurations...] - [VM Options] 에 가셔서 다음 코드를 추가해줍시다.-verbose:gc : 가비지 컬렉션이 수행되는지를 출력합니다.-XX:+PrintCommandLineFlags : 어떤 가비지 컬렉터를 사용하는지 출력합니다.System.gc()는 Full GC가 일어납니다.모든 쓰레드가 정지하죠. Stop the world. -> 코드에 되도록 쓰면 안됩니다...저 같은 경우엔 GC가 언제 일어나는거지 도대체라는 궁금증으로 시작했습니다.ListNode를 만들어준 뒤에 b를 더이상 접근할 수 없는 형태로 만들어줬습니다.그런데도 GC가 일어나지 않더군요. minor gc라도 일어날 줄 알았는데..제가 실험한 코드는 다음과 같습니다.콘솔 출력값은 다음과 같습니다.Using.......

[LeetCode] Delete Node in a LinkedList [내부링크]

문제 링크 : https://leetcode.com/problems/delete-node-in-a-linked-list/문제를 해결한 방법처음에는 단순하게 node=node.next라고 하려고 했습니다만.....이 단순한 생각이 되지 않아서 궁금해서 짜봤습니다.[1,2,3,4] 에서 2를 지우는 상황입니다.안되는 이유를 분석해봤습니다.우선 delete 메서드 내의 다음 코드가 의미가 없었습니다.기본적으로 값 복사가 일어나서, 참조형이라면 참조한 상태에서 primitive type을 변경한다거나, 내부적인 참조 값을 변경하는 것이라면 의미가 있겠지만, 포인터를 또 바꿔주는 상황인것이죠. 쉽게 생각하면 main문의 prob과 delete문의 node는 다르다는 것입니다.문제에서 주어진 것도 동.......

[LeetCode] LinkedList Cycle [내부링크]

문제 링크 : https://leetcode.com/problems/linked-list-cycle/문제를 해결한 방법List의 val을 PASS값으로 주면서 존재하지 않는 ListNode일 때까지 이동합니다. 만약 방문한 노드의 val이 PASS라면 과거에 이미 지나온 자리를 다시 방문했다는 의미이므로, Cycle이 있게 됩니다.

[LeetCode] Reverse Bits [내부링크]

문제 링크 : https://leetcode.com/problems/reverse-bits/문제를 해결한 방법비트값이 넘어오고, 이를 반대로 뒤집어서 int형으로 리턴해야 되기 때문에32개의 비트를 체크하면서 켜진 비트에 대해 거꾸로 비트 값을 더해줍니다.오버플로우나지 않나요? 1<<31은 int형에서 MSD를 담당하고 범위를 벗어나기에 오버플로우 아닌가요?제가 삽질을 좀 해보니 오버 플로우가 나도 괜찮습니다.여기서는 unsigned비트를 묻고 있기 때문입니다. 그래서 오버플로우가 나는 값을 출력해보면 당연히 음수가 나옵니다. 하지만 채점은 unsigned bit로 하기 때문에 상관없습니다.비트를 거꾸로 담아서 한방에 parseUnsignedInt를 2진수에 대해 변환해.......

[LeetCode] Reverse String [내부링크]

문제 링크 : https://leetcode.com/problems/reverse-string/문제를 해결한 방법반으로 접어서 서로 값을 바꿔주면 됩니다.

[LeetCode] Maximum Depth of Binary Tree [내부링크]

문제 링크 : https://leetcode.com/problems/maximum-depth-of-binary-tree/문제를 해결한 방법좌, 우측 노드를 탐방하며 depth를 레벨별로 늘려주면 됩니다. 그 중 최댓값을 출력하면 됩니다.

[LeetCode] Min Stack [내부링크]

문제 링크 : https://leetcode.com/problems/min-stack/문제를 해결한 방법가장 직관적인 방법으로 Stack을 2개 써서 풀이했습니다.일반 Stack, 그리고 최솟값을 순서대로 담을 Stack입니다. minStack에는 top()보다 작은 값들이 들어올 때만 push해줍니다. 그리고 순서를 식별할 idx라는 변수를 추가했습니다.insert시 몇 번째 값이 들어오는지 idx와 함께 value를 넣어줍니다. 이 때, minStack에는 top보다 값이 작을 때만 넣어줍니다.pop을 할 때는 stack에서 빠져나가는 인덱스 번호와 minStack의 top에 있는 식별자가 일치한다면 minStack을 pop해주면 됩니다.top()은 stack의 top을 출력하면 되고, getMin()은 minStack의 top을.......

[LeetCode] Count and Say [내부링크]

문제 링크 : https://leetcode.com/problems/count-and-say/문제를 해결한 방법하향식으로 접근했습니다. 종료조건인 n=1일 때부터, 다시 reformat하면서 답을 도출하는 방식입니다.reformat 메서드는 연속 구간을 확인하여 count와 char를 세주고 String에 이어 붙여서 반환하는 메서드입니다.

[LeetCode] Plus One [내부링크]

문제 링크 : https://leetcode.com/problems/plus-one/문제를 해결한 방법마지막 digit에 +1을 하고, 10을 넘어가면 다음 로직으로 계속 이어갑니다. 10을 넘어가지 않는다면 그 자리에서 로직을 종료합니다. 만약 MSD가 10이라면 배열의 사이즈가 변하므로, 새로운 크기 n+1을 할당하고 MSD에 1을 넣고 리턴합니다. 나머지 digits으로부터 +1이 넘어온 것이기 때문에 기존 배열의 MSD가 10이 된 것이고, 그렇다면 나머지 Digits은 0임이 보장되기 때문입니다.

[LeetCode] House Robber [내부링크]

문제 링크 : https://leetcode.com/problems/house-robber/문제를 해결한 방법DP를 이용하면 됩니다. 현재(=x)까지 최대로 훔칠 수 있는 돈은 다음 2개의 값 중 최대입니다.1) 직전 집까지 훔친 최대의 값2) 2개 전의 집까지 훔친 최대의 값 + 현재 집의 돈 Index에서 자유롭게 하기 위해 n+2로 선언하여 풀이했습니다. 위와 같은 로직으로 굳이 배열을 쓰지 않고, 2틀전, 하루전, 오늘이라는 변수 3개만으로도 풀 수 있습니다.최대로 훔칠 수 있는 돈은 마지막 날에서 하루전 또는 당일에 결정되므로 day를 리턴하면 됩니다.

[Java] 함수형 인터페이스와 람다 표현식 소개 [내부링크]

함수형 인터페이스(Functional Interface)- 추상 메서드를 딱 하나만 가지고 있는 인터페이스- Single Abstract Method 인터페이스- @FunctionalInterface 어노테이션을 가지고 있는 인터페이스추가적으로 다른 메서드를 추가해줄 수도 있습니다.사용은 어떻게 할까요? 다음과 같이 익명 내부 클래스를 재정의하고, 사용할 수 있습니다.람다 표현식인터페이스가 하나라면 다음과 같이 코드를 줄여서 사용할 수 있습니다.이것이 람다 표현식입니다. 함수형 인터페이스를 구현할 때 쓸 수 있는, 람다 형태의 표현 방법입니다. 코드를 많이 줄일 수가 있습니다.만약 저렇게 한 줄로 표현하는 것이 아닌, 여러 줄로 표현해야 하는 로직이라면?위와.......

[Java] 자바에서 제공하는 함수형 인터페이스들 [내부링크]

java.lang.function 패키지에 모든 것들이 있습니다.기본적으로 Function<T,R> 을 사용하는 예제를 확인해보겠습니다.implements를 이용해서 Java에서 제공하는 Function<T,R>를 활용했습니다.이 때, T는 input type을, R은 result type을 의미합니다.물론 람다식으로 바로 활용할 수도 있겠습니다.이러한 함수형 인터페이스를 조합하여 사용할 수도 있습니다. compose를 이용하면 가능합니다.상황을 가정해보겠습니다. 어떤 값에 2배를 하는 함수형 인터페이스 구현체가 있고, 어떤 값에 +10을 하는 함수형 인터페이스 구현체가 있습니다. 만약 어떤 값 x에 2배를 하고나서 +10을 하려면, 우리는 2배를 먼저 계산하고 그다음 +1.......

StringUtils [내부링크]

https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.htmlApache Commons에서 제공하는 StringUtils를 쓰는 이유1. null String에도 안전하게 처리 가능. 입력 String이 null이면, return null;2. 기능이 많다. 왠만한 문자열 작업을 다 할 수 있다.

[Java] 람다 표현식과 Shadowing [내부링크]

예를 들어 다음과 같은 Supplier Interface가 있습니다.( ) 안에 들어가는 값은 함수 인자 값을 의미하고, { }; 로 표현되는 부분은 body를 의미합니다.만약 body가 1줄이라면, { } 를 생략할 수 있습니다. Supplier는 함수 인자값이 없고 return값만 존재하기에 위와 같이 작성합니다.만약 2개의 인자값이 들어온다면? 여기서 BinaryOperator는 BiFunction<Integer,Integer,Integer>의 축약형입니다.Shadowing에 대해 이야기를 해보겠습니다.우선 코드를 먼저 보시죠.자바8 이전에는 익명클래스, 로컬 클래스, 람다에서 사용하는 값은 항상 final을 명시해야만 했습니다. 그러나 자바8이 넘어오고 나서부터는 final 표현이 없어도 fin.......

[LeetCode] Power of Three [내부링크]

문제 링크 : https://leetcode.com/problems/power-of-three/문제를 해결한 방법단순하게 3^x (x=0,1,2..... )로 표현할 수 있는지 확인하는 문제였습니다.0이하라면 3^x로 표현할 수 없으니 커팅을 해줍니다.n>=1인 수에 대해서는 다음과 같은 로직을 진행합니다.1. n>1일 때까지 3으로 나눴을 때 나머지가 나오면 false입니다.2. 1이 될 때까지 나머지가 0이였다면 최종적으로 true로 반환해주면 됩니다.같은 개념으로 map에 1<<31-1 의 수의 범위에 있는 3의 제곱수를 넣어주면 됩니다. 그리고 n이 map에 포함하는지를 리턴해주면 됩니다.

[LeetCode] Intersection of Two LinkedList [내부링크]

문제 링크 : https://leetcode.com/problems/intersection-of-two-linked-lists/문제를 해결한 방법제 로직은 다음과 같습니다.1. 각 노드의 개수를 세줍니다. => acount, bcount2. 길이를 맞추기 위해 더 긴 ListNode의 head를 diff만큼 이동합니다.3. 두 리스트 노드를 하나씩 이동하며 노드가 같은지 비교합니다. 만약 노드가 같다면 해당 노드를 반환하면 됩니다.4. 끝까지 갔는데도 리턴하지 못했다면 Intersection이 없다는 의미이므로 null을 반환하면 됩니다.그리고 다음과 같은 로직도 있습니다.1. 우선 두개(A,B)의 리스트 노드의 head에서 각각 하나씩 이동합니다.2. 만약 A가 끝에 도달했다면 B의 포인터를 따라갑니다.......

1269번 : 대칭 차집합 [내부링크]

문제 링크 : https://www.acmicpc.net/problem/1269문제를 해결한 방법A배열의 값을 Map에 담아주고, B배열을 탐색하면서 A와의 중복된 수의 개수(=c)를 세준다.최종적으로 답은 a+b-2*c가 된다.

1302번 : 베스트셀러 [내부링크]

문제 링크 : https://www.acmicpc.net/problem/1302문제를 해결한 방법Map에 팔린 책들을 Count해준 뒤,다른 자료구조에 담아 Value 순으로 정렬하면 됩니다. 만약 Value가 동일하다면 Key가 앞선 순으로 정렬하면 됩니다. Map에서 한 번에 처리하고 싶었으나, 새로운 메모리를 활용하지 않고는 마땅한 방법이 없는 것 같아 이렇게 풀이했습니다. 혹시 더 좋은 방법을 아신다면 공유해주시길 바랍니다.

@GeneratedValue [내부링크]

@GeneratedValue만 작성하면 Default가 AUTO 전략을 따르게 되고,그중 H2 DataBase는 Sequence전략을 따른다. 현재 테스트용으로 쓰고 있는 데이터베이스는 H2인 상태에서,Member의 PK를 다음과 같이 지정하고,Item의 PK를 다음과 같이 지정했다고 하자.Member -> Item -> Member -> Item 순으로 저장을 하면 다음과 같이 나온다.PK가 (1,3) -(2,4) 세트로 나오고 있다. 테이블마다 각각 (1,2...)-(1,2...) 로 가는 것에만 익숙했던 나는 만족스럽지 못했다. 시퀀스는 유일한 키 값을 생성해주는 하나의 객체이며, 테이블과 독립적으로 저장되고 생성된다. 따라서 하나의 시퀀스를 여러 테이블에서도 활용할 수 있게 된다. Memo.......

[LeetCode] Intersection of Two Arrays II [내부링크]

문제 링크 : https://leetcode.com/problems/intersection-of-two-arrays-ii/문제를 해결한 방법두 배열을 정렬한 뒤 투 포인터를 이용하여 풀었습니다.A, B 배열을 정렬하고 각각의 배열을 가리키는 인덱스를 i, j라고 합니다.그리고 i가 가리키는 값이 j가 가리키는 값보다 작다면 i의 인덱스를 늘려주고, 반대면 j의 인덱스를 늘려줍니다. 동일하다면 List에 Insert를 합니다.이 과정을 i<A.size && j<B.size 일 때까지 반복합니다.최종적으로 int[] 배열로 답을 출력하면 되는데, 저는 list의 size()를 읽어와서 새로 int형에 값을 넣는 방법을 썼었지만, Stream을 이용하면 단 한줄만에 구현이 가능했습니다.코드 1.......

[LeetCode] Number of 1 Bits [내부링크]

문제 링크 : https://leetcode.com/problems/number-of-1-bits/문제를 해결한 방법Data 1.위와 같은 숫자가 int형 매개변수로 넘어오기도 하고Data 2.위와 같은 숫자가 int형 매개변수로 넘어오기도 합니다.0b ~ : 2진수0~ : 8진수0x~ : 16진수그런데 앞 부분이 1로 넘어올 수도, 0으로 넘어올 수도 있습니다.문제에서는 넘기는 숫자는 무조건 Binary 라고 합니다. 그러면 비트 연산을 이용하면 되겠습니다.그리고 문제 조건으로 unsigned라고 했기 때문에 2의 보수로 값을 표현하면 맨 앞의 비트는 부호를 나타내기 때문에 최상위 비트가 1일 시에 그 값은 -2^31 = -2,147,483,648를 의미하게 됩니다.따라서 비트 연산으로 1의.......

[LeetCode] Best Time to Buy and Sell Stock [내부링크]

문제 링크 : https://leetcode.com/problems/best-time-to-buy-and-sell-stock/문제를 해결한 방법다양한 방법으로 풀어봤습니다. Brute Force로 하나하나 값을 다 비교하며 최대 이익을 찾는 방법, Greedy로 O(N)으로 푸는 방법, Segment Tree로 O(NlogN)으로 푸는 방법으로 풀어봤습니다.Brute Force의 로직은 단순히 현재 이후의 모든 가격을 탐색해보며 최대 이익을 찾는 방법입니다.Greedy 로직은 Current Day는 무조건 파는 날이라고 가정하고, 이 전까지의 최소 가격을 이용하여 최대 이익을 업데이트 하는 방법입니다. Current Day에서 팔기 직전에 현재까지의 최소 가격을 업데이트 해준 뒤 발생한 이익을 업데이트하는 방식입.......

[LeetCode] Happy Number [내부링크]

문제 링크 : https://leetcode.com/problems/happy-number/문제를 해결한 방법Cycle을 형성하는지, Map에 값을 기록합니다. 1이 나오지 않으면서 Cycle을 형성한다면 false일 것이고, 계산 과정에서 값이 1이 나온다면 true일 것입니다. 값을 기록하기 위해 Map 자료구조를 활용했습니다.

[LeetCode] Climbing Stairs [내부링크]

문제 링크 : https://leetcode.com/problems/climbing-stairs/문제를 해결한 방법1, 2 계단씩 올라가므로, 피보나치 수처럼 풀면 됩니다. 즉, dp[current] = dp[current-1] + dp[current-2] 가 됩니다.메모리를 더 이용하면 다음과 같이 풀 수 있습니다.메모리를 조금이라도 더 줄이고자 한다면 다음과 풀 수도 있겠습니다.

[LeetCode] Symmentic Tree [내부링크]

문제 링크 : https://leetcode.com/problems/symmetric-tree/문제를 해결한 방법Tree를 Preorder와 PostOrder로 탐색한 뒤, 이 값들을 뒤집어서 서로 동일한지 확인하면 됩니다. 모두 같다면 Symmentic이며, 하나라도 다르다면, Symmentic하지 않습니다. null인 Node를 처리하기 위해 재귀 로직의 입구에 if문을 활용하여 null값도 넣어주었습니다.더 간단히, 재귀로 단순 비교하며 풀 수도 있습니다. 이 때, null처리를 해주면 됩니다.

Mac 터미널 alias 설정 [내부링크]

'll'과 같은 명령어를 사용했을 때 alias가 설정이 되지 않았다면 다음과 같이 명령을 실행하지 못한다.리눅스에서는 alias가 설정되어 있지만, Mac에서는 이제 기본 쉘로 zsh가 사용되기에 따로 별칭을 지어줘야한다.우선 bash profile부터 만들어보자.그리고 다음과 같이 profile을 작성해준다.(굳이 이게 아니더라도 본인이 원하는 alias 설정을 하시면 됩니다.)그리고 ESC 와 :wq를 입력하여 저장한 뒤 다음 명령어를 입력하여 실행한다.그리고 다시 'll'을 입력해보면, 원했던 결과가 나오는 것을 확인할 수 있다.그렇지만, 새 탭을 열 때마다 alias를 사용하려면 source ./.bash_profile 을 입력해야 하는 불편함이.......

IntelliJ Live Template 활용하기 [내부링크]

예를 들어서 테스트 코드를 작성하는 상황을 가정해봅니다.위와 같은 코드를 계속해서 사용하게 되는데, 하나하나 치기 귀찮습니다. 뼈대는 동일한데, 축약어로 해결하고 싶을 때 Live Template를 활용할 수 있습니다.[Preferences] - [Editor] - [Live Templates] 로 이동합니다.저는 tdd라는 축약어로 Live Template를 만들어보겠습니다.우선 제가 사용할 코드가 Java이기에, Java 탭에 만들어 줬습니다.+ 버튼인 Add -> Live Template를 선택합니다.Abbreviation에 축약어를 입력해주고, Template text에 작성하고 싶은 코드를 넣습니다.그리고 저는 하단의 Reference 글을 참고해서 Live Template 적용 후 커서가 바로 테스트 이름.......

[LeetCode] Maximum Subarray [내부링크]

문제 링크 : https://leetcode.com/problems/maximum-subarray/문제를 해결한 방법DP를 이용하면 O(N)으로 풀 수 있는 문제였습니다.현재까지 Subarray의 최댓값 = Max( 이전 Subarray의 Max 값 + 현재 값 , 현재 값 ) 으로 배열을 업데이트 하면서 이 때 Subarray의 최댓값을 구하면 됩니다.

[LeetCode] Remove Duplicates From Sorted Array [내부링크]

문제 링크 : https://leetcode.com/problems/remove-duplicates-from-sorted-array/문제를 해결한 방법비어있는 입력은 커팅해주고, 앞에서부터 차례로 중복된 값이 다를 때 마다 count를 늘려가며 중복 값을 제거하면 됩니다.

7576번: 토마토 [내부링크]

https://www.acmicpc.net/problem/7576미로 찾기와 같은 방식이지만,이번엔 출발점이 여러개인 방식이다....

1697번 : 숨바꼭질 [내부링크]

https://www.acmicpc.net/problem/1697BFS 기본 문제가 될 듯 하다.처음엔 다이내믹 프로그래밍인줄 ...

2178번: 미로탐색 [내부링크]

https://www.acmicpc.net/problem/2178예전에 DFS, BFS 라는 것을 몰랐을 때에배열을 만들어서 St...

1012번: 유기농 배추 [내부링크]

https://www.acmicpc.net/problem/1012내가 문제를 해결한 방법단순한 BFS, DFS 기본 예제라고 ...

2667번: 단지번호붙이기 [내부링크]

https://www.acmicpc.net/problem/2667난 솔직히 코드를 최적화해서 풀었다고 생각하지 않는다..나는 엄연...

1260번 : DFS와 BFS [내부링크]

https://www.acmicpc.net/problem/1260내가 문제를 해결한 방법나는 주로 그래프문제는 인접리스트로 구...

1541번: 잃어버린 괄호 [내부링크]

https://www.acmicpc.net/problem/1541아무리 생각해도 나는 코드를 좀 정답대로 안짜고신기하게 짜는 것 ...

17211번 : 좋은 날 싫은 날 [내부링크]

https://www.acmicpc.net/problem/17211우선 이 코드에 대해서는 할 말이 많다.후.......................

1912번 : 연속합 [내부링크]

https://www.acmicpc.net/problem/1912내가 문제를 해결한 방법입력을 받을 때 Greedy하게 저장하자. ...

2193번: 이친수 [내부링크]

https://www.acmicpc.net/problem/2193쉬운 문제이다. 그냥 피보나치 수열인데,내가 간과하는 것이 있었다....

11726번: 2xn 타일링 [내부링크]

https://www.acmicpc.net/problem/11726진짜 얕봤다풉 뭐야 이문제 그냥 피보나친데 뭐그러고 풀었는데그리...

1149번: RGB거리 [내부링크]

https://www.acmicpc.net/problem/1149좀 애먹었다.최적화 하면서 문제 풀고 있는 것 같지가 않다아직 너무...

1003번: 피보나치 함수 [내부링크]

https://www.acmicpc.net/problem/1003가만보니 나는 구조체를 참 즐겨쓰는 것 같다.

2579번: 계단 오르기 [내부링크]

https://www.acmicpc.net/problem/2579문제 이해를 잘 해야한다.만약 내가 어떤 문제를 이해함에 있어서...

1463번: 1로 만들기 [내부링크]

https://www.acmicpc.net/problem/1463

9095번: 1,2,3 더하기 [내부링크]

https://www.acmicpc.net/problem/9095내가 문제를 해결한 방법1 -> 1 dp[1]=1 의미 : 1을 만...

1049번: 기타줄 [내부링크]

https://www.acmicpc.net/problem/1049음... 이건 그냥 우선 모든 가능한 경우의 수를 미리 차단하기위해낱...

1946번: 신입 사원 [내부링크]

https://www.acmicpc.net/problem/1946푸힝힝시간 복잡도의 중요성을 깨닫게 해주는 구나1초의 기준 1. ...

2875번: 대회 or 인턴 [내부링크]

https://www.acmicpc.net/problem/2875흠 머리아퍼 부등호 세우는거...............짝을 짓는데 k명 나가야...

1120번: 문자열 [내부링크]

https://www.acmicpc.net/problem/1120단순히 A와 B를 비교하는 문제, 배열 인덱스를 유념하면 됨

10610번: 30 [내부링크]

https://www.acmicpc.net/problem/10610아... 진짜 이건 내가 사실 도움을 받고 푼 것이라서 내가 온전히 ...

2217번: 로프 [내부링크]

https://www.acmicpc.net/problem/2217내가 문제를 해결한 방법이 문제는 크기 순으로 정렬을 한 다음...

1931번: 회의실배정 [내부링크]

https://www.acmicpc.net/problem/1931내가 문제를 해결한 방법이 문제는 빨리 회의를 끝내고 싶은 것...

5585번: 거스름돈 [내부링크]

https://www.acmicpc.net/problem/5585내가 문제를 해결한 방법이 문제 또한 1원 4원, 5원처럼 다른 동...

11047번 : 동전0 [내부링크]

https://www.acmicpc.net/problem/11047내가 문제를 풀이한 방법1 ≤ Ai ≤ 1,000,000, A1 = 1...

11399번: ATM [내부링크]

https://www.acmicpc.net/problem/11399내가 문제를 해결한 방법SJF 스케줄링을 생각하면 된다. S...

[LeetCode] Merge Two Sorted Lists [내부링크]

문제 링크 : https://leetcode.com/problems/merge-two-sorted-lists/문제를 해결한 방법처음엔 head를 만들고, MergeSort를 하듯이 하나씩 이어 붙이면서 결과적으로는 head.next를 리턴하는 방법으로 짰습니다. 비어있는 리스트 노드에 대해 처리를 해줘야했기에 값이 있을 때만 Node를 만들어서 값을 할당하는 식으로 구현했습니다.그런데 같이 스터디 하시는 분들의 코드를 보니.. 다음과 같이 정말 간단하게도 구현이 가능합니다.즉 새로 노드를 생성할 것 없이 주어진 입력 l1, l2를 이용해서 재귀로 list를 이어붙이는 방식입니다. 정말 멋진 코드입니다.

[LeetCode] Pascal's Triangle [내부링크]

문제 링크 : https://leetcode.com/problems/pascals-triangle/문제를 해결한 방법상단에서부터 각 Row당 1~numRows개의 value를 넣습니다.각 Row에서 시작과 끝점은 1로 고정입니다.그 외의 점(j)은 바로 위 Row의 j-1, j 번째 값의 합입니다.

[LeetCode] First Unique Character in a String [내부링크]

문제 링크 : https://leetcode.com/problems/first-unique-character-in-a-string/문제를 해결한 방법문자열의 문자 하나하나에 대응하는 알파벳 인덱스(0~25)를 alpha[] 배열에 Counting을 해줍니다.그리고 다시 문자열 처음부터 alpha[i]의 개수가 1이면 리턴합니다.for문을 벗어났음에도 리턴하지 못했다면 답이 없으므로 -1을 출력하면 됩니다.O(N)으로 풀이할 수 있습니다.

[LeetCode] Missing Number [내부링크]

문제 링크 : https://leetcode.com/problems/missing-number/문제를 해결한 방법가장 먼저 생각나는 방법은 입력으로 들어오는 숫자를 0~N을 담을 수 있는 N+1 크기의 배열을 생성하고 각각 카운팅을 한 뒤, 0부터 N까지 차례로 탐색하며 Missing Number를 찾는 방법입니다.이 방법은 추가적인 메모리 O(N)을 필요로 하고, 시간 복잡도도 O(N)이 걸립니다.두 번째는 Sorting 후에 앞에서부터 0~N을 하나씩 찾아가는 방법입니다. 추가적인 메모리는 필요하지 않지만 기본적으로 QuickSort가 적용되기에 O(NlogN)의 시간복잡도가 추가로 소요됩니다. 그리고 답을 찾아가는 과정에서 O(N)만큼의 시간이 걸립니다. 이 방법이 가장 느렸습니다.......

17219번 : 비밀번호 찾기 [내부링크]

문제 링크 : https://www.acmicpc.net/problem/17219문제를 해결한 방법Map을 이용하여 처리하면 됩니다.

Mac 기준 IntelliJ 단축키 [내부링크]

현재 포커스 : Control + Shift + R이전 실행 : Control + R라인 복사 : Command + D라인 삭제 : Command + back space라인 합치기 : Control + Shift + J구문 단위 이동 : Shift + Command + 위 또는 아래라인 단위 이동 : Shift + Option + 위 또는 아래인자값 보기 : Command + P해당 내용 문서 보기 : F1단어 단위 이동 : Option + 좌 또는 우라인 처음과 끝으로 이동 : Fn + 좌 또는 우라인 전체 선택 : Shift + Command + 좌 또는 우페이지 업, 다운 : Fn + 위 아래포커스 범위 잡기 : Option + 위 아래포커스 이전 / 다음으로 이동 : Command + [ or ]오류난 곳으로 자동 이동 : F2현재 파일에서 검색 : Command + F현재 파일에서 교체 : .......

1074번 : Z [내부링크]

문제 링크 : https://www.acmicpc.net/problem/1074문제를 해결한 방법naive한 방법으로 0,0부터 시작해서 분할 정복을 좌상단, 우상단, 좌하단, 우하단 순으로 count를 하며 답을 찾을 수도 있습니다. 그렇지만 이 방법은 조금 느립니다.조금 더 빠르게 하는 방법은 현재 범위 내에 있는지 판단하는 방법입니다.현재 범위 내에 있다면 4분할을 하여 좌상단, 우상단, 좌하단, 우하단으로 쪼개면서 분할 정복을 하는 방법이 있습니다. 우선 현재 블럭의 한변의 길이를 size, 4분할한 블럭의 한변의 길이를 msize라고 합시다. msize = size/2 일 것입니다.좌상단으로 분할할 때는 현재 count 개수를 그대로 이동하고, 우상단으로 이동.......

[Vue] Vue 특징 [내부링크]

Vue란 사용자 인터페이스를 위한 Front-End에 적용할 수 있는 프레임 워크입니다.jQuery 등으로 작업...

[Vue] { {  } }  (Mustache) [내부링크]

{ {  } }  는 data에 선언했던 model 객체의 데이터를 참조합니다.그리고 { {  } } 는 데이터를 HTML이 아닌일...

[Vue] 인스턴스 [내부링크]

자바에서와 마찬가지로인스턴스를 생성해야 Vue를 사용할 수 있습니다.Vue 인스턴스인 뷰모델(View M...

[Vue] 시작하기 [내부링크]

우선 node.js가 필요하므로https://nodejs.org/ko/에 가서 LTS 버전을 다운 받는다.그러면 위와같이 ...

[Vue] 인스턴스 LifeCycle [내부링크]

예전에 서블릿에 대한 포스팅을 할 때 서블릿 라이프사이클을 말한 적이 있었습니다.뷰에서도 라이프 사...

[Vue] 인스턴스와 컴포넌트 [내부링크]

컴포넌트를 사용하는 이유는 화면은 일정하지만 데이터를 바꾸어서 보이고 싶을 때 사용합니다.예를 들어...

[Vue] Directive 첫 번째 [내부링크]

Vue는 디렉티브라는 기능을 제공합니다.디렉티브는 HTML의 속성 값을 활용해서 만든 특수한 기능입니...

[Vue] Directive 두 번째 [내부링크]

v-bind이번엔 배열과 객체를 콜라보 해봤습니다.m으로 배열 각각의 순서에 접근을 한다음 첫번째 배열의 인...

[Vue] 체크박스 v-model & 사용자 정의 Directive [내부링크]

이번에는 자주 사용하는 체크박스를 어떻게 클릭할 때마다 실시간으로 데이터를 받아올 수 있을지에 대해 ...

[Vue] Restful Service과 Axios [내부링크]

SpringBoot를 이용하여 Restful 서비스를 구축하여 데이터를 가져오고Vue에서는 화면을 만드는 방식으...

[Vue] Component [내부링크]

Component란 UI를 구성하는 각각의 구성물입니다.하나의 부품이라고 생각하면 편하겠습니다.UI상에 ...

[PWA] Progressive Web App 이란? [내부링크]

PWA(Progressive Web Application)- 웹과 앱의 장점을 결합한 웹 어플리케이션. 본질은 웹이지만 &#x...

[React] 간단하게 Modal 사용하기 [내부링크]

개인적으로 만들고 싶은 페이지를 구현하다가, 모달창을 띄우는 방법 중 최고로 쉬운 방법인 것 같아서 포...

자바스크립트로 form 유효성 검사하기 [내부링크]

이와 같이 간단한 form을 만들었다.이 form이 비밀번호가 8자리 이상인지, 아이디는 입력되었는지를 판단하...

CSS로 Color 칠하기 [내부링크]

CSS로 간단한 색칠공부id는 #class는 .그냥 태그는 태그.그리고 위에서 순서대로 내려오기 때문에모든...

[JSP] JSP(Java Server Pages)란? [내부링크]

JSP란?JSP란 Java Server Pages의 약자로, 웹사이트를 보다 쉽게 구축할 수 있도록 만들어주는 서...

[jQuery] jQuery란? [내부링크]

간단하게 말해서자바스크립트 라이브러리임.(자바스크립트 프레임워크라고 한다)왜 쓰냐면간편한 기능들...

[jQuery] Ready [내부링크]

우리는 jQuery를 언제 사용하냐면DOM Tree(Document Object Model Tree)가 준비가 되면, 스크립트...

[jQuery] css 적용하기 [내부링크]

css문을 우리는 <style></style> 이 태그 안에 작성했었는데jQuery답게 편하게 jQuery에서 ...

[jQuery] 여러 태그 선택적으로 css 적용하기 [내부링크]

table 예제 같은 경우엔 td, th, tr등 중복적으로 쓰는 경우가 많다마치 for문의 탄생 비화와 같다.태그...

[jQuery] Click Event [내부링크]

이런 form을 만들어 보았습니다.현재 클릭이벤트를 발생시킬 수 있는건아이디 부분을 클릭했을 때좋아요 ...

[jQuery] append, appendTo [내부링크]

버튼을 만들었습니다이걸 이제 누를때마다Dolphago라는 글자가 나오게 하려고 합니다.누를때마다 새로고...

[JSP vs Servlet] [내부링크]

JSP가 Servlet보다 더 최신기술Jsp로 할 수 있는 것은 Servlet으로 할 수가 있고 Servlet으로 할 수...

[JSP] 주석 [내부링크]

위 코드를 실행시키고마우스 오른쪽 버튼을 눌러서 소스보기를 눌러보면JSP주석은 JAVA코드에 포함...

[JSP] 구성요소1-Directive element [내부링크]

Element1. Directive element(지시어 요소)2.Scripting element(스크립팅요소)3. action element(액션...

[JSP] 구성요소2-Scripting element [내부링크]

Scripting element의 종류1. 식 문법 : <%=~%> 목적 : 출력할 때2. 선언 문법 : <%!~%>...

[jQuery] Event [내부링크]

jQuery로 버튼에다가 이벤트를 주는 것을 한번 더 해보겠다늘 그렇듯Document가 준비가 되면, jQuery문...

[jQuery] 하나의 태그에 여러 Event [내부링크]

똑같은 <h1> </h1>들의 나열이다이거를 각각 id설정해서 이벤트를 만드는 것은이제 우리는 ...

[jQuery] 동적으로 폼을 생성하고 삭제하기 [내부링크]

지금은 달랑 버튼 하나만 있다저 버튼을 눌러도 아무런 일이 발생하지 않는다.하지만 저 파일추가 버튼을...

[jQuery] 폼 유효성 검사 [내부링크]

기존 자바스크립트로는document.getElementById("아이디명")을 통해DOM객체를 받아들였다...

[Servlet] Servlet에서 jsp로 forward하기 [내부링크]

우선 Servlet에서는RequestDispatcher를 통해 설정된 파일명에 데이터를 가져간다.넘겨줄 때의 속성명은...

[Servlet] 요청방식 [내부링크]

요청방식 1 : Get 방식1. url 직접 입력후 요청할 때2. <a>로 link 걸고 요청할 때요청방식2 : P...

[HTML] 주로 사용하는 태그 정리 [내부링크]

action Form 내용이 웹 서버에 전달되어 처리될 서블릿 URL이나 jsp 파일명을 기술한다. 즉 submit 버...

[Servlet] Form 데이터 처리 방법 [내부링크]

Html의 Form에서 전달된 값은서블릿의 HttpServletRequest 객체가 제공하는 메소드를 사용해서 얻어내...

쿼리 스트링 (Query String) [내부링크]

쿼리 스트링(Query String)클라이언트가 웹 서버에 서비스를 요청할 때 추가로 전달하는 데이터로 Get ...

[Servlet] ServletContext [내부링크]

ServletContext 객체 ServletContext 객체는 웹 애플리케이션 내의 서블릿이나 JSP간에 자원을 공유...

Servlet 과 Node.js 란? [내부링크]

ServletServlet은 Java 플랫폼에서 컴포넌트를 기반으로 한 웹 애플리케이션을 개발할 때 활용하는 중요...

HTTP 프로토콜 [내부링크]

HTTP( Hyper Text Transfer Protocal) 인터넷 상에서 Hyper Text를 지원하는 Html과 관련 데이...

[Servlet] 동작 과정 [내부링크]

1. 웹 클라이언트는 웹 서버에게 HTTP 요청(Get 방식 or Post 방식) 메시지를 보낸다.이 때, 필요에 ...

[Servlet] 작성을 위한 기본 3가지 [내부링크]

HttpServlet 클래스HTTP 서블릿을 작성하기 위해서는 HttpServlet 클래스를 상속 받고, HTTP...

[Servlet] Life Cycle [내부링크]

1 ) Life Cycle서블릿 클래스는 Standard Edition 자바 클래스와 다르게, 객체를 생성하거나 메소드를 ...

[Servlet] HTML과 Servlet 연결 [내부링크]

주로 action을 통해서Servlet의 Annotation 주소에 해당하는즉 /param.do 로 이동하고 싶으면위와 같이 a...

[Servlet] 응용 인터페이스와 클래스 [내부링크]

그동안 공부를 너무 안했음으로..다시 공부를 시작해야 하려고 포스팅을 하기로 마음 먹었다!서블릿 작...

[Servlet] URL 매핑 [내부링크]

web.xml을 이용해서 매핑코드를 작성하고 있지만 이거 여간 불편한 일이 아니다.xml인지라 태그 이름도 다...

[Servlet] 페이지 이동 [내부링크]

Forward서블릿 간의 페이지 이동중에 동일 서버 내부에서 이동하는 가장 기본적인 메소드가 forward() 이...

[Servlet] Cookie [내부링크]

쿠키의 개념쿠키란 웹 서버에서 적은 양의 정보를 웹 브라우저에게 보내고, 웹 브라우저는 그 정보를 저장...

[BE] Session [내부링크]

세션의 개념과 처리 방식Http 프로토콜 특성상 연속된 연결은 존재할 수 없다. http 는 데이터의 전송이 ...

[Servlet] 서블릿 필터 (Filter) [내부링크]

서블릿 필터(Servlet Filter)란?Client로 부터 Server로 요청이 들어오기 전에 서블릿을 거쳐서 필터링...

[Servlet] 서블릿 어노테이션 [내부링크]

어노테이션(Annotation) 이란?어노테이션은 사전적 의미로 주석이라는 뜻이다. 기존의 자바 주석처럼 소...

[JSP] Page Directive [내부링크]

Page Directive의 속성1. contentType 속성contentType은 jsp 내용의 타입(html,xml)을 브라우저에 ...

[JSP] Include Directive [내부링크]

JSP에서 현재의 페이지로 다은 페이지를 포함하는 방법은 <jsp:include> Action 태그를 쓰거나in...

[JSP] 기본객체와 활성범위 [내부링크]

JSP에서는 표현식(expression) , 스크립트릿(scriptlets)에서 코드를 심플하게 만들어주기 위해서 기본...

Priority Queue(Heap) [내부링크]

우선 힙이라는 것을 간략하게 설명해야겠다.힙은 자료구조의 한 종류로서, 즉 데이터를 어떻게 담고 어떻게...

달팽이 배열 [내부링크]

이런 식으로 구현하는 것인데조건은 반복문을 4번 이하로 사용하라는 것골똘히 생각해보았다.문제를 푸는...

콤마를 포함한 조건문에 대하여.. [내부링크]

예전부터 배웠겠지만뭐가 출력될까?답은 1이다.%d에 값이 1자리가 들어가버렸기 때문이야그렇다면 이번...

C 띄어쓰기 없이 입력 받기 [내부링크]

scanf("%s", str) ..... 는 적합하지 않다."%s" 는 whitespace(공백) 전까지의 문자열...

int 10억개 선언은 [내부링크]

5.2GB나 잡아먹는다고 한다....

[JDBC] PreStatement [내부링크]

Class.forName("드라이버 명") : 드라이버를 로드하고Connection con = DriverManage...

[JDBC] 쿼리 실행문 [내부링크]

executeUpdate() : insert, update,delete 시 executeQuery() : select 시

TreeSet에 대한 고찰? [내부링크]

우선 기본적으로 TreeSet은 Key값에 대한 정렬을 해준다.근데 솔직히 문제 풀면서 Value에 대해 정렬...

substring [내부링크]

subString..........편하고 좋네

빅스비 캡슐 배포가이드 [내부링크]

https://bixby.developer.samsung.com/newsroom/ko-kr/%EB%B9%85%EC%8A%A4%EB%B9%84-%EC%BA%...

Bixby 서비스 아키텍쳐 [내부링크]

음성 인식과 자연어 이해(ASR, NLU)ASR ( AutoMatic Speech Recognition ) : 발화를 문자로...

Bixby Capsule 구조 [내부링크]

캡슐은 크게 4가지 영역으로 나눌 수가 있다.01. 모델링02. 비즈니스 로직03. UI/UX04. Training모...

Bixby Capsule 개발 기본 개념 - Modeling [내부링크]

빅스비 캡슐의 뼈대 구조를 잡는 작업입니다.많은 사람들이 버츄얼 어시스턴트 플랫폼과 차이를 느끼고 어...

Bixby 개발 기본 개념2 [내부링크]

1. Business Logic(실제 동작 코드)2. Training(사용자의 말을 잘 이해하게 하기 위해)3. UI&UX...

Bixby 시뮬레이터 [내부링크]

이번 포스팅에서는..시뮬레이터와 디버깅 On-Device 테스트1. 시뮬레이터 ( 발화 테스트를 할 수 있...

Bixby Action&Concept [내부링크]

- Action 명 ; Action의 이름다른 NL Training , view , Layout 등에서 이 이름이 불려짐- Type : ...

Bixby Modeling 기법 [내부링크]

-Bixby 값 검증 및 에러 처리Validation : input값이 의도대로 저장되었는지를 검증- Replace : Va...

Bixby Business Logic 구현 [내부링크]

Bixby에서 사용되는 Javascript- 기본적으로 Node.js와 비슷하다- Module.exports : 다른 파일에서 해...

Bixby Capsule 디자인 [내부링크]

1 . Capsule의 개요캡슐이란? Bixby를 통해서 사용자에게 제공하는 서비스 단위서비스의 단위들 - 갤...

strlen [내부링크]

진짜 컴파일러가 누구냐에 따라서strlen이 이렇게 나왔다 저렇게 나왔다 하는게 짜증난다..............s...

Python이란? [내부링크]

- 파이썬은 높은 레벨의 언어이며 인간이 인지하기 쉬운 문법으로 구성되어 있어서, 가장 배우기 쉬운 언어...

Python 준비 (아나콘다) [내부링크]

아나콘다란?- 파이썬 배포판의 일종.배포판이란 파이썬 기본 라이브러리 외에 다른 라이브러리를 통합하여 ...

아나콘다 환경에서 파이썬 구동 [내부링크]

이제 Anaconda Prompt를 열어보자.python이라고 쳐보자.print("hello python") 이라...

Jupyter NoteBook 환경 구축하기 [내부링크]

Jupyter NoteBook 특징1. 코드 작성을 쉽게하는 웹 응용 프로그램2. 코드, 수식관리, 시각화, 공유 등이...

Python 프로그래밍 - 연산 [내부링크]

1. 사칙연산- Python에서의 사칙 연산 기호는 더하기(+), 빼기(-), 곱하기(*), 나누기(/)로 구성되어 있...

Python 프로그래밍 - 변수와 문자열 [내부링크]

1. 변수- 자료형의 값을 저장하는 공간- '변수명 = data' 형태로 활용됨.- 변수를 활용할 ...

Python 프로그래밍 - 리스트 [내부링크]

리스트- 리스트는 []를 이용해서 생성함- 리스트에 포함되는 항목의 데이터 타입은 숫자, 문자열, bool, 리...

Python 프로그래밍 - 튜플 , 셋 [내부링크]

튜플 : 리스트와 유사한 특성을 가지나 []대신 ()를 이용하거나 괄호를 사용하지 않고 데이터를 입력함....

Python 프로그래밍 - 딕셔너리 [내부링크]

딕셔너리- 표제어와 설명을 사전형식으로 구축하여 사용하는 방법입니다.- 키(Key)와 값(Value)로 쌍으로...

Python 프로그래밍 - 조건문(if) [내부링크]

Python의 제어문에는 조건에 따라 명령을 수행하는 "조건문"과 그 조건을 만족할 때 까지 계속 ...

Python 프로그래밍 - 반복문(for) [내부링크]

반복문(for)1) 반복문의 구조- 순차적 작업을 반복적으로 수행하는 구문- 반복 변수가 반복 범위에 따라 ...

Python 프로그래밍 - 조건문(while) [내부링크]

조건문(while)1) while문의 구조- 범위가 아닌 조건에 따라 반복여부를 결정하는 방식- 반복 범위가 정해...

[Node.js] node.js 란? [내부링크]

node.js란?- node.js는 구글 크롬 브라우저에서 JavaScript 코드를 처리하기 위한 엔진인 v8 엔진을 사용...

[Node.js] 개발환경 구축 [내부링크]

1. nodejs 다운로드 받기https://nodejs.org/en/- LTS 버전을 다운로드 받아 설치한다.(LTS가 장기...

[Node.js] Nodeclipse 사용하기 [내부링크]

외부 개발 도구 사용하기- node.js 프로그램은 텍스트 문서를 작성할 수 있는 개발 도구라면 모든 개발도...

[Node.js] node.js 기본 작성법 [내부링크]

우선 간단한 테스트를 해봅니다.C언어나 자바처럼 %d, %s 또한 사용이 가능하지만node.js에서는 그 마저 ...

[Node.js] Assert 모듈 [내부링크]

Assert 모듈- Assert 모듈은 개발자가 만든 코드가 동작하기 전에 데이터나 수식에 대한 검사를 할 수 있...

[Node.js] Buffer 모듈 [내부링크]

Buffer 모듈- Buffer 모듈은 기억공간을 동적으로 만들 때 사용합니다.- JavaScript는 자료형이 따로 ...

[Node.js] Cluster 모듈 [내부링크]

Cluster 모듈- node.js에서 병렬처리를 위해 제공되는 모듈입니다.- 작업 하나의 단위를 worker라고 부릅...

[Node.js] Crypto 모듈 [내부링크]

Crypto 모듈- node.js에서 데이터 암호화 기능을 제공하는 모듈입니다.- 현재 존재하는 대부분의 암호화 ...

[Node.js] dns 모듈 [내부링크]

dns 모듈- 지정된 도메인의 dns 정보를 알아올 수 있는 모듈입니다.- 지정된 도메인의 ip 주소 등의 정보를...

[Node.js] fs 모듈 [내부링크]

fs 모듈- node.js에서 파일에 데이터를 쓰고 읽어 올 수 있는 기능을 제공하는 모듈입니다.비동기식 : 동...

[Node.js] Global 모듈 [내부링크]

Global 모듈- node.js에서 모듈을 생성하지 않고 사용할 수 있는 것들을 가지고 있는 모듈 객체입니다.- ...

[Node.js] OS 모듈 [내부링크]

- node.js 프로그램이 실행되고 있는 서버 컴퓨터와 관련된 정보를 제공합니다.- 보통 node.js로 서버용 컴...

[Node.js] Path 모듈 [내부링크]

path 모듈- path 모듈은 경로에 관련된 기능을 제공하고 있습니다.- 경로에 대해 여러 작업이 필요할 경우 ...

[Node.js] http 모듈 [내부링크]

http 모듈- http 모듈은 웹 애플리케이션을 개발할 수 있도록 제공되는 모듈입니다.- 일반적인 웹 서버와 ...

[Node.js] 외부 모듈 사용하기 [내부링크]

- node.js 에서 제공하는 기본 모듈만으로는 개발하기에 충분하지가 않습니다.- node.js는 오픈 소스 플랫...

[Node.js] express 모듈 [내부링크]

express 모듈- 웹 애플리케이션을 개발할 때 가장 많이 사용되고 있는 외부 모듈입니다.- http 모듈에 비해...

[Node.js] express 모듈 - 라우팅 [내부링크]

라우팅- 사용자 요청에 따라 응답 결과를 달리 전하는 것을 라우팅이라고 부릅니다.- 웹 개발시 이런 작업...

[Node.js] html Rendering [내부링크]

- 앞서 살펴 본 예제들에서는 클라이언트의 요청이 있을 때, res.send 함수를 이용하여 응답 결과를 전달했...

[Node.js] 동적 웹 페이지 만들기 [내부링크]

- express 에서 렌더링 모듈을 사용하면 동적 웹페이지를 만들 수 있습니다.- 렌더링 모듈은 jade, ejs 등 ...

dlib 설치하기 [내부링크]

이걸 설치하는데 너무나도 오래 걸려서, 기록을 좀 해놔야겠다.일반적으로 구글링을 통한 dlib 설치는 cmak...

Data Preprocessing [내부링크]

Data Preprocessing Train을 시키는 동안의 안정성을 위해서 필요한 과정우리의 Training Data는 기...

Opencv : 이미지 읽고 파일명 내맘대로 쓰고 저장하기 [내부링크]

빅스비 프로젝트 하면서더미 이미지만드는데이름을 하나하나 적고있자니너무 바보같아서 짠 코드이름을 s...

[스크랩] Anaconda 가상환경 [내부링크]

https://teddylee777.github.io/python/anaconda-%EA%B0%80%EC%83%81%ED%99%98%EA%B2%BD%EC%...

SNOW처럼 얼굴인식을 해보자 [내부링크]

used library1. OpenCV (영상처리) - pip install opencv-python2. Dlib (얼굴 인식) 설치3. numpy(행...

[Git] Github와 연결하기 [내부링크]

원격 저장소의 종류는 꽤나 많을 수 있는데가장 대중적이고 사랑받는 Github를 원격 저장소로 선택했다...

[Git] Push & Pull [내부링크]

이전의 포스팅은 로컬 저장소라고 하면이제는 원격 저장소를 이용하여 로컬 저장소의 변경 이력을 공유해보...

[Git] Git 설치&기본 [내부링크]

알고리즘 문제처럼 간단한 파일 하나하나가 아니라이제는 웹 공부를 하다보니프로젝트 사이즈가 커져서형상...

[CS] 화이트박스 테스트 vs 블랙박스 테스트 [내부링크]

화이트박스 테스트(White Box Test)화이트박스 테스트는 모듈의 원시 코드를 오픈시킨 상태에서 원시 코...

[Git] .gitignore가 적용이 안될 때 [내부링크]

분명히 gitingore에 적어주었는데git add .git commit -m "commit message"를 하면내가 gitign...

[CMD] 포트 강제 종료하기 [내부링크]

가끔 Web project를 돌리다보면사용하려는 포트가자꾸 사용중일 때가 있다.핵심은나는 그 포트를 피해서...

[npm] ERR! Maximum call stack size exceeded가 발생할 때 [내부링크]

npm ERR! code EINVAL npm ERR! EINVAL: invalid argument, read 발생할 때에도 사용할 ...

[Ubuntu] sudo apt-get update가 안될 때 [내부링크]

첫 번째 방법두 번째 방법(내가 해결한 방법)

[Network] TCP/IP 와 HTTP의 차이 [내부링크]

TCP/IP 프로토콜은 HTTP와 어떻게 맞물려서 동작하는 것인가? TCP/IP 는 Transport 계층...

공인 IP vs 사설 IP [내부링크]

cmd에서 ipconfig를 통해 확인할 수 있는 IP는 사설 ip이고(공유기가 할당), 다음 사이트에서 내 컴퓨터...

[Network] OSI 참조 모델 [내부링크]

OSI 참조 모델데이터 통신 기술의 발전은 통신 네트워크의 발전을 가져왔으나, 각 업체의 독자적인 기술...

[Network] 인터네트워킹의 하드웨어 [내부링크]

인터네트워킹의 하드웨어의 종류인터넷을 연결하기 위해 사용하는 주요 장비로는 리피터, 브리지, 라우터, ...

어댑터 패턴(Adapter Pattern) [내부링크]

클래스를 바로 사용할 수 없는 경우가 있다. (다른 곳에서 개발했다거나, 수정할 수 없을 때)중간에서 변환...

그런 REST API로 괜찮은가 [내부링크]

서론이 포스팅은 위 세션을 들으면서, 발표자의 PPT 및 설명해 주시는 내용들을 정리한 것입니다.혼자서...

[Design Pattern] 디자인 패턴 [내부링크]

디자인 패턴이란?객체 지향 프로그래밍 설계를 할 때 자주 발생하는 문제들을 피하기 위해 사용되는 패턴....

[Network] 주소창에 www.naver.com를 치면 일어나는 일 [내부링크]

주소창에 www.naver.com 을 입력하면 어떤 동작 과정이 일어나서 우리가 네이버 화면을 볼 수 있는 걸까? ...

페르마의 소정리 [내부링크]

페르마의 소정리란?P가 소수이고 a!=0(mod p) 일때 을 만족한다.나는 이 인강을 보고 이해했다....

[Self] 금연 실패 후 재도전 [내부링크]

180일즉 6개월을 끊었을 때 쯔음의 일이다.뭐 그래봤자 지금으로부터 10일전이다.그 때 맡은 임무가뜻대...

[후기] AWS 요금폭탄 [내부링크]

50만원 나왔다.프리티어 1년이래서 안심하고 1개월도 배포 안했는데 아직 취준생으로서 감당하기 힘든 금...

[Self] Docker한테 뚜드러 맞음 [내부링크]

DB Connecting을 시도할 때볼륨 쪽 좀 어렵다.물론 도커 그 누구도 강요한 것도 아니지만,그저 ...

[후기] Docker를 사용해본 솔직한 내 생각 [내부링크]

우선 결론부터 말하면배포 과정이 진짜 간단하다.하지만 이 Docker가 어떻게 돌아가는지초기 세팅 과정...

[MV] Eight - IU(Feat. SUGA of BTS) [내부링크]

개인적으로 슬프고, 복잡한 감정이 들게 하는 노래. 들을 때마다 느끼는 감정이 달라진다. 아이유와 동갑...

[글귀] 가슴에 와닿는 맹자의 말 [내부링크]

하늘이 장차 이 사람에게큰 임무를 내리려 할 때에는반드시 먼저 그 심지를 지치게 하고,뼈마디가 꺾어지...

[판듀2] 채소가게 왕엄마 [내부링크]

왕엄마 장지은님.과거 가수의 삶을 살 기회가 있었으나, 남편의 반대로 꿈을 포기하셨다고 한다.4분 45초...

[Music] 투혼 - 리쌍(Lee Ssang) [내부링크]

투혼이 필요한 나에게.개리)아무도 말려주지 않는 공이 울린냉정한 지옥같은 링그 위에 올라 긴 호흡 소리...

[MV] 그때 그 아인 - 김필 [내부링크]

개인적으로 좋아하는 노래, 뮤비, 가사길었던 하루 그림잔아직도 아픔을 서성일까 말없이 기다려 보면 쓰...

[글귀] 박새로이의 대사 [내부링크]

가슴 깊이 새겨두어야 할 마음가짐.

[후기] What's the flavour? - 프링글스 [내부링크]

매장에서 특이한 걸 보고 호기심에 사봤습니다...제 맛 평가는..............도로포장할 때 꺼먼 아스팔...

[Self] 취준생 [내부링크]

쓴 맛이 나고...따갑다.다시...일어서야지......

금연 21일차 일기 [내부링크]

금연 3주차다.갑자기 이런 글을 올리게 된 이유는 어차피 블로그는 내 기록장이기 때문 :)이전에 금연 ...

금연 22일차 일기 [내부링크]

금연 일차 : 22오늘은 지난 상반기 면접스터디를 같이 했던 인원들과 간만에 만남이 있었다.여기서 두 분...

금연 23일차 일기 [내부링크]

금연 일차 : 23흡연장을 지나가면 냄새가 코를 찌른다. 맡기 싫다.길빵하는 사람을 흡연할 때도 매우...

금연 24일차 일기 [내부링크]

금연 일차 : 24오늘은 천둥/번개가 어마어마했다.비도 많이 오고..........센치해졌나.그래서 담배가...

금연 25일차 일기 [내부링크]

금연 일차 : 25어제 금연일기를 깜빡했네요.요 며칠간 잠만 늘어지게 자다가 일어나자마자 밥먹고 또 ...

금연 26일차 일기 [내부링크]

금연 일차 : 26이제 좀 익숙해졌다. 안 피는 사실이.한 번씩 머리가 지끈거리는 일이 생길 때마다 생각...

금연 27일차 일기 [내부링크]

금연 일차 : 27오늘 생긴 이슈는 피부다.지난 금연 때도 그랬지만역시나 이 때 쯤, 얼굴에 뭐가 올라...

금연 28일차 일기 [내부링크]

금연 일차 : 28오늘은 자주 가던 카페에서 종일 코딩을 했다.코로나여서 사람도 거의 없었다. 원래도 조...

금연 29일차 일기 [내부링크]

금연 일차 : 29아무 생각이 없다.금연할 수 있다. 이런 자신감이 아니라 그냥 담배에 대한 생각이 없다...

금연 30일차 일기 [내부링크]

금연 일차 : 30오늘은 불금~ :)나도 오늘부로 인턴이 끝났고, SK에 다니는 친구도 오늘부로 인턴이 ...

금연 31일차 일기 [내부링크]

금연 일차 : 31증상 : 불면증, 피부 트러블잠을 잘 못자서 피부트러블이 나는 것일지도 모르겠다....

금연 32일차 일기 [내부링크]

금연 일차 : 32오늘 일요일은 잠탱이였다.. 잠 자느라 담배생각이 안났다.벌써 8월의 마지막 날이다....

금연 33일차 일기 [내부링크]

금연 일차 : 33증상 : 피부 괜찮아짐. 밥먹고 가래가 또 조금씩 생기기 시작함.피부는 괜찮아졌다.그리...

금연 34일차 일기 [내부링크]

금연 일차 : 34금연 관련 증상 : 무료함전에 심심할 때마다 습관처럼 담배 피우던 걸이제 담배를 안 피우...

금연 35일차 일기 [내부링크]

금연 일차 : 35지난 금연 때, 먹다 남은 약이 있어서 이번 금연 3주 차까지 약을 복용했었는데, 블로그에...

금연 36일차 일기 [내부링크]

금연 일차 : 36오늘은 특이 증상 없다. 담배 관련해서 문득 든 생각도 없다.맥주를 마셨지만, 담배 ...

금연 37일차 일기 [내부링크]

금연 일차 : 37tx.begin();오늘은쓸 말이 딱히 없네요. :(tx.commit();

금연 38일차 일기 [내부링크]

금연 일차 : 38오늘은 뭔가 잘 안풀리던 날이었다.몸 컨디션, 알고리즘, 공부, 버스와 지하철 등..그...

금연 39일차 일기 [내부링크]

금연 일차 : 39오늘은 종일 잠자느라 담배 생각이 안났다.금연은 잘 유지하고 있다.기름진 음식을 과...

금연 40일차 일기 [내부링크]

금연 일차 : 402일 연속 잠귀신이 든 건지 모르겠다.잠이 계속 쏟아졌다.어떻게 이렇게 많이 잘 수가...

금연 41일차 일기 [내부링크]

금연 일차 : 41증상 : 잠, 잠, 잠잠을 자도 자도 피곤한 상태.금연 중에 흔한 증상이긴 한데, 나는 ...

[Music] Zoodasa Playlist [내부링크]

play 1 play 2 play 3 play 4 play 5 play 6 play 7 play 8 play 9...

금연 42일차 일기 [내부링크]

금연 일차 : 42금연 6주차! 확실한건 숨 쉬는 것이 편해졌다...항상 가래가 목 안을 간지럽게 매달려있...

금연 43일차 일기 [내부링크]

금연 일차 : 43요새 참 고민이 많다.발전하기 위해 끊임없이 노력해야 한다고 생각한다. 개발자는 특히, ...

금연 44일차 일기 [내부링크]

금연 일차 : 44가짜 사나이 로건 교관의 거칠지만 와닿는 명언이 있다."X밥이란, 도전하지도 않...

금연 45일차 일기 [내부링크]

금연 일차 : 45오늘은 코딩테스트를 보느라 개발 공부를 거의 못했다.TMI로 아까 떡볶이, 순대, 튀...

금연 46일차 일기 [내부링크]

금연 일차 : 46왜 그런진 모르겠지만, 갑자기 피부가 많이 뒤집어졌다.금연 후 스트레스는 잠 다음엔 ...

금연 47일차 일기 [내부링크]

금연 일차 : 47요새 일찍 잠이 온다. 요새 이 시간만 되면 눈이 감길랑 말랑.......초기 불면증 -> ...

금연 48일차 일기 [내부링크]

금연 일차 : 48증상 : 피부 트러블하하하하하...... 스트레스네요 :(디페린겔로도 막을 수가 없는 것...

금연 49일차 일기 [내부링크]

금연 일차 : 49한 동안 피부 이야기만 할 것 같다.많이 안좋아졌다. 피지 폭발.얼굴이 부은 느낌이 ...

금연 50일차 일기 [내부링크]

금연 일차 : 50증상 : 피부는 여전히 구림.금연은 습관이다. 습관.꾸준히...

금연 51일차 일기 [내부링크]

금연 일차 : 51증상 : 피부는 더이상 올라오지 않고, 가라앉고는 있음.근데 자국이 언제 없어지려나..

금연 52일차 일기 [내부링크]

금연 일차 : 52증상 : Nope, 아직 가라앉지 않은 트러블 有금연 50일 넘었으니까, 담뱃값 굳었으니 이...

금연 53일차 일기 [내부링크]

금연 일차 : 53증상 : X21일차부터 꾸준히 쓰고 있는데, 중간중간 피부만 괜찮으면 금연할 맛 나겠다!...

금연 54일차 일기 [내부링크]

금연 일차 : 54증상 : 피부 다 가라앉음, 흔적 관리 중물을 많이 마시기 시작했다. 디톡스 방법 중 하...

금연 55일차 일기 [내부링크]

금연 일차 : 55오땡 돌파.확실히 몸이 좀 착해진(?) 것 같다.담배 냄새를 맡으니까 비흡연자였던 것...

금연 56일차 일기 [내부링크]

금연 일차 : 56증상 : X디톡스 목적으로 물 많이 먹는 중..몸이 깨끗해져가는 느낌이 든다.

금연 57일차 일기 [내부링크]

금연 일차 : 57증상 : X오늘은 하루 종일 포트폴리오/이력서/자기소개서 작성하느라 :(공부 수율이 ...

금연 58일차 일기 [내부링크]

금연 일차 : 58증상 : 몸살기이 시국에 몸살기운이라니..... 체한 것 같기도 하다.집에만 있었는데.....

금연 59일차 일기 [내부링크]

금연 일차 : 59어제 잔병치레를 했다.몸이 약해져서 마음도 약해졌는지, 의지가 약해진 것이 느껴졌다....

[Self] 가짜 사나이를 보고... [내부링크]

가짜 사나이의 1,2,3편을 뒤늦게 봤다.물론, 고강도로 훈련을 받은 가짜 사나이 출연진들의 고통을 다 ...

금연 61일차 일기 [내부링크]

금연 일차 : 61증상 : X또 다시 찾아온 금연 안정기당분간 특별하지 않은(의미없는(?)) 증상과 내용...

[가짜사나이2] 로건 교관의 메세지 [내부링크]

이번 화를 본 직후의 느낌을 나중에도 생생히 기억하고 싶다. 그만큼 매우 강렬한 메세지를 던져줬다.잠...

[NHN] 2020 하반기 신입 개발자 공개채용 코딩 테스트 후기 [내부링크]

문제는 총 3문제, 구름 플랫폼에서 시험을 치렀습니다. 언어는 C/C++/Java가 가능했습니다.전체적으...

[Self] 선택의 기로 [내부링크]

우리는 인생에서 종종 선택의 기로에 놓이게 된다.인생을 길이라고 표현하면, 어떤 선택을 하냐에 따라 ...

금연 100일차 일기 [내부링크]

오랜만에 금연 일기 쓸 날이 왔네요..!일기를 안 쓴 40여일 동안 담배와 관련된 이야기만 하자면80일차 ...

금연 109일차 일기 [내부링크]

금연 일차 : 109100일 넘어가면 슬슬 약의 의존에서 벗어나야 한다고 생각한다. 그래서 챔픽스를 안 먹고...

금연 110일차 일기 [내부링크]

금연 일차 : 110확실히 입맛이 살아났는지.. 돼지가 따로 없다.친구들도 나에게 살찐 것 같다고 한다. ...

[SMTM9] VVS - 머쉬베놈 X 미란이 [내부링크]

쇼미더머니 보고 감동 느낀 건 처음이다. 4분짜리 영화를 본 기분. 둘이 무대 즐기면서 하는 것도 보기 좋...

수원 까마귀 또 시작.... [내부링크]

작년에 수원에 처음으로 오고나서 가을까지는 참 괜찮았는데, 날이 좀 추워지고나서 저녁에 집으로 돌아오...

[OS] 어셈블러(Assembler) [내부링크]

어셈블러(Assembler)의 역할어셈블러는 번역하는 과정에서 필요한 모든 정보를 데이터베이스에 저장하고 ...

[OS] 시스템 소프트웨어란? [내부링크]

시스템 소프트웨어의 개념응용 프로그램들을 지원하기 위해서 개발된 소프트웨어로, 사용자보다는 하드웨어...

[OS] 운영체제의 개념 [내부링크]

운영체제의 정의 하드웨어를 제어하는 소프트웨어입니다. 하드웨어를 활용할 수 있도록 펌웨어(Firmwa...

[OS] 프로세스 스케줄링(Process Scheduling) 알고리즘 [내부링크]

프로세스 스케줄링 알고리즘의 개념다중 프로그래밍 방식은 메모리에 여러 개의 프로그램을 적재함으로써 ...

[OS] CPU 스케줄링 [내부링크]

CPU 스케줄링의 개념다중 프로그래밍 방식의 운영체제는 하나의 주기억 장소에 여러 개의 프로세스가 실...

[OS] 임계 구역(Critical Section) [내부링크]

임계 구역의 개념다중 프로그래밍 운영체제에서 한순간에 여러 개의 프로세스에 의하여 공유되는 데이터 및...

[OS] 상호배제(Mutual Exclusion) [내부링크]

상호배제 개념임계 구역(공유 자원)을 어느 시점에서 단지 한 개의 프로세스만이 사용할 수 있도록 하며, ...

[OS] 세마포어(Semaphore) [내부링크]

세마포어(Semaphore)란?E. J. Dijkstra에 의해 고안된 프로세스 간의 상호배제 및 동기화 문제 해결 방...

[OS] 교착상태(Dead-Lock) [내부링크]

교착상태 정의두 개 이상의 프로세스가 하나의 자원을 공유하여 사용하고 있을 때 서로가 사용 중인 자원을...

[OS] PCB와 Context Switching [내부링크]

Process ManagementCPU가 프로세스가 여러 개일 때, CPU 스케줄링을 통해 관리하는 것을 말합니다....

[AWS] Spring 프로젝트를 AWS에 배포하기(1) - EC2 생성 [내부링크]

우리가 지금 해야할 일은스프링 프로젝트는 내부에서 돌아가는데이를 어디서든 접근이 가능한웹상에 배포...

[AWS] Spring 프로젝트를 AWS에 배포하기(2) - Putty를 이용한 인스턴스 접근 [내부링크]

인스턴스를 만들 때에잘 보관하라던pem 키를 사용할 시간이다.https://www.chiark.greenend.org.uk/~...

[AWS] Spring 프로젝트를 AWS에 배포하기(3) - 인스턴스 환경 설정(JAVA 설치) [내부링크]

인스턴스 내부로 들어온 상황이니다시 한번 상황을 복기해보도록 하겠다.우리는 AWS로부터 EC2를 생...

[AWS] Spring 프로젝트를 AWS에 배포하기(4) - 인스턴스 환경 설정(톰캣 설치) [내부링크]

웹 서버 구축을 위해서는 톰캣서버가 필요하다(WAS)이번 포스팅에서는 tomcat8을 설치해볼 예정이다....

[AWS] Spring 프로젝트를 AWS에 배포하기(5) - EC2에 프로젝트 올리기 [내부링크]

우선 Filezila 를 다운로드 받는다.(Client 버전)https://filezilla-project.org/파일질라를 실행...

[AWS] Spring 프로젝트를 AWS에 배포하기(6) - RDS로 데이터베이스 연결하기 [내부링크]

우선 RDS로 들어가자.이곳에서 데이터 베이스 생성을 눌러주자.나는 MySQL을 이용할 것이다....

[Docker] Window Docker 시작하기 [내부링크]

1. Docker 란?컨테이너 기반의 오픈 소스 가상화 플랫폼 입니다.⊙그렇다면 컨테이너란 무엇인가?컨...

[Docker] Docker 기본 명령어 [내부링크]

우리가 깃허브를 사용하는 것처럼, 도커도 도커허브(원격저장소)가 존재합니다.Hello World 도커 이미지...

[Docker] Nginx로 Docker 연습하기 [내부링크]

Nginx 컨테이너 실행하기이번 명령은 docker run [옵션] [이미지] 와 같이 사용되었습니다.이미지는 ngi...

[Docker] JIB를 이용하여 Spring 프로젝트를 도커로 배포하기 [내부링크]

* Jib Jib는 구글에서 제공하는 Java 애플리케이션 용 Docker를 작성하기 위한 플러그인 입니다.쉽게 ...

[Docker]Dockerfile을 이용해서 SpringBoot프로젝트를 Docker에 올리기(Dockerizing SpringBoot maven ver.) [내부링크]

1. jar로 배포하기우선 저는 jar로 실행하기 위해 이 블로그를 참고하여 실행가능한 jar파일을 만들었습...

[Docker] Docker-compose를 활용한 springboot+mysql [내부링크]

여러개의 컨테이너가 하나의 서비스를 운영하기 위해서는 데이터베이스 컨테이너를 run, 웹서버를 run, ...

최단 경로(Shortest Path) [내부링크]

한 곳에서 다른 곳으로 직접 가는 경우가 없는 경우 가장 빨리 가는 방법?가중치 포함, 방향성 그래프에...

lower_bound , upper_bound [내부링크]

1. lower_bound 란?1. 이진 탐색 기반의 탐색 방법.=> 배열 or 리스트가 정렬되어 있는 상태일 ...

Sliding Window [내부링크]

크기가 k인 각각의 부분 배열에 대한 최솟값들 중 최댓값을 찾는 문제만약 주어진 배열 { 3,4,1,2,3,4,6...

[Algorithm] 거품 정렬(Bubble Sort) [내부링크]

개념서로 인접한 두 원소의 대소를 비교하고, 조건에 맞지 않다면 자리를 교환하며 정렬하는 알고리즘입니...

[Algorithm] 선택 정렬(Selection Sort) [내부링크]

개념Selection Sort는 원소를 넣을 위치는 이미 정해져있고, 어떤 원소를 넣을지 선택하는 알고리즘입니...

[Algorithm] 삽입 정렬(Insertion Sort) [내부링크]

개념Insertion Sort는 2번째 원소부터 시작(index) 하여, start<=i<index인 구간, 즉 index...

[Algorithm] 퀵 정렬(Quick Sort) [내부링크]

개념Quick Sort는 분할 정복(divide and conquer) 방법을 주어진 배열을 정렬합니다.* 분할 정복(divid...

[Algorithm] 병합 정렬(Merge Sort) [내부링크]

개념합병 정렬이라고도 합니다. Divide and Conquer를 통해 구현.Divide and Conquer란 큰 문제를 작은...

[Algorithm] 힙 정렬(Heap Sort) [내부링크]

개념완전 이진 트리를 기본으로 하는 힙(Heap) 자료구조를 기반으로한 정렬 방식입니다. 최대 힙 트리나 ...

[Algorithm] 기수 정렬(Radix Sort) [내부링크]

개념데이터를 구성하는 기본 요소(Radix)를 이용하여 정렬을 진행하는 방식입니다.입력 데이터의 최댓값만...

[Data Structure] 해시 테이블(HashTable) [내부링크]

개념해시 테이블은 데이터의 키값을 해시함수를 이용해 인덱스화하고, 배열의 해당 인덱스에 데이터를 저장...

[Logic] XOR을 이용해서 SWAP하기 [내부링크]

XOR을 이용하면, 문자든 숫자든 위치를 서로 바꿀 수 있습니다.위와 같이 절반만 서로 SWAP하면 문...

[Algorithm] 벨만포드 알고리즘(Bellman-Ford Algorithm) [내부링크]

벨만포드 알고리즘이란?그래프가 가중치를 가지는 Edge로 이루어져 있을 때, 한 점(Vertex)에서 나머지 ...

Mask R-CNN Training 실습 [내부링크]

서론AI 기술을 활용한 서비스를 개발하려 공부하고 있는데 mask r-cnn을 활용하는 과정 중, 이미 Traini...

[JDBC] DAO vs VO vs DTO [내부링크]

DAO Data Access Object : Database의 data에 접근하기 위한 객체DataBase에 접근하기 위한 로직...

[Java] REST API 호출하기 [내부링크]

우선은 REST에 대한 내용을 알아야겠죠?위 블로그는 REST에 대해 아주 잘 정리가 되어 있는 블로그...

[JAVA] 파일 입출력 [내부링크]

1. 출력결과를 콘솔이 아닌 파일에 저장하기(Write)기본 project에다가 class파일 하나 생성해주세요.저는...

[Java] 상속개념의 간단한 이해 [내부링크]

Spring 관련 포스팅을 하다가, 짧게 상속개념을 설명하고 넘어가려 했는데 쓰다보니 말이 길어져서 포스팅...

[Java] ArrayList 값 순회 할 때, 속도와 메모리를 좀 더 개선하는 방법 [내부링크]

우선 A라는 ArrayList가 있다고 해보자. 이 ArrayList를 2중 포문을 사용하는 상황이라고 가정하자....

[Java] Overloading [내부링크]

기본적인 Overloading에 대한 설명은, 함수의 매개변수의 타입이 다르거나 매개변수의 개수가 다르다면 같...

[Java] hashCode() [내부링크]

이 메서드는 해싱(hashing)기법에 사용되는 "해시함수(hash function)"을 구현한 것이다.해싱은 ...

[Java] 쿠키(Cookie) 생성, 조회, 삭제 [내부링크]

서론JWT로 회원 인증 처리를 할 때, 쿠키를 활용하게 되는데, 서비스를 개발할 때마다 자주 쓰이는 녀석...

[Java] Fast IO [내부링크]

사용 예)FastIO io = new FastIO(); n = io.nextInt();BufferedReader보다 속도...

[Java] 래퍼(Wrapper) Class란? [내부링크]

객체지향 개념에서 모든 것은 객체로 다뤄져야 합니다. 그러나 자바에서는 8개의 기본 자료형(Primitive d...

[Spring] Mybatis 프로젝트 만들기 [내부링크]

프로젝트 생성은Spring Legacy Project-> Simple Spring Maven 선택프로젝트 생성하자마자 po...

[Spring] DAO [내부링크]

DAO(Data Access Object)는 우리가 기존에 Java에서 JDBC 코딩을 짜던 직접적으로 DB와 연결...

[Spring] Service가 왜 있나요? [내부링크]

Service와 Dao를 굳이 나눈 이유는 Service는 이름처럼 어느 곳에 서비스를 해주는 것인데 그 서비스 대...

[Spring] MVC [내부링크]

모델-뷰-컨트롤러(MVC)모델-뷰-컨트롤러는 시스템을 세 부분으로 분리하여, 서로 영향 받지 않고 개발할...

[Spring] SpringFramework 구성 [내부링크]

- Enterprise Application에서 필요로하는 기능을 제공하는 프레임 워크1. Spring CoreSpring 프레...

[Mybatis] Spring Web Basic Structure [내부링크]

Autowired는 우리가 일일히 생성자를 만들고 객체를 생성하는 작업을@ (어노테이션) 을 통해서 주입해주는...

[SpringBoot] Restful 서비스 만들기(mybatis ver.) [내부링크]

이번 시간에는 SpringBoot를 통해서Restful을 한번 만들어 보겠습니다.우선 저는 MySql에서저의 데이...

[SpringBoot] 프로젝트 생성하기 [내부링크]

사전 준비물 Java 11버전 설치 (자바 다른 버전을 사용해도 상관 없습니다.) IntelliJ 또는 Eclips...

[SpringBoot] 라이브러리 살펴보기 [내부링크]

3개밖에 라이브러리를 안가져왔는데, 프로젝트 왼쪽의 External Libraries 를 보면 수십개의 라이브러...

[SpringBoot] MVC와 템플릿엔진, API [내부링크]

HelloController.javahello-template.html서버 실행후 uri를 다음과 같이 쳐보면소스보기를 눌러서 ...

[SpringBoot] 회원 관리 예제[백엔드 개발] - 비즈니스 요구사항 정리 및 회원 domain과 repository 만들기 [내부링크]

연습용이기 때문에 굉장히 단순한 상황을 가정합니다.1. 비즈니스 요구 사항 확인 데이터 : 회원 ID, ...

[SpringBoot] 회원 관리 예제[백엔드 개발] - 회원 repository 테스트 케이스 작성 [내부링크]

회원 리포지토리 테스트 케이스 작성하기개발한 기능을 실행해서 테스트 할 때 자바의 main 메서드를 통해...

[SpringBoot] 회원 관리 예제[백엔드 개발] - 회원 서비스 개발 및 서비스 테스트 [내부링크]

다음과 같이 service package를 만들어주고 MemberService.java를 만들어주겠습니다.[MemberService....

[SpringBoot] 스케줄링(Scheduling) [내부링크]

스케줄링은 특정 기간 동안 작업을 실행하는 프로세스입니다. Spring에서 지원하는 Scheduler를 간편하게...

[SpringBoot] javax.persistence.TransactionRequiredException: Executing an update/delete query 해결하기 [내부링크]

JPA를 이용하던 도중 위와 같은 에러를 만났고 로그를 읽어보니 트랜잭션 처리가 필요하다는 로그였다. ...

[SpringBoot] Scheduler 동적으로 사용/중단하기 [내부링크]

서론이 내용을 정말 많이 찾아다녔다.. 스케줄러는 중지가 안 되나...... 갈아타야 하나.. ....... 그래도 ...

[스크랩] Spring Exception 전략 [내부링크]

https://cheese10yun.github.io/spring-guide-exception/#nullhttps://joont.tistory.com/157https...

failed to lazily initialize a collection of role [내부링크]

영속화 문제원인 : @Transactional 메서드를 빠져나가면 영속성이 해제가 되어 발생한다.@Transactional ...

[Gradle] implementation 과 compile(api)의 차이 [내부링크]

Java 프로젝트를 빌드하고 실행 시, 2개의 classpath가 포함되어 있다.1. Compile classpath *.java 코...

[SpringBoot] 컴포넌트(Component) 스캔과 자동 의존관계(Autowired) 설정 [내부링크]

컴포넌트 스캔과 자동 의존관계 설정회원 컨트롤러가 회원 서비스와 회원 레포지토리를 사용할 수 있게 의...

[SpringBoot] 자바 코드로 직접 스프링 빈 등록하기 [내부링크]

기존 회원 서비스와 회원 레포지토리의 @Service, @Repository, @Autowired 어노테이션을 제거하고 ...

[SpringBoot] 스프링 DB 접근 기술 #1 H2 데이터베이스 [내부링크]

개발이나 테스트 용도로 가볍고 편리한 DB, 웹 화면 제공 H2 데이터베이스 설치https://www.h2datab...

[SpringBoot] 스프링 DB 접근 기술 #2 순수 JDBC [내부링크]

우선 build.gradle에 다음과 같이 라이브러리를 추가해 줍니다.DB에 접속하기 위해서는 접속 정보가 필...

[SpringBoot] 스프링 DB 접근 기술 #3 스프링 통합 테스트 [내부링크]

MemberServiceIntegrationTest.java위의 코드를 실행해본다.이 상태에서 한 번 더 테스트를 실행하면, ...

[SpringBoot] 스프링 DB 접근 기술 #4 스프링 JdbcTemplate [내부링크]

순수 Jdbc와 동일한 환경설정을 하면 됩니다. 스프링 JdbcTemplate과 MyBatis 같은 라이브러리는...

[SpringBoot] 스프링 DB 접근 기술 #5 JPA [내부링크]

JPA 지금까지의 포스팅을 보면, 순수 JDBC -> JdbcTemplate로 오면서 코드량이 매우 줄어든 ...

[SpringBoot] 스프링 DB 접근 기술 #6 Spring Data JPA [내부링크]

개요스프링 부트와 JPA만 사용해도 개발 생산성이 정말 많이 증가하고, 개발해야할 코드도 확연히 줄어...

[SpringBoot] AOP가 필요한 상황과 적용 [내부링크]

AOP가 필요한 상황예를 들어, 모든 메소드의 호출 시간을 측정하고 싶다면?위와 같은 방식으로 서비스 ...

[JPA] SQL 중심적인 개발의 문제점 [내부링크]

SQL 중심적인 개발의 문제점 아직까지도 DataBase는 관계형 DB가 대세 -> SQL, SQL, S...

[JPA] JPA란? [내부링크]

JPA- Java Persistence API- 자바 진영의 ORM 기술 표준- JPA는 인터페이스의 모음- JP...

[JPA] 엔티티(Entity) 설계시 주의할 점 [내부링크]

1. Entity에는 가급적 Setter를 자제하자.Setter가 열려있다면, 변경할 수 있는 포인트가 많아진다.그러...

[Spring] Transaction(트랜잭션)과 @Transactional [내부링크]

Transaction트랜잭션은 하나의 논리적인 작업 단위를 구성하는 일련의 연산들의 집합을 말합니다.트랜잭...

[JPA] Entity를 찾지 못하는 이슈(Unknown Entity) [내부링크]

순수 JPA를 설정할 때 persistence.xml로 다음과 같이 설정하곤 한다.그런데, maven build방식으로는 ...

[JPA] 프록시(Proxy)란? [내부링크]

서론@XtoOne 은 기본 Fetch 전략이 Eager이기 때문에 N+1 이슈를 방지하기 위해 fetch 전략을 Lazy로...

[JPA] Transaction과 @Version에 대하여 [내부링크]

서론https://blog.naver.com/adamdoha/222107994396이미 위의 포스팅에서 선언적 트랜잭션의 종류와 간단한...

[Spring] IoC (Inversion of Control) [내부링크]

IoC (Inversion of Control)의미 : 제어권의 역전제어가 역전되었다는 말이 무엇일까?일반적인 (의...

[Spring] 빈(Bean) [내부링크]

빈(Bean)이란?Bean은 일반적인 객체인데, IoC 컨테이너가 관리하는 객체를 빈이라고 부릅니다.다음...

[Spring] 의존성 주입(Dependency Injection) [내부링크]

생성자로 Bean을 주입받는 방법원래 위와 같이 생성자에도 @Autowired를 붙여줄 수 있다. 이렇게 되면 생...

[Spring] AOP와 프록시 패턴 [내부링크]

Spring은 크게 IoC, AOP, PSA 3개의 스프링 트라이앵글이라고 하는 개념이 있다. IoC은 이전 포...

[Spring] @AOP 적용 실습 [내부링크]

만약, 성능을 측정하고 싶은 메서드가 있다고 가정합시다. 이를 AOP를 적용해서 성능을 측정해보겠습니...

[Spring] 스프링 PSA [내부링크]

PSA 란?Portable Service Abstraction. 한마디로 잘 만든 인터페이스.우리는 Servlet Applicatio...

[JPA] @OneToMany, @ManyToOne, @OneToOne, @ManyToMany 연관관계 정리 [내부링크]

서론제목은 거창하게 썼지만 꼭 알아야겠다고 느끼는 것 위주로 요약해서 정리할 것입니다. 이 포스팅에서...

[JPA] 상속 관계 매핑 - 조인 전략 [내부링크]

객체지향 언어에서 다루는 상속이라는 개념이 있지만, 관계형 데이터베이스에서는 상속이라는 개념이 없습...

[JPA] 상속 관계 매핑 - 단일 테이블 전략 [내부링크]

이전 포스팅의 조인 전략에 이어서, 이번 포스팅에서는 상속 관계 매핑시 단일 테이블 전략에 대해 알아보...

[JPA] 상속 관계 매핑 - 구현 클래스마다 테이블 전략 [내부링크]

구현 클래스마다 테이블 전략(Table-per-Concrete-Class Stratege)은 다음과 같이 자식 엔티티마다 테...

[JPA] @MappedSuperclass [내부링크]

@MappedSuperclass조인, 단일테이블, 구현클래스마다 테이블 전략은 상속 관계 매핑에서 사용되며, 부모 ...

[JPA] 값 타입과 임베디드 타입 [내부링크]

기본값 타입위와 같이 Member에서 String, Long이 값 타입입니다. Member 엔티티는 id라는 식별자 값도...

[JPA] 공유 참조, 불변 객체, 값 타입의 비교 [내부링크]

값 타입은 복잡한 객체 세상을 조금이라도 단순화하려고 만든 개념입니다. 따라서 값 타입은 단순하고 안전...

[후기] 삼성 합격 분석 및 전략 세미나 by Algorithm Jobs [내부링크]

우선 알고리즘 잡스.. 구글링 할때 자꾸 좌우에 광고가 뜨긴 했던 학원이다.사실 이미 알고 있었다. 대학교...

[후기] 레오폴드 갈축 텐키리스를 샀다.(FC750R 블랙/레드 영문) [내부링크]

와~~~~~~~금연 한달 성공! 정말 대견한 나에게 선물을 주기로 결심했다.그것은 바로 예전부터 정말로 갖고 ...

[후기] 금연 100일 [내부링크]

하위~ 오늘은 금연 후기를 적어보려고 한다~12시가 지나서 101이 되었다.#금연 100일 후기를 적어보려고 한...

[후기] 생애 첫 코딩테스트(삼성 역량테스트) [내부링크]

알고리즘을 2개월 정도 공부한 뒤SSAFY에서의 첫 시험..!결과는..한문제도 못품ㅎㅎㅎㅎㅎㅎㅎㅎㅎ...

[후기] 네이버 코딩테스트(2019 하반기) [내부링크]

나의 2번째 코딩 시험이였다.후.........아~~~~~~~~~~~호흡을 가다듬고..진정하고..우선 문제가 다...

[후기] LINE 코딩테스트(2019 하반기) [내부링크]

나의 3번째 코딩 시험이다음 결론부터 말하면 마지막문제가 어려웠다.대부분의 시간을 마지막 문제 푸는데...

[후기] 삼성 청년소프트웨어 아카데미(SSAFY) [내부링크]

서론내가 SSAFY 지원했을 때 후기를 찾아다녔듯, 이 글도 SSAFY에 관심이 있어 하는 사람들이 후...

[후기] Programmers Summer Coding 2020 코딩테스트 [내부링크]

어쩌다가 프로그래머스에서 코딩테스트가 열린다는 소식을 알게 되었다. 문제해결능력 연습을 위해 신청했...

[KAKAO] 2020 카카오톡 코딩테스트 후기 [내부링크]

총 3문제였고, 2019년 코딩테스트 전패에서, 2020년 첫승을 안겨준 코딩테스트였다.생각보다 잘 풀렸지만, ...

[KAKAO] 2020 카카오 인턴 코딩테스트 후기 [내부링크]

총 5문제, 그동안 공부했던 알고리즘에서 문제가 출제되어서 최선을 다해 풀 수 있었다. 그 결과 합격할 수...

[LINE] 2020 상반기 신입 LINER 공개채용 코딩 테스트 후기 [내부링크]

총 6문제, 이번에도 그동안 꾸준히 공부했던 알고리즘 덕분에 합격을 할 수 있었다.코딩 테스트 이후 열...

[NBP] NAVER Cloud 인턴 후기 [내부링크]

서론나 자신에 대한 뜨거운 반성과 다짐이 식기 전에모두가 잠든 새벽, 진솔한 후기를 남겨본다.나는 운 ...

[KAKAO] 2021 카카오 블라인드 채용 KAKAO BLIND RECRUITMENT 후기 [내부링크]

카카오 블라인드 코딩 테스트는 처음 응시했습니다.1 : string2 : bitmask, comb.3 : lowerbound4 : fl...

[LINE] 2020 하반기 신입 LINER 공개채용 코딩 테스트 후기 [내부링크]

어제 KAKAO BLIND에 이어서....오늘은 LINE 코딩 테스트를 봤습니다.카카오는 7문제 5...

[NAVER] 2020 신입 네이버 공개채용 코딩 테스트 후기 [내부링크]

시험은 토요일/일요일 중 선택이었고, 저는 일요일에 시험을 봤습니다.1. 투포인터2. 구현3. 완전 탐색...

[11st] 11번가 코딩테스트 후기 [내부링크]

코딜리티(Codility)라는 곳에서 시험을 봤습니다.처음 보는 응시 환경이라 그런지 낯설더군요..코딜리티에...

[후기] Programmers 월간 코드 챌린지 <시즌1> [내부링크]

주변 사람들로부터 프로그래머스의 코딩테스트 5문제를 풀면 치킨/피자 응모권을 준다는 소문 듣고 문제도 ...

[SAMSUNG] 2020 하반기 삼성 SW 역량 테스트 후기 [내부링크]

이번 2020 하반기 삼성 채용 SW 역량테스트는 다음과 같이 나눠서 시험을 치렀습니다.오전 : DS/무...

[Spring] Color Logging [내부링크]

로깅에 색이 없으면 가독성이 좋지 않다.(이 칙칙한 로그들을 어쩜 좋을까...) 터미널이 ANSI를 지원...

Spring banner 만들기 [내부링크]

Spring을 실행시키면, 위와 같은 배너를 띄우면서 서버가 돌아가기 시작합니다. 이 문구를 커스터마이징 ...

DolphaGo의 코딩 테스트 준비 방법 [내부링크]

서론 생각보다 많은 분들이 저에게 물어봐 주셔서 글을 남겨놓는 것이 좋겠다고 생각했습니다. 읽기 ...

이야 열정분식소 [내부링크]

여기 내 최애 떡볶이 집인데오늘도 이거 먹었는데ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ...