전체 글 135

private VPC outbound 인터넷 사용을 위한 nat구성

igw가 붙은 외부인터넷용 VPC와 igw가 없는 내부용VPC 구성을 일전에 설명한 바 있다.(참고:https://severalpg.tistory.com/90) 내부용 VPC라 하더라도, 외부로의 outbound 인터넷은 대부분의 경우 필요하다. outbound인터넷을 하려면 nat게이트웨이가 필요할텐데, nat게이트웨이는 public한 subnet에 구성되어야 한다. 즉, public서브넷이 구성 가능한 VPC와 내부 private VPC와의 연동이 필요하다는 것이다. 여기서는 Transit Gateway를 사용할 것이다. 이와 관련된 AWS공식 문서가 있으니, 시간적 여유가 있다면 공식문서를 꼼꼼히 읽어보고 시간이 없다면 이글에서 간단히 어떻게 구축하는 것인지 참고용으로 보면 되겠다. 참고)공식문서 ..

java - 순열(조합과의 비교)

일전에, 재귀함수를 다루면서 조합을 다룬바 있다.(참고 : https://severalpg.tistory.com/20) 조합과 순열이 무엇인지에 대한 개요는 생략하도록하겠다. 바로 재귀함수를 통해 구현된 코드를 실행시키고 결과값을 봐보도록 하자. 조합 import java.util.*; public class Combination { public static void main(String[] args) { int[] arr = {10, 20, 30, 40}; for(int i =1; i

AWS NLB를 활용한 private VPC 구성

일반적인 AWS 웹서비스 서버프로그램 구성 절차(public/private 서브넷) 1)VPC를 생성한 뒤에 igw를 생성하여 VPC에 연결 2)public용, private용 서브넷을 각각 구성 3)public/private용 라우팅테이블을 각각 만들어, public 라우팅테이블에는 igw를 라우팅시키고 public서브넷에 연결을시키고, private용 라우팅테이블에는 nat 게이트웨이 및 로컬사설IP만 라우팅 설정. private서브넷에서도 패키지 download, 외부서버와의 통신 등의 이유로 outbound 인터넷 통신이 필요하기 때문에 nat사용. 4)nat 게이트웨이 생성시 외부에서 IP인식될 IP를 할당하기 위해 EIP(고정IP)생성하여 연결. 또한 nat는 인터넷환경이 가능한 public서..

자기관리 - 만다라트

개인적으로 인생목표와 개발자 커리어관리, 운동스케쥴 관리 등의 용도로 만다라트 라는 방법을 사용하고 있다. 일본과 미국MLB에서 레전드 역사를 써내려가고 있는 오타니의 자기관리법으로 유명해졌고, 나도 이 방법을 1년정도 사용하고 있다. 오타니의 만다라트 나 또한 아래와 같은 방식으로 엑셀을 가지고 인생만다라트를 관리하고 있다. 매번 바뀌기도 하기에, 지속적으로 수정해가면서 내가 인생에서 어떤길로 가고 있는지를 매일 또는 최소한 매주 1번은 점검하고 있다. 또한, 위와 같이 탭에 카테고리를 나눠 구체적인 목표를 더 추가하여 만다라트 형식으로 관리하고 있다. 커리어에는 개발자로서 필요한 기술목록들을 매번 체크하면서 지우고 추가해 나가고 있고, 강의에 비젼을 갖고 있기에, 어떤 강의가 시장에서 필요할지와 그게..

ecs를 통한 컨테이너 배포와 alb health check

이 글에서는 alb의 로드밸런싱 역할보다는 ecs를 통해 ec2로 컨테이너를 배포할때 health check를 어떤식으로 하게 되는지는지와 이때에 각각의 서비스의 역할이 무엇인지 위주로 살펴보도록 하자. 클러스터 생성 ecs를 통해 클러스터를 생성시에, 아래와 같이 Auto Scaling 그룹을 선택할 수 있게 된다. 오토스케일링 그룹을 통해서 ecs를 통해 배포할 인프라를 결정하게 된다. AutoScaling그룹에서 CloudFormation 스택을 통해 배포할 인프라가 잡혀 있으면, ecs에도 해당 인프라를 배포대상 인프라로 잡게 된다. 서비스 생성 그 다음, 만들어진 클러스터에서 서비스 생성을 하여, 배포할 작업정의 패밀리를 선택하게 되면 alb 선택란이 활성화 된다. alb와 대상그룹을 연동시키려..

