전체 글

네, 저 밑바닥에서 왔습니다
1. AWS Lambda 생성   Lambda 콘솔에서 새 함수 생성을 해줘야함 백엔드 서버와 동일한 Java17 런타임은 AWS 콘솔에서 직접 코드 편집이 불가능하고 JAR 파일을 업로드 해야함또한, Lambda에서 요청을 보낼 CloudRun 환경이 Python flask server 이므로 Python 런타임을 선택해줌(나머지는 기본 설정 그대로이고 필요성에 맞게 알아서 선택하면됨)   생성한 함수를 클릭하고 콘솔에서 코드를 누르면 이렇게 lambda_handler 함수 코드를 살펴볼 수 있음   우선은 테스트용도이기에 별다른 로직은 작성하지 않고 statusCode를 202로 바꿔 잘 동작하는지 확인해보기로함 => 코드를 수정하였으면 왼쪽의 Deploy를 눌러야 반영됨!  또한, 현재 테스트에서는..
·💻 CS
이 글은 국민대학교 강승식 교수님의 '프로그래밍언어론' 수업을 토대로개인적으로 학습한 내용입니다.  1.1 프로그래밍 언어란 무엇인가? 인간이 컴퓨터로 수행하고자 하는 바를 컴퓨터에게 전달하기 위한 표현법의 발전 과정 1940년 이전 Hard-wired 방법으로 컴퓨터 내부 스위치 세팅 -> 컴퓨터의 내부 회로를 물리적으로 변경하여 프로그램을 수행해야 하므로 매우 제한적임1940년대 폰노이만 컴퓨터 (stored programming) -> 일련의 명령코드로 작성, main memory에 저장 어셈블리어 탄생 -> 기계 종속성(특정 컴퓨터 아키텍처에 맞게 작성), 저급수준의 추상화, 읽고 쓰기 어려움(기계어에 비해서는 훨씬 더 읽고 쓰기 쉬움) 프로그래밍 언어의 정의 프로그래밍 언어는 기계가 읽을 수 있..
HTTPS를 설정하게 된 이유 세션 로그인을 구현하기위해 세션 쿠키를 사용하려면 SameSite = None과 Secure = true 설정이 필요함 하지만 계속 로그인이 안되길래 확인해보니... 위와 같은 설정을 하려면 HTTPS를 적용해야 한다는 것을 알게되었고 추후 프론트에서 녹음한 음성을 넘겨주는 로직을 구현할 때도 HTTPS가 필요하다는 것을 알게되어 HTTPS를 적용하기로 하였음 기왕이면 과금 때문에 무료로... 사용할 것들 NginX NginX는 오픈 소스 웹 서버 소프트웨어로 정적 콘텐츠 제공, 리버스 프록시, 로드 밸런서, HTTP 캐시 서버 등 다양한 기능을 수행할 수 있음 => 이벤트 기반 비동기 아키텍처를 사용하여 최소한의 리소스로 수천 개의 동시 연결을 처리할 수 있음 여기서는 H..
1. Github Secrets 설정  Github Actions를 적용할 Repo의 Setting에서 Secrets and variables에 들어가주면New repository secret로 환경 변수를 설정할 수 있음 DOCKERHUB_USERNAME=> Docker Hub 사용자 이름DOCKERHUB_PASSWORD=> Docker Hub 비밀번호EC2_HOST=> EC2 퍼블릭 IPEC2_USER=> EC2에 SSH로 접속할 때 사용할 사용자 이름임(우분투 EC2를 사용중이기에 ubuntu로 지정하였음)EC2_SSH_KEYhttps://hanjungyo.tistory.com/127 Jenkins을 이용한 Spring Boot 배포 자동화로컬에서 Spring Boot 빌드하고 docker imag..
·💻 CS
시작하기에 앞서 JVM 메모리 구조 이야기가 나오는데간단하게 설명하자면 JVM은 운영체제 위에서 실행될 때 각각의 운영체제로부터 메모리를 할당 받고 그 메모리를 용도에 따라 여러 영역으로 나누어 관리하기에 해당 이야기를 하는 것으로 생각하면됨  결론은 int는 primitive type(원시 타입) 이고 integer는 wrapper class(래퍼 클래스) 임 int 단순히 숫자 값을 나타내는 Java의 8개 원시 타입 중 하나임=> 메서드나 속성을 가질 수 없는 단순한 데이터 타입 Java의 8개 원시 타입boolean : ture 또는 false (8bit)char : 유니코드 문자 데이터 (16bit)byte : -128 ~ 127 (8bit)short : -32768 ~ 32767 (16bit)..
·💻 CS
결론부터 말하면 Java는 하이브리드 언어로, 컴파일과 인터프리터의 장점을 결합한 방식으로 동작함  Java의 컴파일러, 인터프리터 동작 방식   1. 컴파일 단계 : Java 소스 코드는 자바 컴파일러(javac)를 통해 바이트 코드(.class 파일)로 변환됨=> 이 바이트 코드는 플랫폼 독립적이며 Java Virtual Machine(JVM)에서 실행될 수 있는 중간 언어임 2. 인터프리터 단계 : JVM은 바이트 코드를 자바 인터프리터를 통해 기계어로 변환하고 실행함=> 바이트 코드를 라인별로 해석하고 실행하는 방식임 3. JIT(Just-In-Time) 컴파일 : JVM은 자바 인터프리터 방식 외에도 JIT 컴파일러를 사용하여 바이트 코드를 기계어로 컴파일할 수 있음=> 런타임시(실행 중)에 성..
·💻 CS
이 글은 국민대학교 강승식 교수님의 '프로그래밍언어론' 수업을 토대로 개인적으로 학습한 내용입니다.  기계어란? 기계어는 컴퓨터가 직접 이해하고 실행할 수 있는 가장 기초적인 프로그래밍 언어로, 0과 1로 구성된 이진 코드로 작성됨=> 이 언어는 특정 컴퓨터 아키텍처에 따라 다르게 결정되며, 하드웨어와 직접 상호 작용함 기계어는 하드웨어에 대한 명령을 직접 전달할 수 있기에 번역 과정이 없고 이에 따라 실행 속도가 매우 빠름=> 하지만, 사람이 이해하기 어렵고, 작성 및 수정이 매우 복잡함  기계어의 주요 특징을 살펴보면 이진 코드 : 0과 1로만 구성됨 (2진수)=> 명령어는 특정 수의 비트로 구성됨하드웨어 종속성 : 특정 컴퓨터 아키텍처에 맞춰져 있음 => 각 CPU 아키텍처에 맞춰져 있음 (x86,..
로컬에서 Spring Boot 빌드하고 docker image 만들어서 docker hub에 올리고..EC2 들어가서 docker hub에 있는 이미지 pull 받아서 run 시키기... 개발을 하면 할수록 CI/CD의 중요성이 깊게 느껴지는 것 같다... 배포에 있어서 나와 같이 귀찮음 혹은 어려움을 느끼고 있는 다른 분들을 위해 기록을 남기려고한다  시작하기에 앞서 슬픈 사연 (Jenkins 도입기..) 일단 시작하기에 앞서 Jenkins을 도입하기까지의 슬픈 전설이 있다.. https://hanjungyo.tistory.com/126 코드가 변경될 때마다 빌드, 테스트, 배포 등의 작업을 자동으로 실행할 수 있음 Github" data-og-host="hanjungyo.tistory.com" dat..
Github Actions의 기본 개념 일단 Github Actions는 소프트웨어 개발 워크플로우를 자동화할 수 있는 CI/CD 도구임=> 코드가 변경될 때마다 빌드, 테스트, 배포 등의 작업을 자동으로 실행할 수 있음 Github Actions는  Github 내에서 바로 실행되기에 추가 설정이 적어 난이도가 비교적 쉽고 PR이나 커밋, 이슈, 태그 등 다양한 Github의 이벤트에 반응이 가능함!(퍼블릭 레포지토리 기준으로 무료임) 구성 요소 우선 한 번 쭉 읽어보고 밑의 예제 코드를 살펴보면 이해가 더 쉬움 Workflow Github Actions에서 실행되는 자동화된 프로세스로 .github/workflows/ 디렉토리에 .yml 파일로 정의됨=> 하나 이상의 Job으로 구성되고 push, p..
Spring Boot에서 Supabase를 연동한 후 간단한 회원가입 로직 구현  Supabase가 뭔지 모른다면 밑의 글을 읽어보고 오자 https://hanjungyo.tistory.com/124 Supabase란? (with 어떤 DB를 선택해야할까?)Supabase 사용법을 말하기에 앞서  현재 개발중인 프로젝트를 간단하게 요약하면 보이스팩을 거래하고 구매한 보이스팩을 플랫폼 내부에서 사용할 수 있게해주는 어플리케이션이다. 어떤 DB를hanjungyo.tistory.com  우선 현재 프로젝트는 초기에 Supabase 무료 플랜을 사용하며 제공해주는 OAuth도 당장은 필요가 없음만약 추후에 아키텍처가 변경되면서 DB를 변경하게 될 가능성도 있기에 Supabase 종속성을 줄여야겠다고 생각했음(일..
Supabase 사용법을 말하기에 앞서  현재 개발중인 프로젝트를 간단하게 요약하면 보이스팩을 거래하고 구매한 보이스팩을 플랫폼 내부에서 사용할 수 있게해주는 어플리케이션이다. 어떤 DB를 사용하는 것이 좋은 선택일까..? 우선 크게 3가지를 고민해보았다 1. 데이터 정합성 보장 & 트랜잭션 관리 1. NoSQL은 RDBMS에 비해 트랜잭션 지원이 어렵고 제한적임=> NoSQL에서 여러 문서에 대한 트랜잭션은 더 복잡2. 결제 시스템의 특성상 데이터 구조가 정확해야함=> RDBMS는 데이터의 무결성을 자동으로 관리할 수 있음 (일부 NoSQL에서는 최종적 일관성을 보장하긴 하지만 이로 인해 실시간 데이터 일관성이 보장되지 않을 수 있음)3. 테이블간 조인이 비효율적임=> 현재 프로젝트에서는 여러 엔티티간..
·💻 CS
'면접을 위한 CS 전공지식 노트'를 읽고 개인적으로 정리한 글입니다.   CPU는 그저 메모리에 올라와 있는 프로그램의 명령어들을 실행할 뿐임그렇다면 메모리는 어떤 계층을 갖고 어떻게 관리되는지 알아보자!  3.2.1 메모리 계층   메모리 계층은 레지스터, 캐시, 메모리, 저장장치로 구성되어 있음 레지스터 : CPU 안에 있는 작은 메모리, 휘발성, 속도 가장 빠름, 기억 용량이 가장 적음캐시 : L1, L2 캐시를 지칭함 => 휘발성, 속도 빠름, 기억 용량 적음 (L3 캐시도 있음)주기억장치 :  RAM을 가리킴 => 휘발성, 속도 보통, 기억 용량 보통보조기억장치 : HDD, SDD를 일컬으며 비휘발성, 속도 낮음, 기억 용량 많음 RAM은 하드디스크로부터 일정량의 데이터를 복사해서 임시 저장하..
JJunGyo
개발 바닥