전체 글

머리박기를 잘하는 나는 딱따구리
· Java
https://www.acmicpc.net/problem/2824 문제를 풀다가 `BigInteger`를 처음 만났다. 일반적으로 `int`, `long`으로 충분하지만, 매우 큰 수를 다뤄야 하는 경우가 있어 정리해보려고 한다.BigInteger란?`BigInteger`는 불변의 임의 정밀도 정수로 자바의 기본 정수형은 메모리 크기가 고정되어 있어 이보다 더 큰 값들을 다를 때 사용한다.범위`int` (4 byte): -21억 ~ 21억`long` (8 byte): -922경 ~ 922경`BigInteger`: -2^(Integer.MAX_VALUE) ~ 2^(Integer.MAX_VALUE) (약 6억 자리 이상)기본 정수형들은 JVM에서 Stack에 저장되지만 `BigInteger`은 참조값이 St..
· Java
JVM이 왜 나왔는지를 알기 위해선 자바의 철학을 알아야 한다. 자바는 "Write Once, Run Anywhere"라는 슬로건으로 어느 운영체제에서도 실행 가능하다. 이를 실제로 가능하게 하는 주체는 JVM이다. 따라서, JVM의 구성요소와 Java 파일 실행 과정을 순차적을 공부할 예정이다.JVM(Java Virtual Machine)이란?JVM은 자바 프로그램을 실행하기 위한 가상 머신으로 운영체제 위에서 동작하며, 자바의 '플랫폼 독립성'을 제공하는 요소이다. 플랫폼 독립성`.class`의 바이트코드는 특정 CPU의 기계어가 아니라, JVM의 명령어 집합OS마다 JVM 구현이 다르게 존재하며, 각각의 JVM이 바이트코드를 OS/CPU에 맞춰서 실행 ➡️ 같은 `.class`가 여러 OS에서 실행..
· Java
기능 구현보다 이 기능을 어떻게 구현해야 더 좋은 구현이 될까를 고민하는 지금 Java 프로그램을 실행하는 JVM을 알아야 좋은 구현을 진행할 것이라는 생각이 들었다. 따라서, JVM을 공부해보려고 한다. JDK(Java Development Kit)와 JRE(Java Runtime Environment)JVM을 공부하는데 왜 JDK와 JRE가 나올까?이는 JDK와 JRE에 JVM이 포함되어 있고, Java를 개발하기 위해선 단순히 JDK 안에 있는 `javac`(컴파일러)가 필요하기 때문이다. 또, JVM은 혼자서 돌아가지 못하며, `String`, `System`, `ArrayList` 같은 기본 클래스 파일들이 있어야 코드를 실행할 수 있는데, 이 파일들이 바로 JRE에 들어있기 때문이다. JVM이..
· Web
최근 프로젝트들에서 API를 설계할 때, 항상 RESTful API로 설계를 했다. 사실 알고 있는 통신 방식이 RESTful 밖에 없었는데, GraphQL과 같은 통신 방식을 들으며 RESTful API를 내가 납득하고 쓸 수 있어야 겠다는 생각이 들어서 RESTful API란 무엇인지 공부해보고자 한다. 1. RESTful API란?RESTful API는 REST(Representational State Transfer) 아키텍처 스타일을 따르는 웹 API라고 한다.영어를 해석해보면:Representational(표현의)서버의 실제 데이터나 리소스 자체를 주고받는 게 아니라 표현(Representationa)을 주고받는다는 의미사용자 정보를 JSON, XML 등 다양한 형태로 "표현"해서 전달Stat..
· Infra
이전엔 내가 손으로 AWS에 코드를 배포했다. 하지만, 실제로 프로젝트를 진행하면 Infra 담당자가 전부 CI/CD 파이프라인을 구축해줬다. 내가 그 일을 언젠가 할 수도 있기에 코드를 `push`하면 자동으로 AWS에 반영되도록 CI/CD 파이프라인을 구축해보려고 한다. 1. 전체 아키텍처 및 데이터 흐름 (Architecture Overview)1. git push개발자가 로컬 컴퓨터(Local)에서 코드를 작성하고 Github 원격 저장소로 `git push`를 수행한다. 이 `git push`가 Github Actions의 Webhook을 통해 배포 파이프라인의 트리거 역할을 한다. 2. build docker imageGithub Actions가 임시 가상 머신(Runner)을 할당받아 작업을..
· Java
프로그래머스에서 진행하는 PCCP 정기 시험을 친구들과 같이 봤다. 싸피 과정이 끝나고 우리의 실력이 객관적으로 어느 정도인지 궁금했기 때문이다. 최근엔 기업 코테도 뜸했던 차에 PCCP 정기 시험으로 우리 수준을 점검해보기로 했다. PCCP(Programmers Certified Coding Professional)란?그렙에서 만든 코딩전문역량인증 자격증이다. 그렙은 프로그래머스, 모니토를 운영중인 회사이다. 과거엔 채용사항에 우대가 좀 있던 것 같지만 최근엔 많이 사라졌다고 알고 있다. 시험 안내시험시간: 120분문항수: 4문항시험과목: Python, JavaScript, Java, C, C++, C# (나는 Java를 선택했다.)방식: 비대면 (모니토 앱 사용)기존 기업 코테에서 익숙하게 쓰던 모니..
· Web
HTTP 메서드 스펙상 `POST`는 멱등성을 보장하지 않는다. 하지만 결제나 포인트 충전 같은 민감한 로직에선 네트워크 지연이나 사용자의 실수로 인한 중복 처리를 반드시 막아야 한다. 이를 멱등키를 적용해 구현할 수 있다는 사실을 알게 되었다. 그래서 한번 실험해보려고 한다. 사용자의 포인트를 충전하기 위한 API를 만들어야 하고, 멱등키를 지원해야 한다는 상황이다.요구사항URL: `POST /api/v1/points/charge`Header: ` Idempotency-Key`: `String`Request Body: { "userId": 1, "amount": 1000}Response Body (성공 시):{ "status": "SUCCESS", "currentBalance": 1000, "..
· Infra
이전 글에서 만든 `docker-compose.yml`을 AWS 클라우드 환경에서 배포를 진행해보려 한다. 1. EC2 인스턴스 생성EC2를 검색해서 인스턴스 시작 버튼을 눌러보자.이름은 원하는 걸 적고, OS 이미지는 우분투를 선택했다. 💡우분투를 선택한 이유우분투는 리눅스 커널(엔진) + APT(앱스토어)가 추가된 OS이다. 서버 개발자들이 가장 많이 사용하기 때문에 구글링 했을 때 자료가 압도적으로 많고, 초심자가 문제 해결을 하기 쉬워서 선택했다. 키 페어도 생성하자.💡키 페어란?서버의 보안을 위한 '디지털 자물쇠와 열쇠'이다. 공개 키(자물쇠): AWS 서버에 저장된다.개인 키(열쇠): 내 컴퓨터에 .pem 파일로 저장된다.비밀번호 입력 방식보다 훨씬 안전하며, 이 `.pem`파일을 잃어버리..
Ukjong
나는 딱따구리 개발자