전체 글

매일 발전하는 사람
회고

인프런 추석 완강 챌린지 후기 - 비전공자 혼자서 하루 만에 수익화 앱 출시하기

요즘 들어 회사 업무만 하다보니 개발 공부를 너무 놓고 있는게 아닌가 싶었습니다.입사 전부터 막연히 앱을 만들어보고 싶다는 생각을 갖고 있었지만 실행은 안하고 있었습니다... 그러다 요즘 앱 하나 만들어보자는 마음과 나중에 프론트를 할 때도 도움이 될만한 걸 찾다보니 리액트 네이티브가 눈에 띄었고, 리액트도 잘 몰라서 제로초님의 리액트 웹 게임강의 부터 듣고 있었습니다. 평소에 자바, 스프링을 다루고 요즘엔 그마저도 쿼리만 다루다보니 앱을 만들기 위해 리액트 네이티브를 공부해야하는데, 이를 위해 리액트를 공부하고.. 또 모르는 자바스크립트는 되돌아가서 공부하기에 너무 멀어보였습니다. 추가적으로 리액트 네이티브를 배우려는 목적 중 하나였던 코드 푸쉬 기능도 사라지고, 아직도 메이저 버전이 없어 버전이 ..

회고

1년간의 개발 업무 정리 — 현장에서 배운 네 가지 포인트

1년 정도 실무를 하면서 기능 개선, 데이터 정합성, 성능 이슈 등 여러 상황을 경험했다.아래는 그중 기억에 남는 네 가지 주제에 대한 정리다.단순 기술보다 “왜 이런 설계를 해야 했는가”에 초점을 두었다.1. 로그 검색 운영 환경에서 로그 볼 땐 대부분 vi만 사용할 수 있다.자주 쓰는 단축키를 익히면 grep보다 빠르게 문제 지점을 찾을 수 있다.:/[검색어] # 검색N / Shift+N # 다음 / 이전 검색어로 이동Ctrl+F / Ctrl+B # 페이지 단위 이동로그 분석할 때는 에러 라인만 보지 말고 전후 몇 줄을 같이 보는 게 좋다.문제 원인은 대부분 “이전 상태 변화”에 있다.2. 업무 복사 기능 — 단순 데이터 복사가 아님기존 업무를 복사해서 새로운 업무를 생성하는 기능을 맡았다.단순히 i..

회고

Oracle RDS 대용량 데이터 삭제시 주의할 점

현재 회사에서 운영중인 서비스의 사용자 접속 로그 테이블 데이터를 따로 관리하지 않아 보존주기만큼을 제외하고 데이터를 삭제한 후 주기적으로 로그를 삭제하는 스케줄링 작업을 진행중이였습니다. 50gb정도 되는 테이블을 작업해야하고, 평소 db를 공부하면서 트랜잭션을 너무 길게 가져가면 undo 로그가 커지고 너무 짧게 가져가면 컨텍스트 스위칭 비용이나 데이터베이스 콜 비용이 크다고 알고 있어 1천건 ~ 10만건 단위로 테스트 해보면서 삭제했습니다. 작업의 80%정도 완료했을 때 db 모니터링 상 문제가 발생해 작업을 지연하게 되었는데 트랜잭션을 커밋해도 아카이브 로그에 데이터가 일정 기간 존재하고, Amazon RDS 환경에서는 아카이브 로그 공간이 한 번 커진 이후에는 줄어들지 않아 비용이 지속적으로 발..

Computer Science/Database

[Oracle] 다중 서버 - 단일 DB 사용 시 활용 할 수 있는 배타Lock 동시성 제어