spring boot와 gradle

gradle이란 빌드자동화도구이다. 여기서 말하는 빌드란, java를 컴파일한 후 필요한 라이브러리를 더해 실행가능한 jar, war등으로 패키징하는 일련의 과정을 말한다. gradle은 이를 편하게 자동화 시키는 도구라고 볼 수 있겠다. 개발자들은 빌드과정에 대한 고민필요 없이, intelliJ등 IDE를 통해 실행버튼 한번이면 gradle을 통해 빌드 후 실행까지를 편하게 할수가 있는 것이다. spring initializer의 gradle 프로젝트 생성시 만들어지는 기본프로젝트를 기반으로 gradle관련 주요 파일들에 대해 하나씩 살펴보고자 한다. groovy언어로 만들어진 build.gradle 등의 script를 생성하려면 groovy gradle을 만들고, kotlin으로 만들어진 스크립트를 ..

Could not find or load main class

Error: Could not find or load main class com.example.board.BoardApplication Caused by: java.lang.ClassNotFoundException: com.example.board.BoardApplication 스프링 기동중에 위와 같은 에러가 발생한다면 해볼 수 있는 조치사항에 대해 정리해보고자 한다. 참고로 본인은 mac에 intellij 사용자다. 구글링을 해봤다면 몇몇 방법들을 찾았을 것이다. 1)"Build" menu -> "Rebuild Project". 인텔리제이는 기존에 class가 존재한다면 가끔 rewrite를 못하기도 한다. 다시 빌드해보자. 2)인텔리제이를 닫고, rm -rf .idea *.iml 명령어를 실행하여 ..

javascript 콜백문제 발생 이유

비동기, 콜백, promise, async/await등 javascript 관련한 글들을 읽다보면, 동기식 코딩에 익숙한 java 등의 개발자들은 다소 어리둥절 할 것 같다. 일단, 콜백상황자체가 일어나는 이유를 이해하기가 힘들기 때문이다. 오늘은 왜 자꾸 자바스크립트에서 비동기이슈가 튀어나오고, 그에 따른 콜백은 왜 나오는 것인지에 대해 글을 써볼까 한다. 콜백지옥 및 콜백지옥을 해결하기 위한 promise, async/await 등은 이 글을 읽고 난 뒤에 다시 검색해 보면 더 잘 이해가 될 것이다. 먼저, 콜백이라는 것은 "A함수 실행 -> B함수 실행 -> C함수 실행" 등 일련의 실행 순서를 보장하기 위해서 A함수 안에 또다른 B함수를 매개변수로 집어 넣고, B함수안에 C함수를 매개변수로 넣는것..

git conflict 해결 - 명령어와 github UI

merge conflit 해결 - 명령어 현재 checkout된 dev브랜치에서 feature브랜치인 dev1브랜치를 merge시킨다고 하자. git merge dev1 dev브랜치와 dev1브랜치가 각 각 dev.txt라는 파일을 같은 라인을 다르게 수정했다. 이때에는 충돌이 발생한다. (만약 dev와 dev1dl 각각 dev.txt파일의 다른 라인에서 다른 내용을 수정했다면 이는 충돌이 발생하지는 않는다. 이때에는 git이 적절하게 merge를 시키기 때문이다.) Auto-merging dev.txt CONFLICT (content): Merge conflict in dev.txt Automatic merge failed; fix conflicts and then commit the result. 충..

git merge, rebase, squash 차이

여기서는 git으로 협업시의 merge, rebase, squash에 대한 차이와 merge전략에 대한 얘기를 하고자 한다. 현업에서는 회사마다 git branch전략이 제각각 이겠지만, 일반적으로는 develop(개발) -> release(운영)과 같은 형식으로 브랜치가 구성돼 있거나, 단일 main 브랜치로 운영이 된다 하더라도 협업을 할때에는 각각의 feature브랜치 만들어 작업후에 merge하는 과정을 거쳐 git에서 소스코드를 관리할 것이다. 예를 들어) 기능 추가/수정 시에 개발자들이 feature브랜치를 따서 개별적으로 브랜치에서 작업한 후에 develop으로 PR을 올린 이후에, 해당 PR을 merge하는 과정을 거치게 될 것이다. 충분한 테스트와 검증이 끝나면 develop에서 rele..