객체-관계 패러다임 불일치
개인스터디
2026.02.01 15:10
객체-관계 패러다임 불일치는객체지향 프로그래밍(OOP) 과 관계형 데이터 베이스(RDB)가 자원을 바라보는 철학 자체가 충돌하기 때문에 발생하는 문제이다. 1. 세밀함의 불일치객체는 아주 작은 단위까지 클래스로 쪼갤 수 있다.(예 : User 클래스 안에 Address라는 별도의 클래스를 두어 관리)DB는 Address를 별도 테이블로 빼서 조인하거나, 그냥 User 테이블에 주소 관련 컬럼을 다 때려 넣어줘야한다. 2. 상속의 불일치객체의 상속은 객제치향의 꽃이다. 부모 클래스 기능을 자식이 물려받고 다형성을 활용하나 DB는 테이블간의 상속이란 개념이 아예 없다. 이를 흉내내기 위한 조인, 단일테이블 같은 복잡한 설계를 억지로 끼워 맞춘다. 3. 식별성 불일치객체는 값이 똑같더라도 new로 새로 만..
개발자로써 마음가짐 및 설계 역량을 높이는 방법
개인스터디
2025.12.14 15:24
1. 쉽다면 배우는게 없는것, 불편함을 추구해라2. 배움을 마다하지 않고 누구에게라도 그게 하위직원일지라도 모르는게 있으면 배우려는 마인드를 가질것.3. 하는 업무에 대해 많은 고민을하고 개발해야한다. 4. 환경탓하지말고 주어진환경에서 내가 최고로 효율을 낼수있는 성장을 항상 찾아보고 공부할것 다음은 내가 생각한것이아닌 올려진 글을 가져온 것 설계 역량을 높이는 핵심 방법 7가지 1. 문제를 구조로 바꾸는 연습부터 시작하기 - 설계의 첫 단계는 문제를 작은 블록과 흐름으로 분해하는 과정 - 기능 하나 만들 때마다 “그림 1장”을 먼저 그리는 습관 2. 설계 패턴을 실제 코드와 함께 이해하기 - MVC, MVVM, 클린 아키텍처는 도구가 아니라 ‘사고 방식’ 3. 모듈 경계(Boundary)를 명확히 구..
Bcrypt 단방향 해시 알고리즘
개인스터디
2025.11.12 15:27
bcrypt는 단방향 해시알고리즘 (설계 자체가 역연산(복호화)가 없게 설계됨)버전 + cost + salt + hash 구조로되어있음회원가입이나 새 비밀번호를 설정할 때 랜덤 salt 생성 (랜덤 salt 생성에 대한 기준은 회원가입이나 새 비밀번호 설정 로직에 개발자가 코드로 선언 가능)예 삼일31로 비밀번호 생성 -> 랜덤 salt 생성 -> 삼일31+salt 로 4096번 돌려 -> hash 생성$2b$12$e0NRzY7H1q2uVw9QxYzA6u8KpQ1a2b3c4d5e6f7g8h9 이런 값이 생성됨이걸 db password 에 저장 $ 구분나눠2b는 버전 12는 cost 이고 e0NRzY7H1q2uVw9QxYzA6u (22자 salt) 8KpQ1a2b3c4d5e6f7g8h9(31자 hash) ..
6장. 쿠버네티스 Application기능(PV/PVC, Deployment, Service, HPA)
개인스터디
2025.10.09 21:31
쿠버네티스 스토리지 1️⃣ 기본 개념스토리지(Storage) = 데이터를 어디에 저장할지 정하는 공간. 일반 서버에서는 /var/lib/mysql 같은 디스크 폴더클라우드에서는 AWS EBS, Google Persistent Disk, NFS 등쿠버네티스에서는 이런 저장소들을 추상화해서 다루는 방법을 제공쿠버네티스는 직접 디스크를 만들기보다는 디스크를 쓸 수 있게 연결(마운트) 해주는 시스템 2️⃣ 왜 쿠버네티스에서는 “스토리지”를 따로 관리할까?쿠버네티스의 Pod는 언제든 죽고 새로 만들어질 수 있는 일회성 존재 Pod가 삭제되면 그 안에 있던 데이터도 함께 날아감그래서 쿠버네티스는 Pod와 별개로 존재하는 스토리지 시스템을 둠이게 바로 PV이다. 👉 Pod는 “PVC를 통해 PV를 사용”하고,..
5장. 쿠버네티스 configMap, Secret
개인스터디
2025.10.09 20:43
쿠버네티스에서는 애플리케이션 설정값을 관리하기 위한 리소스 지만 둘의 역할이 다르다 . ConfigMap: 설정값 Sercret : 민감정보 영역 파괴의 주범 ConfigMap ConfigMap이 너무 편해 계층/책임/경계를 무너뜨리는 방향으로 남용된다. ⚠️ 1️⃣ “영역파괴”라는 말의 의미쿠버네티스는 "환경(Infra)"과 "애플리케이션(App)"의 경계가 명확해야 한다. - 인프라팀은 인프라 관련 설정만- 애플리케이션 개발자는 비즈니스 로직 관련 설정만 이렇게 나뉘어야하는데 ConfigMap은 이 경계를 흐린다.YAML 한 파일에 아무 Key-Value 나 넣을 수 있고 , Pod 어디서든 불러다 쓸 수 있다. 🧩 1️⃣ Secret 이름에 비해 별로 ‘시크릿’하지 않음Base64 인코딩만 ..
팀 및 개인 프로젝트
세상엔 희한한 레거시가 많다.
프로젝트
2026.08.12 12:51
내가 작업하는 프로젝트에 쓰이는게 Seasar2란 레거시 프레임워크였는데 일본에서 쓰이는 Spring 과같은 2000년대 DI 프레임워크이다. 2016년에 개발이 멈췄고구글링을 해도 자료가 그리 많지 않았고 공식문서도 있긴했으나 EOL된 프레임워크라 개발하기 참 어려웠다. 왜 어려웠냐면 엑셀관련 신규기능 추가하려고 개발하려고하면 제약이 많았다. 자바 1.8 JSP 1.1 MySQL5 등 모든 버전들이 레거시다보니 신규기능 추가로 라이브러리 버전을 업그레이드하면 크래시하여 터져버렸다. 처음엔 POI 문제인가 했는데 아니어서 다시 분석을 했는데 Seasar2는 AOP라는 기능을 쓰는데 공통작업을 원래코드는 안건드리고 실행시점에 슬쩍 끼워 넣는 기법인데 이 끼워넣는 작업을 javassist라는 라이브러리가..
MySQL vs PostgreSQL 1부 (OLTP)
프로젝트
2026.07.10 01:15
회사에서 신규 시스템의 DB선정 때문에 검색을 해봤지만둘의 차이점은 검색을 해보면 정리가 잘되어있지만 개인적으로 수치로 직접 비교해보고싶어서 진행한 프로젝트이다.환경 : OCI cpu4 24GB ubuntu 다음과 같이 검증해야할 통념들을 정리했다. - 간단한 작업은 MySQL이 빠르다. - 대규모 JOIN은 PostgreSQL이 더빠르다. - 대규모분석은 PostgreSQL이 우위이다. - 대규모데이터에서 PostgreSQL의 정합성,트랜잭션이 유리하다. 순수 성능 공정 비교를 위해 동일 리소스로 진행하였다. - CPU 4 , 주버퍼 6GB, full fsync(둘다 안전모드)- 병렬 워커 4 (DB에는 쿼리 하나에 몇 개의 워커(작업 프로세스/스레드)까지 붙일수 있냐를 정하는 설정값이있다. (..
공간 관련 데이터 타입 매핑 (PostgreSQL geography)
프로젝트
2026.02.18 21:24
위의 데이터를 자바 백엔드에 매핑 시켜줘야하는데 어떤 방식으로 하는가 postgresql 의 geography 데이터 타입을 매핑 시키기 위해서는 자바의 라이브러리를 쓴다. 자바 표준 API는 공간데이터를 다룰수있는 클래스가 없어서 반드시 JTS 나 Geolatte 같은 외부 라이브러리를 통해 매핑을 해줘야한다. geography 데이터는 내부적으로 바이너리(EWKB)형식으로 되어있다. PostGIS에서 공간데이터를 저장하고 전송할 때 사용하는 바이너리(이진) 형식이다. PostGIS에서 WKB를 확장해서 SRID(공간 참조 시스템 ID, 예 : 4326) 정보를 추가 포함해서 EWKB 로 만든다. JTS 는 업계표준 범용 Geomety 라이브러리 (2001년 ~ )Geolatte는 Hibernate..
사이드 프로젝트 24시간이 모자라 데이터 작업
프로젝트
2026.02.01 20:12
카페, 음식점, 전기차 충전소 24시간 운영하는 곳을 지도에 표시하여 안내해주는 웹앱 프로젝트이다. 먼저 각 지역의 전기차 충전소 자료를 공공데이터에서 엑셀로 다운받아 데이터 보정하고 postgresql 에 staging 테이블로 저장했다. 이후 원본으로 쓸 테이블을 생성하였다 . 위의 데이터를 데이터그립에서는 csv import 로 쉽게 DB화 할수있다. 위에는 staging 테이블이고 아래는 내 프로젝트에서 쓸 원본테이블이다. CREATE TABLE twentyfour.ev_stations ( id SERIAL PRIMARY KEY , st_name TEXT NOT NULL, st_address TEXT, is_24h BOOLEAN DEFAULT FALSE, loca..
Spring Boot Multi-DataSource 환경에서 JPA랑 JdbcTemplate이 다른 DB 바라보는 문제
프로젝트
2025.12.04 11:51
상황 dev 서버에서 이력관리 기능만 prod DB를 바라보고 나머지는 dev DB를 바라봄 뭔가 이상해서 파봤더니 JPA랑 JdbcTemplate이 서로 다른 DataSource를 쓰고 있었음 원인 Jenkins 배포 스크립트에서 PROFILE 기본값이 prod로 되어있었음 PROFILE="${PROFILE:-prod}" # dev 서버인데 prod가 기본값 dev 서버 배포할 때 PROFILE 안 넘기면 자동으로 prod로 실행됨 왜 기능마다 다른 DB를 봤나? Spring Boot에서 DataSource 설정하는 방법이 두 가지임 커스텀 @Configuration으로 직접 Bean 만들기 (DataSourceConfig.java) Spring Boot Auto-Configuration이 자동으로 ..
배포 관련
도커로 젠킨스 GCP 서버에 올리기
Doker+AWS
2024.08.11 22:37
정처기때문에 칼갈고 미루고있던 DOKER + 젠킨스 CICD 시작한다..드디어... AWS는 무료가끝나..GCP 로 갈아탔다 도커 젠킨스 설치 순서(Ubuntu 기준) 1. 리눅스업데이트 sudo apt update && sudo apt upgrade -y 2. 도커설치 sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release -y curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=$(dpkg --print-archite..
윈도우(ubuntu) + AWS 연동
Doker+AWS
2024.05.04 19:35
Putty로 연동해 보고 ubuntu로도 연동해보고 싶어서 윈도우 PowerShell로 진행하였다. Putty -> 윈도우를 위한 ssh 클라이언트 , Ubuntu는 내장되있어서 따로 설치필요없이 명령어로가능하다.putty는 pem 키를 ppk 키로 변환하여 썼어야 했고 ubuntu에서는 pem 키로 그대로 쓰면 된다. 진행하다 보니 권한에러가 떴다. 해당키에 권한이 너무 많이 부여돼있어서 권한 에러가 난다고 한다. 400 또는 600으로 권한부여를 다시 해주면 된다고 하는데 같은 에러가 계속 떴다. 찾아보니 윈도우 내에 있는 파일은 Linux언어를 잘 못 받는다고 한다. 그래서 ubuntu 내에 ssh 폴더로 옮겨 주고 그쪽에서 실행해야한다고 한다. 해당 pem 키 윈도우내 폴더로 들어가 설치되어 있는..
배포를 위한 Linux(ubuntu) + docker 설치
Doker+AWS
2024.05.02 22:14
시작하던 프로젝트가 거의 끝나고 merge 후에 실행이 잘된다면 배포 예정이라 docker 설치와 함께 Linux 기본 명령어를 공부했다. 윈도우와 다르게 CLI로 진행하다 보니 설치 중 오류가 많이 났다. 윈도우만 깔면 연동되는 줄 알았는데 아니어서 당황했다. 그래서 바로 도커문서를 참조해 설치 시작했다.https://docs.docker.com/engine/install/ubuntu/ -> Linux(Ubunt) 설치를 위한 도커에 있는 설명서문서 그대로 복사해서 넣어줬는데 PUBKEY 에러가 났다. 구글링과 GPT 물어보며 찾았는데 PUBKEY를 제대로 못 받아와서 그렇다고 한다. 다음과 같은 명령어를 넣어주니 해결이 됐다. pubkey 해결 명령어 : curl -fsSL https://do..
프로젝트를 위한 무중단배포 준비(Doker,Jenkins(CI/CD),nginx)
Doker+AWS
2024.05.01 11:53
이번 2차 프로젝트를 시작하며 배포가 목표이기에 Doker를 활용한 배포를 진행해보려고 한다.배포이전에 개념정리 후 시작할 예정이다. 아직 부족해서 개념이 틀릴 수 있을 거 같다. Jenkins를 활용한 CI/CD 구축 - Docker를 활용한 무중단 배포 1. 무중단 배포가 왜 필요할까? 프론트엔드는 실시간으로 파일이 변경되는 반면, 백엔드는 서비스를 일시적으로 중단시켜야 한다. 배포 중 중단되면 사용자경험에 부정적인 영향을 끼치므로 무중단 배포를 통해 서비스를 지속적으로 제공하여사용자 경험을 향상하고 , 신뢰성을 높일 수 있다. 2. 전략 찾아보니 무중단배포에도 여러가지 방식(롤링, 블루그린, 카나리)이 있지만 블루그린을 많이 추천받아 블루그린을 이용해보려고 한다. 1. 인스턴스를 두개 만들어 ..
스터디 발자취
Node Study