최근 메모나 학습 정리를 좀 더 잘 관리하기 위해 Obsidian으로 갈아 타려하고 있다Markdown 문법을 지원하고, 이식성도 좋고 무엇보다 UI와 퍼포먼스가 깔끔하고 부드러워서 좋은 느낌을 받았다 시작하기에 앞서 "보기 좋은게 먹기도 좋다"라는 말처럼 테마(Theme)를 꾸미는 것부터 가장 먼저 관심을 가졌다AnuPpuccin 테마를 선택하고 따라하는데, 가장 중요한 Background 설정이 보이질 않았다 참고. https://www.youtube.com/watch?v=cw0XvIi5vP4 해결 과정 및 방법찾아보니 background 설정 기능을 snippets 통해 활성화 가능하다는 내용이 있었다 참고. 깃허브 이슈https://github.com/AnubisNekhet/AnuPpuccin/i..
1. 서론 (내.돈.내.산) 올해 2024년은 개발 역량 성장 부분에서 의미있는 한 해가 아니었나 싶다. 그동안 다양한 도서 / 강의 / 교육 등을 활용했었고, 5년간 자기개발에 약 450만원을 투자했다는 사실을 최근에 정리하면서 알게 되었다 (교육비 지원하는 회사없는가..) 자기 개발하면서 느낀거지만 "설명도 잘하고 전문성도 갖춘 전문가"도 있는 반면, "성의도 없고 광고에 속았다고 생각했던 강의"도 있었다. 그 중에서 올해 도움 받았던 강의가 하나 있었고, 그게 마침 패스트 캠퍼스 강의라서 연말 후기 이벤트 참여하게 되었다 (그렇다 이게 다 무료 쿠폰을 위한 포스팅이다)요즘 같이 정보가 넘쳐나는 시대에 이 강의를 선택해야 할지 망설이는 개발자가 있다면 이 후기가 참고가 되길 바라며 포스팅합니다*이..
앞서 키 생성과 포워딩 람다를 각각 기능 구현하고, API Gateway 연결하여 호출하는 내용을 다루었다.이번 포스팅에서는 도메인 주소를 AWS Route53 연결하여 원본 주소보다 길어지는 문제를 해결하고, 사용자 입력을 받을 정적 웹 호스팅(s3)을 다뤄본다 참고. https://dev-ljw1126.tistory.com/463 [AWS] 주소 축약 서비스(shorten url) 구현 - (1) 키 생성 람다이번 포스팅에서는 AWS 인프라를 활용해서 주소 축약 서비스를 만들어보려 한다.참고로 주소 축약 서비스는 긴 URL을 짧고 간단한 형태로 변환해주는 도구이다. 장점은 아래와 같다① URL 가독성dev-ljw1126.tistory.com https://dev-ljw1126.tistory.com/4..
앞서 긴 주소를 입력했을 때 키 생성(축약 주소)하여 반환하는 기능을 구현해보았다. 이번 포스팅에서는 축약 주소를 요청했을 때 원본 주소로 포워딩하는 기능을 구현해본다. 참고. https://dev-ljw1126.tistory.com/463 [AWS] 주소 축약 서비스(shorten url) 구현 - (1) 키 생성 람다이번 포스팅에서는 AWS 인프라를 활용해서 주소 축약 서비스를 만들어보려 한다.참고로 주소 축약 서비스는 긴 URL을 짧고 간단한 형태로 변환해주는 도구이다. 장점은 아래와 같다① URL 가독성dev-ljw1126.tistory.com 포워딩 Lambda Function 마찬가지로 Lambda Function을 신규 생성하고, VSCode에 연동하도록 한다. 스크립트 절차는 아주 심플하..
이번 포스팅에서는 AWS 인프라를 활용해서 URL 주소 단축 서비스를 만들어보려 한다. 긴 URL 주소를 단축했을 때의 장점은 아래와 같다① URL 가독성 개선, 공유 가능② 사용자 경험 개선 및 클릭률(CTR) 향상 ③ 브랜딩과 신뢰도 향상④ 링크 분석 및 트래킹 가능⑤ 관리 및 업데이트 용이성⑥ 제한된 공간에서의 효율성⑦ URL 관리 용이성 대표적으로 https://bitly.com/와 같은 서비스를 예로 들수 있다. "백문불여일견" 아래를 보면 한 눈에 이해 될 것이다. AWS 공식 블로그에서는 CloudFront를 앞단에 위치하고 있는데, 이번 포스팅에서는 3단계로 나눠직접 도메인을 발급하고 Route53 - API Gateway - Lambda - S3 연결하는 과정을 다뤄본다. Infra ..
토이 프로젝트로 [선착순 쿠폰 발급 시스템]을 만들어보고 AWS 배포를 해보았다. 도메인 발급은 하지 않고, 단순하게 개발 용도로 VPC, Subnet 구성하고 연결했던 내용을 기록으로 남긴다. VPC- Virtual Private Cloud, 가상 네트워크로 격리된 네트워크 환경에서 운영할 수 있도록 해준다- *RFC 1918 국제 규격에 따라 IP 설정 (위키백과) AWS 웹 콘솔에서 커스텀 VPC 생성 (10.0.0.0/16) 한다. 커스텀 VPC 생성시 라우팅 테이블, 기본 NACL(네트워크 ACL), 기본 보안 그룹(default) 만들어진다. 알기로는 네트워크 ACL은 stateless라서 인바운드, 아웃바운드를 둘 다 설정해야 하는 것으로 알고 있다. 반면 보안 그룹은 stateful로 인바..
앞서 Lambda 함수 사용하여 S3 저장소 업로드 이미지 리사이징 방법을 살펴보았습니다. 참고. https://dev-ljw1126.tistory.com/460 [AWS] Lambda 활용하여 image resize (+CloudFront) - (1)1편으로 AWS 인프라 사용하여 실무에서도 활용되고 있는 이미지 리사이징을 구현해봅니다.필요한 전체 코드나 과정은 AWS 공식 가이드를 참고해서 했습니다. 가이드에서는 Source bucket과 Destinatiodev-ljw1126.tistory.com Lambda를 활용하여 S3 이미지 리사이징 하는 방식은 아래와 같은 장단점이 있었습니다. 장점.① 자동화된 리사이징 이미지를 S3 업로할 때 자동으로 람다 트리거 되므로, 이를 통해 개발 및 운영 부담..
1편으로 AWS 인프라 사용하여 실무에서도 활용되고 있는 이미지 리사이징을 구현해봅니다.필요한 전체 코드나 과정은 AWS 공식 가이드를 참고해서 했습니다. 가이드에서는 Source bucket과 Destination bucket 분리하여 사용했는데, 포스팅에서는 간단하게 Bucket 하나에 디렉토리(origin, resize) 구분해서 작업합니다. 흐름은 아래와 같습니다.① S3 bucket의 origin/ 디렉토리에 원본 이미지 업로드② 이벤트 감지해서 Lambda 실행, 이미지 리사이징 후 S3의 resize/ 디렉토리 저장③ 사용자는 CloudFront 도메인 주소로 S3 이미지 호출 S3 버킷 생성region은 서울로 하고 외부 URL로 S3 직접 접근을 못하도록 퍼블릭 엑세스 차단 설정합니다..
“전투에서 실패한 지휘관은 용서할 수 있지만 경계에서 실패하는 지휘관은 용서할 수 없다”는 말이 있습니다. 이 말을 서비스를 운영하는 개발자에게 비춰 보면 장애는 언제든지 발생할 수 있더라도 그만큼 모니터링을 잘 해야 한다는 뜻입니다. - 김영한 CTO 앞에 포스팅에서 기본적인 인프라 구성해보았다. 이번 포스팅에서는 웹서버에 Docker 컨테이너 기반 Prometheus와 Grafana를 설치하고 대시보드를 생성하는 과정을 다뤄본다. 참고. https://dev-ljw1126.tistory.com/458 [NHNCloud] 기본 웹 서버, DB 인프라 구축 (vpc, subnet, floating ip, ..)기본 인프라 구성도nhn cloud 사용하여 아래와 같은 기본 인프라 구성해본다 참고로- ..
기본 인프라 구성도nhn cloud 사용하여 아래와 같은 기본 인프라 구성해본다 참고로- ssh(22)로 web 서버 접근시 floating ip 주소로 서버 접속한다 (10.*.*.* : 사설 ip로는 외부에서 접근 x)- private subnet에 있는 MySQL 서버는 외부에서 접근 불가하고, public subnet 통해서 접속/접근 가능하다 1. VPC(Virtual Private Cloud) , Internet Gateway- 클라우드 컴퓨팅 환경에서 사용자가 정의한 가상 사설 네트워크- RFC 1918 기재되어 있는 범위로 사설 네트워크를 생성할 수 있다- 10.*.*.* / 172.*.*.* / 192.*.*.* 주소가 해당 [VPC 생성] 버튼 눌러서 10.0.0.0/16 으로 "..
캐시란?- 데이터나 값을 미리 복사해놓는 임시 저장소- 시스템 성능을 향상시키기 위한 메커니즘 - 캐시에 데이터를 저장하고 엑세스하는 프로세스이다 캐시를 사용해야 하는 이유① 데이터 접근이 빠르고 비용이 저렴② 애플리케이션 성능이 향상됨③ 응답이 빠름④ 메모리에 데이터 접근하는게 DB에서 가져오는 것보다 항상 빠름⑤ 비용이 많은 백엔드 요청이 줄어듦 캐시에 데이터를 미리 복사해 놓음으로써 처리/접근 시간(비용) 없이 빠른 속도로 데이터 접근할 수 있다 언제 사용- 자주 변경되지 않는 데이터- 원본 데이터에 접근/처리 시간이 오래 걸리는 경우 캐싱 종류 ① 인메모리 캐싱 (ex. Redis)② 데이터베이스 캐싱 (ex. hibernate 1차 캐시)③ 웹 서버 캐싱 - HTTP Cache : 브라우저/프록..
상세 버전- spring boot 3.2.0- security 6.2.0 상황, 원인 분석security 추가하면서 잘 돌아가던 @WebMvcTest가 시원하게 403 Forbidden 에러 출력하였다 @WebMvcTest(value = MemberController.class)class MemberControllerWebMvcTest { @Autowired private MockMvc mockMvc; @Autowired private ObjectMapper objectMapper; @MockBean private MemberUseCase memberUseCase; @Test void 회원가입_성공하면_아이디값을_반환한다() throws Exception { ..
HTML 문서가 있을 때, HTTP는 HTML을 나르는 프로토콜이고, 이때 TCP라는 인프라를 활용한다.- 널널한 개발자 강의 중 인프런 강의 중 "외워서 끝내는 네트워크 핵심이론 - 기초"를 듣게 되었다. 평소 유튜브 채널 "널널한 개발자"를 잘 보고 있었는데, 왠지 들어야 할 거같은 느낌에 들었는데 TCP와 TLS에 대해 좀 더 알아보게 되었고 정리해보았다. 강의 링크 외워서 끝내는 네트워크 핵심이론 - 기초 - 인프런 | 강의TCP/IP에서 HTTP까지! 네트워크에 대한 기본 이론이 부족한 분들이 '외워서'라도 전공 이론을 이해하고자 희망하는 분들을 위해 준비한 강의입니다. 할 수 있습니다!, [사진] 네트워크, 외워서 쉽고www.inflearn.com 이 강의 덕분에 이론으로만 알고 있던 지식..
복습 위해 5년전 방송기술직 목표로 공부했던 내용 포스팅IP(Intenet Protocol) - 인터넷상에서 하나의 host(컴퓨터)를 구분하기 위한 고유 주소(=식별자)- L3 계층에서 사용 - 라우터간 통신시 IP는 식별자 이다.- IPv4에서 A ~ E 클래스로 나눠지며, network id, host id 구분되어 관리됨- IPv4 의 경우 32bit 주소 체계 가짐 (2^32 = 약 43억개)예) 192.168.174.100 (10진수) -- 8bit * 4 자리 - IPv6의 경우 128bit 주소 체계 가짐 (2^128 = '지구 상에 존재하는 모래알 개수보다 많다')예) 2004:2ba8:13aa:0011:0000:0000:0000:abaa -- 16bit * 8 자리 IPv4 주소 ..
여러 기술블로그(망나니 개발자), 유튜브 강의 영상, Chat GPT, 공식 메뉴얼을 찾아보았지만 MySQL 까보지 않는 이상 정확하게 이걸 이해하는게 현실적으로 많은 어려움이 있음을 깨달았다. 특히나 스냅샷과 Undo Log에 대해 정확하게 이해하는게 너무 어려운게 현재 레벨로 보이고, 우선은 이렇게 정리하고 후에 깊이 있게 공부할 기회가 있으면 추가로 정리를 해야겠다Docker로 테스트 환경 구축MySQL 8.0 설치하여 트랜잭션 이상현상 테스트를 수행할 수 있도록 한다 docker 로 mysql 설치# 이미지 내려받기$ docker pull mysql:8.0# 이미지 확인$ docker images# 실행$ docker run --name mysql-8 -e MYSQL_ROOT_PASSWORD=1..
깃 저장소학습 전https://github.com/ljw1126/my-java-blackjack-playground/tree/exercise-blackjack/src/main/java/nextstep/blackjack 학습 후https://github.com/ljw1126/my-java-blackjack-playground/tree/practice/src/main/java/nextstep/blackjack어려웠던 부분 - 클래스 책임을 제대로 처리하지 못하여, 로직이 분산되어 코드를 읽기 힘들었음- 테스트시 딜러와 플레이어가 가진 패를 초기화하는 방법을 생각지 못해 헤매었슴- 블랙잭 게임에 대한 이해 부족 (=요구사항 이해 부족)특히나 블랙잭 게임의 승패 판정할 때 딜러와 플레이어간의 1:1 비교를 이해..
깃 저장소https://github.com/ljw1126/my-java-coordinate-playground/tree/practice/src/main/java복습 - 좌표 계산기 (선, 사각형, 삼각형)[요구사항]① 사용자가 점에 대한 좌표 정보를 입력한다② 좌표 정보는 괄호로 둘러쌓여 있으며, 쉼표(,) 로 x/y값을 구분한다 [예시]선의 경우 (10,10)-(14,15)사각형의 경우 (10,10)-(22,10)-(22,18)-(10,18)삼각형의 경우 (10,10)-(14,15)-(20,8)③ x, y 좌표 값의 범위는 1 ~ 24 이다④ 입력 범위를 초과할 경우 에러 문구를 출력하고 다시 입력을 받는다⑤ 정상적인 값을 입력한 경우, 콘솔에 2차원 그래프와 결과값을 출력한다 [결과]선의 경우 두 점..
깃 저장소학습 전https://github.com/ljw1126/my-java-racingcar-playground/tree/myself/src/main/java 학습 후https://github.com/ljw1126/my-java-racingcar-playground/tree/practice/src/main/java복습 - 자동차 경주 게임[기능 요구사항]① 각 자동차에 이름을 부여할 수 있다. (이때 자동차 이름은 5자를 초과할 수 없다)② 자동차 이름은 쉼표(,)를 기준으로 구분한다③ 전진하는 조건은 0에서 9사이에서 random값을 구한 후 값이 4이상인 경우이다④ 게임 종료 후 우승자를 출력한다. (이때 우승자는 한명 이상일 수 있다) [실행 결과]경주할 자동차 이름을 입력하세요(이름은 쉼표(,..