다음과 같은 관계에서 사용자가 비밀번호를 변경할 때 최근 사용한 N개의 비밀번호와 일치하는지 확인하는 로직은 어떻게 구현할까? 아래와 같이 결과집합을 뽑아서 애플리케이션에서 비교하거나, 한단계 더 쿼리를 감싸 과거 비밀번호와 변경할 비밀번호를 비교할 수 있다.@Transactional method{select * from (select * from password_his where user_id = :user_id order by rev desc)where rownum 하지만 스프링은 멀티쓰레드 방식으로 클라이언트 콜을 받기 때문에 두 개이상의 비밀번호 변경 요청이 들어온다면 첫번째로 처리한 요청은 정상적으로 비밀번호를 비교하고, 변경할 수 있지만 그 다음에 들어오는 요청들은 별도로 처리해야한다. ..

Computer Science/Database

[Oracle] 친절한 SQL 튜닝 6장 1절 기본 DML 튜닝

인덱스와 DML 성능INSERT, DELETE 인덱스는 정렬된 자료구조이므로 자리를 찾아가서 작업해야한다.UPDATE 변경된 컬럼을 참조하는 인덱스만 찾아서 변경하면 된다(인덱스에 포함된 정보가 변경됐을 때만)하지만 이 경우는 정렬을 맞춰줘야하기 때문에 이전 인덱스 정보 삭제 후 삽입하는 두 개의 오퍼레이션 발생한다. 무결성제약과 DML 성능PK, FK 제약은 Check, Not Null 과 다르게 실제 데이터를 조회해봐야하기 때문에 성능에 더 큰 영향을 미친다. Redo 로깅Redo 로그는 트랜잭션 데이터가 유실됐을 때 트랜잭션을 재현함으로써 유실 이전 상태로 복구하는데 사용 Redo 로그의 용도는 아래와 같다.Database Recovery물리적으로 디스크가 깨지는 Media Fail 발생시 데이터베..

Computer Science/Database

[Oracle] 오라클 성능 고도화의 원리 2권 1장 3절 인덱스 원리와 활용

Index Range Scan인덱스 루트 블록에서 리프블록까지 수직적으로 탐색한 후 리프 블록을 필요한 범위만 스캔하는 방식인덱스의 선두컬럼이 조건절에 사용되면 Index Range Scan 활용인덱스를 타는 것 자체보다 인덱스 스캔 범위를 최소화하고 인덱스에서 최대한 필터링하고 테이블 액세스를 하는 것이 중요 Index Full Scan최초의 수직적 탐색 이후 모든 리프블록을 수평적으로 탐색하는 스캔 인덱스의 선두컬럼이 조건절에 없으면 우선적으로 옵티마이저는 Table Full Scan을 고려하지만 대용량 테이블이어서 부담이크다면 인덱스를 활용하는 방법을 고려한다. 데이터 저장공간은 컬럼 길이 * 레코드 수에 의해 결정되므로 인덱스가 차지하는 면적은 테이블보다 훨씬 적다. 테이블 전체를 스캔하기보다 인..

Computer Science/Database

[Oracle] Java 개발자가 읽어본 친절한 SQL튜닝(SQL 파싱)

SQL의 실행과정을 아십니까..? SQLD를 공부할 때까진 이것만 생각했었습니다. 하지만 친절한 SQL 책을 읽으면서 DBMS에 쿼리를 날리면 어떤 과정을 통해 결과집합을 얻는지 배울 수 있었습니다. sql 실행 과정우선 SQL은 절차적인 언어가 아닌 Structured Query Language로 구조적 질의 언어입니다. 원하는 결과집합을 구조적으로 질의하지만 결과집합을 만들어내는 과정은 절차적으로 수행해야하고 아래와 같은 과정을 거칩니다. SQL에 문법적, 의미상 오류가 없는지 체크하는 파싱최적화 하기 쉬운 형태로 쿼리 변환을 하고 다양한 후보군이 될만한 실행계획 생성 및 비용 계산 실행엔진이 실행할 수 있는 프로시저로 변환하는 과정프로시저 실행 후 결과반환 SQL 파싱원래 DBMS는 I/O작업을 많..

회고

올해 취업한 개발자의 2024년 회고

https://anythingis.tistory.com/74 2022년 25살 회고대학교도 졸업하기도 하고 최근에 블로그를 하기 시작하면서 22년도 끝나가는데 올해를 회고해보려고 한다. 개발 📋Node.js CRUD 게시판 전공자이긴 하지만 학점을 위한 공부만 하고 수업실습도anythingis.tistory.com22년 회고 이후 오랜만에 써봅니다. 자바와 스프링을 이제 막 접했던 2년전과 지금 큰 차이는 없는 것 같지만 ... 나중에 보고 얼마나 성장했는가를 위해 작성해봅니다. 싸피 수료1학기의 주요 프로젝트인 2인 1조 프로젝트에서 전 백엔드 개발자를 지망했는데 운좋게 프론트엔드 지망하시는 분과 조가 되었습니다. 이전까진 백엔드를 혼자 맡게되면 ERD 설계는 어떻게 하지 하는 고민이 있었는데 기본 ..

비오베베
우당탕탕 개발과 일상